Follow Slashdot blog updates by subscribing to our blog RSS feed

 



Forgot your password?
typodupeerror
×
News Books Media Book Reviews

Review:Structure and Interpretation of Computer Programs

Andrew Cooke has sent us a review of Harold Abelson, Gerald Jay Sussman with Julie Sussman's book Structure and Interpretation of Computer Programs. This is not a book for those who are getting into coding for the first time-this is a nice, big MIT press book that assumes you're smart, and that you want to learn. So, if you want to check out what they think you need to do, click below.
Structure and Interpretation of Computer Programs
author Harold Abelson and Gerald Jay Sussman with Julie Sussman
pages
publisher The MIT Press
rating 9/10
reviewer Andrew Cooke
ISBN
summary A huge range of practical computing knowledge, but more tutorial than
REVIEW: Structure and Interpretation of Computer Programs
Harold Abelson and Gerald Jay Sussman with Julie Sussman
The MIT Press

Nutshell
Review:
A huge range of practical computing knowledge, but more tutorial than bottled wisdom. With Scheme.
Rating: 9/10
Reviewed by: Andrew Cooke

The Scenario

I am a software engineer: it is my responsibility to produce code that works, and that continues to work. I am also someone with no formal education in computing who wants to learn more about the science. My attention was caught by several reviews on the web about this book - it seemed to be one of the recognised classics of computing science - so I decided to educate myself.

What's in it?

By the end of the first chapter (of only five) I had a grounding in Scheme. I guess the book could be used by someone who has never programmed before, but they would have to be pretty sharp - there is little repetition.

The second chapter covers data structures and associated algorithms. Again, a lot of ground is covered very quickly.

After syntax and data comes a chapter on programming paradigms.

The final two chapters look at implementing new languages. Curiously (it makes sense in the context of the book, but how many readers will never have hacked assembler before reading this?), the book finishes with a discussion of register machines.

What's Good?

The range. No other programming book I have read covers so many topics. If I had to pick my three personal favourite Good Ideas, I would choose:

  • Functional programming (no state - no assignment to variables - and yes, it does seem strange at first!).
  • Closure in data structures (so a subtree looks the same as a tree - how does this conflict with careful typing?).
  • (Infinite) streams (using lazy evaluation to generate sequences).

These are not all new to me (although I have always used imperative languages), but in every case this book let me see a lot more than before. No doubt someone else would take away a completely different set of ideas - have a look at the Contents to get an idea of what might interest you.

What's A Necessary Evil?

It is impossible to resist the temptation to review Scheme when reviewing this book. After reading the first few pages I was stunned: what kind of person would enjoy using a language like this?

Imagine waking up knowing you have to go to work fixing the bugs in code written by your colleague down the hall - and you are using a language that does not have static types, objects, or even loops!

After the first chapter I could live without loops and by the end of the book I understood why Scheme had been - and had to be - used. Nothing else I have seen is as flexible and compact (if we rule out J for its illegibility :-)

But I would still hate to use this language at work.

What's Bad?

Ultimately, this is a book written for students. If you have experience in software development then you have to be prepared to skim sections. Maybe I was naive, but the reviews I had read suggested this was pure distilled wisdom - it is not.

If the authors had been able to aim a little higher (already this book could easily be intimidating to a newbie programmer, so why not drop the very basic stuff completely?) then maybe they could have used a less compact, more easily read language, with type safety and multi-threading (I do not have a recommendation, but have a peek at ML).

So What's In It For Me?

An introduction to new good ideas. A reminder of old good ideas. Much thought.

Pick this book up over at Amazon.

Table of Contents

  1. Building Abstractions with Procedures
    1. The Elements of Programming
    2. Procedures and the Processes They Generate
    3. Formulating Abstractions with Higher-Order Procedures
  2. Building Abstractions with Data
    1. Introduction to Data Abstraction
    2. Hierarchical Data and the Closure Property
    3. Symbolic Data
    4. Multiple Representations for Abstract Data
    5. Systems with Generic Operations
  3. Modularity, Objects, and State
    1. Assignment and Local State
    2. The Environment Mode of Evaluation
    3. Modelling with Mutable Data
    4. Concurrency: Time Is of the Essence
    5. Streams
  4. Metalinguistic Abstraction
    1. The Metacircular Evaluator
    2. Variations on a Scheme - Lazy Evaluation
    3. Variations on a Scheme - Nondeterministic Computing
    4. Logic Programming
  5. Computing with Register Machines
    1. Designing Register Machines
    2. A Register-Machine Simulator
    3. Storage Allocation and Garbage Collection
    4. The Explicit-Control Evaluator
    5. Compilation
This discussion has been archived. No new comments can be posted.

Review:Structure and Interpretation of Computer Programs

Comments Filter:

"Engineering without management is art." -- Jeff Johnson

Working...