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.