How to Study Structure and Interpretation of Computer Programs (SICP)
Why and how to study one of the most important books in computer science

SICP is both a book and a legendary course at MIT (Massachusetts Institute of Technology).
SICP is not a book about programming languages or software development, not about OOP, functional programming, or design patterns.
SICP is a book about computer science. It is about perceiving computers as abstract machines used for manipulating data. Despite the fact that the book was first published in 1979, it has not lost its relevance and will not lose it in the future. SICP has consistently remained at the top of the best programming learning books for decades.
This is one of the great classics of computer science. I bought my first copy 15 years ago, and I still don't feel I have learned everything the book has to teach. — Paul Graham.
Should you read it? Absolutely yes, for all developers, regardless of language or experience. SICP is a fairly difficult book, which is why this guide you are reading now exists.
Very short summary
Abstraction with functions
- Elements of programs
- Expressions
- Evaluation strategies
- Substitution model of evaluation
- Functions and processes generated by them
- Linear recursion and iteration
- Tree recursion
- Higher-order functions
- Functions as arguments
- Functions as generalizations
- Functions as return values
Abstraction with data
- Introduction to data abstraction
- Abstraction barriers
- What is data?
- Hierarchical data and the closure property
- Representation of sequences
- Hierarchical structures
- Sequences as standard interfaces
- Symbolic data
- Quotation
- Multiple representations of abstract data
- Tagging data
- Data-directed programming. Additivity.
Modularity, Objects, and State
- Assignment and local state
- Advantages of assignment
- Disadvantages of assignment
- The environment model
- Rules of evaluation
- Application
- Frames as repositories of local state
- Modeling with mutable data
- Mutable list
- Representation of a queue
- Representation of tables
- Concurrency
- Streams
Metalinguistic abstractions
...
Computation with register machines
...
Recommendations
The first thing to understand: SICP is not just a book. It is a university course written in book form. It is complex and extensive, and it is useless to go through it without practice. Luckily, you don't need to invent exercises. At the end of each chapter there are problem sets the authors ask you to solve. Some of them are purely mathematical (prove something), or require a strong math background. You can and should skip those, otherwise you may quickly lose motivation.
How much to read
SICP can be conditionally divided into two parts. The first part includes chapters 1, 2, and 3. The second — chapters 4 and 5. The difference is that the second part digs very deep, and only a truly passionate person can get through it. For this reason, Hexlet recommends setting a goal to complete the first three chapters. The rest can be safely postponed.
Language
The book uses Scheme as the language for examples and exercises, created by the authors of the course. It is one of the Lisp dialects. As is typical for Lisp languages, Scheme has a primitive syntax that can be learned in just a few hours. It looks unusual for those familiar only with mainstream languages, but it has serious advantages, which are discussed in the book.
The choice of Scheme as the main language of the course is justified by the fact that Scheme allows focusing on the essence instead of syntax, showing pure concepts in their raw form. Like any Lisp, Scheme is incredibly expressive because in the language everything is an expression, and there are no statements at all.
The second reason is homoiconicity — the property of languages where data and code are the same. This is hard to grasp in words; it must be experienced in practice. There is also a third reason — macros, but they are not used in the book.
Scheme itself is primarily the standard plus different implementations of that standard. Currently, one of the most developed and still actively maintained descendants of Scheme is Racket. Hexlet recommends studying SICP specifically with Racket. For this guide, we prepared a repository that you can use as a base for your code. It's worth checking it out at least to see how to configure Racket for compatibility with the exact Scheme standard used in the book's examples: very few implementations can recreate "that exact" environment, but Racket can! Don't forget to properly configure your editor: Lisp languages require editor support for comfortable work.
Practice
On GitHub you can find many repositories with solutions to SICP problems in all sorts of programming languages. We strongly recommend doing the same: create a repository in your own account and upload all your solutions. Ideally, each solution should be accompanied by tests. This approach is great not only because you improve your Git skills and get extra motivation, but also because you build code that you can show when job hunting. Moreover, there's a good chance your interviewer will know about SICP. That will earn you karma points and give you a chance for a productive conversation.