EECS 490: Programming Languages

Winter 2020

Students will gain a modern understanding of programming language design and implementation. The emphasis will be on building up from 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
Wed 8 Jan 1 Course Overview + Programming with Expressions RWO Guided Tour (through Records and Variants)
Mon 13 Jan 2 Recursive Datatypes and Recursion Schemes Optional: Cornell CS 3110 Notes Ch. 4, RWO Lists and Patterns (through Tail Recursion)
Wed 15 Jan 3 Equational and Inductive Reasoning Princeton COS 326 Notes on Reasoning About Programs
Mon 20 Jan No class - MLK Day Assignment 1 + Survey 1 (on Canvas) due Tues 21 Jan, 8pm Optional: PFPL 1.1, 2.1-2.3, 5.1-5.2, TAPL Ch. 4
Wed 22 Jan 4 Notation, Structure, and Semantics
Mon 27 Jan 5 Types and Variables Assignment 2 due Tues 28 Jan, 8pm Optional: PFPL 4, 5.1-5.2
Wed 29 Jan 6 Functions, Products Optional: PFPL 8.2, 10.1
Mon 3 Feb 7 Sums, Exceptions Assignment 3 due Wed 5 Feb, 4pm (free late day) Optional: PFPL 11.1
Wed 5 Feb 8 Recursive Expressions Optional: PFPL 19.1, 19.2
Mon 10 Feb 9 Recursive Types Assignment 4 due Tues 11 Feb, 8pm Optional: PFPL 20.1
Wed 12 Feb 10 Parametric Polymorphism Optional: PFPL 16.1
Mon 17 Feb 11 Modules and Abstract Data Types Assignment 5 due Thurs 20 Feb, 8pm Optional: Princeton COS326 Lecture 12b: Modules
Wed 19 Feb 12 Gradual Typing, Dynamic Tagging, and Typed Holes Optional: What is Gradual Typing by Jeremy Siek
Mon 24 Feb 13 Constructive Logic (Proofs are Programs) Optional: Propositions as Types by Philip Wadler
Wed 26 Feb 14 Midterm (during lecture slot, Room TBD)
Mon 3 Mar No class - Spring Break
Wed 5 Mar
Mon 9 Mar 15 References, Side Effects, and Loops Optional: TAPL Ch. 13
Wed 11 Mar 16
Mon 16 Mar 17 Encapsulated Commands (e.g. Haskell's IO types) Optional: Introduction to IO (Haskell Wiki)
Wed 18 Mar 18 Imperative Program Verification Optional: CMU 17-654: Hoare Logic: Proving Programs Correct
Optional: Washington CSE 331: Reasoning About Code (Hoare Logic)
Mon 23 Mar 19 Imperative Program Verification II
Wed 25 Mar 20 Ownership and Borrowing in Rust Rust Book Ch. 4.1-4.2: Understanding Ownership
Mon 30 Mar 21 Ownership and Borrowing in Rust II
Wed 1 Apr 22 Parallelism and Cost Semantics Optional: PFPL Ch. 37-38/td>
Mon 6 Apr 23 Concurrency Assignment 6 due Fri 10 Apr, 8pm ET Optional: PFPL Ch. 39
Wed 8 Apr 24 Distributed Programming Optional: PFPL Ch. 40
Mon 13 Apr 25 Special Topics: Macro Systems Assignment 7 due Sat 18 Apr, 8pm ET Optional: Macros - Rust Book
Wed 15 Apr 26 Special Topics: Functional Web Development (Guest Lecture: David Moon and Ethan Brooks) Optional: Meta Tic-Tac-Toe (code) in Reason
Mon 20 Apr 27 Final Exam (see Piazza for details) Assignment 8 (Extra Credit) due Tues 28 Apr, 8pm ET (no late day)


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


4:30-6:30pm, MW, 1571 GGBL

Photo of David Moon
David Moon


9:30-10:30am, F, 104 EWRE

Photo of Ethan Brooks
Ethan Brooks


1:30pm-2:30pm, F, 107 GF

Photo of Gabriel Matute
Gabriel Matute


Photo of Hannah Potter
Hannah Potter


10:30am-11:30am, F, 1024 FXB