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
Wed 19 Feb 12 Gradual Typing, Dynamic Tagging, and Typed Holes
Mon 24 Feb 13 Proofs are Programs
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
Wed 11 Mar 16 Encapsulated Commands (i.e. Haskell's "IO Monad")
Mon 16 Mar 17 Imperative Program Verification Assignment 6 due Tues 17 Mar, 8pm
Wed 18 Mar 18
Mon 23 Mar 19 Ownership and Borrowing in Rust Assignment 7 due Tues 24 Mar, 8pm
Wed 25 Mar 20
Mon 30 Mar 21 Parallelism Assignment 8 due Tues 31 Mar, 8pm
Wed 1 Apr 22 Cost Semantics
Mon 6 Apr 23 Concurrency Assignment 9 due Tues 7 Apr, 8pm
Wed 8 Apr 24 Distributed Programming
Mon 13 Apr 25 Special Topics (TBD) Assignment 10 due Tues 14 Apr, 8pm
Wed 15 Apr 26 Special Topics (TBD)
Mon 20 Apr 27 Special Topics (TBD)
Thu 30 Apr Final Exam 10:30am-12:30pm (Room TBD)


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

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 us individually.