« Monoblog | Main | The first testing tool »

Two classic hardbacks

I received two hardback books for my birthday a while back.

The first is the fantastic Structure And Interpretation of Computer Programs. I have a softback copy of this, but after 5 years of abuse, it's in tatters. Structure And Interpretation of Computer Programs is the best book on programming ever written, hands down.

sicp-hb.jpg "The evaluator, which determines the meaning of expressions in a programming language, is just another program"
SICP p 360

I have always wanted the hardback, but have been put off before by the cost. Then again this is the kind of book you feel you should have a hardback copy of. Just like you should have a copy of the Knuth's Art of Computer Programming (even though I don't) or the Beatle's White Album (nope). So when given a chance to have it as a present of course I said yes.

For every programmer that adores this book, there's probably five who don't and ten who've never come across it, and if they did, would think it irrelevant to their working lives. I can sympathize with those fifteen programmers having been one of them. All the code in the book is in Scheme. That's a barrier right there because it means most people will have to learn a non-algol language to understand the book. But given the range and depth this book succeeds in covering, it's definitely the case that Scheme is a good choice. Given the first edtion was published in 1985 (I think), it's hard to imagine it being done in any other language. Smalltalk was another powerful language available at the time, but then again, Objects don't appear for 200 pages (in section three).

If you're of the school that a programmer's first language should be assembler or C and their first book should be K&R you might have problems with SICP - programming with register machines (that's CPUs to you and me), the root dialect for the Algol family don't appear for nearly 500 pages. Some people will understandably think that's impractical, but it's not. The nature of the computing profession is that you get your technical world view turned on its head every five years or so, and your investment in toolsets tends to depreciate at a faster rate again. This can be very difficult to endure and is probably a major cause of burnout in the industry. For example if you're trying to make a conceptual leap, say from compiled languages to interpreters or from objects to aspects or from XML to relational data, this book would have helped you be ready. Incidentally SICP also has wonderful section on how time and state affect the nature of programs - that alone makes it relevant to just about anyone programming with servers, middeware or databases.

Today you might be look to write it using Python or Ruby - which would make it more popular but perhaps a tad clumsier. Scheme is a really good teaching language that allows you to not be distracted by details. Then again, Peter Norvig of Google, who recommends SICP highly, has mentioned that he would consider Python for his AI classics over pseudo-code and Lisp.

I honestly don't think I'll even finish the Structure And Interpretation of Computer Programs. I'll read it who knows how many times, but i doubt I'll ever really be done with it. Personally I find SICP tough going sometimes, but it's time well spent.

How To Write Parallel Programs is by David Gelertner and Nicholas Carriero. I picked this up a few years back after getting heavily into Javaspaces and finding out that this book is the keystone for anything to do with Tuplespaces and Linda. I think it's the best book written on parallel programming and is arguably the best book written on distributed computing. But there are two things which make the book remarkable.

sicp-hb.jpg "We can envision parallelism in terms of a program's result, a program's agenda of activities or of an ensemble of specialists that collectively constitute the program"
HTWPP p 14

The first is how well it's written. This book is probably the best written computer book I own. Whenever I think of good technical writing, I think of How To Write Parallel Programs. Some people will claim that this is because the tuplespace is such a beautifully elegant programming model. Perhaps, but I've read tuplespace material that was far from beautiful. What the authors do in HTWPP, is this. They never stray into jargon, everything is explained. Concepts are introduced only when necessary, there's hardly any forward paging ("as we'll see in the next chapter") that plagues technical book writing. There are no wasted words, and no words are left unsaid.

I really do believe this book is close to perfection as a piece of technical writing. I imagine in 1990 when it was first published it would be easy to write something terrifically difficult about parallel programming. Heck, it would be easy to do that today - it is easy to do today. Parallel and distributed computing are not simple fodder.

The second is that it's out of print. I find that incredible. Having How To Write Parallel Programs out of print is bit like having the Ten Books on Architecture out of print [1]. It's a reflection of some sort of malaise in our industry that this book is out of print but you can build your own personal tower of Babel from "in varnum days" books. This is why I decided recently to hold two copies. One I want to be able to give to people to read, and the second, inscribed from my family, is mine, mine, mine.

So if you're interested in either parallel or distributed forms what I would say to you is that this is the best place to start to get a crisp overview before getting bogged down in formalisms and baroque technical English. Even before the Coulouris and Tannenbaum books (which are great). I wish it was the first book I'd read on the matter, because I wouldn't have had to go back and re-read a bunch of others, including the Javaspaces book that got me started. Second hand copies come up on Amazon, my advice is to snap one up.

[1] O'Reilly should run a "Classics" series like Penguin do for novels and plays, but for out of print or half-forgotten computer literature. I think they'd have a long-lived franchise.

February 19, 2005 08:17 PM


Stefan Tilkov
(February 19, 2005 09:30 PM #)

SICP is truly great. Do you know its available online as well? http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-4.html#%25_toc_start

Robert Leftwich
(February 19, 2005 09:34 PM #)

For completeness, there is a pdf available of "How to Write Parallel Programs" at http://www.lindaspaces.com/book/book.pdf and SICP has its own site at http://mitpress.mit.edu/sicp/

- not quite hardbacks, but thanks to the people involved for making them available on the web.

Vincent D Murphy
(February 19, 2005 10:32 PM #)

Thanks for these insightful reviews Bill. Just ordered my copy of the parallel programming one, which I had never heard of before.

I wholeheartedly agree with everything you said about SICP. I too lust for a hardback copy.

Ryan Tomayko
(March 3, 2005 05:24 AM #)

Ran across this the other day:


There's something like 20 hours and almost 40 GB of video of Abelson and Sussman presenting SICP from around 1981. I believe this is the class to which that book is a companion.

I can't agree with you more on your review, btw. The book has an almost religious appeal.

Bob Prior
(April 8, 2005 03:18 PM #)

Thanks for your great reviews of what happen to be two books published by The MIT Press. As to your suggestion for a 'classics' series, it so happens that we already have such a program and I will definitely consider adding How to Write Parallel Programs to that list. SICP, as others have pointed out, is already available on-line.

Post a comment

(you may use HTML tags for style)

Remember Me?

Trackback Pings

TrackBack URL for this entry: