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

Schedule

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 14 Midterm (during lecture)
Mon 15 Mar 15 Dynamic Classification, Gradual Typing, and Typed Holes A6 out, Mid-Semester Survey out Optional: What is Gradual Typing by Jeremy Siek
Wed 17 Mar 16 Side Effects, Mutation, and Loops Optional: TAPL Ch. 13
Mon 22 Mar 17 Encapsulated Commands (e.g. Haskell's IO types) Optional: Introduction to IO (Haskell Wiki)
Wed 24 Mar 18 Imperative Program Verification Optional: CMU 17-654: Hoare Logic: Proving Programs Correct
Optional: Washington CSE 331: Reasoning About Code (Hoare Logic)
Thu 25 Mar A6 due, Mid-Semester Survey due, A7 out
Mon 29 Mar 19 Imperative Program Verification II
Wed 31 Mar 20 Ownership and Borrowing in Rust I Optional: Rust Book Ch. 4.1-4.2: Understanding Ownership
Mon 5 Apr 21 Ownership and Borrowing in Rust II
Tue 6 Apr A7 due, Mid-Semester Survey due, A8 out
Wed 7 Apr 22 Parallelism and Cost Semantics I Optional: PFPL Ch. 37-38
Mon 12 Apr 23 Parallelism and Cost Semantics II
Tue 13 Apr A8 due, A9 out
Wed 14 Apr 24 Concurrent Interaction Optional: PFPL Ch. 39
Mon 19 Apr 25 Distributed Computation Optional: PFPL Ch. 40
Tue 20 Apr A9 due, End-of-semester Survey released
Wed 21 Apr 26 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)
Mon 26 Apr End-of-semester Survey due (midnight)

People

For technical questions, please use Piazza. For administrative questions, please email the instructional staff collectively at eecs490staff@umich.edu unless you have a specific reason for contacting a staff member individually.
Photo of Cyrus Omar

Instructor

comar@umich.edu

4:30-6:00pm, MW

Photo of Yunsoo Kim
Yunsoo Kim

IA

yunsoo@umich.edu

10:30-11:30am, F

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

IA

zhiyipan@umich.edu

Photo of Anand Dukkipati
Anand Dukkipati

IA

anandrav@umich.edu

1:30-2:30pm, F

Photo of Kevin Chen
Kevin Chen

IA

kevechen@umich.edu

9:30-10:30am, F

Photo of Brentan Reynolds
Brentan Reynolds

Grader

bjrey@umich.edu

Photo of Ranadeep Mitra
Ranadeep Mitra

Grader

ranadeep@umich.edu