I took a one-week SICP course with 5 or 6 other professional programmers last year. It was amazing. I wrote about my personal motivation for doing so here:
As for an update: SICP was as good as I expected and definitely makes a professional programmer regain some love for the art and magic of computer science. (However, the book is a hard read without a guide. But it's really fun if you alternate between coding and reading, by using a local Racket & DrRacket install.)
One can find recorded courses from MIT with the SICP authors on YouTube, so that may be one way to do this from home.
Hal Abelson was recently interviewed about the lasting influence of the book in this podcast. It's a good conversation:
This is awesome, can you go a little bit deeper into how you organized your week? Topics you covered each day and how you devided the book to fit into a 1-week study?
I’d love to do this myself with other people! The idea of a "retreat", seeing programming as a hobby is great.
If working alone, I suggest going off the deep end and implementing the metasyntactic evaluator in any language one likes. You need to figure out how to implement lexing and parsing if this is not familiar to you, but it's not that hard.
Can you please provide your plan and outline to get through it in a week that you used? From my experience if doing all the exercises a chapter a week is still a challenge.
SICP shows up every few months on HN, and I upvote enthusiastically every single time!
I am a self-taught programmer, and survived a long time on C/C++/Java etc. I was smugly confident in my confined space.
Then I came across SICP. I discovered a world of closures, streams, object-orientation done using closures, infinite series using streams, lazy evaluation, functional programming, and so much more. It was such a sharp pivot that I registered for a PhD because I just had to know what else I took for granted. I was 42 when I registered (graduated at 48)!
The contents of the book are wonderful, but I can't stop admiring the TeX typesetting itself. It's startling how effortless it is to read this document compared to 99% of Web-based reading I do every day. The things that stand out to me most are the lack of vertical whitespace "rivers" due to the smart kerning & tracking, the small-caps for technical initialisms like 'HTML', and the beautiful beautiful Garamond of the body text. I should use LaTeX more :)
Anyone else feel like this book is really overrated? I've enjoyed the classical mechanics book by the same authors a lot more since it goes over a particularly good application where functional ideas shine
I do think it's a book of quality, which admittedly is a relatively rare category. But yes, I think it's hugely overrated, especially when characterized as the "one true best way" or something, to learn programming.
(Note that I am commenting on the first half or so of the book, never having gotten past that. Maybe the last half of the book is the best book ever written, I do not know.)
For one thing, half of the examples are calculus. If you are an engineering graduate student with experience in fortran (which is the original intended audience, just watch the original lectures), that's a great idea. For humans with little to no formal mathematical training, it's pretty poor. I once helped to lead a study group on SICP with half a dozen highly motivated junior-to-intermediate programmers, and everyone found the exercises insanely hard for this reason. (Of that group, btw, I would say one student greatly benefited, two dropped out, and the rest got some benefit.)
For second, I strongly disagree with the claim that functional is a "more natural" or "more intuitive" way to think about programming. I've helped teach hundreds of adult students to program (and become working developers), most of them with no prior experience, and I would say that less than 1% of them found recursion anything other than a crushing mindfuck. Whereas more than half of them took to imperative programming in a much shorter length of time (a few weeks, say). (None of these students were given SCIP, tho.)
Based on the perennial praise in threads like this, I concede that must be those in the world for whom it's a great book, and that's great. I am firmly convinced that these people are atypical.
On the other hand, it is a book that concerns itself with important questions, where IMO most books do not, so that alone makes it, as I said at the beginning, a member of a rare and distinguished category.
Yes. 61A at Berkeley was nominally based on SICP. Berkeley has since abandoned the book and the class is now taught in Python. MIT 6.01 has abandoned the book as well and recreated the course using Python as well. Scheme was wonderfully elegant but then we never used it again which was annoying. If the choice is between Scheme knowing I'd never use it again and Python then I'd take Python.
We never had any readings from SICP. It sat on the shelf like an unread bible. I went back to it much later but I didn't like its conception of computer science. I compare it directly to Knuth's Fundamental Algorithms and it just didn't inspire me at all whereas FA did. I'll grant that I can't imagine a freshman course using FA, mostly because assembly language is very much de-emphasized.
However, I'll second someone else's comment about the beauty of the typesetting of this edition. And I really liked Scheme. But neither 61A nor SICP are touchstones for me.
SICP is not about FP, it's about all forms of programming. It starts with FP because that's the easiest model to reason about. Then it shows you how if you add state to FP, that can get you to OO. Then it shows you how you can use that to build an evaluator for your favorite programming language, or a virtual machine that can serve as a target for many languages. As a deep dive into a single topic it's not very good, but as an overview of much of computer science it's unparallelled. Knuth appears to have gone for the deep dive approach, and good on him -- but that's why TAOCP is yet unfinished.
I totally respect and even admire dissenting opinions, but, on the contrary, this book is magic for me. For me, it connects programming to larger and vital human endeavor. K&R does that for me too, so maybe it's a me thing.
It covers unification in a first term class, plus functional, OO, and machine models of computation. I’ve used SICP as a student, and comparing it to HtDP, CTM, or some ad box stuff as an instructor—there’s no contest. Each of the others is excellent in its own way; none is as ambitious in its intent nor goes so far in satisfying it.
What was your exposure to the book? I have gone through it twice with study groups, and have done all the exercises, and feel if anything it's underrated.
I'm glad about SICP being promoted and accessible to people around the world.
Maybe 20 years ago, the authors put the full text for their textbook on the Web, as HTML. This made it more accessible to people, and set an early precedent for freely-available top textbooks on the Web (even though they presumably could've made more money by only selling print copies).
Then, since not all students' computers could run a Web browser, Lytha Ayth manually converted the HTML to Texinfo, with ASCII art of all the figures.
If one has the means to buy the printed book, doing so would seem like a nice gesture, in response to the authors' and publisher's generous sharing and example-setting.
This book more than any other has made me the programmer I am. The hardest part about telling people about this books was how to find it. +1 to the guy with the short URL to this PDF.
We read SICP back in college. I loved it but I remember a lot of moaning from my classmates. I wish I had more practical need for Lisp because I loved programming in it.
My favorite part of SICP is where a streaming lazy evaluated version of sin() is defined using cos() which is defined using sin().
The ebook on https://github.com/sarabander/sicp-epub/ seems to be inaccessible, trying to fetch it via git lfs gives "This repository is over its data quota. Purchase more data packs to restore access."
> You are probably reading it in an Info hypertext browser, such as the Info mode of Emacs. You might alternatively be reading it TEX-formatted on your screen or printer, though that would be silly.
I first found out about this book from someone reposting on HN a few years ago, and decided to explore it because of discussion in the comments. It significantly influenced me as a developer, and I still point junior developers toward it as one of the main books they should read (and by read, I obviously mean go through excercises) about the craft. Thanks for reposting this again.
The foreword of this book must be the only one I have ever read where I disagree with almost every statement it makes. This doesn't encourage you to carry on, but I have (first couple of chapters), and find the whole structure and direction of the thing inimical to me.
It seems to me that this is somewhat like the "dragon book" - people were exposed to it before they had read other better books.
I read the book a while ago, It was quite an eye opener.
The one thing I haven't been able to go through was the last chapter, building a "metacircular evaluator. I saved it for a time when I understood compilers/interpreters better.
Diving into codebases, like the octave and supercollider interpreters recently. might be quite interesting to re-read it.
My experience of the last chapter is: it's not as satisfying or as easy as the previous chapters where the solutions to exercises are self-contained. It's also less suited to doing outside of school, if you only have nights and weekends and must re-establish the context every time you sit down again with the book. However, it is still worthwhile, and definitely doesn't require any previous compiler/interpreter exposure (in fact, it might be an advantage to come in fresh, as a lot of what you do in chapter 5 is really easier than you might think if you have exposure to advanced compiler techniques).
[+] [-] pixelmonkey|6 years ago|reply
https://amontalenti.com/2018/08/26/sicp-expanding
As for an update: SICP was as good as I expected and definitely makes a professional programmer regain some love for the art and magic of computer science. (However, the book is a hard read without a guide. But it's really fun if you alternate between coding and reading, by using a local Racket & DrRacket install.)
One can find recorded courses from MIT with the SICP authors on YouTube, so that may be one way to do this from home.
Hal Abelson was recently interviewed about the lasting influence of the book in this podcast. It's a good conversation:
https://pca.st/wmrdiyvq
[+] [-] methehack|6 years ago|reply
https://docs.racket-lang.org/sicp-manual/index.html
[+] [-] agbell|6 years ago|reply
I worked through the book using #lang sicp in racket however.
[+] [-] Stormwalker|6 years ago|reply
[+] [-] theboywho|6 years ago|reply
I’d love to do this myself with other people! The idea of a "retreat", seeing programming as a hobby is great.
[+] [-] fsloth|6 years ago|reply
[+] [-] b3b0p|6 years ago|reply
[+] [-] sriram_malhar|6 years ago|reply
I am a self-taught programmer, and survived a long time on C/C++/Java etc. I was smugly confident in my confined space.
Then I came across SICP. I discovered a world of closures, streams, object-orientation done using closures, infinite series using streams, lazy evaluation, functional programming, and so much more. It was such a sharp pivot that I registered for a PhD because I just had to know what else I took for granted. I was 42 when I registered (graduated at 48)!
[+] [-] Lammy|6 years ago|reply
[+] [-] nealabq|6 years ago|reply
https://mitpress.mit.edu/sites/default/files/sicp/index.html
https://mitpress.mit.edu/sites/default/files/sicp/full-text/...
Other versions, again not as PDF:
https://news.ycombinator.com/item?id=13918465
https://news.ycombinator.com/item?id=19049834
https://news.ycombinator.com/item?id=3034587
https://news.ycombinator.com/item?id=10178544
[+] [-] libria|6 years ago|reply
> https://news.ycombinator.com/item?id=3034587
This one is a link to a .mobi/Kindle version, for anyone searching.
[+] [-] senorsmile|6 years ago|reply
[+] [-] chrisa|6 years ago|reply
https://www.youtube.com/watch?v=-J_xL4IGhJA&list=PLE18841CAB...
[+] [-] globnomulous|6 years ago|reply
[+] [-] dmitryminkovsky|6 years ago|reply
[+] [-] formalsystem|6 years ago|reply
[+] [-] jholman|6 years ago|reply
(Note that I am commenting on the first half or so of the book, never having gotten past that. Maybe the last half of the book is the best book ever written, I do not know.)
For one thing, half of the examples are calculus. If you are an engineering graduate student with experience in fortran (which is the original intended audience, just watch the original lectures), that's a great idea. For humans with little to no formal mathematical training, it's pretty poor. I once helped to lead a study group on SICP with half a dozen highly motivated junior-to-intermediate programmers, and everyone found the exercises insanely hard for this reason. (Of that group, btw, I would say one student greatly benefited, two dropped out, and the rest got some benefit.)
For second, I strongly disagree with the claim that functional is a "more natural" or "more intuitive" way to think about programming. I've helped teach hundreds of adult students to program (and become working developers), most of them with no prior experience, and I would say that less than 1% of them found recursion anything other than a crushing mindfuck. Whereas more than half of them took to imperative programming in a much shorter length of time (a few weeks, say). (None of these students were given SCIP, tho.)
Based on the perennial praise in threads like this, I concede that must be those in the world for whom it's a great book, and that's great. I am firmly convinced that these people are atypical.
On the other hand, it is a book that concerns itself with important questions, where IMO most books do not, so that alone makes it, as I said at the beginning, a member of a rare and distinguished category.
[+] [-] CalChris|6 years ago|reply
We never had any readings from SICP. It sat on the shelf like an unread bible. I went back to it much later but I didn't like its conception of computer science. I compare it directly to Knuth's Fundamental Algorithms and it just didn't inspire me at all whereas FA did. I'll grant that I can't imagine a freshman course using FA, mostly because assembly language is very much de-emphasized.
However, I'll second someone else's comment about the beauty of the typesetting of this edition. And I really liked Scheme. But neither 61A nor SICP are touchstones for me.
[+] [-] bitwize|6 years ago|reply
[+] [-] methehack|6 years ago|reply
[+] [-] brians|6 years ago|reply
[+] [-] inimino|6 years ago|reply
[+] [-] neilv|6 years ago|reply
Maybe 20 years ago, the authors put the full text for their textbook on the Web, as HTML. This made it more accessible to people, and set an early precedent for freely-available top textbooks on the Web (even though they presumably could've made more money by only selling print copies).
Then, since not all students' computers could run a Web browser, Lytha Ayth manually converted the HTML to Texinfo, with ASCII art of all the figures.
If one has the means to buy the printed book, doing so would seem like a nice gesture, in response to the authors' and publisher's generous sharing and example-setting.
[+] [-] susam|6 years ago|reply
[+] [-] ashton314|6 years ago|reply
[+] [-] acgan|6 years ago|reply
Code: https://github.com/stanfordhaskell/cs43 Site: https://stanford-lambda.gitlab.io
All of the course materials will be open-sourced @ https://github.com/stanfordhaskell/cs43 (previously Clojure, now Haskell!)
If anyone has concrete suggestions on how to improve our curricula, I would be happy to take any suggestions.
[+] [-] 26702670|6 years ago|reply
[+] [-] jcoffland|6 years ago|reply
My favorite part of SICP is where a streaming lazy evaluated version of sin() is defined using cos() which is defined using sin().
[+] [-] zelphirkalt|6 years ago|reply
[+] [-] susam|6 years ago|reply
[+] [-] Recursing|6 years ago|reply
Does anybody know where I can/should host a copy?
[+] [-] dmitryminkovsky|6 years ago|reply
I'm read a PDF :/
[+] [-] ilammy|6 years ago|reply
[+] [-] jwilk|6 years ago|reply
[+] [-] morty_s|6 years ago|reply
It is poetic in its treatment of introductory computer science.
[+] [-] golergka|6 years ago|reply
Please, do it every couple of months.
[+] [-] zabzonk|6 years ago|reply
It seems to me that this is somewhat like the "dragon book" - people were exposed to it before they had read other better books.
[+] [-] madhadron|6 years ago|reply
I just went an reread the forward, and nothing struck me as controversial. Could you elaborate a bit?
[+] [-] linuxhansl|6 years ago|reply
State is only introduced on page 294!!
[+] [-] tejaswidp|6 years ago|reply
Diving into codebases, like the octave and supercollider interpreters recently. might be quite interesting to re-read it.
[+] [-] inimino|6 years ago|reply