Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Poll: Have you read SICP?
184 points by craftsman on Aug 4, 2011 | hide | past | favorite | 104 comments
I'm working my way (slowly) through SICP, and there are a lot of people who think serious programmers should read it. Have you?
Not yet, but it should happen soon
688 points
About 25% of it
573 points
No, and I don't want to
345 points
All of it
336 points
About 50% of it
210 points
About 75% of it
185 points
No, but it's on my shelf for street cred
172 points


"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.


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.


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!



"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 suggest you watch the original video lectures by Hal Abelson and Gerald Jay Sussman [1].

[1] http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussma...


Thanks so much for that link, this was the course I took some years ago. It's excellent.


They are great lectures. Better by several orders of magnitude than the ones I sat through at university.


I ran a lunchtime SICP reading group at my last job wherein we read a section or two at a time and someone (usually me) would illustrate the concepts by walking through our own Java code base (a big industrial ad server). It helped that we were already using a bunch of functional programming idioms, and that we had a few little compilers in the code to begin with, but viewing all that agile-developed code through such a pure academic lens remains one of the more professionally rewarding exercises I've yet had.

Even though I'm still mostly a mouth-breathing Java programmer; at work anyway.


An enthusiast has created an improved version[1] of SICP, free download available.

Description:

    The typography has been modernized for better on-screen legibility
    and comfort. All the mathematics is set in proper TEX, and figures
    redrawn in vector graphics.
[1] http://sicpebook.wordpress.com/2011/05/28/new-electronic-sic...


If you're unsure what the OP is talking about, SICP stands for "Structure and Interpretation of Computer Programs" aka "The Wizard Book". http://mitpress.mit.edu/sicp/


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.


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 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.


Agreed - the poll owner needs to add a "Not yet, but it should happen soon"


Sorry--good catch.


When I was in college I was browsing the library and I just grabbed this book on a whim. Had no idea what it was or that it was so famous. Began reading and got hooked, so I checked it out. Next thing I knew I had read the whole book and done most of the exercises. Not to be too dramatic, but it was a turning point in my understanding of programming.




Wow, Eli, I didn't know you post here. Your blog was essential to my understanding SICP the first time I went through it. Thanks for the great resource!


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.


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.


> Brian Harvey's Scheme lectures at Berkeley [...] unfortunately they're gone now

I clicked around a little bit at Berkeley's site and found this: http://webcast.berkeley.edu/playlist#c,s,All,3E89002AA9B9879...

It's looks like it should be the lectures you watched.


I googled "Brian Harvey's Scheme lectures at Berkeley" and found this: http://academicearth.org/lectures/scheme-1-interpreter - it seems to be the scheme lectures he mentioned.


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


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.


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.


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


> 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.


So I'm not the only pre-med who's ever read books on Lisp? Awesome, for a while I thought I was alone.


If you want to read it and don't have a copy and want one in ePub format, you can snag it here: https://github.com/ieure/sicp



For those who have read it, I'd be interested in knowing what it is that you feel you got out of it, ie how did it make you a better programmer? Better understanding of what's going on at a low level?


A much better understanding of what the computer is really doing, a much bigger bag of tricks to pull out when faced with a hard problem.

Post SICP, I have no fear of recursive algorithms, or closures, and a healthy understanding of asynchrony. So the kind of JavaScript programming that a lot of people find advanced is very natural to me.

A few months ago I implemented a JS library to parse a certain format using some fancy recursive JS combinators. It's fast, it's innovative, and it will be used on a few top-50 websites pretty soon. Internally, the thing is all about the techniques I learned from SICP -- the intermediate format is basically Scheme in JSON form.


The "interpretation of computer programs" part is nice to know, in my opinion. But the book gives a whirlwind tour of a sizeable chunk of computer science on the way, and the examples are concise to the point of being beautiful. Great book. Used it to learn clojure along the way.


Get PDF Version: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.98....

This is for those who hate to have the browser open to read something. Reading something in a PDF Viewer on touch enabled devices is much better.


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.


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 all of it and solved a substantial number of the exercises. If anybody knows how to recover lost data from a dead HD with ext2 file system, I would get the adventures of my youth back.



I read it this January after hearing it mentioned so many times. I was very impressed. My impressions were: 1. Ah, that's what it would have been like to attend a GOOD university! 2. Much of the systems knowledge I learned the hard way are clearly explained here. This would have jumpstarted my career by 10 years. 3. No current first-year student would sit through this. Though, it should be required reading for seniors.


Needed: No, what is an SICP anyway?

Having read a few pages of Structure and Implementation of Computer Programs, available for free at http://mitpress.mit.edu/sicp/, I quite liked it and thought it was well-structured and well written, and have added it to my disturbingly large reading list.


Nah, I'll read CTM (Concepts, Techniques and Models of Computer Programming)[1] first, as it addresses concurrency, for example, and seems to be easier to digest. CTM is viewed by some as a/the modern successor of SICP.

I had been looking for opinions regarding CTM vs SICP to choose which to read first and I've found two postings [2][3] from a mailing list to be very helpful in that regard. Also a comment on HN[4].

I do plan to read SICP sometime in the future as I'm already interested in Lisp, i.e. I'm reading Practical Common Lisp, On Lisp, deferred Paradigms of Artificial Intelligence Programming for later and plan to read Lisp In Small Pieces, which covers compilation.

I've also stumbled across PLAI (Programming Languages: Application and Interpretation)[5] by Shriram Krishnamurthi which seems to cover similar topics, and I plan to dive into that sometime in the future as well. If someone can tell where PLAI stands in contrast to SICP or CTM, that would be very helpful. Ah well... I found an opinion [6] on that too.

[1] http://www.amazon.com/Concepts-Techniques-Models-Computer-Pr...

[2] http://lists.racket-lang.org/users/archive/2008-February/022...

[3] http://lists.racket-lang.org/users/archive/2008-February/022...

[4] http://news.ycombinator.com/item?id=1119132

[5] http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/200...

[6] http://schemers.livejournal.com/584.html?thread=1864#t1864


I started reading it but stopped at some point, because all the advice - which I totally agreed with - was just too obvious if you had many years of experience and exposure to a couple of different kinds of programming languages and worked in a bunch of different shops. Buf I've heard many smart and experienced programmers praising it. Not sure if it's meant to be read by beginners only?

I'd suggest e.g. "On Lisp" for every experienced programmer, which is available for free too, in case you are not already a crazy LISP hacker, THAT'll learn ya! It is amazing how easy it is to do a couple extremely complex looking, universally applicable tasks (query parsing and processing, pattern matching, ...) - once you grokked a couple of concept you don't get exposed to normally in your mainstream language.


I'm 1 week away from the final in the last semester of SICP at Berkeley. Wish me luck! haha


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?


Another option: all of it, but skip most of the exercises (yes, that's what I did)


I'm through about 25% of it, but I decided to do all of the exercises in Haskell rather than Scheme. In a way it improves the experience as a whole, thanks to type errors slowly prodding me in the right direction.


Chapter four is going to be a B*tch to do in Haskell.


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.


I have started it twice: first time I got to chapter 3, second time I got stuck at chapter 4. It sounds a bit petulant to say, but I think it already has made me a better programmer. I had to stop for various life-related issues, but I love how it's written. Whatever you think of it as a beginner's textbook, it's a great piece of literature.

Recently I had to do some Gimp scripting and got some experience using Scheme as a programming language (as oppoosed to a learning language for doing SICP exercises). The moment I have some free time again I will try SICP again.


Been there, read the book, took the class, missed the first arrow on the CDR diagram on the first exam, TA'd the class, enjoyed the wizard hat. Two thumbs up.


I'm reading it right at the moment. It's a bit of struggle coming from a Oracle/Ruby background - particularly with some of the high level (for me) maths background required.

I often think of working thru HTDP instead, but finishing SICP has become somewhat of an obsession - I will not stop til I have worked thru the thing from start to finish, no matter how long it takes . . . (and so far, it's taken about 6 months)


I spent 6 months and read the entire thing and did most of the reasonable exercises. I lead a Seattle SICP study group a couple years ago.

I <3 SICP, but I don't agree with the idea that Universities should still be teaching it. It relies too much on math for a subject domain.

Robotics is a much better domain. AFAIK this was the book that was took over for SICP in 6.001.

A web programming course would be an even better subject matter.


Had it as a text as an undergrad. Didn't fully comprehend it at that time. I have been revisiting it lately by watching the Abelson and Sussman videos -- which BTW are excellent (and hilarious too). Now that I have been working as a software engineer for 20 years, I can see how much these concepts would've helped me along the way if I had internalized them.


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.


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.


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


It's an introductory text. You can easily cover it in a semester's worth of time.


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..


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...


In case you are interested, here is my shameless plug. I am writing a series of posts about SICP in Python:

http://pedrokroger.com/2010/09/sicp-in-python-1-1-the-elemen...

Hopefully I'll have more time to continue with it this year.


I read all of it, and also took 6.001 from Hal & Gerry. (Looking at the comments, I must be an exception.)


I recognize that username. Wasn't Gerry your advisor too? I imagine he might have made you read his SICM too.


Yup! Went through 2-3 iterations of SICM.


I really don't want this to come off as flippant - but: fuck yes. Honestly the most important experience in my computer science "self education". I am still working on SICM. Every year I seem have learned just enough more math/physics to grok another page or two.


For anyone starting to go through SICP, there's a collaborative class on Curious Reef working on it: http://curiousreef.com/class/structure-and-interpretation-of...


I watched the lectures and still find the intro song stuck in my head every few weeks.


"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."


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.


You should add a category - No, I have never heard of it.


Read or Do it? I just finished(did) the first chapter...


I read two chapters in Freshman year,then switched to my Java coursework.Today's posts have made me think of going back to it.


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.


Only first two chapters. But it was enough to blow my mind. Also reminded me of how my math skills had to be polished.


I took 6.01, in python. Just missed out on SICP, but I'm going through all the exercises now.


It's the only book on programming that I can say changed everything about the way I code.


No, but I plan to read HtDP http://htdp.org


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?


Missed an option: No, and this is the first time I've ever seen that Acronym.

I have no idea what it is, and since the poster didn't think it was worth his time to type out four words to define it, I don't see why it's worth my time to scan through the comments here to find out.

So I chose the first option, which at least has "No" in the title.


I read it but didn't do most of the exercises, which amounts to 75% at most I guess


Honestly I Don't Know why there is so much hype about it... It just looks like any book that explains building levels of abstraction... I would never say it's an essential..


I watched the video lectures.


twice. will do it again soon.


Yes. SICP is a profound work. I'd argue that it is a profound experience too. As is GEB (Godel Escher Bach). They are both a mind altering typeset form of LSD.


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.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: