Skip to main content

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

  1. Course motivation and overview
  2. Course organization
  3. Our first paradigm: functional programming
  4. Mozart as a calculator; identifiers and variables
  5. Single assignment in the functional paradigm
  6. Static scope and identifier redeclaration
  7. Functions and numbers
  8. Functions that call other functions: composition and recursion

Lesson 2: Recursion, loops, and invariant programming

  1. Overview of invariant programming
  2. Factorial with communicating vases
  3. Sum of digits with communicating vases
  4. The golden rule of tail recursion
  5. Invariant programming to calculate powers

Lesson 3: Lists and pattern matching

  1. Defining lists with grammar rules
  2. Useful representations for lists
  3. Pattern matching
  4. List functions and the kernel language

Lesson 4: Higher-order programming and records

  1. Contextual environment
  2. Procedure values
  3. Examples of higher-order programming
  4. Records
  5. Full Kernel Language

Lesson 5: Trees

  1. Introduction to trees
  2. Ordered Binary Trees
  3. Search Trees and Lookup
  4. Insert function
  5. Balanced trees
  6. Delete function
  7. Goal-oriented programming

Lesson 6: Correctness and semantics

  1. Overview of correctness and semantics
  2. Proving a program is correct using the semantics
  3. The abstract machine
  4. An example execution in the abstract machine
  5. Supplementary slides (not used in a video): Calculations with environments
  6. Semantic rule for each instruction
  7. Procedure definition and call semantics
  8. Semantics: the ultimate programming tool

Lesson 7: Explicit state and data abstraction

  1. State as an abstract time
  2. Adding state to the language
  3. Structure equality and token equality
  4. Cell semantics and kernel language
  5. State and modularity
  6. Encapsulation and data abstraction
  7. Abstract data types
  8. Objects
  9. Summary of data abstractions

Lesson 8: Object-oriented programming

  1. The big picture: what is object-oriented programming?
  2. The small picture: what is an object?
  3. From simple objects to object-oriented programming
  4. What is a class?
  5. Polymorphism
  6. Inheritance and two recommendations
  7. Example of the substitution principle
  8. Whither object-oriented programming?

Lesson 9: Java, multiple inheritance, and exceptions

  1. Introduction to Java
  2. Characteristics of Java
  3. Examples of Java semantics
  4. Classes in Java
  5. Multiple inheritance and Java interfaces
  6. Handling exceptional situations
  7. Example of exceptions
  8. Exceptions in Java
  9. Final remarks

Lesson 10: Deterministic dataflow introduction

  1. Introduction to concurrent programming
  2. What is deterministic dataflow
  3. Threads
  4. Streams and agents
  5. Nondeterminism
  6. Summary of deterministic dataflow

Lesson 11: Deterministic dataflow techniques

  1. Concurrency transparency
  2. A for loop that collects results
  3. Sieve of Eratosthenes
  4. Semantics of concurrency
  5. Modeling digital logic circuits
  6. Combinational logic
  7. Sequential logic
  8. Summary of deterministic dataflow

Lesson 12: Multiagent dataflow programming

  1. Agents and message-passing concurrency
  2. Ports (named streams)
  3. Stateless agents
  4. Message sending
  5. Agents with state
  6. Agent protocols
  7. Contract nets
  8. Active objects

Code: Lifts example

Lesson 13: Paradigms of computer programming redux

  1. Paradigms of this course
  2. The paradigm jungle
  3. Invent a new paradigm
  4. The paradigm paradox
  5. Summary of the course