Poll: Have you read SICP?

184 points by craftsman ↗ HN
I'm working my way (slowly) through SICP, and there are a lot of people who think serious programmers should read it. Have you?

109 comments

[ 5.1 ms ] story [ 180 ms ] thread
No, but it's on my list of things to read when I get time.

Neither of your 'No' responses match what I suspect is a relatively common sentiment.

Agreed - the poll owner needs to add a "Not yet, but it should happen soon"
I also saw no option for "No, but it's on my list of things to have-read, assuming I ever get the ability to have-read without the reading bit".

It's a lot like your sentiment, except I know I could make the time but don't.

I didn't see the option for "never heard of it before but will take a look and see what all the fuss is about" either.
I took 6.001.
talked with a couple of guys from MIT who took 6.001, and asked them if they'd read SICP. They looked at each other and laughed, and said something along the lines of "Haha, ostensibly. I mean, we turned in our homework." Does that represent your experience as well?

If that's a legitimate indicator of wider behavior on campus, then I can see why the professors might question the utility of that book in that setting.

It's an introductory text. You can easily cover it in a semester's worth of time.
I think I read about 10 pages of it one random day for kicks. I don't even remember them assigning any readings from the book (they might've been on the syllabus, but you could just watch the lectures and do the homework and you'd be fine).
I took 6.001, and that's about how I remember it from back then. It's a great book but if you were going to lectures or willing to wrestle a bit with the problem sets, you didn't really have to touch the text. Sussman (as I recall) was a great prof, but one of the risks of having the book for the course written by the prof is that they may not be as objective about how well it's actually being used by students.
Yeah, I guess that's about right. (usually) go to class, scan the pset and read up on the bits that don't make sense, or better yet, find someone to explain them. I do have some distinct memories of reading the book. I wasn't a great student and I find it a challenge to read lots of technical stuff without a specific purpose, so I'm not sure my experience is representative.
My "No, and I don't want to" should count as "No, but I've never heard of it."
Same. Based on these results though, I may have to add to my list of books to read at some point.
I TA'd 6.001
Ah... those were the days! Did you know about M-x print-drop-card that we had on the snakes?
I'd have taken the intro class to the Joy of Six if I'd had the opportunity. As for SICP, I've started it a couple times, but I regularly get pulled away. Same with PAIP.
I'm 1 week away from the final in the last semester of SICP at Berkeley. Wish me luck! haha
No, I want to but I have not given a try..it seems like read when you have nothing to do..but I might never be in that state..
How about another category: % of completed exercises? I read all of it but only did 1/3 of the exercises.
Another vote for this! I on;y did about 20% of the exercises... I wish I'd done more. Whilst I understood all the concepts at the time, I'd probably struggle to drop in at a random point and do an exercise now.
I read it but didn't do most of the exercises, which amounts to 75% at most I guess
I took 6.01, in python. Just missed out on SICP, but I'm going through all the exercises now.
Yup. At Northwestern, the first course covers the first three chapters. I later went back (~5 years after graduation) and did the fourth chapter and its exercises.

I now have an instructors' guide as well, but still haven't convinced myself to do the fifth chapter, mainly because all of my FP is in SML these days. But I really should...

"Kinda started reading it but didn't get what the hype is all about".

I put it on my to-read list after reading Peter Norvig's review. I read maybe 2% of it and skimmed a lot more. While I'm sure I could learn quite a bit if I seriously studied the whole thing, I'm not sure it would be a good use of my time: most of the contents I already studied in college, though in a quite different approach. There are topics that I'm weak at, but if I decide to learn (say) compilation for real then I'd be better served by reading a book focused on compilation.

In other words, while SICP seems rather hardcore as an introduction to computer science, it feels rather unexciting as a review of my CS undergrad syllabus.

You'd be surprised. I worked through SICP a few years after graduating, and after the dragon book, and it still managed to warp my brain in new and exciting ways.
Congrats on making it through both. I haven't gotten to the dragon yet... For those interested, you can get a red dragon for significantly less than the newer editions (check amazon).
You can also get better compiler texts, these days. I recommend starting with Niklaus Wirth's _Compiler Construction_ (http://www.inf.ethz.ch/personal/wirth/books/CompilerConstruc...), then Andrew Appel's _Modern Compiler Implementation in ML_.

I have a comment linking together several threads of compiler-related advice on HN here: http://news.ycombinator.com/item?id=1922002.

I had a hard time with Appel's _Modern Compiler Implementation in ML_ when I did the compiler course (7 years ago...) for my CS major. I much preferred _Modern Compiler Design_ by Dick Grune et al. (http://www.dickgrune.com/Books/MCD_1st_Edition/). A second edition seems to be in the pipeline (http://www.dickgrune.com/Books/MCD_2nd_Edition/).
I'm not familiar with that one, but the table of contents looks promising. If it's even half as good as his _Parsing Techniques: A Practical Guide_, it's worth checking out.
I never understood what people like about the Dragon book. It talks you through implementing a compiler for an imperative language in an imperative language in a very pedestrian way. Give me more theory!
I think you're underestimating the depth of the book.

I read SICP and took a distance-learning version of 6.001 as a first-year grad student (undergrad BS in CS) and found it to be very challenging if your goal is mastery of the material. Another grad student, who was on a team that placed second in the national Putnam exam (i.e., a national-level math geek), also found it quite challenging.

Two of my professors, both now Fellows of the IEEE, also took the course with me and found it just as deep and original, and even more challenging, than we young computer weenies did.

Some courses, you have to take twice to master. For me, information theory was one of those. And I suspect that to a lot of MIT undergrads, 6.001 might be like that. The first time, you're just too bogged down in tactics to see the big picture(s).

Oh, I don't mean to say the book isn't deep; my CS undergrad courses were quite deep! In any case, yes, it's quite possible that I'm underestimating the value of the book for me.
"but if I decide to learn (say) compilation for real then I'd be better served by reading a book focused on compilation."

If you're a total noob at compilers, as I was when I read SICP (and still am) I think chapters 4 and 5 are a great intro. Like other Lisp/Scheme compiler and PL books (Lisp in Small Pieces, PLAI I think, EOPL to a lesser extent, parts of PAIP I think) SICP doesn't scratch parsing and lexing, but just uses (read). This means you can get to interesting stuff like program analysis and code generation without getting bogged down in parsing, at least at first. It's a really nice approach to learning that stuff.

I heard about it yesterday for the first time thanks to a submission on HN. I'll probably read it sometime in the near future.
Read or Do it? I just finished(did) the first chapter...
Where's the answer "No, never heard of it"?
By reading the post title, you've now heard of it. Once you decide whether or not you want to read it, "No, and I don't want to" or "Not yet, but it should happen soon" would be a good choice for you.
Personally, I'm a physician with an undergrad in physics, played with logo and basic as a kid. I picked up SICP and got to chapter 2 or 3 on my own time last summer but set it down to go learn Python as it was pretty obvious Abelson and Sussman expect you to either be a bachelor's degree candidate with a lot of time to work on this, or you have a substantial background understanding to bring to bear.

I tried Ruby but didn't like the flavor. Too sugary, too much stuff. My goal is really to add math to my diet, I don't need a job. I see Python as a good starting point to get some fundamentals under my belt, access to a large community with a lot of running software, and then get back to more lisp-like languages, R, and functional programming. Perhaps I didn't give Ruby a fair shake, I'll probably visit it again.

Lutz's Learning Python and Shaw's Learn Python the Hard Way have been a great combo for me as an independent student. Lutz does a great job of hand-holding in the beginning, which can be critical for the solo learner out there, but I wouldn't be the first who started getting impatient half-way through. Which is where LPTHW takes off. However, I have also gotten good use out of the beginnings of a lot material. A few notables:

* Brian Harvey's Scheme lectures at Berkeley (of all things) were absolutely critical to understanding recursion conceptually -- unfortunately they're gone now, which really makes me sad. http://webcast.berkeley.edu/course_details_new.php?seriesid=...

* Little Schemer -- I admit, I didn't see where it was going, shelved it, but loved the puzzling presentation. Will probably pick it back up after I finish LPTHW.

* Real World Haskell -- Some great introductory conceptual materal, but assumes a huge amount of prior knowledge. A noob can't pick up this book and learn programming.

* I just want to make mention of the fact that Windows hit the scene when I was a freshman in highschool and dominated my computing life for 15 years. The intellectual cost of that obstruction to the efficient use of my time can't be over-estimated. I have a visceral disgust for Windows that defies any logic.

* Conversely, my Cr-48 running Ubuntu has a wonderful study partner. It was quite wonderful to be reading LPTHW in Calibre, look to customize Calibre's buttons a bit, and find out it's written in Python. I have a visceral gratitude toward Google and the FLOSS community that defies any logic.

* Finally, Shaw's Advice from an Old Programmer is the best career advice, in any field, I've ever read (having done physics, military, and medicine). Read it or be square: http://learnpythonthehardway.org/book/advice.html

[edit]: for anyone who reloaded the page and found this comment elsewhere, my apologies. This part seemed better as a stand-alone comment.

Abelson and Sussman expect you to either be a bachelor's degree candidate with a lot of time to work on this

I think that's to be expected for a university course textbook.

No doubt, it wasn't intended as a negative. But for the independent student, stating what may seem obvious can be critically necessary. Compared to both O'Reilly titles and plenty of assigned course readings, that wasn't entirely clear to me until I had a few problem sets done. For example, Norvig's review makes it sound like it can be read lightly. Maybe only if your name is Norvig. I don't know.
Maybe the CTM book might be something for you as well. See my other comment[1] to learn more about it. Norvig says[2] the following about it:

    Concepts, Techniques, and Models of Computer Programming (Van Roy
    & Haridi) is seen by some as the modern-day successor to Abelson &
    Sussman. It is a tour through the big ideas of programming,
    covering a wider range than Abelson & Sussman while being perhaps
    easier to read and follow. It uses a language, Oz, that is not
    widely known but serves as a basis for learning other languages.
[1] http://news.ycombinator.com/item?id=2848027

[2] http://norvig.com/21-days.html

Hmm, it took me about 6 months to get through SICP the first time. I worked on it probably about an hour a day and more on weekends. I wouldn't worry about trying to understand everything the first time through. I got much more out of subsequent readings.
This tends to be the style of thinking at MIT, i.e. oh these are undergrads with a bunch of time, they should be able to do learn everything really well, thoroughly, and from the ground up! The end result is a bunch of classes that pack a lot of punch. This is great once you're ready to learn things inside out and from the bottom up, but not so great if you're new to the area or just trying to get a quick overview to get you off the ground.

Just about every class at MIT is like this. That is, professors assume you have the time and energy to learn things the "right way" and will really give you everything they've got. They usually forget the fact that students have usually 3 or 4 other classes like this which makes for quite a tough curriculum.

I personally loved this aspect of MIT. It's not the most practical or concise way to do things, though. If you're new to CS or just looking to get up on something quickly, definitely don't feel bad to look elsewhere.

Real World Haskell is definitely not for beginners. Try Learn You a Haskell for Great Good first. Still not for total beginners but since you already know Python you're good.
> My goal is really to add math to my diet, ...

I've started reading "The Haskell Road to Logic, Maths and Programming", maybe that's something for you or some other lurker here that would like to improve on math.

There is a review [2] that gives an interesting impression on the book. The other ones at amazon might also be interesting.

The table of contents + first chapter is available as a postscript file[3]. This should give you an idea what to expect from the book.

[1] http://www.amazon.com/Haskell-Logic-Maths-Programming-Comput...

[2] http://www.amazon.com/review/R3CL50MCVEO7UA/ref=cm_cr_pr_per...

[3] http://www.cwi.nl/~jve/HR/HR-27.ps.gz

I have this book as well has "How to Prove it." They cover virtually the same material, however I found the prose in "The Haskell Road" to be stilted and sometimes confusing. I got much more out of "How to Prove it."
Interesting; thank you for providing your perspective. Both books indeed share most of the topics, although from glancing at both TOCs HR seems to add Polynomials and Corecursion. I'll gladly keep this in mind should I get stuck with HR.
This isn't to say that HR is bad, on the contrary it's quite good. Be prepared to use Google though. How to Prove it is much more self-contained.

It is true that HR covers Polynomials and Corecursion. If I were you, I'd order both and use How to Prove it if you get stuck with The Haskell Road. They're both very inexpensive.

Off topic, but I couldn't help it.

I checked your website and profile. Your pursuit of knowledge across diverse fields is inspiring. My day is just starting, just what I needed. :)

So I'm not the only pre-med who's ever read books on Lisp? Awesome, for a while I thought I was alone.
"No, I don't feel it's relevant/valuable enough to make the time for it."
By way of explanation: this is a poll, my choice is not an option, therefore I posted it instead of merely upvoting it.

This answer is roughly equivalent to "Would like to but probably won't in the near future."

(comment deleted)
I've read about a couple of chapters based on a recommendation that these select couple sections would broaden my view of designing parsers and understanding s-expressions. It did. On the other hand, I skimmed the rest of the book and didn't find anything in particular that I needed out of the text. Thus my choice of 'No and I don't want to' seems like a fair one considering I read way less than 25% of it. Maybe a chapter count poll would be better. Let's call it a 5% for me.

I'm guessing that developers don't actually ready cover to cover and cherry pick sections until books reveal more pertinent info later?

I've read the whole thing but didn't do all the exercises. I generally don't like doing exercises unless I don't understand a concept.