EECS 490: Programming Languages

Fall 2020

Due to the ongoing pandemic, EECS 490 will 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.

Students will gain a modern understanding of programming language design and implementation. The emphasis will be on building up from mathematical first principles and on understanding programming languages simultaneously as formal structures and as human-computer interfaces.

The purpose of this course 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.

See the syllabus for all of the details.


Open in Google Calendar

Day # Lecture Topic Deadline Readings
Tue 1 Sep 1 Course Overview RWO Guided Tour (through Records and Variants)
Thu 3 Sep 2 Programming with Mathematical Expressions
Tue 8 Sep 3 Recursive Datatypes and Recursion Schemes A1 and Survey 1 out Optional: Cornell CS 3110 Notes Ch. 4 and RWO Lists and Patterns (through Tail Recursion)
Thu 10 Sep 4 Equational and Inductive Reasoning Princeton COS 326 Notes on Reasoning About Programs
Tue 15 Sep 5 Syntax A1 and Survey 1 due, A2 out
Thu 17 Sep 6 Semantics
Tue 22 Sep 7 Types A2 due, A3 out
Thu 24 Sep 8 Variables and Functions
Tue 29 Sep 9 Products A3 due, A4 out
Thu 1 Oct 10 Sums
Tue 6 Oct 11 Recursive Types A4 due, A5 out
Thu 8 Oct 12 Parametric Polymorphism
Tue 13 Oct 13 Constructive Logic (Proofs are Programs) A5 due Optional: Propositions as Types by Philip Wadler
Thu 15 Oct 14 Midterm (during lecture)
Tue 20 Oct 15 Dynamic Classification, Gradual Typing, and Typed Holes A6 out Optional: What is Gradual Typing by Jeremy Siek
Thu 22 Oct 16 Side Effects, Mutation, and Loops Optional: TAPL Ch. 13
Tue 27 Oct 17 Encapsulated Commands (e.g. Haskell's IO types) Optional: Introduction to IO (Haskell Wiki)
Thu 29 Oct 18 Imperative Program Verification A6 due, A7 out Optional: CMU 17-654: Hoare Logic: Proving Programs Correct
Optional: Washington CSE 331: Reasoning About Code (Hoare Logic)
Tue 3 Nov 19 No class - Election Day! Michigan Voter Information Center
Thu 5 Nov 20 Imperative Program Verification II
Tue 10 Nov 21 Ownership and Borrowing in Rust I A7 due, A8 out Rust Book Ch. 4.1-4.2: Understanding Ownership
Thu 12 Nov 22 Ownership and Borrowing in Rust II
Tue 17 Nov 23 Parallelism and Cost Semantics A8 due Optional: PFPL Ch. 37-38
Thu 19 Nov 24 Concurrency A9 out Optional: PFPL Ch. 39
Tue 24 Nov No class - Thanksgiving Break
Thu 26 Nov
Tue 1 Dec 25 Distributed Programming Optional: PFPL Ch. 40
Thu 3 Dec 26 Special Topics: Macro Systems A9 due Optional: Macros - Rust Book
Tue 8 Dec 27 Special Topics: Functional Web Development Optional: Meta Tic-Tac-Toe (code) in Reason
Tue 15 Dec Final Exam (8:00-10:00am ET)


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


12:00-1:30pm, TTh

Photo of Hannah Potter
Hannah Potter



Photo of Yunsoo Kim
Yunsoo Kim



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



Photo of Vishnu Reddy
Vishnu Reddy



Photo of Sayan Ghosh
Sayan Ghosh