Syllabus
Everything here is work in progress, and is subject to change.
Tentaive Schedule and Topics
Date | Topic | Out | Due |
---|---|---|---|
Week 1 | How to design a programming language? | ||
06/24 | Why study programming languages? | ||
06/25 | Python review | ||
06/26 | Inference rules | HW 1 | |
Week 2 | What makes a programming language? | ||
07/01 | Semantics | ||
07/02 | Names and bindings | ||
07/03 | Types | HW 2 | HW 1 |
Week 3 | How to abstract data? | ||
07/08 | Finite types (products) | ||
07/09 | Finite types (sums), bidirectional typing | ||
07/10 | Recursive and generic types | HW 3 | HW 2 |
Week 4 | How to abstract programs? | ||
07/15 | Higher-order functions | ||
07/16 | Lambda calculus | ||
07/17 | Parametric polymorphism | HW 4 | HW 3 |
Week 5 | How to change the world? | ||
07/22 | Mutable states, garbage collection | ||
07/23 | Exceptions, abstract machines | ||
07/24 | Effect handlers | HW 5 | HW 4 |
Week 6 | What is the future of programming like? | ||
07/29 | Curry-Howard correspondence | ||
07/30 | Codata, objects, infinity, and ducks | ||
07/31 | It's lambda calculus all the way down! | ||
08/02 | (End of summer session A) | HW 5 |