EECS 490: Programming Languages

Winter 2024

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, Winter 2024

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. CAEN computer labs can be used if you do not have your own computer.

Students may also be interested in the following complementary courses:
  • EECS 390 (Programming Paradigms), which is also being offered in W24, 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 W24, 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 also being offered in W24, 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 was last offered F23, is a special topics course on program synthesis and AI for programming. Both undergraduates and graduate students can take this course.


Open in Google Calendar

Day # Lecture Topic Deadline Readings
Wed 10 Jan 1 Course Overview
Mon 15 Jan No Lecture (MLK Day)
Wed 17 Jan 2 Programming with Mathematical Expressions
  • Preliminary Survey released
Optional: Cornell CS 3110 Notes, Ch. 2-3 (except 3.1.3)
Mon 22 Jan 3 Recursive Datatypes and Recursion Schemes Optional: Cornell CS 3110 Notes, Ch. 4
Tue 23 Jan
  • A1 released
Wed 24 Jan 4 Equational and Inductive Reasoning Optional: Princeton COS 326 Notes on Reasoning: Basics, Lists
Mon 29 Jan 5 Syntax
Wed 31 Jan 6 Semantics
Fri 2 Feb
  • Preliminary Survey due
  • A1 due
  • A2 released
Mon 5 Feb 7 Variables and Types
Wed 7 Feb 8 Functions (the Lambda Calculus)
Fri 9 Feb
  • A2 due
  • A3 released
Mon 12 Feb 9 Products and Isomorphisms
Wed 14 Feb 10 Sums
Fri 16 Feb
  • A3 due
  • A4 released
Mon 19 Feb 11 Recursive Expressions
Wed 21 Feb 12 Recursive Types
Fri 23 Feb
  • A4 due
  • A5 released
  • Midterm Study Materials released
Sat 24 Feb Spring Break
Mon 4 Mar 13 Universal Types (Parametric Polymorphism)
Wed 6 Mar 14 Constructive Logic (Proofs are Programs) Optional: Propositions as Types by Philip Wadler
Fri 8 Mar
  • A5 due
Mon 11 Mar Midterm Exam (in class)
Wed 13 Mar 15 Dynamic Classification, Gradual Typing, and Typed Holes
  • Mid-Semester Survey released
Optional: What is Gradual Typing by Jeremy Siek
Fri 15 Mar
  • A6 released
Mon 18 Mar 16 Imperative Programming I - Side Effects Optional: TAPL Ch. 13
Wed 20 Mar 17 Imperative Programming II - Mutable Data Structures 😱
  • Mid-Semester Survey due
Fri 22 Mar
  • A6 due
  • A7 released
Mon 25 Mar 18 Imperative Program Analysis I Optional: CMU 17-654: Hoare Logic: Proving Programs Correct
Optional: Washington CSE 331: Reasoning About Code (Hoare Logic)
Wed 27 Mar 19 Imperative Program Analysis II
Mon 1 Apr 20 Memory Management + Ownership in Rust Optional: Rust Book Ch. 4.1-4.2: Understanding Ownership
Wed 3 Apr 21 Borrowing in Rust
Fri 5 Apr
  • A7 due
  • A8 released
Mon 8 Apr Lecture Canceled
Wed 10 Apr 22 Parallelism and Cost Semantics I Optional: PFPL Ch. 37-38
Mon 15 Apr 23 Parallelism and Cost Semantics II
Wed 17 Apr 24 Concurrent Interaction Optional: PFPL Ch. 39
Fri 19 Apr
  • A8 due
  • A9 released
  • Final Exam study materials released
Mon 22 Apr 25 Distributed Computation and Module Systems Optional: PFPL Ch. 40
Fri 26 Apr
  • A9 due
  • End-of-semester Survey released
Tue 30 Apr Final Exam (10:30am-12:30pm) (Location: GGBL 1571, i.e. the lecture room)
Wed 1 May
  • 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 David Moon
David Moon


Photo of Eric Zhao
Eric Zhao


Photo of Xiao Wei
Xiao Wei


Photo of Runze Xue
Runze Xue