EECS 490: Programming Languages

Fall 2022

Programming languages are rich mathematical structures and powerful user interfaces. This course covers the design and use of modern programming languages. We will build up systematically from formal first principles while considering human factors in language design, language prototyping, and techniques for reasoning about program behavior throughout the course.

The goal is to change the way you think about programming and programming language design in ways that will remain relevant across the many technology hype cycles that you will encounter over the course of your careers.

Welcome to EECS 490, Fall 2022

We're excited to start this semester with you!

Please join the Piazza right away. All announcements will be made there (not on Canvas).

Lecture and discussion will meet the first week of class.

Lectures (but not discussions) will be live-streamed via Zoom, though I encourage you to attend in-person if you can. The link is pinned to Piazza.

Lecture and discussion recordings will also be available after the fact via the CAEN system, click 'Recordings' in the sidebar to the left.

Exams will be held in person this semester.

Please read the syllabus (linked to the left) as soon as you can.

Make sure to have a laptop and a reliable internet connection.

Students may also be interested in the following complementary courses:
  • EECS 390 (Programming Paradigms), which focuses more on making effective use of various language features, and less on mathematical first principles and program reasoning.
  • EECS 483 (Compiler Construction), which goes more in depth on language implementation topics like parsing and low-level optimization that are covered only minimally in this course.
  • EECS 590 (Advanced Programming Languages), which is a graduate-level course on programming languages and program analysis (graduate students without a prior PL course can and should register for 590; requests to take 490 instead will generally be denied)


Open in Google Calendar

Day # Lecture Topic Deadline Readings
Tue 30 Aug 1 Course Overview
Thu 1 Sep 2 Programming with Mathematical Expressions
  • Preliminary Survey released
Optional: Cornell CS 3110 Notes, Ch. 2-3 (except 3.1.3)
Tue 6 Sep 3 Recursive Datatypes and Recursion Schemes Optional: Cornell CS 3110 Notes, Ch. 4
Thu 8 Sep 4 Equational and Inductive Reasoning
  • Preliminary Survey due (Friday)
Optional: Princeton COS 326 Notes on Reasoning: Basics, Lists
Tue 13 Sep 5 Syntax
Thu 15 Sep 6 Semantics
Tue 20 Sep 7 Variables
  • A1/A2 (combined) out
Thu 22 Sep 8 Functions and Equivalence
Tue 27 Sep 9 Types
Thu 29 Sep 10 Products
  • A1/A2 (combined) due
Tue 4 Oct 11 Sums
  • A3/A4 (combined) out
Thu 6 Oct 12 Recursive Expressions
Tue 11 Oct 13 Recursive and Universal Types
  • A3/A4 (combined) due
  • A5 out
Thu 13 Oct 14 Constructive Logic (Proofs are Programs)
  • Midterm Study Materials out
Optional: Propositions as Types by Philip Wadler
Tue 18 Oct No Class (Fall Study Break)
  • A5 due
Thu 20 Oct 15 Midterm (during lecture slot, see Piazza)
Tue 25 Oct 16 Dynamic Classification, Gradual Typing, and Typed Holes
  • Mid-Semester Survey Released
Optional: What is Gradual Typing by Jeremy Siek
Thu 27 Oct 17 Imperative Programming I - Side Effects
  • A6 out
  • Mid-Semester Survey due (Friday)
Optional: TAPL Ch. 13
Tue 1 Nov 18 Imperative Programming II - Mutable Data Structures
Thu 3 Nov 19 Imperative Program Verification I
  • A6 due (extended to Mon.)
  • A7 out
Optional: CMU 17-654: Hoare Logic: Proving Programs Correct
Optional: Washington CSE 331: Reasoning About Code (Hoare Logic)
Tue 8 Nov 20 Imperative Program Verification II
Thu 10 Nov 21 Ownership and Borrowing in Rust I Optional: Rust Book Ch. 4.1-4.2: Understanding Ownership
Tue 15 Nov 22 Ownership and Borrowing in Rust II
Thu 17 Nov 23 Parallelism and Cost Semantics I
  • A7 due
  • A8 out
Optional: PFPL Ch. 37-38
Tue 22 Nov No Class (Thanksgiving Break)
Thu 24 Nov
Tue 29 Nov 24 Parallelism and Cost Semantics II
Thu 1 Dec 25 Concurrent Interaction
  • A8 due
  • A9 out
Optional: PFPL Ch. 39
Tue 6 Dec 26 Distributed Computation and Module Systems Optional: PFPL Ch. 40
Thu 8 Dec 27 Special Topic: Parsing and Parser Combinators in Rust (guest lecture by Kevin Li)
  • A9 due
  • End-of-semester Survey out
Optional: Ch. 6 of Crafting Interpreters, Learning Parser Combinators with Rust
Thu 15 Dec Final Exam (1:30-3:30pm) in 220 CHRYS (the lecture hall)


For technical questions, please use Piazza. For administrative questions, please email the instructional staff collectively at unless you have a specific reason for contacting a staff member individually.
Photo of Cyrus Omar


Photo of Andrew Blinn
Andrew Blinn


Photo of Johnson He
Johnson He


Photo of Kevin Li
Xiang (Kevin) Li


Photo of Yuchen Jiang
Yuchen Jiang


Photo of Nicholas Spihlman
Nicholas Spihlman


Photo of Varun Rajesh
Varun Rajesh


Photo of Yifan Pei
Yifan Pei