|   | ||||
| Aug 24-Aug 30 | ||||
| Aug 31-Sep 06 | Sep 07-Sep 13 | Sep 14-Sep 20 | Sep 21-Sep 27 | Sep 28-Oct 04 |
| Oct 05-Oct 11 | <-- Fall Break | Oct 12-Oct 18 | Oct 19-Oct 25 | Oct 26-Nov 01 |
| Nov 02-Nov 08 | Nov 09-Nov 15 | Nov 16-Nov 22 | Nov 23-Nov 29 | <-- Thanksgiving |
| Nov 30-Dec 06 |
| Date/Subject | Prep | In Class | Assignments |
|---|---|---|---|
| Tue Aug 26 (#0) Welcome; Setup | slides: presentation pdf | ||
| Thu Aug 28 (#1) Functional Static 1a | xkcd: Editors![]() Courses and Software Setup Grossman video: 003-expressions-and-variables Grossman video: 004-rules-for-expressions Grossman video: 005-REPL-and-errors Grossman video: 006-shadowing Grossman video: 007-functions-informally Grossman video: 008-functions-formally Grossman video: 009-tuples Grossman video: 010-lists Grossman video: 011-list-functions Grossman video: 012-let-expressions Grossman video: 013-nested-functions Grossman video: 014-let-efficiency video: Making Sense of SML Error Output video: Synthesizing Information | worksheet slides: presentation pdf | >>> Assign (SML) WashU WarmUp List Length >>> Assign (SML) WashU WarmUp To Squares with Functions >>> Assign (SML) WashU Exercise Sum Distances To Origin with Functions |
| Tue Sep 2 (#2) Functional Static 1b | xkcd: Side Effect Free![]() video: Shards O' Glass Freeze Pops Grossman video: 015-options Grossman video: 016-booleans Grossman video: 017-no-mutation Grossman video: 018-java-mutation | worksheet slides: presentation pdf | >>> Assign (SML) WashU WarmUp Is Strictly Ascending with Functions >>> Assign (SML) WashU WarmUp Sum Scan with Functions >>> Assign (SML) WashU Exercise Closest To Origin >>> Assign (SML) UW Exercise Calendar Date |
| Thu Sep 4 (#3) Functional Static 2a | Grossman video: 019-language-pieces Grossman video: 020-build-new-types Grossman video: 021-records Grossman video: 022-tuples-as-syntactic-sugar Grossman video: 023-datatype-bindings Grossman video: 024-case-expressions Grossman video: 025-useful-datatypes Grossman video: 026-precise-pattern-matching-sofar Grossman video: 027-type-synonyms Grossman video: 028-another-expression-example Grossman video: 029-list-and-option-datatypes | worksheet slides: presentation pdf | >>> Assign (SML) WashU WarmUp To Squares with Pattern Matching >>> Assign (SML) WashU WarmUp Sum Scan with Pattern Matching >>> Assign (SML) WashU WarmUp Is Strictly Ascending with Pattern Matching >>> Assign (SML) WashU WarmUp Remove First Occurrence >>> Assign (SML) WashU Exercise Eliminate Unsorted |
| Sat Sep 6 | <<< Submit (SML) WashU Exercise Sum Distances To Origin with Functions | ||
| Tue Sep 9 (#4) Functional Static 2b | Grossman video: 030-polymorphic-datatypes Grossman video: 031-eachof-pattern-matching Grossman video: 032-type-inference Grossman video: 033-polymorphic-and-equality-types Grossman video: 034-nested-patterns Grossman video: 035-more-nested-patterns Grossman video: 036-nested-patterns-precisely Grossman video: 037-function-patterns | worksheet slides: presentation pdf | >>> Assign (SML) WashU WarmUp Sum Distances To Origin with Nested Pattern Matching >>> Assign (SML) WashU Exercise Hearts Card Game |
| Thu Sep 11 (#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 ![]() Grossman video: 038-exceptions Grossman video: 039-tail-recursion Grossman video: 040-accumulators Grossman video: 041-tail-recursion-perspective | worksheet slides: presentation pdf | >>> Assign (SML) WashU WarmUp Sum Distances To Origin with Tail Recursion >>> Assign (SML) WashU WarmUp Sum Scan with Tail Recursion >>> Assign (SML) UW Exercise Card Game |
| Sat Sep 13 | <<< Submit (SML) WashU Exercise Closest To Origin <<< Submit (SML) UW Exercise Calendar Date <<< Submit (SML) WashU Exercise Eliminate Unsorted | ||
| Tue Sep 16 (#6) Functional Static 3a | Grossman video: 042-functions-intro Grossman video: 043-functions-as-arguments Grossman video: 044-functions-and-types Grossman video: 045-anonymous-functions Grossman video: 046-unnecessary-function-wrapping Grossman video: 047-map-and-filter Grossman video: 048-generalizing-prior-topics | worksheet slides: presentation pdf | >>> Assign (SML) WashU WarmUp To Squares using Higher-Order Functions >>> Assign (SML) WashU WarmUp Sum Distances To Origin using Higher-Order Functions |
| Thu Sep 18 (#7) Story of Your Life; Functional Static 3b | Read: Story of Your Life xkcd: College Athletes ![]() video: UW3 Pattern Matching Rosetta Stone Grossman video: 049-lexical-scope Grossman video: 050-lexical-scope-and-functions Grossman video: 051-why-lexical-scope Grossman video: 052-closures-and-recomputation Grossman video: 053-fold-and-more-closures Grossman video: 054-combining-functions Grossman video: 055-currying Grossman video: 056-partial-application Grossman video: 057-currying-wrapup | worksheet slides: presentation pdf | >>> Assign (SML) WashU Group WarmUp Curried Higher-Order Function Debugging >>> Assign (SML) WashU Exercise Spreadsheet >>> Assign (SML) UW Exercise Pattern Matching |
| Sat Sep 20 | <<< Submit (SML) WashU Exercise Hearts Card Game <<< Submit (SML) UW Exercise Card Game | ||
| Tue Sep 23 (#8) Functional Static 3c; Course Motivation | xkcd: Standards![]() Grossman video: 058-mutable-references Grossman video: 059-callbacks Grossman video: 060-library-docs Grossman video: 061-adts-with-closures Grossman video: 062-without-closures Grossman video: 063-java-without-closures Grossman video: 064-c-without-closures Grossman video: m1-motivation-intro Grossman video: m2-motivation-general Grossman video: m3-pls-the-same Grossman video: m4-why-functional Grossman video: m5-why-these-languages | worksheet slides: presentation pdf | >>> Assign (SML) WashU WarmUp Sum Scan without Leveraging Identity Element >>> Assign (SML) WashU Exercise Scan Higher Order Function |
| Thu Sep 25 (#9) Functional Static 4a | xkcd: Haskell![]() video: How To Use Refs In SML Grossman video: 065-section-introduction Grossman video: 066-what-is-type-inference Grossman video: 067-ml-type-inference Grossman video: 068-type-inference-examples Grossman video: 069-polymorphic-examples Grossman video: 070-other-inference Grossman video: 071-mutual-recursion | worksheet slides: presentation pdf | >>> Assign (SML) WashU WarmUp Concat & Length O(1) List |
| Sat Sep 27 | <<< Submit (SML) WashU Exercise Spreadsheet <<< Submit (SML) UW Exercise Pattern Matching | ||
| Tue Sep 30 (#10) Functional Static 4b | xkcd: Workflow![]() video: Binary Search Tree Client Demo Grossman video: 072-namespace-mgmt Grossman video: 073-signatures Grossman video: 074-module-example Grossman video: 075-signatures-for-example Grossman video: 076-signature-matching Grossman video: 077-equivalent-structure Grossman video: 078-another-equivalent-structure Grossman video: 079-modules-different-types Grossman video: 080-function-equivalence Grossman video: 081-standard-equivalences Grossman video: 082-equivalence-performance | worksheet slides: presentation pdf | >>> Assign (SML) WashU WarmUp Binary Int Tree >>> Assign (SML) WashU Exercise Binary Search Tree |
| Thu Oct 2 (#11) Functors | worksheet slides: presentation pdf | >>> Assign (SML) WashU Exercise Chained (Single List and Hashed) Dictionaries >>> Assign (Java) WashU Exercise ImList<E> | |
| Sat Oct 4 | <<< Submit (SML) WashU Exercise Scan Higher Order Function | ||
| Tue Oct 7 Fall Break (No Class) | |||
| Thu Oct 9 (#12) Sorted Dictionary | video: Sorted Dictionary Scenario | worksheet slides: presentation pdf | >>> Assign (SML) WashU Exercise Sorted Dictionary >>> Assign (Java) WashU Exercise java.util.Optional<T> >>> Assign (Java) WashU WarmUp Sum Distances To Origin >>> Assign (Java) WashU Exercise Tail Recursion |
| Sat Oct 11 | <<< Submit (SML) WashU Exercise Binary Search Tree <<< Submit (SML) WashU Exercise Chained (Single List and Hashed) Dictionaries <<< Submit (Java) WashU Exercise ImList<E> | ||
| Tue Oct 14 (#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) | worksheet slides: presentation pdf | >>> Assign (SML) WashU Exercise Spreadsheet To Dictionaries >>> Assign (Java) WashU Group WarmUp Any and All >>> Assign (Java) WashU WarmUp N Times >>> Assign (Java) WashU Exercise Higher Order Functions Hall of Fame |
| Thu Oct 16 (#14) Functional Dynamic 1a | xkcd: (Parentheses)![]() Read: Low-fidelity Prototyping (Optional) Wikipedia: L-system Grossman video: 083-racket-intro Grossman video: 084-racket-basics Grossman video: 085-racket-lists Grossman video: 086-syntax-and-parens Grossman video: 087-parens-matter Grossman video: 088-dynamic-typing Grossman video: 089-cond Grossman video: 090-local-bindings Grossman video: 091-toplevel-bindings video: Making Sense of Dr Racket Error Output video: Racket Image Library Demo: Snowdudes video: Racket Image Library Recursive Demo: Spiral | worksheet slides: presentation pdf | >>> Assign (Racket) WashU Group WarmUp Racket Debug A >>> Assign (Racket) WashU WarmUp Home Is Where The (Racket) Heart Is |
| Sat Oct 18 | <<< Submit (SML) WashU Exercise Sorted Dictionary <<< Submit (Java) WashU Exercise java.util.Optional<T> <<< Submit (Java) WashU Exercise Tail Recursion | ||
| Tue Oct 21 (#15) Functional Dynamic 1b | xkcd: Universe![]() video: Are C Macros Really That Bad? video: Thunk That Scenario Grossman video: 092-setbang Grossman video: 093-truth-about-cons Grossman video: 094-mcons Grossman video: 095-thunks Grossman video: 096-avoid-computations Grossman video: 097-delay-and-force Grossman video: 098-using-streams Grossman video: 099-defining-streams Grossman video: 100-memoization Grossman video: 101-macros-intro Grossman video: 102-three-issues Grossman video: 103-define-syntax Grossman video: 104-hygiene Grossman video: 105-macro-examples | worksheet slides: presentation pdf | >>> Assign (Racket) WashU WarmUp Recursive Circles >>> Assign (Racket) WashU Exercise Sierpiński >>> Assign (Racket) WashU WarmUp Thunks and Streams >>> Assign (Racket) UW Exercise Streams |
| Thu Oct 23 (#16) Functional Dynamic 2a | Read: Fire and Ice by Robert Frost xkcd: Perl or Lisp ![]() Grossman video: 106-section-topics Grossman video: 107-datatypes-without-structs Grossman video: 108-datatypes-with-structs Grossman video: 109-why-structs | worksheet slides: presentation pdf | >>> Assign (Racket) WashU WarmUp Interact >>> Assign (Racket) WashU Exercise Cantor |
| Sat Oct 25 | <<< Submit (SML) WashU Exercise Spreadsheet To Dictionaries <<< Submit (Java) WashU Exercise Higher Order Functions Hall of Fame | ||
| Tue Oct 28 (#17) Functional Dynamic 2b | Grossman video: 110-implement-a-language Grossman video: 111-interpreter-assumptions Grossman video: 112-implementing-variables Grossman video: 113-implementing-closures Grossman video: 114-closures-efficient Grossman video: 115-macros-via-functions | worksheet slides: presentation pdf | >>> Assign (Racket) WashU Exercise IBPL List Converter >>> Assign (Racket) WashU Exercise Snowflake |
| Thu Oct 30 (#18) Functional Dynamic 2c | video: Reverse Stream Scenario video: Reverse Stream Scenario Responses Grossman video: 116-ml-vs-racket Grossman video: 117-what-is-static-checking Grossman video: 118-soundness-completeness Grossman video: 119-weak-typing | worksheet slides: presentation pdf | >>> Assign (Racket) WashU WarmUp Deep Lists >>> Assign (Racket) WashU Exercise IBPL Interpreter |
| Sat Nov 1 | <<< Submit (Racket) WashU Exercise Sierpiński <<< Submit (Racket) UW Exercise Streams <<< Submit (Racket) WashU Exercise Cantor | ||
| Tue Nov 4 (#19) Functional Dynamic 2d | video: A Champion For C Has Arrived Grossman video: 120-static-vs-dynamic-one Grossman video: 121-static-vs-dynamic-two Grossman video: 122-eval | worksheet slides: presentation pdf | >>> Assign (Racket) WashU WarmUp Dynamic Binary Int Tree >>> Assign (Racket) WashU WarmUp Dynamic Spreadsheet >>> Assign (Racket) WashU Exercise IBPL Functions and Macros |
| Thu Nov 6 (#20) OOP Dynamic 1a | Grossman video: 123-ruby-intro Grossman video: 124-classes-objects Grossman video: 125-object-state Grossman video: 126-visibility Grossman video: 127-example Grossman video: 128-all-objects Grossman video: 129-classes-dynamic Grossman video: 130-duck-typing | worksheet slides: presentation pdf | >>> Assign (Ruby) WashU Exercise Render Part A |
| Sat Nov 8 | <<< Submit (Racket) WashU Exercise IBPL List Converter <<< Submit (Racket) WashU Exercise Snowflake <<< Submit (Racket) WashU Exercise IBPL Interpreter | ||
| Tue Nov 11 (#21) OOP Dynamic 1b | Grossman video: 131-arrays Grossman video: 132-blocks Grossman video: 133-using-blocks Grossman video: 134-procs Grossman video: 135-hashes-ranges | worksheet 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 |
| Thu Nov 13 (#22) OOP Dynamic 1c | video: Composition vs Inheritance Grossman video: 136-subclassing Grossman video: 137-why-subclassing Grossman video: 138-overriding Grossman video: 139-method-lookup Grossman video: 140-dynamic-dispatch-vs-closures Grossman video: 141-manual-dynamic-dispatch | worksheet slides: presentation pdf | >>> Assign (Ruby) WashU Exercise Render Part B |
| Sat Nov 15 | <<< Submit (Racket) WashU Exercise IBPL Functions and Macros <<< Submit (Ruby) WashU Exercise Render Part A | ||
| Tue Nov 18 (#23) OOP Dynamic 2a | video: The Matrix: Blue Pill or Red Pill video: The Matrix: Jump Program Grossman video: 142-fp-oo-decomposition Grossman video: 143-adding-operations-or-variants Grossman video: 144-binary-methods-fp Grossman video: 145-double-dispatch Grossman video: 146-multimethods | worksheet slides: presentation pdf | >>> Assign (Ruby) WashU Exercise Render Part C |
| Thu Nov 20 (#24) OOP Dynamic 2b | Grossman video: 147-multiple-inheritance Grossman video: 148-mixins Grossman video: 149-interfaces Grossman video: 150-abstract-methods | worksheet slides: presentation pdf | >>> Assign (Ruby) WashU WarmUp Powers of 2 Range Enumerable Mixin >>> Assign (Ruby + SML) UW Exercise Geometry Language >>> Assign (Ruby) WashU Exercise Render Part D |
| Sat Nov 22 | <<< Submit (Ruby) UW Exercise Tetris <<< Submit (Ruby) WashU Exercise Render Part B | ||
| Tue Nov 25 (#25) OOP Dynamic 2c; 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 Grossman video: 151-subtyping Grossman video: 152-subtype-relation Grossman video: 153-depth-subtyping Grossman video: 154-java-arrays Grossman video: 155-function-subtyping Grossman video: 156-object-subtyping Grossman video: 157-generics-versus-subtyping Grossman video: 158-bounded-polymorphism | worksheet 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> |
| Thu Nov 27 Thanksgiving (No Class) | |||
| Tue Dec 2 (#26) Mostly Wrong History; OOP Static 3: Producer Extends Consumer Super | Read: A Brief, Incomplete, and Mostly Wrong History of Programming Languages Read: Producer Extends, Consumer Super | worksheet slides: presentation pdf | |
| Thu Dec 4 (#27) 1984; Teach Yourself Programming in Ten Years | xkcd: Good Code![]() Read: Uber Programming Languages Story Read: Programming Types and Mindsets Read: Teach Yourself Programming in Ten Years (Norvig) Read: How to Teach Yourself Programming (Abstruse Goose) Read: Chapters 1-5 (inclusive) of 1984 | worksheet slides: presentation pdf | |
| Sat Dec 6 | <<< Submit (Ruby) WashU Exercise Render Part C <<< Submit (Ruby + SML) UW Exercise Geometry Language <<< Submit (Ruby) WashU Exercise Render Part D <<< Submit (Ruby) WashU Exercise Branch <<< Submit (Java) WashU Exercise Iterable ImList<E> | ||
| Sat Dec 13 |