Reference and Selective Reading
You do not need to read SICP front-to-back for this module. Use the concept and practice pages first. Open these local chunks only when you need alternate exposition, worked examples, or depth on a specific step.
Source Roles
| Source | Role | Why it is here |
|---|---|---|
| SICP (Abelson, Sussman, Sussman) | Primary teaching source | The spine of every cluster. All primary concepts point to specific SICP sections |
| The C Programming Language (K&R) | Contrast | Shows what "no closures, no first-class procedures" looks like and why abstractions in C are awkward |
| Computer Organization and Design (Patterson & Hennessy) | Contrast | Where interpretation bottoms out in real machines (relevant to Concept 12) |
| Norvig -- lispy (external) | Primary external | The minimal-viable interpreter in Python, directly supports Concepts 10 and 11 |
| Nystrom -- Crafting Interpreters (external) | Primary external | A full treatment of tree-walking and bytecode VMs |
| MIT Press SICP online (external) | Authoritative external | Canonical source for any SICP passage |
Read Only If Stuck
Cluster 1: Abstraction as the Engineering Move
- SICP 1.1 The elements of programming
- SICP 1.1.2 Naming and the environment
- SICP 1.1.4 Compound procedures
- SICP 1.1.7 Square roots by Newton's method
- SICP 1.1.8 Procedures as black-box abstractions
- SICP 2.1 Introduction to data abstraction
- SICP 2.1.2 Abstraction barriers
- SICP 2.1.2 Abstraction barriers (part 2)
- SICP 2.2 Hierarchical data and the closure property
- SICP 2.4 Multiple representations for abstract data
- SICP 2.4.1 Representations for complex numbers
- SICP 5.1.2 Abstraction in machine design
- K&R: Basics of functions
- K&R: Scope rules
- K&R: Basics of structures
- K&R: typedef
Cluster 2: Higher-Order Procedures and Closures
- SICP 1.3 Formulating abstractions with higher-order procedures
- SICP 1.3.1 Procedures as arguments
- SICP 1.3.2 Constructing procedures using lambda
- SICP 1.3.3 Procedures as general methods
- SICP 1.3.4 Procedures as returned values
- SICP 1.3.4 Procedures as returned values (part 2)
- SICP 1.3.4 Procedures as returned values (part 3)
- SICP 2.2.1 Representing sequences
- SICP 2.2.3 Sequences as conventional interfaces
- SICP 2.2.3 Sequences as conventional interfaces (part 2)
- SICP 3.1.1 Local state variables
- SICP 3.2.3 Frames as the repository of local state
- K&R: Pointers to functions
Cluster 3: Evaluation Models
- SICP 1.1.5 The substitution model
- SICP 1.2 Procedures and the processes they generate
- SICP 1.2.2 Tree recursion
- SICP 3.2 The environment model of evaluation
- SICP 3.2.1 The rules for evaluation
- SICP 3.2.2 Applying simple procedures
- SICP 3.2.4 Internal definitions
- SICP 4.2 Variations on a Scheme -- lazy evaluation
- SICP 4.2.2 An interpreter with lazy evaluation
- SICP 5.1.4 Using a stack to implement recursion
- SICP 5.4.2 Sequence evaluation and tail recursion
Cluster 4: Metacircular and Interpreter Design
- SICP 4.1 The metacircular evaluator
- SICP 4.1.1 The core of the evaluator
- SICP 4.1.2 Representing expressions
- SICP 4.1.2 Representing expressions (part 2)
- SICP 4.1.3 Evaluator data structures
- SICP 4.1.4 Running the evaluator as a program
- SICP 4.1.5 Data as programs
- SICP 4.1.6 Internal definitions
- SICP 4.1.7 Separating syntactic analysis from execution
- SICP 5.4 The explicit-control evaluator
- SICP 5.4.1 Core of the explicit-control evaluator
- SICP 5.5 Compilation
- SICP 5.5.1 Structure of the compiler
- SICP 5.5.2 Compiling expressions
- SICP 5.5.6 Lexical addressing
Cluster 5: State, Mutation, and Language Design
- SICP 3.1 Assignment and local state
- SICP 3.1.1 Local state variables
- SICP 3.1.2 The benefits of introducing assignment
- SICP 3.1.3 The costs of introducing assignment
- SICP 3.1.3 The costs of introducing assignment (part 2)
- SICP 3.3 Modeling with mutable data
- SICP 3.4 Concurrency: time is of the essence
- SICP 3.4.1 The nature of time in concurrent systems
- SICP 3.4.2 Mechanisms for controlling concurrency
- SICP 3.4.2 Mechanisms for controlling concurrency (part 2)
- SICP 3.5 Streams
- SICP 3.5.1 Streams are delayed lists
- SICP 3.5.2 Infinite streams
- SICP 3.5.3 Exploiting the stream paradigm
- SICP 3.5.4 Streams and delayed evaluation
- SICP 3.5.5 Modularity of functional programs
Optional Deep Dive
- SICP 2.3 Symbolic data -- the first appearance of "programs as data"
- SICP 2.3.2 Symbolic differentiation -- a tiny language evaluator in disguise
- SICP 2.4.3 Data-directed programming and additivity -- dispatch-table version of operator overloading
- SICP 2.5 Systems with generic operations -- polymorphism via dispatch, no classes needed
- SICP 3.3.1 Mutable list structure -- why mutation changes list semantics
- SICP 4.3 Variations on a Scheme -- nondeterministic -- the
amboperator, logic programming's precursor - SICP 4.4 Logic programming -- the full query-language evaluator
- SICP 5.1 Designing register machines -- the bridge from interpreters to hardware (Concept 12)
Concept-to-Source Map
| Primary concept | Best source if stuck | Why this source |
|---|---|---|
| 01 Procedural abstraction | SICP 1.1.8 Procedures as black-box abstractions | Explicit statement of the black-box idea |
| 02 Data abstraction + ADTs | SICP 2.1 Introduction to data abstraction | Rational numbers, fully worked |
| 03 Layering abstractions | SICP 2.4.1 Representations for complex numbers | Two representations behind one barrier |
| 04 First-class procedures / HOFs | SICP 1.3.1 Procedures as arguments | sum, integral, Simpson |
| 05 Closures + lexical scope | SICP 1.3.4 Procedures as returned values | average-damp, deriv, newton |
| 07 Substitution vs environment model | SICP 3.2.1 The rules for evaluation | The precise rule of extension |
| 09 Tail calls | SICP 1.2 Procedures and processes | Process vs procedure distinction |
| 10 eval + apply | SICP 4.1.1 The core of the evaluator | The template for the interpreter |
| 11 Writing a small Lisp interpreter | SICP 4.1.4 Running the evaluator as a program | The wiring into a usable REPL |
| 13 Assignment: cost of mutation | SICP 3.1.3 Costs of introducing assignment | Sharpest statement of what is lost |