This course leverages the outstanding materials from Dan Grossman and others at the University of Washington.
jump to:
Aug 28-Sep 03, Sep 04-Sep 10, Sep 11-Sep 17, Sep 18-Sep 24, Sep 25-Oct 01, Oct 02-Oct 08
Oct 09-Oct 15 (fall break week)
Oct 16-Oct 22, Oct 23-Oct 29, Oct 30-Nov 05, Nov 06-Nov 12, Nov 13-Nov 19
Nov 20-Nov 26 (thanksgiving week)
Nov 27-Dec 03, Dec 04-Dec 10
Date/Subject | Prep | In Class | Assignments |
Mon Aug 29 (#0) Welcome; Setup; OOP Static 1 | slides: presentation pdf | >>> Assign (Java) WashU Exercise ImList<E> | |
Wed Aug 31 (#1) Functional Static 1a | xkcd: Editors Courses and Software Setup video: Synthesizing Information (Optional) PL A 0 reading: start-here (Optional) PL A 0 video: welcome-and-some-course-mechanics PL A 0 video: who-i-am-acknowledgments PL A 0 video: what-the-course-is-about-initial-motivation (Optional) PL A 0 video: recommended-background (Optional) PL A 0 video: why-part-a-part-b-part-c (Optional) PL A 0 video: grading-policy PL A 0 video: very-high-level-outline (Optional) PL A 0 reading: about-the-course (Optional) PL A 0 reading: some-more-perspective-on-recommended-background (Optional) PL A 0 reading: why-are-there-3-courses-part-a-part-b-part-c (Optional) PL A 0 reading: grading-policy-details (Optional) PL A 0 discussionPrompt: discussion-forums-why-are-you-participating PL A 1 reading: section-1-welcome-message PL A 1 reading: section-1-reading-notes PL A 1 video: ml-variable-bindings-and-expressions PL A 1 video: rules-for-expressions PL A 1 video: the-repl-and-errors PL A 1 video: shadowing PL A 1 video: functions-informally PL A 1 video: functions-formally PL A 1 video: pairs-and-other-tuples PL A 1 video: introducing-lists PL A 1 video: list-functions PL A 1 video: let-expressions PL A 1 video: nested-functions PL A 1 video: let-and-efficiency video: Making Sense of SML Error Output | quiz slides: presentation pdf DG slides: pptx pdf DG slides: pptx pdf | >>> Assign (SML) WashU WarmUp List Length >>> Assign (SML) WashU WarmUp Sum Scan >>> Assign (SML) UW Exercise Calendar Date |
Mon Sep 5 Labor Day (No Class) | |||
Wed Sep 7 (#2) Functional Static 1b | xkcd: Side Effect Free video: Shards O' Glass Freeze Pops PL A 1 video: options PL A 1 video: booleans-and-comparison-operations PL A 1 video: benefits-of-no-mutation PL A 1 video: java-mutation PL A 1 video: pieces-of-a-language | quiz slides: presentation pdf | >>> Assign (SML) WashU Group WarmUp Sum Distances To Origin with Functions >>> Assign (SML) WashU WarmUp Is Strictly Ascending >>> Assign (SML) WashU WarmUp Remove First Occurrence >>> Assign (SML) WashU Exercise Closest To Origin >>> Assign (Java) WashU Exercise java.util.Optional<T> |
Sat Sep 10 | <<< Submit (Java) WashU Exercise ImList<E> | ||
Mon Sep 12 (#3) Functional Static 2a | PL A 2 reading: section-2-welcome-message PL A 2 reading: section-2-reading-notes PL A 2 video: building-compound-types PL A 2 video: records PL A 2 video: tuples-as-syntactic-sugar PL A 2 video: datatype-bindings PL A 2 video: case-expressions PL A 2 video: useful-datatypes PL A 2 video: pattern-matching-so-far PL A 2 video: another-expression-example | quiz slides: presentation pdf | >>> Assign (SML) WashU WarmUp Eliminate Unsorted >>> Assign (SML) WashU WarmUp Sum Scan with Pattern Matching |
Wed Sep 14 (#4) Functional Static 2b | PL A 2 video: type-synonyms PL A 2 video: lists-and-options-are-datatypes PL A 2 video: polymorphic-datatypes PL A 2 video: each-of-pattern-matching-truth-about-functions PL A 2 video: a-little-type-inference PL A 2 video: polymorphic-and-equality-types PL A 2 video: nested-patterns PL A 2 video: more-nested-patterns PL A 2 video: nested-patterns-precisely PL A 2 video: function-patterns | quiz slides: presentation pdf | >>> Assign (SML & Java) WashU Group WarmUp Sum Distances To Origin with Pattern Matching compared to Java >>> Assign (SML) WashU WarmUp Is Strictly Ascending with Pattern Matching >>> Assign (SML) WashU Exercise Hearts Card Game |
Sat Sep 17 | <<< Submit (SML) UW Exercise Calendar Date <<< Submit (SML) WashU Exercise Closest To Origin <<< Submit (Java) WashU Exercise java.util.Optional<T> | ||
Mon Sep 19 (#5) Language and Thought; Functional Static 2c | Ted Talk: Lera Boroditsky: How language shapes the way we think video: Numbers in Pirahã video: Recursion in Pirahã? (Optional) Wikipedia: Pirahã language xkcd: Tail Recursion PL A 2 video: exceptions PL A 2 video: tail-recursion PL A 2 video: accumulators-for-tail-recursion PL A 2 video: perspective-on-tail-recursion | quiz slides: presentation pdf | >>> Assign (SML) WashU WarmUp Sum Distances To Origin with Tail Recursion >>> Assign (SML) WashU WarmUp Sum Scan with Tail Recursion >>> Assign (Java) WashU Exercise Tail Recursion >>> Assign (SML) UW Exercise Card Game |
Wed Sep 21 (#6) Functional Static 3a | PL A 3 reading: section-3-welcome-message PL A 3 reading: section-3-reading-notes PL A 3 video: introduction-to-first-class-functions PL A 3 video: functions-as-arguments PL A 3 video: polymorphic-types-and-functions-as-arguments PL A 3 video: anonymous-functions PL A 3 video: unnecessary-function-wrapping PL A 3 video: map-and-filter PL A 3 video: generalizing-prior-topics | quiz slides: presentation pdf | >>> Assign (Java) WashU Group WarmUp Any and All >>> Assign (Java) WashU WarmUp N Times >>> Assign (SML) WashU WarmUp Sum Distances To Origin using Higher-Order Functions >>> Assign (Java) WashU Exercise Higher Order Functions Hall of Fame |
Sat Sep 24 | <<< Submit (SML) WashU Exercise Hearts Card Game | ||
Mon Sep 26 (#7) Story of Your Life; Functional Static 3b | Read: Story of Your Life xkcd: College Athletes video: UW3 Pattern Matching Rosetta Stone PL A 3 video: lexical-scope PL A 3 video: lexical-scope-and-higher-order-functions PL A 3 video: why-lexical-scope PL A 3 video: closures-and-recomputation PL A 3 video: fold-and-more-closures PL A 3 video: closure-idiom-combining-functions PL A 3 video: closure-idiom-currying PL A 3 video: partial-application PL A 3 video: currying-wrapup | quiz slides: presentation pdf | >>> Assign (SML) WashU Group WarmUp Curried Higher-Order Function Debugging >>> Assign (SML) WashU WarmUp Sum Scan Using Higher-Order Functions >>> Assign (SML) WashU Exercise Spreadsheet >>> Assign (SML) UW Exercise Pattern Matching |
Wed Sep 28 (#8) Functional Static 3c; Course Motivation | xkcd: Standards PL A 3 video: mutable-references PL A 3 video: closure-idiom-callbacks PL A 3 video: standard-library-documentation PL A 3 video: abstract-data-types-with-closures PL A 3 video: closure-idioms-without-closures PL A 3 video: java-without-closures PL A 3 video: c-without-closures PL A 3 video: course-motivation-introduction PL A 3 video: why-study-general-pl-concepts PL A 3 video: are-all-pls-the-same PL A 3 video: why-functional-languages PL A 3 video: why-ml-racket-and-ruby | quiz slides: presentation pdf | >>> Assign (SML) WashU WarmUp Sum Scan No Identity Element >>> Assign (SML) WashU Exercise Scan Higher Order Function |
Sat Oct 1 | <<< Submit (SML) UW Exercise Card Game <<< Submit (Java) WashU Exercise Tail Recursion <<< Submit (Java) WashU Exercise Higher Order Functions Hall of Fame | ||
Mon Oct 3 (#9) Functional Static 4a | xkcd: Haskell video: How To Use Refs In SML PL A 4 reading: section-4-welcome-message PL A 4 reading: section-4-reading-notes PL A 4 video: section-introduction PL A 4 video: what-is-type-inference PL A 4 video: ml-type-inference PL A 4 video: type-inference-examples PL A 4 video: polymorphic-examples PL A 4 video: the-value-restriction-and-other-type-inference-challenges PL A 4 video: mutual-recursion | quiz slides: presentation pdf | >>> Assign (SML) WashU WarmUp Mutable List |
Wed Oct 5 (#10) Functional Static 4b | xkcd: Workflow video: Binary Search Tree Client Demo PL A 4 video: modules-for-namespace-management PL A 4 video: signatures-and-hiding-things PL A 4 video: a-module-example PL A 4 video: signatures-for-our-example PL A 4 video: signature-matching PL A 4 video: an-equivalent-structure PL A 4 video: another-equivalent-structure PL A 4 video: different-modules-define-different-types PL A 4 video: equivalent-functions PL A 4 video: standard-equivalences PL A 4 video: equivalence-versus-performance PL A 4 video: part-a-wrap-up-parts-b-c-preview | quiz slides: presentation pdf | >>> Assign (SML) WashU WarmUp Binary Int Tree >>> Assign (SML) WashU Exercise Binary Search Tree |
Sat Oct 8 | <<< Submit (SML) UW Exercise Pattern Matching <<< Submit (SML) WashU Exercise Spreadsheet <<< Submit (SML) WashU Exercise Scan Higher Order Function | ||
Mon Oct 10 Fall Break (No Class) | |||
Wed Oct 12 (#11) 1984; Functors | Read: Chapters 1-5 (inclusive) of 1984 | quiz slides: presentation pdf | >>> Assign (SML) WashU Exercise Chained (Single List and Hashed) Dictionaries |
Sat Oct 15 | <<< Submit (SML) WashU Exercise Binary Search Tree | ||
Mon Oct 17 (#12) Sorted Dictionary | video: Sorted Dictionary Scenario | quiz slides: presentation pdf | >>> Assign (Sml) WashU Exercise Sorted Dictionary |
Wed Oct 19 (#13) The Lambda Calculus; Spreadsheet to Dictionaries | video: The Lambda Calculus (Hutton) video: Y Combinator (Hutton) (Optional) Wikipedia: Fixed-point combinator (Optional) Wikipedia: Church encoding (Optional) video: The Lambda Calculus (Lebec) | quiz slides: presentation pdf | >>> Assign (SML) WashU Exercise Spreadsheet To Dictionaries |
Sat Oct 22 | <<< Submit (SML) WashU Exercise Chained (Single List and Hashed) Dictionaries | ||
Mon Oct 24 (#14) Functional Dynamic 1a | xkcd: (Parentheses) Read: Low-fidelity Prototyping (Optional) Wikipedia: L-system PL B 1 reading: start-here PL B 1 video: welcome-to-part-b PL B 1 video: overview-of-part-b-concepts PL B 1 video: part-b-course-structure PL B 1 reading: part-b-software-installation-and-use-racket-and-drracket PL B 1 reading: section-5-welcome-message PL B 1 reading: section-5-reading-notes PL B 1 video: introduction-to-racket PL B 1 video: racket-definitions-functions-conditionals PL B 1 video: racket-lists PL B 1 video: syntax-and-parentheses PL B 1 video: parentheses-matter-debugging-practice PL B 1 video: dynamic-typing PL B 1 video: cond PL B 1 video: local-bindings PL B 1 video: toplevel-bindings video: Making Sense of Dr Racket Error Output video: Racket Image Library Demo: Snowdudes video: Racket Image Library Recursive Demo: Spiral | quiz slides: presentation pdf | >>> Assign (Racket) WashU WarmUp Home Is Where The (Racket) Heart Is >>> Assign (Racket) WashU Exercise Sierpiński and Cantor |
Wed Oct 26 (#15) Functional Dynamic 1b | xkcd: Universe video: Are C Macros Really That Bad? video: Thunk That Scenario PL B 1 video: mutation-with-set PL B 1 video: the-truth-about-cons PL B 1 video: mcons-for-mutable-pairs PL B 1 video: delayed-evaluation-and-thunks PL B 1 video: avoiding-unnecessary-computations PL B 1 video: delay-and-force PL B 1 video: using-streams PL B 1 video: defining-streams PL B 1 video: memoization PL B 1 video: macros-the-key-points PL B 1 video: tokenization-parenthesization-and-scope PL B 1 video: racket-macros-with-define-syntax PL B 1 video: variables-macros-and-hygiene PL B 1 video: more-macro-examples | quiz slides: presentation pdf | >>> Assign (Racket) WashU Exercise Snowflake >>> Assign (Racket) WashU WarmUp Thunks and Streams >>> Assign (Racket) UW Exercise Streams |
Sat Oct 29 | <<< Submit (Sml) WashU Exercise Sorted Dictionary <<< Submit (SML) WashU Exercise Spreadsheet To Dictionaries | ||
Mon Oct 31 (#16) Functional Dynamic 2a | Read: Fire and Ice by Robert Frost xkcd: Perl or Lisp PL B 2 reading: section-6-welcome-message PL B 2 reading: section-6-reading-notes PL B 2 video: datatype-programming-in-racket-without-structs PL B 2 video: datatype-programming-in-racket-with-structs PL B 2 video: advantages-of-structs | quiz slides: presentation pdf | >>> Assign (Racket) WashU WarmUp Interact |
Wed Nov 2 (#17) Functional Dynamic 2b | PL B 2 video: implementing-programming-languages PL B 2 video: what-your-interpreter-can-and-cannot-assume PL B 2 video: implementing-variables-and-environments PL B 2 video: implementing-closures PL B 2 video: are-closures-efficient PL B 2 video: racket-functions-as-macros-for-interpreted-language | quiz slides: presentation pdf | >>> Assign (Racket) WashU Exercise MUPL Programs >>> Assign (Racket) UW Exercise MUPL |
Sat Nov 5 | <<< Submit (Racket) UW Exercise Streams <<< Submit (Racket) WashU Exercise Sierpiński and Cantor <<< Submit (Racket) WashU Exercise Snowflake | ||
Mon Nov 7 (#18) Functional Dynamic 3a | video: Reverse Stream Scenario video: Reverse Stream Scenario Responses PL B 3 reading: section-7-welcome-message PL B 3 reading: section-7-reading-notes PL B 3 video: ml-versus-racket PL B 3 video: what-is-static-checking PL B 3 video: soundness-and-completeness PL B 3 video: weak-typing | quiz slides: presentation pdf | >>> Assign (Racket) WashU WarmUp Recursive Circles >>> Assign (Racket) WashU WarmUp Deep Lists |
Wed Nov 9 (#19) Functional Dynamic 3b | video: A Champion For C Has Arrived PL B 3 video: static-versus-dynamic-typing-part-one PL B 3 video: static-versus-dynamic-typing-part-two PL B 3 video: eval-and-quote PL B 3 video: part-b-wrap-up-and-part-c-preview | quiz slides: presentation pdf | >>> Assign (Racket) WashU WarmUp Dynamic Binary Int Tree >>> Assign (Racket) WashU WarmUp Dynamic Spreadsheet |
Sat Nov 12 | <<< Submit (Racket) UW Exercise MUPL <<< Submit (Racket) WashU Exercise MUPL Programs | ||
Mon Nov 14 (#20) OOP Dynamic 1a | PL C 1 reading: section-8-welcome-message PL C 1 reading: section-8-reading-notes PL C 1 video: introduction-to-ruby PL C 1 video: classes-and-objects PL C 1 video: object-state PL C 1 video: visibility PL C 1 video: a-longer-example PL C 1 video: everything-is-an-object PL C 1 video: class-definitions-are-dynamic PL C 1 video: duck-typing | quiz slides: presentation pdf | >>> Assign (Ruby) WashU Exercise Render Part A |
Wed Nov 16 (#21) OOP Dynamic 1b | PL C 1 video: arrays PL C 1 video: blocks PL C 1 video: using-blocks PL C 1 video: procs PL C 1 video: hashes-and-ranges | quiz slides: presentation pdf | >>> Assign (Ruby) WashU WarmUp Home Is Where The (Ruby) Heart Is >>> Assign (Ruby) WashU WarmUp Powers of 2 Range >>> Assign (Ruby) UW Exercise Tetris |
Sat Nov 19 | |||
Mon Nov 21 (#22) OOP Dynamic 1c | video: Composition vs Inheritance PL C 1 video: subclassing PL C 1 video: why-use-subclassing PL C 1 video: overriding-and-dynamic-dispatch PL C 1 video: method-lookup-rules-precisely PL C 1 video: dynamic-dispatch-versus-closures PL C 1 video: dynamic-dispatch-manually-in-racket | quiz slides: presentation pdf | >>> Assign (Ruby) WashU Exercise Render Part B |
Wed Nov 23 Thanksgiving (No Class) | |||
Sat Nov 26 | <<< Submit (Ruby) WashU Exercise Render Part A | ||
Mon Nov 28 (#23) OOP Dynamic 2a | video: The Matrix: Blue Pill or Red Pill video: The Matrix: Jump Program PL C 2 reading: section-9-welcome-message PL C 2 reading: section-9-reading-notes PL C 2 video: oop-versus-functional-decomposition PL C 2 video: adding-operations-or-variants PL C 2 video: binary-methods-with-functional-decomposition PL C 2 video: double-dispatch PL C 2 video: multimethods | quiz slides: presentation pdf | >>> Assign (Ruby) WashU Exercise Render Part C |
Wed Nov 30 (#24) OOP Dynamic 2b | PL C 2 video: multiple-inheritance PL C 2 video: mixins PL C 2 video: interfaces PL C 2 video: abstract-methods | quiz slides: presentation pdf | >>> Assign (Ruby + SML) UW Exercise Geometry Language >>> Assign (Ruby) WashU Exercise Render Part D |
Sat Dec 3 | <<< Submit (Ruby) WashU Exercise Render Part B | ||
Mon Dec 5 (#25) OOP Dynamic 3; The Computer Revolution Hasn't Happened Yet; Kingdom of Nouns; OOP Static 2: Interfaces, Classes, Inheritance, Final, Override | video: Alan Kay OOPSLA 1997 xkcd: The General Problem Read: Execution in the Kingdom of Nouns Read: Java Interfaces Read: Java Inheritance PL C 3 reading: section-10-welcome-message PL C 3 reading: section-10-reading-notes PL C 3 video: subtyping-from-the-beginning PL C 3 video: the-subtype-relation PL C 3 video: depth-subtyping PL C 3 video: java-c-arrays PL C 3 video: function-subtyping PL C 3 video: subtyping-for-oop PL C 3 video: generics-versus-subtyping PL C 3 video: bounded-polymorphism PL C 3 video: summarizing-all-we-have-learned PL C 3 video: saying-good-bye | quiz slides: presentation pdf | >>> Assign (Ruby) WashU WarmUp Text File Writer >>> Assign (Ruby) WashU Exercise Branch >>> Assign (Java) WashU WarmUp Iterable Range >>> Assign (Java) WashU Exercise Iterable ImList<E> |
Wed Dec 7 (#26) Mostly Wrong History; OOP Static 3: Producer Extends Consumer Super; Teach Yourself Programming in Ten Years | xkcd: Good Code Read: A Brief, Incomplete, and Mostly Wrong History of Programming Languages Read: Uber Programming Languages Story Read: Producer Extends, Consumer Super Read: Teach Yourself Programming in Ten Years (Norvig) Read: How to Teach Yourself Programming (Abstruse Goose) | quiz slides: presentation pdf | >>> Assign (Racket) WashU WarmUp IBPL |
Sat Dec 10 | <<< Submit (Ruby) UW Exercise Tetris <<< Submit (Ruby) WashU Exercise Render Part C <<< Submit (Ruby) WashU Exercise Render Part D | ||
Sat Dec 17 | <<< Submit (Ruby + SML) UW Exercise Geometry Language <<< Submit (Ruby) WashU Exercise Branch <<< Submit (Java) WashU Exercise Iterable ImList<E> |