CS442: Principles of Programming Languages will (finally!) be taught traditionally this term. The course outline is available here, and the schedule is available here.

Online communication will be through Piazza.

The text notes define the content of the course. Lectures will not use slides, as the text notes are available as reference material. It is up to each student whether they should read the notes or trust their ability to learn from lectures, but students are highly advised to at least skim the notes, as it is possible that content will be missed in lectures.

There are five assignments, a midterm exam, and a final exam. Assignment submission is through UWaterloo submit.

Assignments are due on Fridays by NOON, NOT MIDNIGHT, with the exception of the final assignment, which is due on Thursday, as the Friday that week is a University holiday.

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.


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: