CSE 425s: Programming Languages (Fall 2024)

This course leverages the outstanding materials from Dan Grossman and others at the University of Washington.

 
Aug 25-Aug 31
Sep 01-Sep 07 Sep 08-Sep 14 Sep 15-Sep 21 Sep 22-Sep 28 Sep 29-Oct 05
Oct 06-Oct 12 <-- Fall Break Oct 13-Oct 19 Oct 20-Oct 26 Oct 27-Nov 02
Nov 03-Nov 09 Nov 10-Nov 16 Nov 17-Nov 23 Nov 24-Nov 30 <-- Thanksgiving
Dec 01-Dec 07

Date/SubjectPrepIn ClassAssignments
       
       
Tue Aug 27 (#0)
Welcome; Setup; OOP Static 1
slides: presentation pdf
       
Thu Aug 29 (#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
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 3 (#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
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 5 (#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
PL A 2 video: type-synonyms
PL A 2 video: lists-and-options-are-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 7
<<< Submit (SML) WashU Exercise Sum Distances To Origin with Functions
       
       
Tue Sep 10 (#4)
Functional Static 2b
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
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 12 (#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
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 14
<<< Submit (SML) WashU Exercise Closest To Origin
<<< Submit (SML) UW Exercise Calendar Date
<<< Submit (SML) WashU Exercise Eliminate Unsorted
       
       
Tue Sep 17 (#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
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 19 (#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
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 21
<<< Submit (SML) WashU Exercise Hearts Card Game
<<< Submit (SML) UW Exercise Card Game
       
       
Tue Sep 24 (#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
worksheet
slides: presentation pdf
>>> Assign (SML) WashU WarmUp Sum Scan without Leveraging Identity Element
>>> Assign (SML) WashU Exercise Scan Higher Order Function
       
Thu Sep 26 (#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
worksheet
slides: presentation pdf
>>> Assign (SML) WashU WarmUp Concat & Length O(1) List
       
Sat Sep 28
<<< Submit (SML) WashU Exercise Spreadsheet
<<< Submit (SML) UW Exercise Pattern Matching
       
       
Tue Oct 1 (#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
worksheet
slides: presentation pdf
>>> Assign (SML) WashU WarmUp Binary Int Tree
>>> Assign (SML) WashU Exercise Binary Search Tree
       
Thu Oct 3 (#11)
Functors
worksheet
slides: presentation pdf
>>> Assign (SML) WashU Exercise Chained (Single List and Hashed) Dictionaries
>>> Assign (Java) WashU Exercise ImList<E>
       
Sat Oct 5
<<< Submit (SML) WashU Exercise Scan Higher Order Function
       
       
Tue Oct 8
Fall Break (No Class)
       
Thu Oct 10 (#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 12
<<< 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 15 (#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 17 (#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
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 19
<<< Submit (SML) WashU Exercise Sorted Dictionary
<<< Submit (Java) WashU Exercise java.util.Optional<T>
<<< Submit (Java) WashU Exercise Tail Recursion
       
       
Tue Oct 22 (#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
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 24 (#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
worksheet
slides: presentation pdf
>>> Assign (Racket) WashU WarmUp Interact
>>> Assign (Racket) WashU Exercise Cantor
       
Sat Oct 26
<<< Submit (SML) WashU Exercise Spreadsheet To Dictionaries
<<< Submit (Java) WashU Exercise Higher Order Functions Hall of Fame
       
       
Tue Oct 29 (#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
worksheet
slides: presentation pdf
>>> Assign (Racket) WashU Exercise IBPL List Converter
>>> Assign (Racket) WashU Exercise Snowflake
       
Thu Oct 31 (#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
worksheet
slides: presentation pdf
>>> Assign (Racket) WashU WarmUp Deep Lists
>>> Assign (Racket) WashU Exercise IBPL Interpreter
       
Sat Nov 2
<<< Submit (Racket) WashU Exercise Sierpiński
<<< Submit (Racket) UW Exercise Streams
<<< Submit (Racket) WashU Exercise Cantor
       
       
Tue Nov 5 (#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
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 7 (#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
worksheet
slides: presentation pdf
>>> Assign (Ruby) WashU Exercise Render Part A
       
Sat Nov 9
<<< Submit (Racket) WashU Exercise IBPL List Converter
<<< Submit (Racket) WashU Exercise Snowflake
<<< Submit (Racket) WashU Exercise IBPL Interpreter
       
       
Tue Nov 12 (#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
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 14 (#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
worksheet
slides: presentation pdf
>>> Assign (Ruby) WashU Exercise Render Part B
       
Sat Nov 16
<<< Submit (Racket) WashU Exercise IBPL Functions and Macros
<<< Submit (Ruby) WashU Exercise Render Part A
       
       
Tue Nov 19 (#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
worksheet
slides: presentation pdf
>>> Assign (Ruby) WashU Exercise Render Part C
       
Thu Nov 21 (#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
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 23
<<< Submit (Ruby) UW Exercise Tetris
<<< Submit (Ruby) WashU Exercise Render Part B
       
       
Tue Nov 26 (#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
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 28
Thanksgiving (No Class)
       
       
       
       
Tue Dec 3 (#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 5 (#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 7
<<< 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 14