EECS 490: Programming Languages

Winter 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 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 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 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 to the Zoom is available from the 'Recordings & Zoom' section of the sidebar.

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

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.

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), also offered W23, 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 was offered F22, 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 was 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; requests to take 490 instead will generally be denied.


Open in Google Calendar

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


Photo of Zachary Goldston
Zachary Goldston


Photo of Shirley Zhang
Shirley Zhang


Photo of Varun Rajesh
Varun Rajesh


Photo of Yifan Pei
Yifan Pei