EECS 490: Programming Languages

Fall 2023

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 precisely 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 2023

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 will meet the first week of class.

Lectures will be live-streamed via Zoom, though I encourage you to attend in-person if you can. The link to the Zoom is available from the sidebar.

Lecture recordings will also be available after the fact via the CAEN room capture system, click 'Recordings' in the sidebar to the left. We make no promises about the quality or completeness of these recordings!

Exams will be held in person this semester. Make sure you are available on the dates and times indicated below.

Please read the syllabus (linked to the left) as soon as you can. It is required reading.

Make sure to have a computer (not just a tablet) and a reliable internet connection.

Students may also be interested in the following complementary courses:
  • EECS 390 (Programming Paradigms), which was last offered W23, focuses more on making effective use of various language features, and less on mathematical first principles and program reasoning.
  • EECS 483 (Compiler Construction), which is also being offered in F23, 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 was last offered F22, is a graduate-level course on programming languages and program analysis. Graduate students without a prior PL course can and should register for 590 when possible.
  • EECS 498/598 (Intelligent Programming Systems), which is being offered this fall, is a special topics course on program synthesis and AI for programming. Both undergraduates and graduate students can take this course. Graduate students interested in programming languages and looking for a course this semester should register for this course instead of 490.


Open in Google Calendar

Day # Lecture Topic Deadline Readings
Tue 29 Aug 1 Course Overview
Thu 31 Aug 2 Programming with Mathematical Expressions
  • Preliminary Survey released
Optional: Cornell CS 3110 Notes, Ch. 2-3 (except 3.1.3)
Tue 5 Sep 3 Recursive Datatypes and Recursion Schemes Optional: Cornell CS 3110 Notes, Ch. 4
Thu 7 Sep 4 Equational and Inductive Reasoning Optional: Princeton COS 326 Notes on Reasoning: Basics, Lists
Fri 8 Sep
  • A1 released
Tue 12 Sep 5 Syntax
Thu 14 Sep 6 Semantics
Fri 15 Sep
  • Preliminary Survey due
  • A1 due
  • A2 released
Tue 19 Sep 7 Variables and Types
Thu 21 Sep 8 Functions (the Lambda Calculus)
Fri 22 Sep
  • A2 due
  • A3 released
Tue 26 Sep 9 Products and Isomorphisms
Thu 28 Sep 10 Sums
Fri 29 Sep
  • A3 due
Mon 2 Oct
  • A4 released
Tues 3 Oct 11 Recursive Expressions
Thu 5 Oct 12 Recursive Types
Mon 9 Oct
  • A4 due
  • A5 released
Tue 10 Oct 13 Universal Types (Parametric Polymorphism)
Thu 12 Oct 14 Constructive Logic (Proofs are Programs) Optional: Propositions as Types by Philip Wadler
Fri 13 Oct
  • Midterm Study Materials released
Mon 16 Oct
  • A5 due
Tue 17 Oct No Lecture (Fall Study Break)
Thu 19 Oct Midterm Exam (in class)
Tue 24 Oct 15 Dynamic Classification, Gradual Typing, and Typed Holes
  • Mid-Semester Survey released
Optional: What is Gradual Typing by Jeremy Siek
Thu 26 Oct 16 Imperative Programming I - Side Effects Optional: TAPL Ch. 13
Sat 28 Oct
  • A6 released
Tue 31 Oct 17 Imperative Programming II - Mutable Data Structures 😱
  • Mid-Semester Survey due
Thu 2 Nov 18 Imperative Program Verification I Optional: CMU 17-654: Hoare Logic: Proving Programs Correct
Optional: Washington CSE 331: Reasoning About Code (Hoare Logic)
Mon 6 Nov
  • A6 due
  • A7 released
Tue 7 Nov 19 Imperative Program Verification II
Thu 9 Nov 20 Ownership and Borrowing in Rust I Optional: Rust Book Ch. 4.1-4.2: Understanding Ownership
Tue 14 Nov 21 Ownership and Borrowing in Rust II
Thu 16 Nov 22 Parallelism and Cost Semantics I Optional: PFPL Ch. 37-38
Fri 17 Nov
  • A7 due
  • A8 released
Tue 21 Nov 23 Parallelism and Cost Semantics II
  • Final Exam Study Materials released
Thu 23 Nov No Lecture (Thanksgiving)
Tue 28 Nov 24 Concurrent Interaction Optional: PFPL Ch. 39
Thu 30 Nov 25 Distributed Computation and Module Systems Optional: PFPL Ch. 40
Fri 1 Dec
  • A8 due
  • A9 released
Tue 5 Dec 26 Special Topic: Macro Systems (presented by Andrew Blinn)
Fri 8 Dec
  • A9 due
  • End-of-semester Survey released
Thu 14 Dec Final Exam (10:30am-12:30pm) (Location: 1013 DOW)
Fri 15 Dec
  • End-of-semester Survey due


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 Eric Zhao
Eric Zhao


Photo of Tingting Ding
Tingting Ding


Photo of Xiao Wei
Xiao Wei