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.
I'm a relative late comer to programming and having read the first 3 chapters within a year or two of starting to program "in earnest", I echo your sentiments. I feel like it really taught me how to think like a programmer. I should really finish it.
Check some second-hand online stores like abebooks (mostly ships from US so it's way too expensive) or from biblio which has more accessible shipping rates [1]
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:
If MIT Scheme runs on your computer, great. IIRC, SICP support was added to DrRacket with the idea that it would be more accessible to new students (runs on more computers, student-oriented IDE that's less-intimidating than something Emacs-ish).
I actually knew Clojure going into the course and it helped make Scheme easier to pick up, but I think to make the code exercises more straightforward, it's better to use Racket and #lang sicp as someone suggested.
I started with Clojure but ultimately ended up using scheme. Clojure has built in solutions to some of the things that you’re asked in exercises which I think takes away from the experience.
I think it makes sense to use whatever language you want, and the ideas in the book don't only apply to Scheme.
I've been working through the book in Javascript - https://github.com/ahuth/sicp/. Maybe I'm losing something by doing it in JS instead of Scheme, but I'm still learning a lot and having a ton of fun.
I think if a language has decent lambdas - JavaScript qualifies - it'll work for SICP. That said, using Scheme for it will give you a much better appreciation of an underrated language.
There's a case to be made for alternatives to MIT Scheme. A good example of this is the exercises where you might employ the OOP system that SICP describes like the constraint-solver or metacircular evaluator but realize that you could be much more productive if you had some kind of controlled method for generating similar piles of code from some base implementation, something which is found in the object systems like CLOS like GOOPS or ChrisH's SOS or even Emacs's EIEIO here [2].
There's no impediment to completing Chapters 1 & 2 in Clojure, but the first chapters are not what is called to mind by "Structure and Interpretation of Computer Programs" [1].
- Function redefinition is extremely useful required if you want to write your code in a linear fashion as intended. Clojure automatically sets up a major hindrance here.
- A few subchapters explore parallel computation, Clojure is likely to lead you astray here as you try to find directly corresponding functions and why exactly the authors are suggesting.
- Several chapters explore mutable lists in detail. Serious complaints have been made about the suitability of Racket here, where there exists no more of a barrier than that methods which operate on mutable lists are prefixed with a specially named qualifier. Clojure would be functionally impossible here.
- On the plus side, the "JIT" meta-evaluator will be a much more interesting challenge!
You'll notice that all of these issues can be worked around. However, SICP with exercises will take you about a year if you're a serious student.
[1] Huffman trees exercises excluded.
[2] Doing the whole thing in Emacs Lisp is potentially fantastic. I don't know if I can wholeheartedly recommend it, but I would be really pleased if someone wrote tests and built the metaevaluator, compiler and really went the whole nine yards here.
I listened to that episode recently. Really dig your podcast; always looking forward to new episodes. I really appreciate the semi-esoteric topics while staying lucid and engaging (I think I found the podcast while I was mucking about with idris). Keep it up!
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.
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.
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.
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 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.
K&R blew my mind when I was a teenager, but years flipping through it again it does nothing for me. I think the experience somebody will have with K&R depends greatly on their previous experiences.
It's certainly not "mind-blowing", and is not intended to be, but it is a brilliant example of how a technical book on a specific programming language should be written.
"Blow my mind" might be a bit of an exaggeration, but whatever magic was once in the book is now gone for me. Experience with other books and other languages has shifted my perspective such that K&R no longer feels special to me.
Good question -- I appreciate it. The application of human ingenuity to solving problems maybe (engineering in the widest sense). But there's something even more abstract, I think... Something more like _thinking_ most generally. It's almost like reading philosophy in the way it carefully and openly walks through a progression of thoughts...
K&R still holds a place for me as one of my favorite programming books. It may not hold up today, especially not for new readers, but at a time when the alternatives were Pascal, Fortran, Basic and Assembly, the C Programming Language was an intoxicating blend of power and elegance. In addition to serving as an introduction to C, K&R was opinionated in a way that I hadn't seen from other programming books to that point, with as much emphasis on style as how to get things done. It's the Strunk and White of programming (or was at the time).
I know you probably mean it as a compliment to K&R, but you shouldn't compare K&R with S&W: while both are opinionated, the advice in K&R is coherent and sensible!
S&W is a bizarre book: it's a pleasure to read because the authors are both excellent writers, but they don't know anything about grammar so their advice often makes no sense. Seriously, read it again (it's a short book) and count how many times they actually follow their own grammatical advice (their advice not about a technical grammar point is usually sound, and you should, for example, omit needless words). My opinion is that you should take S&W as style exemplar, but not a style guide.
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.
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.
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.
Sussman is still teaching SICP through his Adventures in Advanced Symbolic Programming [1].
The Python course happened clearly due to politics and popular appeal. Sussman expressed his disappointment about it multiple times. Abelson did the same in the interview that's linked in this thread.
It is sad but a good example of how far the academic institution has fallen in this century. Ultimately it is the students that really lose out.
I feel these moves are part of a general move towards "industry ready" skills and away from fundamentals earlier and earlier in computer science programs (even prestigious ones). Whether that's a good or bad thing is a separate discussion from your opinions on SICP.
What's your personal experience with SICP? It sounds like you were a student in one of these courses ("we never used it again") but you also wrote "We never had any readings from SICP." so I'm not sure what you took and when. Did you work through SICP and still find it overrated?
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 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.
I don't totally disagree with you btw. Pretty sure in that interview with Hal Abelson someone mentioned above, he admitted the book leaned a little heavily on calculus because all MIT freshmen had to take that course, so it seemed a natural source for examples. Perhaps not as natural to someone who hasn't taken a calculus course in a decade (me). I still got a lot out of the book though.
> but I'm fairly certain the original course was taught to MIT undergrads as an intro to CS and EE
This is correct: The course number was 6.001 and was a requirement in EECS in those days. I took it while SICP was still only notes in 1983, and the notes ended up as a book shortly after.
Must not have been clear in my post: It was 6.001 in 1983, when I took the class with Sussman and Abelson. The book was still not published, and they gave it to us as xeroxed notes.
There's an interview of Abelson floating around where he is asked why there was so much calculus in the examples and exercises. His response was that it was written for students who had just finished multiple semesters of calculus, so it made sense to use it. He goes on to indicate they made a second version, handed out as class notes to students in art degrees where the calculus was all replaced.
I also think you are introducing functional programming the wrong way to beginners. It's best and most intuitive use imho is in a math class. For example this book: https://cs.wheaton.edu/~tvandrun/dmfp/ has little prereqs, and will teach the reader both programming and math regardless of educational background. It really, really shines when it comes to learning counter-intuitive things like cardinality. I'm not the only person who thinks so either, here is one of the curriculum designers of Bootstrap, a US highschool programming curriculum, explaining how naturally that style of programming fits with algebra classes. https://www.janestreet.com/tech-talks/curriculumn-design/
Oh, boy, you should really finish reading the book! The second half is amazing. I just looked through the table of contents and almost all the things I remembered most fondly are in chapters 3, 4 and 5. It's all about understanding computing paradigms and related concepts by implementing them. It does circuits, object-oriented programming languages, dataflow languages, logic programming, register machines, garbage collection, compilers, etc.
Throughout the authors have very good taste in choosing the level of detail and realism in which to implement things to let you quickly get at the core ideas without getting bogged down in technical points.
As for the first half only being fit for fortran-programming engineering students, I remember that very differently. I only remember a few examples as requiring calculus, say Newton's method, some numeric integration procedures, symbolic differentiation, power series implemented as lazy lists of coefficients, maybe one or two more. And other than the power series, I don't remember any of those examples as requiring more than just high school calculus ---which makes sense, because I think the course is meant for college freshmen, which will have only completed high school calculus, and probably are taking a more advanced calculus class concurrently.
Although judging from my own undergraduate students it is probably best not to assume most students remember calculus from high school. Plus, I understand there are countries, such as the US, where calculus isn't even compulsory in high school! So maybe removing those few calculus examples would make the book seem friendlier and shorten it by 10 pages or so.
The pure-math focus is what made it a slog for me to get through, though I'm clearly not the intended audience. I was 20+ years out of college when I first read it and it had been over a decade since the last time I'd had any reason to think at all about many of the areas of math it takes as a given that the reader knows like the back of their hand. To be fair, I would have been more comfortable with the examples if I'd read the book in my first year of college, with high-school calculus still fresh in my mind. But as it was, I spent way more time reading Wikipedia pages about the math concepts in the examples than I spent thinking about the concepts the book was trying to use those examples to illuminate.
It was worth the read. I just think with a wider variety of examples, I could have gotten the exact same benefit with far less extraneous effort.
Listen to President Donald Trump demand a $4 billion dollar bribe from child rapists to "turn a blind eye" on January 3, 2019. Download the video, turn the volume all the way up and put head phones on. Trump is on a call from with Henry Porter and Gigi Hadid. (Page 63) Bribe demand @1018am
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."
> Does anybody know where I can/should host a copy?
With torrent or IPFS, perhaps? (Given the CC BY-SA license, this would be completely legal.)
Also, GitHub's behaviour wrt to LFS is really disappointing — the epub file could have been stored normally with git (its size of ~ 3 MB is far less than the hard limit of 100 MB), in which case there would have been no issues of exceeding a data quota...
For comparison, the linked PDF is normally indexed with git, despite weighing at 7.7 MB.
Since LFS is supposed to reduce total bandwidth use for the hoster, GitHub is, in effect, punishing people for reducing GitHub's bandwidth usage...
Actually, the linked PDF is originally[0] by the same author as the EPUB version you linked. However, in the original repository[0] the PDF is managed with LFS, so it's inaccessible...
On Debian GNU/Linux, I had to install a few packages in addition to base tetex:
latexmk fonts-inconsolata linuxlibertine fonts-linuxlibertine texlive-fonts-extra texlive-latex-extra
I also downloaded locally installed the two suggested fonts to /usr/local/share/fonts/truetype/
Build took a few minutes on an older box, but looks spiffy.
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 :)
I agree with the spirit of this comment: good typesetting is a delight, and TeX is the best tool I've seen for achieving it. We are lucky that its author made the result of his researches freely available, and that a community has kept it alive. I'll just point out that simply using LaTeX does not automatically guarantee great typesetting (you have to know what you want) though it does provide a baseline of decent paragraphs at least. Nit: TeX/LaTeX do not inherently avoid rivers (though see https://tex.stackexchange.com/q/29049/48 and https://tex.stackexchange.com/q/4507/48), and the body font in this PDF is not Garamond but Linux Libertine.
Computer Modern looks decent in print, which it was designed for (pick up any book by Knuth, not a modern book typeset with LaTeX). It looks less good on screen, partly because on-screen output barely existed at the time it was designed, and partly because what you've seen is probably not really Computer Modern: https://tex.stackexchange.com/a/361722/48
A similar story happened to Courier, which, afaik, was digitized from the designs meant for printing and thus accounting for print ink gain. On its own the the font's forms look too thin too.
I went through SICP a few years after finishing my computer science degree and enjoyed it greatly. It was a great experience and I think made me quite a bit better developer. I also became a huge fan of lisp which I think is one of the side effects of this book.
It does not assume anything except algebra (and I think some minor calculus concepts are mentioned in passing, as using higher-order functions to estimate derivatives or some such, but not at all required).
However, it is designed to be used in an introductory university course led by experienced instructors. Without support, even a highly motivated high school group would have a hard time with the material and pace. So I would say it all depends on the high schoolers, and especially on the support available.
This is not true. I've watched conversations on this over the years on HN, and inevitably you get a few people saying the math is nothing to worry about, and then a bunch of people saying they had to give up because they didn't have the math background (oftentimes these are professional programmers).
My recollection from the bit of time I spent with it was that most of the examples were drawn from mathematics, often times relying on implicit bits of knowledge that would lose a reader unless they'd had long interest/experience in math.
I think the issue in divided opinions here is a matter of lost perception of the range of math knowledge: I've noticed this same communication difficulty when playing new people at Go and they ask whether I'm good or not. I never really know how to reply because on an absolute scale I'm an abysmal player—but against anyone who's never really studied the game I'll appear incredibly skilled.
When people answer that SICP requires very little math background, I think that's an accurate phrasing relative to a more global scale of math knowledge. But in the realm of folks with no particular interest in math, it requires a relatively sophisticated knowledge of mathematics.
If a high-schooler is training for math olympiads or they're on track to study math/CS/etc. at a top-tier university, they'll probably be fine. All the others will likely be completely lost.
From some other replies it seems my recollection of the density of calculus in the exercises was incorrect.
However, I do think the math shouldn't be a great hurdle with the right guidance, but:
> If a high-schooler is training for math olympiads or they're on track to study math/CS/etc. at a top-tier university, they'll probably be fine. All the others will likely be completely lost.
It requires significant math not available to most high schoolers or indeed most adults. Using it with adults with non-CS degrees, we ran into big problems with the symbolic algebra system that motivates the early chapters.
HtDP is all about a 'design recipe' which is worth understanding even if you've studied SICP. On the other hand it's very slow-paced in comparison and won't stretch you the same way.
Yes HtDP was designed to be more approachable for a wider audience and doesn't require familiarity with undergraduate freshman math, physics, and electrical engineering. It could be used as an introduction to programming and CS for anyone who's taken middle school algrebra.
For high school students, it's likely to be more appropriate.
That said, if a student expresses an interest in SICP, they shouldn't be dissuaded from tackling it.
They overlap some, but also each have unique lessons from a student would benefit.
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).
When I took it at Boston University in 1987, it was my last class for the BS/CS. And one of the toughest because I had so much imperative/side-effect ridden code to unlearn.
Does the MIT Python replacement go "functional first"?
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().
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.
> 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.
150 comments
[ 2.8 ms ] story [ 230 ms ] threadIt is poetic in its treatment of introductory computer science.
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
> https://news.ycombinator.com/item?id=3034587
This one is a link to a .mobi/Kindle version, for anyone searching.
https://mitpress.mit.edu/sites/default/files/sicp/full-text/...
Also, the physical book is available for only $40.
I know technical books are expensive and the book has 688 pages but it seems expensive.
If somebody wants to ship their used SICP book in Romania I would love to take it. It's on my wish list since forever.
Salutari din Romania!
https://www.biblio.com/search.php?author=&title=structure+an...
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
https://docs.racket-lang.org/sicp-manual/index.html
I’d suggest going with a scheme such as racket.
I've been working through the book in Javascript - https://github.com/ahuth/sicp/. Maybe I'm losing something by doing it in JS instead of Scheme, but I'm still learning a lot and having a ton of fun.
Wrote a little bit about SICP here: https://ahuth.github.io/articles/the-first-time-sicp-blew-my....
There's no impediment to completing Chapters 1 & 2 in Clojure, but the first chapters are not what is called to mind by "Structure and Interpretation of Computer Programs" [1].
- Function redefinition is extremely useful required if you want to write your code in a linear fashion as intended. Clojure automatically sets up a major hindrance here.
- A few subchapters explore parallel computation, Clojure is likely to lead you astray here as you try to find directly corresponding functions and why exactly the authors are suggesting.
- Several chapters explore mutable lists in detail. Serious complaints have been made about the suitability of Racket here, where there exists no more of a barrier than that methods which operate on mutable lists are prefixed with a specially named qualifier. Clojure would be functionally impossible here.
- On the plus side, the "JIT" meta-evaluator will be a much more interesting challenge!
You'll notice that all of these issues can be worked around. However, SICP with exercises will take you about a year if you're a serious student.
[1] Huffman trees exercises excluded.
[2] Doing the whole thing in Emacs Lisp is potentially fantastic. I don't know if I can wholeheartedly recommend it, but I would be really pleased if someone wrote tests and built the metaevaluator, compiler and really went the whole nine yards here.
I worked through the book using #lang sicp in racket however.
I’d love to do this myself with other people! The idea of a "retreat", seeing programming as a hobby is great.
However, I could never get into SICP mostly because it was so... impractical and pure.
Besides i'd had enough of RPN working on https://en.wikipedia.org/wiki/Elektronika_MK-61 .
I suppose one should get into SICP when one is still at the right age (<25)
What endeavour exactly?
On the chance you don't know — and because many don't — Kernighan & Plauger wrote The Elements of Programming Style a few years earlier.
S&W is a bizarre book: it's a pleasure to read because the authors are both excellent writers, but they don't know anything about grammar so their advice often makes no sense. Seriously, read it again (it's a short book) and count how many times they actually follow their own grammatical advice (their advice not about a technical grammar point is usually sound, and you should, for example, omit needless words). My opinion is that you should take S&W as style exemplar, but not a style guide.
Geoffrey Pullum's article 50 Years of Stupid Grammar Advice explains all this better than I can: http://www.lel.ed.ac.uk/~gpullum/50years.pdf
CTM is in many ways a SICP sequel, and equally ambitious.
Some other pointers: http://wiki.c2.com/?ConceptsTechniquesAndModelsOfComputerPro...
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.
The Python course happened clearly due to politics and popular appeal. Sussman expressed his disappointment about it multiple times. Abelson did the same in the interview that's linked in this thread.
It is sad but a good example of how far the academic institution has fallen in this century. Ultimately it is the students that really lose out.
[1] https://groups.csail.mit.edu/mac/users/gjs/6.945/
What's your personal experience with SICP? It sounds like you were a student in one of these courses ("we never used it again") but you also wrote "We never had any readings from SICP." so I'm not sure what you took and when. Did you work through SICP and still find it overrated?
(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.
I don't totally disagree with you btw. Pretty sure in that interview with Hal Abelson someone mentioned above, he admitted the book leaned a little heavily on calculus because all MIT freshmen had to take that course, so it seemed a natural source for examples. Perhaps not as natural to someone who hasn't taken a calculus course in a decade (me). I still got a lot out of the book though.
This is correct: The course number was 6.001 and was a requirement in EECS in those days. I took it while SICP was still only notes in 1983, and the notes ended up as a book shortly after.
I also think you are introducing functional programming the wrong way to beginners. It's best and most intuitive use imho is in a math class. For example this book: https://cs.wheaton.edu/~tvandrun/dmfp/ has little prereqs, and will teach the reader both programming and math regardless of educational background. It really, really shines when it comes to learning counter-intuitive things like cardinality. I'm not the only person who thinks so either, here is one of the curriculum designers of Bootstrap, a US highschool programming curriculum, explaining how naturally that style of programming fits with algebra classes. https://www.janestreet.com/tech-talks/curriculumn-design/
Throughout the authors have very good taste in choosing the level of detail and realism in which to implement things to let you quickly get at the core ideas without getting bogged down in technical points.
As for the first half only being fit for fortran-programming engineering students, I remember that very differently. I only remember a few examples as requiring calculus, say Newton's method, some numeric integration procedures, symbolic differentiation, power series implemented as lazy lists of coefficients, maybe one or two more. And other than the power series, I don't remember any of those examples as requiring more than just high school calculus ---which makes sense, because I think the course is meant for college freshmen, which will have only completed high school calculus, and probably are taking a more advanced calculus class concurrently.
Although judging from my own undergraduate students it is probably best not to assume most students remember calculus from high school. Plus, I understand there are countries, such as the US, where calculus isn't even compulsory in high school! So maybe removing those few calculus examples would make the book seem friendlier and shorten it by 10 pages or so.
It was worth the read. I just think with a wider variety of examples, I could have gotten the exact same benefit with far less extraneous effort.
Listen to President Donald Trump demand a $4 billion dollar bribe from child rapists to "turn a blind eye" on January 3, 2019. Download the video, turn the volume all the way up and put head phones on. Trump is on a call from with Henry Porter and Gigi Hadid. (Page 63) Bribe demand @1018am
https://drive.google.com/file/d/1Grdr8xF2psKNsuYlEnl9dIRV-77...
This is the tip of the iceberg. PDF link below:
Full 84 page document [updated 9Sep]: FBI_FinalDraft_26Jul2019_BSchlenker.pdf
https://drive.google.com/file/d/1Sj9EN_pHmicKS6rFQlmk67knMdJ...
Watch the Buffalo Police illegally seize my apartment at 307 Summer. This was done for child rapist Henry Porter.
Here is the video. See pages 7-10 for more...
18JanCh4_KnockToEnd.avi
https://drive.google.com/file/d/1N2mozGdPD7HMWELjRhvIZ94eBLj...
Transcript of the event:
https://drive.google.com/file/d/192B7tZa3b23Ab0UkSLGqNuLBUrD...
This is the tip of the iceberg.
Full 84 page document [updated 9Sep]: FBI_FinalDraft_26Jul2019_BSchlenker.pdf
https://drive.google.com/file/d/1Sj9EN_pHmicKS6rFQlmk67knMdJ...
Flag them instead: https://news.ycombinator.com/newsfaq.html#cflag
Does anybody know where I can/should host a copy?
With torrent or IPFS, perhaps? (Given the CC BY-SA license, this would be completely legal.)
Also, GitHub's behaviour wrt to LFS is really disappointing — the epub file could have been stored normally with git (its size of ~ 3 MB is far less than the hard limit of 100 MB), in which case there would have been no issues of exceeding a data quota...
For comparison, the linked PDF is normally indexed with git, despite weighing at 7.7 MB.
Since LFS is supposed to reduce total bandwidth use for the hoster, GitHub is, in effect, punishing people for reducing GitHub's bandwidth usage...
Actually, the linked PDF is originally[0] by the same author as the EPUB version you linked. However, in the original repository[0] the PDF is managed with LFS, so it's inaccessible...
[0] https://github.com/sarabander/sicp-pdf
On Debian GNU/Linux, I had to install a few packages in addition to base tetex: latexmk fonts-inconsolata linuxlibertine fonts-linuxlibertine texlive-fonts-extra texlive-latex-extra
I also downloaded locally installed the two suggested fonts to /usr/local/share/fonts/truetype/
Build took a few minutes on an older box, but looks spiffy.
The typesetting of this book seems due to Andres Raba (sarabander on GitHub), and the LaTeX is generated by a script from texinfo format: https://github.com/sarabander/sicp-pdf/tree/5b3a5b2/src
Or, does it assume some prereqs?
However, it is designed to be used in an introductory university course led by experienced instructors. Without support, even a highly motivated high school group would have a hard time with the material and pace. So I would say it all depends on the high schoolers, and especially on the support available.
My recollection from the bit of time I spent with it was that most of the examples were drawn from mathematics, often times relying on implicit bits of knowledge that would lose a reader unless they'd had long interest/experience in math.
I think the issue in divided opinions here is a matter of lost perception of the range of math knowledge: I've noticed this same communication difficulty when playing new people at Go and they ask whether I'm good or not. I never really know how to reply because on an absolute scale I'm an abysmal player—but against anyone who's never really studied the game I'll appear incredibly skilled.
When people answer that SICP requires very little math background, I think that's an accurate phrasing relative to a more global scale of math knowledge. But in the realm of folks with no particular interest in math, it requires a relatively sophisticated knowledge of mathematics.
If a high-schooler is training for math olympiads or they're on track to study math/CS/etc. at a top-tier university, they'll probably be fine. All the others will likely be completely lost.
Here's another example from today's thread: https://news.ycombinator.com/item?id=21301474
However, I do think the math shouldn't be a great hurdle with the right guidance, but:
> If a high-schooler is training for math olympiads or they're on track to study math/CS/etc. at a top-tier university, they'll probably be fine. All the others will likely be completely lost.
This is probably the right answer.
Bills itself as an intro to SICP for high schoolers.
I did a quick glance and HDP seems to use DrRacket, but is the material comparable, with HDP just more appropriate for beginners??
For high school students, it's likely to be more appropriate.
That said, if a student expresses an interest in SICP, they shouldn't be dissuaded from tackling it.
They overlap some, but also each have unique lessons from a student would benefit.
https://www.youtube.com/watch?v=-J_xL4IGhJA&list=PLE18841CAB...
Diving into codebases, like the octave and supercollider interpreters recently. might be quite interesting to re-read it.
Does the MIT Python replacement go "functional first"?
My favorite part of SICP is where a streaming lazy evaluated version of sin() is defined using cos() which is defined using sin().
Please, do it every couple of months.
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 just went an reread the forward, and nothing struck me as controversial. Could you elaborate a bit?
I'm read a PDF :/