structure and interpretation of computer programs, abelson & sussman

[originally reviewed for slashdot, reformatted here]

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.

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:

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.

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 :-)

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 must be terrifying to a newbie programmer, so why not cut those sections?) 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 i am having a look at ml...

an introduction to new good ideas. a reminder of old good ideas. much thought.