Fog Creek Software
Discussion Board

Structure and Interpretation of Computer Programs

I just got _STRCTURE AND INTERPRETATION OF COMPUTER PROGRAMS_ by Abelson, Sussman & Sussman.  I've checked out it's reviews on amazon, and there seem to be strong opinions pro and con.

I've gotten through the first chapter.  The main reason I got this book is I wanted a more structured background on programming and the like that fly-by-the-seat-of-your-pants experience I've gotten the past year getting immersed into web development hasn't given me.  Some background...I graduated with an undergraduate degree in biochemistry where the most programming I did was some atmospheric chemistry modelling with Basic.  I started getting into Perl after an interest in genetics and stuff and my roomate got me a job doing CGI programming in his lab.  Next thing I know, I'm doing web development in Perl, PHP, and the like (some ASP and now JSP to round it out).  I've just recently started making the transition to Java to work on some JSPs.

I really like Java since it's less messy than Perl and so much more powerful than PHP.  But now I'm starting to want to explore the more theoretical underpinnings behind programming (I did get a math minor, with a year of Matrix Algebra where 3/4 of the class were CIS guys-so I'm not totally ignorant of some the stuff in this book).  Lisp seems real popular in academics, and I don't have time to take any introductory CIS courses right now, so someone recommended this book based on the MIT course.

So what do you guys think?  Should I spend an hour or two every night after work slogging through this book-or is it better to just be a hack for now and go back to school for real later?



P.S. the think I hated doing wet chemistry-my experiments didn't give me back easy to read error messages :)

razib kahn
Friday, December 28, 2001

It's never a bad idea to get better versed in your craft. OTOH, this book's been on my 'to read' list for quite a while so I can't comment on it specifically.

For anyone else interested in looking at it, the book is online at:

Jeff Pleimling
Friday, December 28, 2001

I found this page useful in understanding Scheme:  [ ].  I hope it's not imposing, but if it's any help, the name "lambda calculus" is an accident of history.  Just one of those names that stuck...

Friday, December 28, 2001


I've just been reading SICP actually, a little bit every night--I'm enjoying reading it, which is probably enough for me. I find myself trying to recast a lot of the scheme into C++ as I read along, which is sort of an interesting exercise. It's not actually a book about Scheme, and I think it'd work just about as well if  you translated everything over into a non-dynamic programming language. I suppose I'd say the techniques and ideas ("patterns" is what they call this now, I guess) are valid regardless, and the book is really geared toward teaching the concepts.

It's interesting because a lot of the content is just a bit out-of-the-mainstream, in a good way. The problems are familiar, but the solutions are a little bit different than the ones you'd come up with if you were thinking in terms of day-to-day how-fast-can-I-get-this-together-in-C++ programming. Which makes it a satisfying book, because it sort of shakes the assumptions up.

If I hadn't learned Lisp a while ago, I'd probably be more hung up on the concrete code-reading part of things, though, and maybe wouldn't be looking at it at a high level. I suppose if I was newer at programming I might be looking at it as an algorithm design book, which it's also really not.

Like I said, I'm enjoying reading it, but I'm not expectiing it to teach me how to program, more how to think about how programs work.

daniel sweeney
Friday, December 28, 2001

I'm agree with above responses, it's always better to read something then
NOT to read anything. I was reading this book while studying the university
course having the same name, I dropped visiting lectures very soon and got
one of my highest grades - the book is *THIS* good. If you don't mind
getting into Scheme in order to study new and not-so-familiar points of
view - it's a good choice. I can now think in more or less scheme-ish way
and it definitely worths having .. And I also know that having a simple
'car' and 'cdr' operations is sufficient enough to build any complicated data structure - isn't it wonderful ? :)

Evgeny Goldin
Friday, December 28, 2001

I have not praised this book enough. Every engineers should read it cover to cover. This is *the* book to get if you want to understand how great thinkers (Professor at MIT will qualify, yes?) tackle difficult problems. There's a lot of programming techniques you can learn from this book but the main focus is on problem solving and how to divide and conquer. The authors did such a great job that while presenting those techniques they also teach you how a programming language is implemented (scope rules, how run time interpreter works) and various other topics on computer science. You'll also learn how to implement a compiler. It is very dense and very challenging. The execrises are almost as tough as Knuth's.

Ask lisp guru Paul Graham how good this book is if you do not believe what I have said.

Friday, December 28, 2001

you almost had me convinced there until the last line :)

Joel Spolsky
Friday, December 28, 2001

If you haven't already, you'll likely want to visit:

Dr. Scheme is a very nice environment for the language the book uses.  (Just remember to set the language to "Full Scheme."  It starts out with a beginner's subset by default.)

I have to say, the book annoyed me terribly for a while, to the point where I put it down for a couple months.  (It had to do with hiding the form for variable-length arg lists in an exercise later in the book; without it there was no way to even dream of implementing functions as powerful as the built-ins.)

But I picked it up again and I love it, and I think the point is to see that it's a bridge between mathematics and programming.  It's not a hard book, as long as you realize that it combines two intensely related subjects, of which only one or the other most people learn.  So I learned some math before coming back to it.

Offtopic:  Paul Graham is the CJ Date of programming. :-)  A cheerleader for the Right Thing, but vaguely insulting at times.  ("Knows a smarter programmer than any I know," my ass.)

forgotten gentleman
Saturday, December 29, 2001

OK. I picked the wrong guy to mention on this forum.

Ask Jamie Zawinski, Richard Gabriel, Philip Greenspan. How about that ? Much more convincing ? ;-)

Saturday, December 29, 2001

yeah, i went to their web page and have dr. scheme.  all in all, i think i'll slog through the book.  it seems to have a lot of info in, unlike some of the "learn fill_in_the_blank" books i've gotten that tend to ramble (i had that problem with beginning java 2 by horton).

btw, i like lisp.  i wouldn't do any work in it myself, but i really makes me think things through, so it's good practice.



razib kahn
Saturday, December 29, 2001

I don't understand the rationale for lobbing tomatoes at Paul Graham. I've read some of the threads in this discussion forum (see thread on "Yahoo stores"), and I've read many of the articles on Paul's site:

Paul has some strong opinions about programming/languages, but I can't fault him for that. Paul is a smart guy who crafts some compelling arguments on his site. It's well written and thought provoking, even if you think it's a load of bunk. 

If there's a big difference in ideology between Joel and Paul, I'd rather see it spelled out more clearly. The spate of shadow-bashings in this forum doesn't add up to meaningful dialogue. I'll wait and see if anything shakes out of Paul's Arc language project.

B Doxman
Monday, December 31, 2001

Re: E. Doxman

I was certainly offtopic.  He believes in the Right Thing, and probably his Arc language will go very well.  If not successful, at least influential.

Still, it's not hard to take exception to the one statement of his. :-)  But clearly, ad hominem jabs mean nothing against his ideas.  In fact, I've read his entire website and bought his book on ANSI common lisp.  More power to the guy.

forgotten gentleman
Monday, December 31, 2001

SICP is an amazing book. When I read it, I kept getting jolted with "Aha!" experiences. When I finished, I suddenly grokked meta-programming: I felt I could begin tounderstand programming languages, not just programming. No suprise, since Lisp is "a programmable programming language."

As a follow up, I recommend "Lisp in Small Pieces" LiSP finally taught me how generalized variables worked, which in turn made me really appreciate how to use references in C++ as something other than syntactic sugar for pointers.

I won't even get into what both books communicate about continuations and macros: there's an area where there is simply no translation to pedestrian tools like C++, Java and Perl.

Reginald Braithwaite-Lee
Tuesday, January 1, 2002

RE: Forgotten Gentleman

Paul Graham is a proponent of "The Right Thing" (as opposed to "Worse is Better")? [note: see for info] I didn't understand that from Paul's articles, but maybe I'm confused over some of the programming concepts used here.

For example, according to his site, Paul is a strong advocate of "bottom-up programming" and the LISP family (Scheme, REBOL, Haskell, Logo, etc.) is regarded as very strong in this regard (whereas "structured" languages such as Pascal or some OO languages are, to varying degrees, less so).

How do the terms "bottom-up" "top-down" and "structured" programming contrast to "The Right Thing" or "Worse is Better" philosophies? Is LISP and functional programming languages necessarily associated with "The Right Thing" approach, or is it simply Paul Graham's approach that is the target here? I have been linking/equating "worse is better" with "bottom-up" programming, which may or may not be true.

Thanks in advance for any illumination on this.

Non-programmer Programmer
Wednesday, January 2, 2002

To my mind, Lisp is associated with the Right Thing, (at least because of RPG's paper), and since Paul is an outspoken champion of Lisp, I made a tacit connection between Paul and the Right Thing.

CJ Date is also a proponent of the Right Thing as regards relational databases.  He dislikes SQL's sins, and charges that there is no major database vendor which has a truly relational product.  (Take that, MySQL critics.)  So I linked the two together again.

About bottom-up and the Right Thing...  I think the point is that the Lisps are a strong family for supporting different styles of programming.  Therefore Paul's point is that since Lisp has some Right Qualities, bottom-up programming is much easier and more natural than in other languages.

I hope we are not talking past each other...

forgotten gentleman
Thursday, January 3, 2002

*  Recent Topics

*  Fog Creek Home