Structure and Interpretation of Computer Programs has had a dramatic impact on computer science curricula over the past decade. This long-awaited revision contains changes throughout the text. There are new implementations of most of the major programming systems in the book, including the interpreters and compilers, and the authors have incorporated many small changes that reflect their experience teaching the course at MIT since the first edition was published. A new theme has been introduced that emphasizes the central role played by different approaches to dealing with time in computational models: objects with state, concurrent programming, functional programming and lazy evaluation, and nondeterministic programming. There are new example sections on higher-order procedures in graphics and on applications of stream processing in numerical programming, and many new exercises. In addition, all the programs have been reworked to run in any Scheme implementation that adheres to the IEEE standard.
AI Reading Assistant
Whole-book reading guide from stratified index samples; jump to passages in the text
Tip the Site
Support this siteYour recognition and a small knowledge-service contribution help keep this technical work open source.Scan the WeChat Pay or Alipay code below. Logged-in and guest visitors can both tip.
WeChat Pay
Alipay
Open WeChat or Alipay and scan. No login required.
AI guide
【One-Line Pitch】
A foundational MIT text that teaches you to think about computation itself—not just syntax—by building abstractions, interpreters, and languages in Scheme. Best for readers who already program in some language and want the deep conceptual toolkit behind software design.
【Book Arc】
- **Opening (~0%–10%)**: Frames the whole enterprise: why Lisp/Scheme, the recursive nature of evaluation, and the core vocabulary of procedures, processes, and abstraction. Solves the "what does it mean to compute?" question before touching data structures.
- **Early (~10%–32%)**: Builds procedural and data abstraction from the ground up—higher-order procedures, recursion vs. iteration, compound data, abstraction barriers, and sequence operations. This is where the book's central discipline (separating *what* from *how*) is installed.
- **Middle (~32%–48%)**: Moves into generic operations and symbolic data—representations for complex numbers, polynomials, sets, and Huffman trees—showing how multiple representations can coexist behind a common interface. The problem shifts from "write a procedure" to "design a system."
- **Late (~48%–75%)**: (Excerpts do not cover this range in detail.) Based on the book's known structure, this stage addresses state, time, and identity—assignment, local state, concurrency, streams, and lazy evaluation—the second edition's new organizing theme.
- **Ending (~75%–100%)**: (Excerpts do not cover this range.) The book culminates in writing interpreters and a compiler, plus nondeterministic programming—turning the reader from language user into language implementer.
【Key Takeaways】
- **Recursion is the native shape of evaluation** (Opening): The evaluation rule for combinations is itself recursive, so deeply nested expressions are naturally understood as trees rather than as linear instruction sequences.
- **Iterative vs. recursive *processes* are distinct from recursive *procedures*** (Early): A procedure can be syntactically recursive yet generate a linear iterative process; recognizing this distinction is essential for reasoning about space and time.
- **Invariants are the design tool for iterative algorithms** (Early): Defining a quantity that stays unchanged from state to state (as in fast exponentiation) is presented as a general technique, not a one-off trick.
- **Higher-order procedures are abstraction engines** (Early): Passing procedures as arguments lets you capture common patterns (summation, accumulation) and vastly increases expressive power.
- **Data abstraction means erecting barriers** (Early–Middle): A procedure like `linear-combination` should not know how its arguments are represented; compound data plus generic operations make this possible.
- **Multiple representations can coexist behind generic selectors** (Middle): Complex numbers in rectangular or polar form, and polynomials with symbolic coefficients, are handled by dispatching on type—so client code stays unchanged.
- **Sequence operations enable modular, library-style construction** (Early–Middle): `map`, `filter`, and `accumulate` let you mix and match standard components, the software analogue of cascading standard filters in signal processing.
- **The second edition foregrounds time and state** (Opening): Objects with state, concurrency, functional/lazy evaluation, and nondeterminism are introduced as different answers to the same underlying question—how to model time in computation.
【Reading Tips】
- **Deep-read Chapters 1–2; skim the exercises you can't attempt.** The early material on processes and abstraction is the book's real payload. Exercises like 1.16–1.18 are worth doing because they force you to *design* invariants, not just read about them.
- **Treat the interpreter/compiler chapters as a second pass.** They are the hardest part and assume everything before them. If excerpts feel thin there, that's a signal to slow down, not skip.
- **Type the code.** Scheme's uniform program-as-data representation means reading alone hides how evaluation actually unfolds; running `sqrt-iter` or `fact-iter` makes the process shapes concrete.
- **Watch for the abstraction-barrier habit.** Whenever a procedure is rewritten to work with "whatever add and mul do," pause and note what knowledge was removed—that's the book's core lesson in miniature.
- **Don't hunt for a chapter-by-chapter summary.** The book is a cumulative argument; the value is in following the progression from procedures to data to systems to languages.
【Coverage Limits】
This guide is based on stratified excerpts covering roughly the first half of the book (through generic operations and symbolic data); the later chapters on state, streams, interpreters, and compilers are described only at the level of the book's stated themes, not from excerpted detail.
Page 15
f usage, we can model local state using assignment and data mutation, we can link parts of a program with streams and delayed evaluation, and we can easily i...
ition of symbols; however, it also means that define can be used to change values, and this brings up the issues of assignment without explicitly using set!....
unt first. Although this method works well for the exchange Delay is then defined so that (delay <exp>) is equivalent to (memo-proc (lambda () <exp>)) and fo...
of Scheme includes eval, as well as a symbol user-initial- environment that is bound to the initial environment in which the user's input expressions are eva...
Support this siteYour recognition and a small knowledge-service contribution help keep this technical work open source.
Scan the WeChat Pay or Alipay code below. Logged-in and guest visitors can both tip.
WeChat PayAlipay
Open WeChat or Alipay and scan. No login required.
Add Tag
Enter tag name (max 50 characters)
Share E-Book
Structure and Interpretation of Computer Programs - 2nd Edition (MIT Electrical Engineering and Computer Science) (Harold Abelson, Gerald Jay Sussman) (Z-Library)
Scan QR code with your phone to access
Copy the link or scan the QR code to access this e-book on your phone
Share E-Book via Email
Please enter email address
Donation Statistics
¥.00
Total Donations
0
Donation Count
Structure and Interpretation of Computer Programs - 2nd Edition (MIT Electrical Engineering and Computer Science) (Harold Abelson, Gerald Jay Sussman) (Z-Library)
Find Your Favorite Books
Only registered users can comment after logging in. Comments need to be reviewed by administrators before being displayed
Loading comments...
Reply to Comment
Edit Comment