Skip to main content

Learning Resources

This module is populated from the local chunked books in library/raw/semester-04-systems-programming/books, plus a small set of validated external references for the interpreter work. Use this page as a source map, not as an instruction to read everything.

Source Stack

BookRoleHow to use it in this module
Structure and Interpretation of Computer Programs (Abelson, Sussman, Sussman)Primary teaching sourceThe spine of every cluster; every primary concept points to specific SICP sections
The C Programming Language (Kernighan & Ritchie)ContrastWhen you want to see what "no closures, no first-class procedures" looks like, and why abstractions in C are awkward
Computer Organization and Design (Patterson & Hennessy)Contrast, one clusterWhere interpretation bottoms out in machines, relevant to Concept 12
CODE (Petzold)Cross-referenceMotivational context; occasional cross-lookup for "what is running underneath"

External Resources (validated)

All links below were fetched and verified on 2026-04-22.

SourceWhat you getBest use
MIT Press -- SICP Online (full text)The canonical SICP text on the MIT Press companion siteWhen you want the authoritative version of a passage; cite this over unofficial mirrors
Sarabander's HTML SICPA very readable HTML rendering of SICP 2eWhen MIT's rendering is hard to read on your screen
Peter Norvig -- "(How to Write a (Lisp) Interpreter (in Python))"A ~117-line Python Lisp interpreter with commentaryPrimary external reference for Cluster 4; the gold standard of "minimal eval/apply"
Peter Norvig -- "(An ((Even Better) Lisp) Interpreter (in Python))"Extends lispy with tail calls, macros, call/ccWhen you are ready to extend Concept 11's evaluator
Bob Nystrom -- Crafting InterpretersA full book that walks through a tree-walking interpreter (Java) and a bytecode VM (C)Primary external for Concept 12; read "A Tree-Walk Interpreter" first, "A Bytecode Virtual Machine" later
Crafting Interpreters -- Tree-Walk InterpreterPart II of the book, chapter listDirect entry point for the interpreter clinic
Crafting Interpreters -- Bytecode VMPart III, for staging and compilationConcept 12 supporting reading
SICM (Structure and Interpretation of Classical Mechanics)The Sussman/Wisdom physics book that uses SICP's functional style for mechanicsOptional; useful if you want to see the same functional-abstraction habits applied outside CS
MIT OCW 6.001 -- Structure and Interpretation of Computer ProgramsLecture videos and problem sets from the original SICP courseIf you want the Abelson/Sussman lectures directly

Resource Map by Cluster

Cluster 1: Abstraction as the Engineering Move

NeedBest local chunkWhy
procedures as black boxesSICP 1.1.8 Procedures as black-box abstractionsCanonical statement of procedural abstraction
compound proceduresSICP 1.1.4 Compound proceduresIntroduces define and the call model
data abstraction foundationsSICP 2.1 Introduction to data abstractionThe rational-number example in full
abstraction barriersSICP 2.1.2 Abstraction barriersDirect statement of the barrier idea
layered designSICP 2.1.2 Abstraction barriers (part 2)Layered design with rationals
multiple representationsSICP 2.4 Multiple representations for abstract dataComplex numbers in polar + rectangular
C-level contrastK&R: Basics of functionsWhat "procedure" means in C
C structsK&R: Basics of structuresData abstraction without language support

Cluster 2: Higher-Order Procedures and Closures

NeedBest local chunkWhy
formulating abstractionsSICP 1.3 Formulating abstractions with higher-order proceduresThe canonical case for HOFs
passing proceduresSICP 1.3.1 Procedures as argumentssum, integral worked out
lambdaSICP 1.3.2 Constructing procedures using lambdaExplicit lambda introduction
returning proceduresSICP 1.3.4 Procedures as returned valuesaverage-damp, deriv, newton
map/filter/reduceSICP 2.2.3 Sequences as conventional interfacesThe canonical treatment
C contrastK&R: Pointers to functionsFunction pointers as poor-man's HOFs

Cluster 3: Evaluation Models

NeedBest local chunkWhy
substitution modelSICP 1.1.5 The substitution modelIncludes applicative vs normal order
iterative vs recursive processesSICP 1.2 Procedures and processesWhere tail recursion is first motivated
environment modelSICP 3.2 The environment model of evaluationThe model that explains closures
evaluation rulesSICP 3.2.1 The rules for evaluationPrecise procedure-application rules
frames as stateSICP 3.2.3 Frames as the repository of local stateWhere captured state actually lives
lazy evaluationSICP 4.2 Variations on a Scheme -- lazy evaluationNormal-order as a language choice
tail recursion in the evaluatorSICP 5.4.2 Sequence evaluation and tail recursionWhat TCO costs in an implementation

Cluster 4: Metacircular and Interpreter Design

NeedBest local chunkWhy
metacircular evaluator introSICP 4.1 The metacircular evaluatorThe chapter opener
eval/apply coreSICP 4.1.1 The core of the evaluatorConcept 10's code sample is derived from here
syntax representationSICP 4.1.2 Representing expressionsHow to ask "is this an if?" in Scheme
runtime dataSICP 4.1.3 Evaluator data structuresEnvironments, procedure values
running the evaluatorSICP 4.1.4 Running the evaluator as a programREPL wiring, primitives
analysis separationSICP 4.1.7 Separating syntactic analysis from executionBasis for Concept 12's staging
compilationSICP 5.5 CompilationSICP's compiler chapter
compiler structureSICP 5.5.1 Structure of the compilerDirect map to Concept 12

Cluster 5: State, Mutation, and Language Design

NeedBest local chunkWhy
introducing assignmentSICP 3.1 Assignment and local stateThe chapter that reframes the language
local stateSICP 3.1.1 Local state variablesBank-account example
benefits of assignmentSICP 3.1.2 The benefits of introducing assignmentWhat we gain
costs of assignmentSICP 3.1.3 The costs of introducing assignmentWhat we lose
streams introSICP 3.5 StreamsChapter intro
delayed listsSICP 3.5.1 Streams are delayed listscons-stream, delay, force
infinite streamsSICP 3.5.2 Infinite streamsPrimes, Fibonacci
streams + delayed evalSICP 3.5.4 Streams and delayed evaluationRigorous treatment
concurrency overviewSICP 3.4 Concurrency: time is of the essenceChapter intro
nature of timeSICP 3.4.1 The nature of time in concurrent systemsOrdering, races
serializers / mutexesSICP 3.4.2 Mechanisms for controlling concurrencyMutual exclusion

Primary Concept -> Book Chunk Map

Every primary concept maps to at least one book chunk:

Primary ConceptBook chunk (primary)Book chunk (secondary)
01 Procedural abstractionSICP 1.1.8 Procedures as black-box abstractionsSICP 1.1.4 Compound procedures
02 Data abstraction + ADTsSICP 2.1 Introduction to data abstractionSICP 2.1.2 Abstraction barriers
03 Layering abstractionsSICP 2.1.2 Abstraction barriers (part 2)SICP 2.4 Multiple representations
04 First-class procedures / HOFsSICP 1.3.1 Procedures as argumentsSICP 1.3 Formulating abstractions
05 Closures + lexical scopeSICP 1.3.4 Procedures as returned valuesSICP 3.2.3 Frames as repository of local state
07 Substitution vs environment modelSICP 3.2 The environment model of evaluationSICP 1.1.5 Substitution model
09 Tail calls, iteration as recursionSICP 1.2 Procedures and the processes they generateSICP 5.4.2 Sequence evaluation and tail recursion
10 eval + applySICP 4.1.1 The core of the evaluatorSICP 4.1 The metacircular evaluator
11 Writing a small Lisp interpreterSICP 4.1.4 Running the evaluatorSICP 4.1.3 Evaluator data structures
13 Assignment: cost of mutationSICP 3.1.3 Costs of introducing assignmentSICP 3.1 Assignment and local state

Use Rules

  • If you are stuck on abstraction, open SICP §2.1 first -- the rational-number example is the highest-leverage passage in the book.
  • If you are stuck on closures, re-read SICP §1.3.4 and §3.2.3 together; they belong as a pair.
  • If you are stuck on the interpreter, work through Norvig's lispy line by line; then return to Concept 11 and re-type it from memory.
  • If you are stuck on mutation/concurrency, SICP §3.1 motivates the cost and §3.4 motivates the abstractions.
  • Open one chunk for one concept gap; do not read a whole chapter by default.
  • If re-reading is not fixing the problem, stop reading and implement the Mini Drill or the matching kata. Interpreter-level concepts in particular yield much faster to writing than to reading.