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 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).
I have a comment linking together several threads of compiler-related advice on HN here: http://news.ycombinator.com/item?id=1922002.
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.
[1] http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussma...
Even though I'm still mostly a mouth-breathing Java programmer; at work anyway.
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...Neither 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.
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 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 think that's to be expected for a university course textbook.
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=2848027Just 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 checked your website and profile. Your pursuit of knowledge across diverse fields is inspiring. My day is just starting, just what I needed. :)
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...
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.
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.
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.
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.
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'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 guessing that developers don't actually ready cover to cover and cherry pick sections until books reveal more pertinent info later?
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.
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 <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.
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 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...
http://pedrokroger.com/2010/09/sicp-in-python-1-1-the-elemen...
Hopefully I'll have more time to continue with it this year.
This answer is roughly equivalent to "Would like to but probably won't in the near future."
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.