Date/Subject
Prep
In Class
Assignments
Fri Jan 17
Welcome; The Lambda Calculus; Setup; OOP Static
quiz
slides:
presentation
pdf
>>> Assign Studio
ImmutableList<E>
Wed Jan 22
<<< Submit Studio
ImmutableList<E>
Fri Jan 24
The Lambda Calculus; The Y Combinator;
xkcd:
Editors
Courses and Software Setup
video:
The Lambda Calculus
video:
Y Combinator
(Optional) Wikipedia:
Fixed-point combinator
(Optional) Wikipedia:
Church encoding
(Optional) PL A 0 reading:
start-here
(Optional) PL A 0 video:
welcome-and-some-course-mechanics
PL A 0 video:
optional-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:
optional-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
video:
Making Sense of SML Error Output
quiz
slides:
presentation
pdf
DG
slides:
pptx
pdf
DG
slides:
pptx
pdf
>>> Assign WarmUp
My Length
>>> Assign WarmUp
SML Practice Problems 1
>>> Assign Lab
Calendar Date
Fri Jan 31
Language and Thought; Functional Static 1b
Ted Talk:
Lera Boroditsky: How language shapes the way we think
video:
Numbers in Pirahã
video:
Recursion in Pirahã?
(Optional) Wikipedia:
Pirahã language
xkcd:
Side Effect Free
PL A 1 video:
let-expressions
PL A 1 video:
nested-functions
PL A 1 video:
let-and-efficiency
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:
optional-java-mutation
PL A 1 video:
pieces-of-a-language
quiz
slides:
presentation
pdf
>>> Assign Studio
java.util.Optional<T>
Sat Feb 1
<<< Submit Lab
Calendar Date
Wed Feb 5
<<< Submit Studio
java.util.Optional<T>
Fri Feb 7
1984; Functional Static 2
xkcd:
Tail Recursion
Read:
Chapters 1-5 (inclusive) of 1984
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
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:
optional-function-patterns
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 WarmUp
SML Practice Problems 2
>>> Assign Studio
Hearts Card Game
>>> Assign Studio
Tail Recursion
>>> Assign Lab
Card Game
Wed Feb 12
<<< Submit Studio
Hearts Card Game
<<< Submit Studio
Tail Recursion
Fri Feb 14
Story of Your Life; Functional Static 3a
Read:
Story of Your Life
xkcd:
College Athletes
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
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 WarmUp
N Times
>>> Assign WarmUp
SML Practice Problems 3
>>> Assign Studio
Higher Order Functions Hall of Fame
>>> Assign Lab
Pattern Matching
Sat Feb 15
>>> Assign Studio
Extra HOF
<<< Submit Lab
Card Game
Wed Feb 19
<<< Submit Studio
Higher Order Functions Hall of Fame
<<< Submit Studio
Extra HOF
Fri Feb 21
Functional Static 3b and Course Motivation
xkcd:
Haskell
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:
optional-abstract-data-types-with-closures
PL A 3 video:
optional-closure-idioms-without-closures
PL A 3 video:
optional-java-without-closures
PL A 3 video:
optional-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 Studio
Binary Tree
Sat Feb 22
<<< Submit Lab
Pattern Matching
Wed Feb 26
<<< Submit Studio
Binary Tree
Fri Feb 28
Functional Static 4
xkcd:
Workflow
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:
optional-the-value-restriction-and-other-type-inference-challenges
PL A 4 video:
mutual-recursion
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 Studio
Single List and Hashtable Dictionaries
>>> Assign Studio
Sorted Dictionary
Wed Mar 4
<<< Submit Studio
Single List and Hashtable Dictionaries
<<< Submit Studio
Sorted Dictionary
Fri Mar 6
FUNCTIONAL STATIC EXAM
Fri Mar 13
Spring Break (No Class)
Fri Mar 20
Spring Break (No Class)
Wed Mar 25
Fri Mar 27
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
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:
optional-tokenization-parenthesization-and-scope
PL B 1 video:
optional-racket-macros-with-define-syntax
PL B 1 video:
optional-variables-macros-and-hygiene
PL B 1 video:
optional-more-macro-examples
quiz
slides:
presentation
pdf
video:
SortedDictionary Scenario
video:
SortedDictionary Scenario Responses
video:
Making Sense of Dr Racket Error Output
video:
Racket Image Library Demo
video:
Are C Macros That Bad?
video lecture
video:
ThunkThat
>>> Assign WarmUp
Home Is Where The Heart Is
>>> Assign Studio
Sierpiński and Cantor
>>> Assign WarmUp
Thunks and Streams
>>> Assign Lab
Streams
Wed Apr 1
<<< Submit Studio
Sierpiński and Cantor
Fri Apr 3
Functional Dynamic 2
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
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:
optional-are-closures-efficient
PL B 2 video:
racket-functions-as-macros-for-interpreted-language
quiz
slides:
presentation
pdf
video:
Reverse Stream Scenario
>>> Assign Studio
MUPL Programs
>>> Assign Lab
MUPL
Sat Apr 4
<<< Submit Lab
Streams
Wed Apr 8
<<< Submit Studio
MUPL Programs
Fri Apr 10
Functional Dynamic 3
xkcd:
Perl or Lisp
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
PL B 3 video:
static-versus-dynamic-typing-part-one
PL B 3 video:
static-versus-dynamic-typing-part-two
PL B 3 video:
optional-eval-and-quote
PL B 3 video:
part-b-wrap-up-and-part-c-preview
quiz
slides:
presentation
pdf
video lecture play list
>>> Assign Studio
Branch and Snowflake
Sat Apr 11
<<< Submit Lab
MUPL
Wed Apr 15
<<< Submit Studio
Branch and Snowflake
Fri Apr 17
The Computer Revolution Hasn't happened yet; OOP Dynamic 1
xkcd:
The General Problem
video:
Alan Kay OOPSLA 1997
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
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
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:
optional-dynamic-dispatch-manually-in-racket
quiz
slides:
presentation
pdf
video lecture play list
>>> Assign Studio
Render Part A
>>> Assign Studio
Render Part B
>>> Assign Lab
Tetris
Wed Apr 22
<<< Submit Studio
Render Part A
<<< Submit Studio
Render Part B
Fri Apr 24
Kingdom of Nouns; Mostly Wrong History; OOP Dynamic 2 & 3; OOP Static; Course Review
read:
A Brief, Incomplete, and Mostly Wrong History of Programming Languages
read:
Execution in the Kingdom of Nouns
Read:
Java Interfaces
Read:
Java Inheritance
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:
optional-multimethods
PL C 2 video:
multiple-inheritance
PL C 2 video:
mixins
PL C 2 video:
interfaces
PL C 2 video:
optional-abstract-methods
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:
optional-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
video lecture play list
>>> Assign Studio
Iterable ImmutableList<E>
>>> Assign Studio
Render Part C
>>> Assign Studio
Render Part D
>>> Assign Lab
Geometry Language
Sat Apr 25
<<< Submit Lab
Tetris
Wed Apr 29
<<< Submit Studio
Iterable ImmutableList<E>
<<< Submit Studio
Render Part C
<<< Submit Studio
Render Part D
Sat May 2
<<< Submit Lab
Geometry Language
Tue May 5
FUNCTIONAL DYNAMIC AND OOP DYNAMIC EXAM