Schedule
The notes linked below are required reading, but they are not a substitute for attending lecture and recitation. The lectures and recitation sections are tightly coupled: Lectures will assume knowledge from previous sections, and vice-versa. These notes should be read sequentially (Monday's section, Tuesday's lecture, Wednesday's section, Thursday's lecture, etc.).
Lecture topics and assignment due dates are subject to change.
| DATE | EVENT | TOPIC | LINKS |
|---|---|---|---|
| Introduction to Functional Programming | |||
| Week 1 | |||
| 08/26/14 | Lecture 1 | Introduction to CS 3110 | [Slides] [Code] |
| 08/26/14 | PS 0 issued | [PS 0] | |
| 08/26/14 | OCaml demo session, 7:30–9:30PM, Upson B7 | ||
| 08/27/14 | Recitation 1 | Introduction to OCaml syntax | [Notes] |
| 08/27/14 | OCaml demo session, 7:30–9:30PM, Phillips 318 | ||
| 08/28/14 | Lecture 2 | Introduction to OCaml semantics | [Slides] [Notes] |
| 08/28/14 | OCaml demo session, 7:30–9:30PM, Upson B7 | ||
| Week 2 | |||
| 09/01/14 | No class: Labor Day | ||
| 09/02/14 | Lecture 3 | Functions and data | [Slides] [Notes] [Code] |
| 09/03/14 | Recitation 2 | Testing and debugging | [Notes] |
| 09/04/14 | Lecture 4 | Lists and more data | [Slides] [Notes] [Code] |
| 09/04/14 | PS 1 issued | [PS 1] | |
| Week 3 | |||
| 09/08/14 | Recitation 3 | Higher-order functions | [Notes] |
| 09/09/14 | Lecture 5 | Pattern matching | [Slides] [Notes] [Code] |
| 09/10/14 | Recitation 4 | Datatypes review | [Notes] |
| 09/11/14 | Lecture 6 | Map and fold | [Slides] [Notes] [Code] |
| 09/11/14 | PS 1 due | [PS 1] | |
| 09/11/14 | PS 2 issued | [PS 2] | |
| Week 4 | |||
| 09/15/14 | Recitation 5 | Folding and tail recursion | [Notes] |
| 09/16/14 | Lecture 7 | The dynamic environment | [Slides] |
| 09/17/14 | Recitation 6 | PS1 discussion | [Git tutorial] |
| 09/18/14 | Lecture 8 | Closures | [Slides] |
| 09/18/14 | PS 2 due | [PS 2] | |
| Week 5 | |||
| 09/22/14 | Recitation 7 | Examples of evaluation | [Notes] |
| Modular Programming | |||
| 09/23/14 | Lecture 9 | Modules | [Slides] [Notes] |
| 09/23/14 | PS 3 issued | [PS 3] | |
| 09/24/14 | Recitation 8 | Functional data structures | [Notes] [Code] |
| 09/25/14 | Lecture 10 | Functors | [Slides] [Notes] [Code] |
| Week 6 | |||
| 09/29/14 | Recitation 9 | Examples of functors | [Notes] |
| 09/30/14 | Lecture 11 | Documenting abstractions | [Slides] [Notes] |
| 10/01/14 | Recitation 10 | Red–black trees | [Notes] |
| 10/02/14 | Lecture 12 | Imperative features | [Slides] [Notes] |
| 10/02/14 | PS 3 due | [PS 3] | |
| Week 7 | |||
| 10/06/14 | Recitation 11 | Functional arrays | [Notes] |
| 10/07/14 | Lecture 13 | Hash tables | [Slides] [Notes] |
| 10/08/14 | Recitation 12 | Prelim 1 review | |
| 10/09/14 | No class: Study for Prelim 1 | ||
| 10/09/14 | Prelim 1, 5:30–7:00 pm and 7:30pm–9:00 pm, Phillips 101 and 203, and Upson B17 | ||
| 10/09/14 | PS 4 issued | [PS 4] | |
| Week 8 | |||
| 10/13/14 | No class: Fall Break | ||
| 10/14/14 | No class: Fall Break | ||
| 10/15/14 | Recitation 13 | Prelim 1 discussion, PS4 overview | |
| Advanced Topics in Functional Programming | |||
| 10/16/14 | Lecture 14 | Static vs. dynamic typing | [Slides] |
| Week 9 | |||
| 10/20/14 | No class: Recitation cancelled | ||
| 10/21/14 | Lecture 15 | Concurrency (Prof. Foster) | [Notes] |
| 10/22/14 | Recitation 14 | Programming in Async | [Notes] |
| 10/23/14 | Lecture 16 | Advanced Async (Prof. Foster) | [Slides] [Notes] [Code] |
| 10/23/14 | PS 4 due | [PS 4] | |
| 10/24/14 | PS 5 issued | [PS 5] | |
| Week 10 | |||
| 10/27/14 | Recitation 15 | Socket programming in Async | [Notes] |
| 10/28/14 | Lecture 17 | Dependent types (Prof. Constable) | [Notes] |
| Reasoning about Correctness | |||
| 10/29/14 | Recitation 16 | Assurance | [Notes] |
| 10/30/14 | Lecture 18 | Verification | [Slides] [Notes] |
| Week 11 | |||
| 11/03/14 | Recitation 17 | Examples of verification | [Notes] |
| 11/04/14 | Lecture 19 | Logic | [Slides] [Notes] |
| 11/05/14 | Recitation 18 | Examples of proof | [Notes] |
| 11/06/14 | Lecture 20 | Effective OCaml (Dr. Minsky) | |
| Week 12 | |||
| 11/10/14 | No class: Recitation cancelled | ||
| 11/11/14 | Lecture 21 | Logic, part 2 | [Slides] [Notes] [Proof rules] |
| 11/12/14 | Recitation 19 | More examples of proof | [Notes] |
| 11/13/14 | Lecture 22 | Mechanized logic in Coq | [Slides] [Notes] [Code] |
| 11/13/14 | PS 5 due | [PS 5] | |
| 11/14/14 | PS 6 issued | [PS 6] | |
| Week 13 | |||
| 11/17/14 | Recitation 20 | PS 6 overview | [PS 6] |
| 11/18/14 | Lecture 23 | Formal verification in Coq | [Slides] [Notes] [Code] |
| 11/19/14 | Recitation 21 | Prelim 2 review | |
| 11/20/14 | No class: Study for Prelim 2 | ||
| 11/20/14 | Prelim 2, 5:30–7:00 pm and 7:30pm–9:00 pm, Olin 155, 165, and 255 | ||
| 11/20/14 | Optional PS 7 issued | [PS 7] | |
| Week 14 | |||
| 11/24/14 | Recitation 22 | Prelim 2 discussion | |
| Reasoning about Performance | |||
| 11/25/14 | Lecture 24 | Efficiency | [Slides] [Notes] |
| 11/26/14 | No class: Thanksgiving Break | ||
| 11/27/14 | No class: Thanksgiving Break | ||
| Week 15 | |||
| 11/24/14 | Recitation 23 | Recurrences | [Notes] |
| 11/25/14 | Lecture 25 | Amortized analysis | [Slides] [Notes] [Code] |
| 11/24/14 | Recitation 24 | Recurrences, part 2 | [Notes] |
| THE END | |||
| 11/25/14 | Lecture 26 | Victory lap | [Slides] |
| 12/04/14 | PS 6 due | [PS 6] | |
| 12/06/14 | 3110 Tournament, 5:00 pm, Gates G01 | ||
| Finals | |||
| 12/11/14 | Optional PS 7 due | [PS 7] | |
| 12/16/14 | Final, 9:00–11:30 am, Olin 155, 245, and 255 | ||