Syllabus

Everything here is work in progress, and is subject to change.

Tentaive Schedule and Topics

DateTopicOutDue
Week 1How to design a programming language?
06/24Why study programming languages?
06/25Python review
06/26Inference rulesHW 1
Week 2What makes a programming language?
07/01Semantics
07/02Names and bindings
07/03TypesHW 2HW 1
Week 3How to abstract data?
07/08Finite types (products)
07/09Finite types (sums), bidirectional typing
07/10Recursive and generic typesHW 3HW 2
Week 4How to abstract programs?
07/15Higher-order functions
07/16Lambda calculus
07/17Parametric polymorphismHW 4HW 3
Week 5How to change the world?
07/22Mutable states, garbage collection
07/23Exceptions, abstract machines
07/24Effect handlersHW 5HW 4
Week 6What is the future of programming like?
07/29Curry-Howard correspondence
07/30Codata, objects, infinity, and ducks
07/31It's lambda calculus all the way down!
08/02(End of summer session A)HW 5

Lecture Notes

Homework Assignments

Perspectives

Discussion Sections