Course Links

Resources

External

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 Monday, Feb. 22 Wednesday, Feb. 24.
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.