This page allows you to download the slides that are used in the course. You can get the set of slides that are presented in all the videos of each lesson. It is as simple as clicking on the links below.
Lesson 1: Introduction
- Course motivation and overview
- Course organization
- Our first paradigm: functional programming
- Mozart as a calculator; identifiers and variables
- Single assignment in the functional paradigm
- Static scope and identifier redeclaration
- Functions and numbers
- Functions that call other functions: composition and recursion
Lesson 2: Recursion, loops, and invariant programming
- Overview of invariant programming
- Factorial with communicating vases
- Sum of digits with communicating vases
- The golden rule of tail recursion
- Invariant programming to calculate powers
Lesson 3: Lists and pattern matching
- Defining lists with grammar rules
- Useful representations for lists
- Pattern matching
- List functions and the kernel language
Lesson 4: Higher-order programming and records
- Contextual environment
- Procedure values
- Examples of higher-order programming
- Records
- Full Kernel Language
Lesson 5: Trees
- Introduction to trees
- Ordered Binary Trees
- Search Trees and Lookup
- Insert function
- Balanced trees
- Delete function
- Goal-oriented programming
Lesson 6: Correctness and semantics
- Overview of correctness and semantics
- Proving a program is correct using the semantics
- The abstract machine
- An example execution in the abstract machine
- Supplementary slides (not used in a video): Calculations with environments
- Semantic rule for each instruction
- Procedure definition and call semantics
- Semantics: the ultimate programming tool
Lesson 7: Explicit state and data abstraction
- State as an abstract time
- Adding state to the language
- Structure equality and token equality
- Cell semantics and kernel language
- State and modularity
- Encapsulation and data abstraction
- Abstract data types
- Objects
- Summary of data abstractions
Lesson 8: Object-oriented programming
- The big picture: what is object-oriented programming?
- The small picture: what is an object?
- From simple objects to object-oriented programming
- What is a class?
- Polymorphism
- Inheritance and two recommendations
- Example of the substitution principle
- Whither object-oriented programming?
Lesson 9: Java, multiple inheritance, and exceptions
- Introduction to Java
- Characteristics of Java
- Examples of Java semantics
- Classes in Java
- Multiple inheritance and Java interfaces
- Handling exceptional situations
- Example of exceptions
- Exceptions in Java
- Final remarks
Lesson 10: Deterministic dataflow introduction
- Introduction to concurrent programming
- What is deterministic dataflow
- Threads
- Streams and agents
- Nondeterminism
- Summary of deterministic dataflow
Lesson 11: Deterministic dataflow techniques
- Concurrency transparency
- A for loop that collects results
- Sieve of Eratosthenes
- Semantics of concurrency
- Modeling digital logic circuits
- Combinational logic
- Sequential logic
- Summary of deterministic dataflow
Lesson 12: Multiagent dataflow programming
- Agents and message-passing concurrency
- Ports (named streams)
- Stateless agents
- Message sending
- Agents with state
- Agent protocols
- Contract nets
- Active objects
Code: Lifts example