4 ms·
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
by jholman 7y ago
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.
- branweb 7y agoNot sure about the video lectures, but I'm fairly certain the original course was taught to MIT undergrads as an intro to CS and EE. See https://people.eecs.berkeley.edu/~bh/sicp.html https://people.eecs.berkeley.edu/~bh/sicp.html and https://mitpress.mit.edu/sites/default/files/sicp/course.html https://mitpress.mit.edu/sites/default/files/sicp/course.htm.... 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.
- jpmattia 7y ago> 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.
- reikonomusha 7y agoThe second half of the book (Ch 4 & 5) I think are paramount to SICP, and arguably the apex of the book.
- hackermailman 7y agoThere'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/ 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/ https://www.janestreet.com/tech-talks/curriculumn-design/
- omaranto 7y agoOh, 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.
- peterkelly 7y agoThe first half of the book is basically just warm-up material to set the scene. Chapters 4 and 5 are what make it truly special.
- koreth1 7y agoThe 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.