Book Review: Structure And Interpretation Of Computer Programs

26 Jan 2019

Hey there! Finally, I laid my hands on a book I wanted to read for a long time already: Structure And Interpretation Of Computer Programs By Abelson and Sussman. This is one of those books that are extremely popular amongst programmers and don't need additional advertisement and review. I will, however, make one anyway, mostly because I need to write down my thoughts and notes somewhere.

First of all, I really loved the book's structure. It starts with an introduction to the basics of programming with examples in a pure functional language and for the whole 2 chapters (~ 1/3 of the book) evolves in the context of this language only. A lot of algorithms and data structures are implemented along the way via lists, lambda, and recursion only; it gives you an idea of how far can you go with these simple concepts. Not until the 3rd chapter mutable data and assignment operation are introduced to the reader, along with the notion of time, concurrency and some of the benefits and issues they bring into our purely functional ideal world. I believe it is the right way to introduce a person to programming because it encourages writing code in a way that makes it easier to reason about the code, and descent to mutability when it is absolutely necessary.

Another thing I liked about the book is how broad it is. It covers concepts and ideas of functional and object-oriented programming (chapters 1 and 2), introduces other paradigms such as non-deterministic and logical programming (chapter 4), goes down to assembly and low-level operations (chapter 5), and all of it in one place! Even though you know or heard about all of those things, it still makes sense to read the book to get a structured and consistent view of them.

Ultimately, I think SICP is one of the fundamental books in software engineering and computer science. It should be read by anyone eager to understand the cornerstones of an entangled web of complexity and abstractions that is called today "programming".