Paul Graham reviews Structure and Interpretation of Computer Programs (2000)
amazon.com
amazon.com
> Now that you've learned how to sum an arbitrary list of numbers together, use this knowledge to prove Einstein's general field of relativity.
How about instead of proving physics theories, we use our new knowledge to add together apples and oranges? That is easier for me to comprehend.
I'm not saying this to troll. I know this book is supposed to be great and I plan to read it again. But I'd like to hear why my complaint didn't bother the people here that did finish and love this book. Should I just ignore the exercises?
---
Edit: I want to clarify something. It wasn't that the exercises were too hard to answer. My complaint is that I couldn't even comprehend what some were asking me to do. To me, it was like the exercises were written in French, a language I don't speak. If I could understand what the exercises were asking for, then I could have realized I'm missing something and re-read the section. But as they were written, it made me feel like I should temporarily put the book down and re-take physics and calculus.
[1] http://www.youtube.com/watch?feature=player_detailpage&v=eSl...
For the most part I believe you're mostly complaining about chapter 1 though, maybe chapter 2 when they talk about painters and the exercise with the chessboard. Those are two that come to mind that tend to be excruciatingly long and unnecessarily difficult for beginners. I would advise you to go through the book again, and while this does come off as somewhat snooty, I would say that if you don't understand the math or physics behind some of the exercises, then you should spend time trying to figure out the algorithms for them. Most of the value of the book is actually through the exercises, as typically those are the spots where you'll eventually start to have those "aha!" moments when working with scheme.
As a disclaimer, I should point out that I had quite a bit of programming experience in C++, Python, and other OOP languages before trying SICP. Luckily, I never struggled with the math, and learning Scheme came quite naturally. However, the common problems associated with thinking in Lisp do apply, and it may take several cracks at the book before you really understand the beauty or essence of what SICP tries to teach.
The book is not "The Structure and Interpretation of Rails/Flask/Struts/Ysod CRUD Apps" for a reason.
The problem for the poster above is that if you read SICP outside MIT or especially outside college, you're not surrounded by a bunch of science nerds who can be persuaded to explain general relativity in return for beer and a pizza. If you're not swimming in a sea of science, then problems involving the behavior of fish seem much trickier to solve. I've seen this problem iwth a few other MIT books, eg Horowitz and Hill.
Also, since you've pointed out that the book is called "The Structure and Interpretation of Computer Programs", wouldn't it make more sense for the exercises to be about computer science things instead of math and physics? I own The Art Of Computer Programming by Knuth and it has plenty of exercises in it that are both computer science related and make you think about hard problems.
That said, the book is definitely written for those who have an undeniable aesthetic sense for beautiful problems.
My experience is that once I actually understood the section, the exercises were usually not that hard. However it was very easy to read a section and only think that I understood it.
"If it comes easy, then you're not doing it right."
I don't like that advice at all. Sure, not everything's easy, but the hard way is almost certainly not the right way. When I was learning to program (still am, as should all of us who are programmers), pointers came easy, arrays came easy, hash maps came easy. Almost every concept makes sense. I'm not some intellectual godsend either, so I know there are probably a countless amount of others who feel the same way.
I think that the most likely option is that the "teacher," or at least method of teaching, is bad.
Indeed: Hard exercises have an important purpose. They are about problem solving. But so do easy exercises. They force you to make sure you understand the basics of what you're doing, and suss out bad habits before they become ingrained.
The masters of every subject say stuff like this, and it's really just a type of myopia of the craftsman. I work in manufacturing and people tell you shit like this all the time.
Imagine a 19th Century Car Driver:
"People who think learning to drive should be relatively easy are missing the mastery required for match-rev shifts, air-fuel mixture, spark management - not to mention the intricacies of debugging your carburetor on the side of the road."
Programming will continue to be made more accessible, as is the apparent trend. Nearly no developers know what's really going on under the hood except people who specialize in assembly, CMOS, etc.
Of course it will become easier over time...just like everything. Consider John Carmack and what he did when writing Doom, Wolfenstein, etc...I can almost guarantee you when he was programming, programming was A LOT harder than what it is today. But the difference there is nothing more than time. Even if it's getting easier over time, my main point still stands.
Sure, a simple ray-caster isn't going to need a lot of optimization today. But when you are dealing with the sort of data that is now common. Optimization can be just as important.
While languages have have improved for the better, other things have created other challenges. Consider the PS3 Cell architecture. Considered to be a much more difficult architecture to program for than the processors of Doom's day.
In some ways mathematical knowledge is even easier to obtain since the same logic underpins it as the lambda calculus upon which scheme is built.
That's not to say that some of the exercises don't rate 28 on the Knuth scale. But I don't think there are any 34's or higher...and it goes without saying that the Donald definitely throws in whatever math might be needed regardless of the reader's experience. And yet this doesn't make TAOCP inaccessible.
http://shop.oreilly.com/product/0636920028857.do
I can't recommend this book enough. I'm sure some purists wouldn't put it in the same league as SICP, but I think you might like it.
But if you cannot relate an exercise to the subject matter you just studied, it might also be the case that you think you understand what you just read, but don't really do. It's easy to read math superficially, honestly believing that one has understood the point, when in fact the "mental image" the authors wished to impart on you has not been grasped.
So you should not ignore the exercises, but work hard at them. They (well, some of them) are supposed to be hard. They are supposed to make you think, not just rehash what you just read. And after all that hard work, hopefully, something will click and you will be ready for the next section.
And then you will feel awesome.
The good professors also appear to be carrying that tradition into the revised course ... and the most public attention goes to the switch from scheme to python.
http://www.amazon.com/Engineer---Training-Reference-Michael-...
http://www.amazon.com/review/R403HR4VL71K8/ref=cm_cr_dp_titl...
Also, he is flawed when saying that only about 1 person out of 50 should like this book (the proportion of people who have "this strange way of thinking that makes a programmer"), since the largest part of the people exposed to SICP are programmers, or at the very least interested in computer science.
Disclaimer: I have lots of respect for Norvig and think his PAIP is awesome.
Also, he is flawed when saying that only about 1 person out of 50 should like this book ... since the largest part of the people exposed to SICP are programmers
He acknowledges that by saying "a big part of the explanation is that the audience is self-selected." But he also seems to be acknowledging that not every programmer needs or wants the depth that SICP provides.
> Donald Knuth says he wrote his books for "the one person in 50 who has this strange way of thinking that makes a programmer". I think the most amazing thing about SICP is that there are so FEW people who hate it: if Knuth were right, then only 1 out of 50 people would be giving this 5 stars, instead of about 25 out of 50. Now, a big part of the explanation is that the audience is self-selected, and is not a representative sample. But I think part of it is because Sussman and Abelson have succeeded grandly in communicating "this strange way of thinking" to (some but not all) people who otherwise would never get there.
Although, I only said two things, (1) he acknowledges the audience is self-selected (direct quote from the review), and (2) some people aren't willing to put in the work to gain that level of familiarity with the subject (directly supported by his analogy in the second paragraph).
Does that contradict anything in the review? You seem to be fixated on something else there that S4M and I aren't discussing. If you'd like to draw attention to that, again feel free.
Sometimes people do just want to learn how to drive a car, not how to assemble one from scratch or whatever. If you're expecting the former and you get the latter, it's understandable why you'd be frustrated. There's nothing wrong with that and Norvig doesn't say there is.
I do not understand your criticism of the 1 in 50 quote from Knuth. He's not saying only 1 in 50 are suited for programmers (and therefore everyone who isn't is wrong).
He's saying the set of people who think like that is larger than 1 in 50, as evidenced by 25 5-star reviews. The implication is that if you think like Knuth, you'll enjoy SICP, which doesn't seem that far from the truth, considering how esoteric Knuth and SICP may be for some people.
Norvig doesn't do anything to address ones that think the book is poorly written or gives bad advice (for modern times) or confusing in style, for instance, just claims the 1-stars aren't looking for the same information as the 5-stars.
This amounts to "the book is perfect. your review tells us who you are." which is an extremely-limited-use stance when it comes to critiquing, and simply insulting to anyone who wants what it's offering but doesn't like the presentation.
At least, that's what I got out of it the most. I've always been on the theoretical side of things.
My favorite annotated works:
Annotated Turing: http://www.charlespetzold.com/annotatedturing/
Newton's Principia, The Central Argument: http://www.amazon.com/Newtons-Principia-The-Central-Argument...
That reminds me one of the argument Newton made in his Principia. He said something of the essense that he has intentionally written his Principia in non-friendly dry manner because he wanted readers to have certain degree of discipline and patience and also he wanted to eliminate readers who would just naively attack his works with shallow arguments.
But that was than. Today readers have came to expect certain level of accessibility. But still no one should tell authors how they need to write books. If you think SICP is not accessible enough, go annotate it with your insights and expanded arguments filled with analogies and examples.
In my very fist undergrad class, this was the course textbook. I generally think that I and some others taking the class at that time didnt value it so much, but going forward (especially after the class) I feel like what it talked about is a lot more important than I initially thought. I think that the professors made the right decision, though, giving us the book that early because even though I didnt appreciate the book so much then, I think that I absorbed a lot of its ideas into the way that I code.
The reviewer accuses the 5-star reviewers (not PG and Peter Norvig directly, since that review seems to predate theirs, but that hardly matters) of elitism, and the book itself of "dreadful writing", "advocacy of a language that can be really quite a horror for beginning programmers", and "a terrible job explaining fairly simple ideas".
I'm tempted to say "Yeah, well, that's just, like, your opinion, man."
Developing a useful, general framework for expressing the relations among different types of entities (what philosophers call ``ontology'') seems intractably difficult. The main difference between the confusion that existed ten years ago and the confusion that exists now is that now a variety of inadequate ontological theories have been embodied in a plethora of correspondingly inadequate programming languages. For example, much of the complexity of object-oriented programming languages -- and the subtle and confusing differences among contemporary object-oriented languages -- centers on the treatment of generic operations on interrelated types.
Do they talk about the tree-like structure of inheritance which might be useless in scenarios where the relations can be better modelled by an arbitrary graph?
Also, why would studying OO first be narrowing my ability to learn different paradigms?
Go to the link, and find what it was a footnote on. You'll be reading through a section that is attempting to make operations like addition work in a reasonable way across different numeric types for an abstract math package which needs to support integers, rationals, floating point, complex analogs of all of the above, polynomials over all of the above, and lots of other fun stuff..
Do they talk about the tree-like structure of inheritance which might be useless in scenarios where the relations can be better modelled by an arbitrary graph?
Look at http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-18.html... for a set of different geometric types that is challenging to model with inheritance.
Also, why would studying OO first be narrowing my ability to learn different paradigm?
Because your mind naturally goes through prepared channels. If you've got OO available to you, then you naturally solve the simple versions of problems with OO. Then when you get to the subtleties of the complex version that your form of OO doesn't work well for, it is hard to see that OO isn't a good fit, rather than being trapped into thinking that you just chose a poor initial model.
[...] a very particular piece of grammar, expressing a nuance that standard English leaves to context. Black English is a seemingly still water that runs deep.
http://www.theroot.com/views/why-dea-needs-ebonics-translato...
Shorman was particularly good at getting players who were stuck in the 1800-2200 USCF rating range moving again. One of the big reasons people get stuck is that they are trying to play too good. They are trying to apply deep positional concepts they learn from reading annotated grandmaster games, or reading books with titles like "Play Like a Grandmaster!". They are planning openings developed by grandmasters for use against grandmasters.
That's fine for grandmasters--because grandmasters UNDERSTAND what is going on. All of those deep positional concepts that shape grandmaster thought are ultimately designed to lead to a tactical advantage over their opponent, or to prevent bad tactical things from happening to them. To understand the positional stuff, you have to thoroughly understand the underlying tactics.
Shorman would steer these stuck players toward a more aggressive approach. Play the most aggressive move they can (that you can't see an outright refutation for). Open with gambits that give you a good attack.
This worked. As the stuck players got used to the sharp games that arose from this style of play, and came to really understand how the pieces worked tactically, they'd start understanding positional play, and be ready to move toward playing good chess.
The way Shorman put it was something like this (paraphrased since I can't remember it exactly): before you can play good chess, you have to get good at bad chess.
Now, when will it and The Art of Computer Programming be available in an electronic format?
[1] http://mitpress.mit.edu/sicp/full-text/book/book.html
[2] https://github.com/twcamper/sicp-kindle
Also, it's probably ethical that if you've bought TAoCP, then it's ok to download it in PDF form. Some people like PDFs instead of hardcopy.
If yes - that person was ready. If no, if as a result both code and the language of that person got filled with formal and obscure complications... then no. Not ready.
Oh, and don't overlook the footnotes, some have very interesting bits.
Anybody?
Strictly speaking, al. is actually an abbreviation that could mean any of the Latin words alii, aliae or alia. Which one is appropriate would depend on the gender(s) of said others.
http://webcast.berkeley.edu/playlist#c,s,Spring_2011,EC3E890...
along with the home page for the class:
http://inst.eecs.berkeley.edu/~cs61a/sp11/
I'm going to use it to complement the PDF version of SICP posted above in this thread.
(Just kidding. I also didn't know the answer, not having read SICP, this would be my guess, but I believe axblount is right.)