Programming Languages: Calendar

This is a rough sketch of the quarter that is likely to change. We can accurately predict the past, but predicting the future is hard! In particular, all future assignment dates should be considered tentative and subject to change.

Note: Unit reading and video notes are optional and cover roughly the same material discussed in some combination of lecture, section, and other course materials. They can nonetheless serve as a useful resource if you are confused on a topic, though they should NOT be considered a sufficient substitute for attending class.

Unit 1: Intro to ML, Functions, Tuples, Lists, and More
Lecture 1
(Wed, Apr 1)

ML Variable Bindings; Semantics; Expressions

Section 1
(Thu, Apr 2)

Emacs/SML Mode, Shadowing, SML Errors

Unit 2: Datatypes, Pattern Matching, and Tail Recursion
Section 2
(Thu, Apr 9)

More with Types; Syntactic Sugar

Lecture 4
(Fri, Apr 10 - Mon, Apr 13)

Records and Datatypes; Case Expressions

Lecture 5
(Wed, Apr 15 - Fri, Apr 17)

More Datatypes; Pattern Matching

Section 3
(Thu, Apr 16)

Pattern Matching; Tail Recursion

Lecture 6
(Mon, Apr 20)

Tail Recursion; Exceptions

Unit 3: First-Class Functions and Closures
Lecture 7
(Mon, Apr 20 - Web, Apr 22)

First-Class Functions

Lecture 8
(Wed, Apr 22 - Fri, Apr 24)

Lexical Scope, Function Closures

Section 4
(Thu, Apr 23)

Higher-order Functions

Lecture 9
(Mon, Apr 27)

Function Closure Idioms

Unit 4: ML Modules, Type Inference, and Equivalence
Lecture 10
(Wed, Apr 29)

ML Modules

Section 5
(Thu, Apr 30)

Currying; Modules

Lecture 11
(Fri, May 1)

Type Inference

(Mon, May 4)

Course Interlude and Motivation

Unit 5: Intro to Racket, Delayed Evaluation, and Macros
Lecture 13
(Wed, May 6 - Fri, May 8)

Introduction to Racket

Section 6
(Thu, May 7)

Racket; Thunks

Lecture 15
Section 7
(Thu, May 14)

Streams; Macros

Unit 6: Implementing Languages
Lecture 16
(Fri, May 15)

Structs; Datatype-Style Programming

Lecture 17
(Mon, May 18)

Implementing Languages (Including Closures)

Lecture 18
(Wed, May 20)

Static v. Dynamic Typing

Section 8
(Thu, May 21)

Legal ASTs; Implementing Languages

Unit 7: Intro to Ruby and Object-oriented Programming
Lecture 19
(Fri, May 22)

Introduction to Ruby and OOP

(Mon, May 25)

Memorial Day - No Class

Lecture 20
(Wed, May 27)

Arrays, Blocks, and Procs; Inheritance and Overriding

Section 9
(Thu, May 28)

Ruby Arrays, Hashes, Blocks, and More

Lecture 21
(Fri, May 29)

Dynamic Dispatch, Precisely and Manually, in Racket

Unit 8: Program Decomposition, More Inheritance, Subtyping
Lecture 22
(Fri, May 29 - Mon, Jun 1)

OOP v. Functional Decomposition; Double Dispatch

Lecture 23
(Mon, Jun 1 - Wed, Jun 3)

Multiple Inheritance, Mixins, Interfaces, Abstract Methods

Lecture 24
(Wed, Jun 3 - Fri, Jun 5)


Lecture 25
(Wed, Jun 3 - Fri, Jun 5)

Subtyping for OOP

Section 10
(Thu, Jun 4)

Double Dispatch, Mixins, and Visitors

Wrap up
Lecture 26
(Fri, Jun 5)

Victory Lap

Exam week
(Tue, June 9)

(Thu, June 11)