EECS 490: Programming Languages

Winter 2021

Due to the ongoing pandemic, EECS 490 will again be held fully online this semester. This is a challenging time for everyone, students and course staff alike, and not everyone is affected the same way or to the same extent. We will work to adapt to everyone's individual needs as best as we can. We ask for everyone to act with kindness and understanding during this time. It will be particularly important to reach out and build friend groups proactively, and when you do, to include those who may not yet know others in the course.

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 mathematical 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.

Students may also be interested in the following complementary courses:
  • EECS 398-001 (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 focuses on topics like parsing and low-level optimization that are covered only minimally in this course


Open in Google Calendar

Day # Lecture Topic Deadline Readings
Wed 20 Jan 1 Course Overview + Required: RWO Guided Tour (through Records and Variants)
Mon 25 Jan 2 Programming with Mathematical Expressions
Tue 26 Jan A1 and Survey 1 out
Wed 27 Jan 3 Recursive Datatypes and Recursion Schemes Optional: Cornell CS 3110 Notes Ch. 4 and RWO Lists and Patterns (through Tail Recursion)
Mon 1 Feb 4 Equational and Inductive Reasoning Required: Princeton COS 326 Notes on Reasoning About Programs
Wed 3 Feb 5 Syntax
Thu 4 Feb A1 and Survey 1 due, A2 out
Mon 8 Feb 6 Semantics
Wed 10 Feb 7 Types
Thu 11 Feb A2 due, A3 out
Mon 15 Feb 8 Variables and Functions
Wed 17 Feb 9 Products
Thu 18 Feb A3 due, A4 out
Mon 22 Feb 10 Sums and Recursive Expressions
Wed 24 Feb No class - Wellness Break
Fri 26 Feb A4 due, A5 out
Mon 1 Mar 11 Recursive Types
Wed 3 Mar 12 Parametric Polymorphism and Modules
Thu 4 Mar A5 due
Mon 8 Mar 13 Constructive Logic (Proofs are Programs) Optional: Propositions as Types by Philip Wadler
Wed 10 Mar - Midterm (during lecture)
Mon 15 Mar 14 Dynamic Classification, Gradual Typing, and Typed Holes Optional: What is Gradual Typing by Jeremy Siek
Wed 17 Mar 15 Imperative Programming I - Side Effects A6 out, Mid-Semester Survey out Optional: TAPL Ch. 13
Mon 22 Mar 16 Imperative Programming II - Mutable Data Structures
Wed 24 Mar 17 Encapsulated Commands (e.g. Haskell's IO types), Imperative Program Verification I Optional: Introduction to IO (Haskell Wiki), Optional: CMU 17-654: Hoare Logic: Proving Programs Correct
Optional: Washington CSE 331: Reasoning About Code (Hoare Logic)
Fri 25 Mar A6 due (free late day), Mid-Semester Survey due, A7 out
Mon 29 Mar 18 Imperative Program Verification II
Wed 31 Mar 19 Ownership and Borrowing in Rust I Optional: Rust Book Ch. 4.1-4.2: Understanding Ownership
Mon 5 Apr 20 Ownership and Borrowing in Rust II
Tue 6 Apr A7 due, A8 out
Wed 7 Apr 21 Parallelism and Cost Semantics I Optional: PFPL Ch. 37-38
Mon 12 Apr 22 Parallelism and Cost Semantics II
Wed 14 Apr 23 Concurrent Interaction A8 due, A9 out Optional: PFPL Ch. 39
Mon 19 Apr 24 Distributed Computation Optional: PFPL Ch. 40
Tue 20 Apr A9 due, End-of-semester Survey released, A10 (Extra Credit) released
Wed 21 Apr 25 Special Topics: Macro Systems Optional: Macros - Rust Book
Thu 22 Apr Final Review Session (10am ET)
Fri 23 Apr Final Exam (1:30-3:30pm ET)
Sun 25 Apr A10 (Extra Credit) and End-of-semester Survey due (10pm)


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


4:30-6:00pm, MW

Photo of Yunsoo Kim
Yunsoo Kim


10:30-11:30am, F

Photo of Zhiyi (Zoe) Pan
Zhiyi (Zoe) Pan


Photo of Anand Dukkipati
Anand Dukkipati


1:30-2:30pm, F

Photo of Kevin Chen
Kevin Chen


9:30-10:30am, F

Photo of Brentan Reynolds
Brentan Reynolds


Photo of Ranadeep Mitra
Ranadeep Mitra