Hi There!

I'm Dan Schlegel, an Assistant Professor in the Computer Science Department at SUNY Oswego

CSC344 – Fall 2020

Programming Languages


Prof. Daniel R. Schlegel, 464 Shineman Center, daniel.schlegel@oswego.edu
Office/Lab hours: Monday 1-2pm; Wednesday 2-3pm; Friday 10:30-11:30am; and By Appointment. All on Zoom.
Section HY1: MWF 11:45am-12:40pm
Class Location: M: Zoom, W/F: 170 Shineman Center

Teaching Assistant:

Vitaliy Shydlonok
Office Hours:
Monday: 3-5pm, Tuesday: 9-11am, Thursday 10am-12pm. These hours will all be held on Zoom (see Blackboard for links!)

Course Description:

This course introduces programming language concepts including design, syntax, semantics, pragmatics, implementation, and evaluation. Students will become familiar with the different categories of languages, including procedural, functional, object-oriented, logic, and concurrent programming paradigms. Theoretical topics will be covered in class, and students will complete projects on their own in several languages. The intention is that after this course the student will be able to quickly begin using new languages simply from an understanding of the syntax and a list of concepts used in that language.

Course Objectives: 

  • To write programs in each of several languages primarily supporting different approaches to programming
  • To write programs to process some representation of code for some purpose, such as an interpreter, an expression optimizer, or a documentation generator
  • To use the specifications of a given language to determine the syntax and semantics of supported constructions
  • To explain and follow the rules governing the use of a given type in a given language
  • To obtain the effects of constructions of one language in other languages
  • To identify coding errors that lead to insecure programs in non-type-safe languages
  • To choose among language-supported approaches to concurrency in a given context, including data-parallelism, message-passing, and explicit threads with shared mutable state


Required: Scott, Michael L., Programming Language Pragmatics 4e. Morgan Kaufmann, 2016
Recommended: Tate, Bruce, Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages. Pragmatic Bookshelf, 2010
Free Online: Slonneger, Kenneth and Kurtz, Barry L., Syntax and Semantics of Programming Languages. Addison Wesley, 1995

Useful Resources:


C Tutorial at tutorialspoint
C Language at cppreference
Advanced C Programming on Lynda.com


Clojure for the Brave and True 
Reference Materials at Clojure.org

Clojure – Getting Started
Clojure API


Clojure By Example
Clojure on Lynda.com


Scala Tutorials
Scala for Java Programmers
Scala on Lynda.com


Using the SWI-Prolog REPL
SWI Prolog Reference Manual
Learn Prolog Now! Online Text
Prolog Tutorial


Python 3 Tutorial
Moving to Python from Other Languages
Python Projects on Lynda.com (includes Eclipse PyDev setup tutorial)

Course Format:

This course employs a hybrid format, with Monday classes meeting on Zoom and Wednesday/Friday classes meeting in person. The entire class will attend the Monday virtual meetings, and 1/2 of the class will attend each of Wednesday and Friday so that proper social distancing can be observed.

A significant amount of the courses content will be presented asynchronously in the form of videos on Blackboard, while much of the in-person content will involve exercises based on that content, along with project progress reports and Q&A sessions. Please do not share class recordings or other video content from the course outside of the students in the class. 

Attendance and Participation:

As per college policy, attendance in all sessions is obligatory. If you cannot attend a class meeting due to religious, athletic, health related circumstance, or circumstance of particular hardship, please notify me in advance via email. Please be ready to present proof, if necessary. It is expected that each person will come to class prepared, having watched or read any required materials, and will actively engage in each class session. 

Classroom Etiquette:

A positive learning environment relies upon creating an atmosphere where all students feel welcome. Classroom discussion is meant to allow us to hear a variety of viewpoints. This can only happen if we respect each other and our differences. Hostility and disrespectful behavior is not acceptable.

Cell phones and headphones should not be out or used during lecture, and laptops should only be used for taking notes (I don’t recommend this). If use of any electronics becomes distracting to other students I reserve the right to discontinue the allowance of their use.

Wearing an appropriate mask is obligatory while in the classroom. 


Grades will be comprised of projects, micro-projects, participation, and exams. A point-based system will be used, where each graded artifact will be assigned a point value and you can simply sum the points to determine your grade.

Projects (5)500
Micro-Projects (5)100
Quizzes (5)100
Final Exam200

The default grading for the course will be along the university’s standard grading curve:

Letter: PointsLetter: Points
A: 930-1000C+: 770-790
A-: 900-920C: 730-760
B+: 870-890C-: 700-720
B: 830-860D+: 670-690
B-: 800-820D: 600-660
 E: 0-590

A more generous curve may be used, but should not be expected.


All assignments will be completed alone, but working together without writing or sharing code to come up with general solutions is encouraged. There will be 5 large projects, due typically two weeks after assignment. Each project will have an associated micro-project, due before the larger project, meant to exhibit the use of some language features important to the larger project. Progress reports will be in-class discussions of progress, and happen roughly halfway between the date the assignment is given out, and the date it is due. The assignments are difficult, and I recommend starting work on them early, avoiding any tendency toward procrastination. You should plan on spending at least 10 hours per week on course work outside of class.

Projects must be satisfactorily demoed in person or on Zoom, then submitted on Blackboard, to receive any credit. Partial solutions will not receive any credit. The late penalty will be 5% per day. Micro-projects must be submitted via Blackboard, and will not be accepted late (they do not need to be demoed).

Quizzes and Exams:

There will be six quizzes given during the semester, of which we will drop the lowest score. There also will be one exam, a final exam given during finals week. Quizzes will either be given using Blackboard or Google Docs. The final exam will be given using Google Docs – the exam will be shared with you at precisely the start time, and will automatically un-share when the time expires.

Each quiz/exam question will be assigned a point value, questionPoints, where the following general scheme will be used in grading it:

0 – Did not attempt / No serious attempt / Completely incorrect
1/3 * questionPoints – Mostly incorrect solution
2/3 * questionPoints – Somewhat incorrect solution
3/3 * questionPoints – Perfect solution

Intermediate scores will be given as appropriate. The total points received on all questions will then be summed to determine your score.


During the semester we aim to cover the following topics:

Language Specification and Implementation
Syntax and Semantics
Names, Scope and Binding
Control Flow
Type Systems and Type Safety
Language Paradigms (including imperative, logic, functional, scripting, concurrent, and object oriented)

This syllabus and the course schedule are subject to change by the instructor. All changes and related justification will be announced in class, and updates will be reflected in this web version.

Lecture slides will be maintained on Blackboard, but much of the in-person content will include use of the whiteboard and/or group discussion which may not be reflected in notes elsewhere.

WeekDay - LocationDateTopicReading + Video Watching DueAssignment/Assessment
1M - Zoom8/24First Day of Class
Syllabus, Overview
How to be Successful in CSC344
W/F - 170 Shin.8/26, 8/28BNF/Parsing Exercises
Chapter 1 Discussion
Video: BNF/Parsing
Video: Brief History of PLs (2 parts)
Reading: PLP Chapter 1
2M - Zoom8/31How to Learn a New Programming Language
C Project Discussed
W/F - 170 Shin.9/2, 9/4Memory/Pointers Exercises
Video: Memory Management (3 parts)
Video: Heap Allocation
Video: Garbage Collection
Reading: PLP 3.2; 8.5-8.5.2
Quiz 1 Due Fri.
Project 1 Assigned
3M - Zoom9/7Writing Secure C CodeMicroproject 1 Due
W/F - Zoom9/9, 9/11Progress Report 1
We'll do this on Zoom!
Video: Functional Programming Introduction
Video: Lambda Calculus (2 parts)
Reading: PLP Chapter 11 through 11.3
4M - Zoom9/14Clojure Demo: Monty Hall Problem Simulation
W/F - Zoom9/16. 9/18Brief Clojure Demo
Clojure Q&A, Exercises
We'll do this on Zoom!
Video: Developing Functions in Clojure
Reading: Start reading Clojure for the Brave and True
Quiz 2 Due Fri.
5M - Zoom9/21Clojure Project DiscussionProject 1 Due
Project 2 Assigned
W/F - Zoom9/23, 9/25Project Q&A
Perhaps time for some demos!
We'll do this on Zoom!
Video: Types and Type Systems (3 parts)
Video: Propositions as Types
Reading: PLP 7-7.2
Microproject 2 Due (F)
6M - Zoom9/28Scala Demo: Writing a Recursive Descent Parser
Whatever we don't finish in class will be recorded as a video
W/F - Zoom9/30, 10/2Progress Report 2
We'll do this on Zoom!
Quiz 3 Due Fri.
7M - Zoom10/5Scala Project DiscussionProject 3 Assigned
W/F - 170 Shin.10/7, 10/9Projects Q&A
We'll do this on Zoom!
It's a catch-up week, no videos!Project 2 Due (Wednesday)
Microproject 3 Due (Sunday)
8M - Zoom10/12Prolog Introduction
Please complete the survey on Blackboard!
W/F - Zoom10/14, 10/16Prolog Exercises
9M - Zoom10/19State-Space Problem Solving with Prolog
W/F - Zoom10/21, 10/23Progress Report 3Video: Pattern Matching / UnificationQuiz 4 Due Fri.
10M - Zoom10/26Prolog Project DiscussionProject 3 Due
Project 4 Assigned
W/F - Zoom10/28, 10/30Scopes / Bindings ExercisesVideos: Names, Scopes, and BindingsMicroproject 4 Due (F)
11M - Zoom11/2Project Q&A
W/F - Zoom11/4, 11/6Progress Report 4
12M - Zoom11/9No ClassVideo: Scripting Languages
W/F - Zoom11/11, 11/13Project Q&AProject 4 Due (W)
Project 5 Assigned
Quiz 5 Due Fri.
13M - Zoom11/16Project Q&AMicroproject 5 Due
W/F - Zoom11/18, 11/20Project Q&A
14M - Zoom11/23Progress Report 5
W/F11/25, 11/27Thanksgiving Recess - No Class
15M - Zoom11/30ConcurrencyVideos: Object Orientation
W/F - Zoom12/2, 12/4Project Q&A
Course Evals
Last day to demo projects is 12/11
50-in-50Project 5 Due
Quiz 6 Due Fri.
Finals WeekW12/9Final Exam - 10:30AM-12:30PMFinal Exam

Academic Integrity:

SUNY Oswego is committed to Intellectual Integrity. Any form of intellectual dishonesty is a serious concern and therefore prohibited. You can find the full policy online. While it is acceptable to discuss general approaches with your fellow students, the work you turn in must be your own. You may not turn in code found on the internet. If you have any problems doing the assignments, consult the instructor. See my page on plagiarism for an explanation of what I consider cheating. All parties involved in academic integrity violations will receive a score of zero for that quiz/exam/assignment, and all violations will be reported. Repeat violations, including across semesters, will result in failing the course.


If you have a disabling condition which may interfere with your ability to successfully complete this course, please contact Accessibility Resources located at 155 Marano Campus Center, phone 315.312.3358, access@oswego.edu

Clery Act/Title IX Reporting:

SUNY Oswego is committed to enhancing the safety and security of the campus for all its members. In support of this, faculty may be required to report their knowledge of certain crimes or harassment. Reportable incidents include harassment on the basis of sex or gender prohibited by Title IX and crimes covered by the Clery Act. For more information about Title IX protections, go to https://www.oswego.edu/title-ix/ or contact the Title IX Coordinator, 405 Culkin Hall, 315-312-5604, titleix@oswego.edu. For more information about the Clery Act and campus reporting, go to the University Police annual report: https://www.oswego.edu/police/annual-report.