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 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.
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.
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.
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).
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.
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/
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:
* 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.
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.
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.
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.
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.
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?
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!
109 comments
[ 5.1 ms ] story [ 180 ms ] threadNeither of your 'No' responses match what I suspect is a relatively common sentiment.
It's a lot like your sentiment, except I know I could make the time but don't.
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.
https://github.com/twcamper/sicp-kindle
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...
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 have a comment linking together several threads of compiler-related advice on HN here: http://news.ycombinator.com/item?id=1922002.
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).
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.
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.
[1] http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussma...
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.
I think that's to be expected for a university course textbook.
[2] http://norvig.com/21-days.html
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.
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'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
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.
I checked your website and profile. Your pursuit of knowledge across diverse fields is inspiring. My day is just starting, just what I needed. :)
This answer is roughly equivalent to "Would like to but probably won't in the near future."
I'm guessing that developers don't actually ready cover to cover and cherry pick sections until books reveal more pertinent info later?
http://eli.thegreenplace.net/category/programming/lisp/sicp/