| Date | Topic | Required Reading | Notes | Assignments Out | Slides |
| 1/10 | Introduction to class and Racket | code | slides | ||
| 1/15 | No class (snow) | ||||
| 1/17 | Functions, pairs, lists | code For a bit of light reading, try cons or car and cdr. |
slides | ||
| 1/22 | Let, lambda, and the benefits of no mutation | code | Homework 1, due 1/30 11:55pm | slides | |
| 1/24 | Static vs dynamic typing; practice with Racket | code | slides | ||
| 1/29 | Tail recursion and accumulators | code | slides | ||
| 1/31 | First class functions I | code | slides | ||
| 2/5 | First class functions II | code | slides | ||
| 2/7 | Course motivation; lexical scoping and closures | code | Homework 2, due 2/15 11:55pm | motivation slides scoping/closure slides |
|
| 2/12 | Practice with environment diagrams | ||||
| 2/14 | Function closure idioms | code | slides | ||
| 2/19 | Closures (sorta) in Python and C++ | code | slides | ||
| 2/21 | Environment diagram practice, more mutation, started delayed evaluation | code | slides | ||
| 2/26 | Delayed evaluation, thunks, laziness, streams | code | Homework 3, due 3/8 11:55pm | slides | |
| 2/28 | Midterm | ||||
| 3/5 | More streams (continued lecture 12) | ||||
| 3/7 | No class, prof out of town | slides | |||
| 3/19 | Stream wrapup, memoization, static vs dynamic typing | code | Homework 4, due 3/27 11:55pm | slides | |
| 3/21 | Intro to Java | slides | |||
| 3/26 | OOP from the ground up, Lists, and practice | Homework 5, due 4/9 11:55pm | slides | ||
| 4/2 | Sets and Maps, more practice, inheritance | (see previous lecture slides) | |||
| 4/4 | Exceptions, Threading I | slides | |||
| 4/9 | Threading II | slides | |||
| 4/11 | Late binding in Java, C++, and Racket (building our own OO system) | Homework 6, due 4/18 11:55pm | slides | ||
| 4/16 | Building an interpreter | slides | |||
| 4/18 | Building an interpreter (cont'd), compilers | final project | slides | ||
| 4/23 | Event-driven programming | slides | |||
| 4/25 | Victory lap | slides |