CS442: Principles of Programming Languages is entirely online this term, and will start on January 11th. The course outline is available here, and the schedule is available here.

Online communication will be through Piazza. Some material, in particular exams, will be published through Learn.

The primary mode of instruction will be text notes, with supplementary videos, and of course regular office hours. There are no full video lectures. There are six assignments, and instead of a conventional midterm and final exam, five smaller exams (one per assignment except for the last assignment) throughout the term. Assignment submission is through UWaterloo submit, and exams are on Learn.

Assignments are due on Wednesdays by NOON, NOT MIDNIGHT, with the exception of the final assignment which is due during the exam period. Exams will become available at the same time that the corresponding assignment is due. You have three days to take the exam, during which you may choose a three-hour window. Note that this means that the latest you can submit the exam is the following Saturday at noon, but you're not expected to do the exam on Saturday morning (though you may if you wish, of course).

Graduate students taking CS642 are additionally required to do a final project. The requirements for this are quite open ended, but must be agreed upon between the instructor and the student. Some examples might be a larger interpreter, a compiler, or a paper survey of language semantics or features. Contact the instructor to decide.

This is the first time this course is being taught online (and, as it happens, the first time that its instructor is teaching this course...), so expect some bumps.


CS442 is rightly named: The principles of programming languages. This course covers the ideas underpinning programming languages, by covering the formal, mathematical model behind programming languages as calculi, and then discussing many programming language paradigms, and how these paradigms affect both the formal semantics and the implementation of language interpreters, compilers, and virtual machines.

Although you will learn new programming languages in this course, and are expected as a fourth-year CS student to be able to pick up new programming languages, this course is not “a new programming language every week”. This version of the course could be described as “a new programming paradigm every two weeks”, and we will use an exemplar programming language for each paradigm, but the goal is to focus on the paradigms, not the particular languages. Work in this course will be done in OCaml and Smalltalk.

The programming paradigms this course will examine are:

The goal is not to learn each of these programming languages, but to examine the paradigm itself, its effect on formal semantics, and its effect on implementing languages.

Course Staff

Course Content

Use the menu above or links here to access course content: