Note that the timing and topics shown for future dates represent projections that are subject to change as the course progresses.
| # | Topic | Notes | Lab | Assignments | 
|---|---|---|---|---|
| 1 | Welcome | Before next class: Install OCaml & do prep work below | Poetry exercise One time pad handout; solution Slides from class  | 
Homework 1 (Python review) due  | 
| 2 | Programming language syntax | Watch: day2 video; 
response form Read Backus-Naur notation. Bonus: article  | 
Live recording; slides | |
| 3 | Introduction to OCaml | Prep: read
Z&W
sections 1.5, 2.1-2.11. Watch OCaml 1 recording & complete response form  | 
Lab 1 [Solution] | |
| 4 | Value-oriented programming | Review Z&W ch. 2.   Watch OCaml 2 recording & give response. (slides)  | 
Types & Bindings [Solution] | Homework 2 (OCaml intro) due Wednesday, Mar. 3 | 
| 5 | Lists and recursion | Read Z&W ch. 3. Watch OCaml 3 recording; give response. (slides) | Lists [Solution] Lab 2 [Solution]  | 
|
| 6 | Lists, tuples, and nested patterns | Read Z&W ch. 4. Watch OCaml 4 recording; give response. (slides) patterns.ml | Lab 2B [Solution] | Homework 3 (OCaml lists) due Wednesday, Mar. 10 | 
| 7 | User data types; generics | Read Z&W ch. 5 & ch. 8. Watch OCaml5 recording; give response. (slides) | Lab 3 [Solution]; count.ml | |
| 8 | First class functions | Read Z&W ch. 9 & ch. 11. Watch OCaml6 recording; give response. (slides) | Lab 4 (solution); Demo | Homework 4 (OCaml higher order functions) due Wednesday, Mar. 17 | 
| 9 | Modularity, records, and mutability | Read Z&W ch. 10 & ch. 12-14. Watch OCaml7 recording; give response (slides). | Practice: HOF (solution) debugPrint.ml demo_hof.ml tripleCone.ml | |
| 10 | Abstract stack machine | Read Z&W ch. 15. Watch OCaml8 recording; give response (slides). | ASM Rules; ASM Exercises; Options & Mutability Review (solution) | Homework 5 (OCaml paper exercises) due Wednesday, March 24 | 
| 11 | Introduction to C: simple functions, binding, scope, & types | Prep: Install gcc & read C for Python programmers. Watch C1 recording; give response (slides). | Lab 5 [Solution]; demo.c | |
| 12 | C: Pointers, arrays & formatted I/O | Watch C2 recording; give response; (slides). Read about C pointers, call-by-reference, call-by-value. Read PLP section 8.2 | Lab 6 [solution] | Homework 6 (OCaml one-time pad) due Wednesday, Mar. 31 | 
| 13 | Loops in C | Watch C3 recording; give response (slides). Read PLP section 6.5 | Lab 7 | |
| 14 | Memory management & garbage collection | Watch C4 recording; give response (slides). Read PLP section 8.5 | Lab 8 [solution] | Homework 7 | 
| 15 | C preprocessor, headers, makefiles | Watch C5 recording; give response (slides). Review tutorials on preprocessor and makefile if necessary | Lab 9 [solution] | |
| 16 | Introduction to Java | Install Java JDK if necessary. Watch Java 1 recording; give response (slides). Read Java for the Python Programmer: Getting Started & Basics. | Lab 10 | Homework 8 | 
| 17 | Classes & inheritance | Watch Java 2 recording; give response (slides). Read Java for the Python Programmer: Classes. | Lab 11 | |
| 18 | Day of languages | Meet with teams | Language exploration | |
| 19 | Types across Languages | Watch types recording; give response (slides). Read PLP ch. 7; skim ch. 8 | Lab 12 | |
| 20 | Program control flow I: Sequencing & Control | Watch control structures recording; give response (slides). Read PLP sections 6.1-6.4 | Lab 13 | Homework 9 | 
| 21 | Program control flow II: Iteration & Recursion | Watch iteration & recursion recording; give response (slides). Read PLP sections 6.5-6.8 | Lab 14 | |
| 22 | Scripting languages | Watch scripting languages recording; give response (slides). Read PLP chapter 14 | Interest survey; scripts.php; Lab 15  | 
|
| 23 | Project Day | No video today -- work on language exploration project in class | ||
| 24 | Concurrency | Watch concurrency recording; give response (slides). Read PLP chapter 13 | Lab 16 | |
| 25 | Summary & review | Watch some programming language history (1st 10 minutes) | Final posters! | Final exam | 
| * | Day of Julia | |||
| * | Day of Rust | |||
| * | Day of Fortran | |||
| * | Day of Lisp | |||
| * | Day of PHP | 
Acknowledgment: Much of the OCaml content comes originally from course material kindly provided by Stephanie Weirich and Steve Zdancewic. Thanks to them for permission to build on their work.