Lecture + Section
See links below for each class meeting's slides, video, code, etc. and the corresponding reading notes for each unit. For easier bulk access, you can also go to:
For student-privacy reasons, videos are available only to students in the class.
Video links from our class meetings go directly to the Panopto recordings which are available only to class participants (UW credentials).
Any other provided videos will go to a Google Drive folder available only to class participants (UW Google Workspace credentials). (There's nothing in there yet, so we haven't added access to anyone.)
Lecture slides/code/topics do not always align perfectly with class periods -- class and videos may be ahead or behind, usually behind so you continue to the next video to complete a topic. Anything in the future might get edited or rearranged.
Unit 1 : OCaml Functions, Tuples, Lists, and More
Mon, Mar 27 - Lecture 01 : Welcome! Intro to OCaml (slides, video, code)
Wed, Mar 29 - Lecture 02 : Syntax and Semantics: Expressions, Functions (slides, video, code)
Thu, Mar 30 - Section 01 : REPL, OCaml, Debugging (slides: 11:30, 12:30, 2:30, code)
Fri, Mar 31 - Lecture 03 : Tuples, Lists (slides, video, code)
Mon, Apr 3 - Lecture 04 : Let Expressions, Options, Benefits of No Mutation (slides, video, code)
Unit 2: Variants, Pattern Matching, Tail Recursion, and More
Wed, Apr 5 - Lecture 05 : Records, Variants, Match Expressions (slides, video, code)
Thu, Apr 6 - Section 02 : Type Synonyms, More General Types, Pattern Matching (slides, worksheet, code)
Fri, Apr 7 - Lecture 06 : Pattern Matching (slides, video, code)
Mon, Apr 10 - Lecture 07 : Nested Patterns, Tail Recursion, Exceptions (slides, video, code)
Unit 3: First-Class Functions and Closures
Wed, Apr 12 - Lecture 08 : First-Class Functions (slides, video, code)
Thu, Apr 13 - Section 03 : Tail Recursion, Map, Filter (slides, worksheet, code)
Fri, Apr 14 - Lecture 09 : Lexical Scope and Function Closures (slides, video, code)
Mon, Apr 17 - Lecture 10 : Function-Closure Idioms (slides, video, code)
The ADT idiom is optional (but very cool! :-) ) and a fuller explanation is in this 2021 video
Unit 4: Modules, Type Inference, and Equivalence
Wed, Apr 19 - Lecture 11 : OCaml Modules (slides, video, code)
Thu, Apr 20 - Section 04 : Currying, Mutual Recursion, Higher-Order Function Practice (slides, worksheet, code including worksheet solutions)
Fri, Apr 21: Most of OCaml Modules (started on Apr 19), with last 5 minutes on Type Inference (continued on Mon Apr 24) (video, see above for slides and code)
Mon, Apr 24 - Lecture 12 : Type Inference (slides, video, code)
Thu, Apr 27 - Section 05 : Modules (slides, worksheet, code)
Interlude: Course Motivation
Unit 5: Racket Introduction, Delaying Evaluation, Macros
Fri, Apr 28 - Lecture 14 : Racket Introduction (slides, video, code)
[Mon, May 1 - Midterm]
Wed, May 3 - Lecture 15 : Variables, Scope, Pairs, Mutation (slides, video, code)
Thu, May 4 - Section 06 : Mutable Pairs, When Expressions Evaluate, Memoization (slides, code)
Fri, May 5 - Lecture 16 : Thunks, Promises, Streams (slides, video, code)
Unit 6: Racket Structs, Implementing Programming Languages
Wed, May 10 - Lecture 18 : One-Of Types with Lists or Structs (slides, video, code)
Thu, May 11 - Section 7 : Interpreters, Quote/Eval (slides, worksheet, worksheet-solutions, code)
Fri, May 12 - Lecture 19 : Implementing Programming Languages (slides, video, code)
Unit 7: Racket-Style Object-Oriented Programming Languages
Readings (reading notes are not available for most of the unit but see the Racket Guide chapter for some of the relevant material):
Mon, May 15 - Lecture 20 : Introduction to Racket OOP (slides, video, code) [see also May 12 video above]
Wed, May 17 - Lecture 21 : Subclassing, Overriding, Dynamic Dispatch (slides, video, code)
Audio was not captured, so here is an alternate mashup video from earlier offerings with the content we covered on May 17
Thu, May 18 - Section 8 : More Racket OOP: Scope, Augmentation (slides, code, solutions)
Fri, May 19 - Lecture 22 : Multiple Inheritance, Mixins, Interfaces, Abstract Methods (slides, video, code)
Mon, May 22 - Lecture 23 : FP vs. OOP Decomposition; Double Dispatch (slides, video, code)
Thu, May 25 - Section 9: Double Dispatch, Visitor Pattern (slides, code)
Unit 8: Static vs. Dynamic Typing, Subtyping
Wed, May 24 - Lecture 24: Static vs. Dynamic Typing (slides, video, code) [a lot is in the next video]
Fri, May 26 - Lecture 25: Subtyping (slides, video) [most is in the next video, but key set up is here]
Thu, Jun 1 - Final-Exam Review with focus on Unit 8 material (slides, folder of old exams)
Fri, Jun 2 - Lecture 26 Subtyping for OOP; Generics vs. Subtyping (slides, video)
Course Wrap-Up and Some Bonus Code
Fri, Jun 2 - Lecture 27: Course Motivation and Victory Lap (slides, video)
Optional code briefly referred to in slides on topics we didn't get to (code)