3 ms·
I don’t really like the recommendation for SICP. The book expects a certain level of mathematical maturity from the reader and I think this level is significant
by dan-robertson 8y ago
I don’t really like the recommendation for SICP. The book expects a certain level of mathematical maturity from the reader and I think this level is significantly greater than the level that might be expected from the targets of this website. Mathematical maturity in this case can be broken into two parts:
1. Understanding what a proof is, what is required to prove some proposition, how to figure out and write a proof, how to cope with struggling to prove something, and how to carefully read definitions.
2. Just knowing what “basic” things are. In the case of SICP these include calculus in one variable, lots of elementary algebra, an understanding of polynomials and exponentials, vectors and linear transformations (roughly the level of geometry required for basic classical mechanics (c.f. SICM although this is a slightly more advanced way of doing mechanics))
It is easy to see this requirement by looking at the exercises from the book. They start with calculus themed exercises (e.g. Newton’s method), move on towards more algebra flavoured problems and then vectors/geometry. Later exercises are not on mathematics but require one to apply a reasonable amount of mathematical sophistication to get the answer. Throughout are exercises which rely on the reader carefully applying their careful reading of carefully written definitions for things like models of evaluation.
I have another issue which is with the following:
CS is basically a runaway branch of applied math, so learning math will give you a competitive advantage.
I basically disagree with this entirely. I would say that computer science is basically a branch of pure mathematics with applications to engineering practice with real-life computers. I’m not sure I would describe it as runaway but some branches of computer science (eg operating systems) are, I think, not really branches of mathematics.
- westoncb 8y agoThat kind of annoyed me when I delved into a it a while ago, too. I have decent mathematical sophistication (I do a lot of linear algebra and computational geometry for work, read graphics papers and math history), though I'm largely self-taught, and had bad gaps in very basic things at the time I was attempting to read SICP. So when I came across all the math-related stuff in it, I'd have to stop reading and go learn about some things that were basically orthogonal to the subject matter I was actually interested in from the book (e.g. principles for effectively managing complexity with functional constructs). It's one thing to say CS and math have similar intrinsic structure—but that doesn't mean the content of the two fields need to overlap, and we shouldn't assume the content of one in the other. Imagine if you were reading a book on real analysis but they kept bringing in examples that required you to know CS stuff.
- dan-robertson 8y agoI basically agree. SICP makes a lot more sense when considered in the context of a course at MIT, taken after a first course in calculus. The exercises are easy to motivate if one can motivate the study of calculus (e.g. calculus is useful because X, therefore doing calculus by computer is useful because X but faster). The examples therefore feel relevant to what one knows and what one knows is useful (or at least considered useful by lecturers). I think it is hard to find good exercises for this sort of early computer science outside of mathematics sadly. It seems to me that there is less variety in the computational constructs one might use in solving problems about producing or processing text (which are concisely written and have a small solution), but I think the book does emphasise mathematical examples more than needed. For example there are other first examples of higher order functions than Newton Raphson, and proving things on the way to a logarithmic Fibonacci algorithm is largely irrelevant to the kind of computer science that people looking at Teach yourself Computer Science are interested in.
- clumsysmurf 8y agoDo you think How to Design Programs (TtDP) is a good alternative to SICP? It seems gentler, but if one were to go the HtDP route, what would come after? SICP or something else? http://www.htdp.org/ http://www.htdp.org/
- furo 8y agoI can't say for sure, but the TYSCS says "For those who find SICP too challenging, we recommend How to Design Programs."
- dan-robertson 8y agoWell I don’t really know anything about it but it seems ok. The programming environment is easier to set up than in SICP which removes a barrier to entry. I’m not really convinced that scheme is the be all and end all of teaching languages. It has some nice qualities and some that can make programming more difficult. For example I think the kind of interaction is good but often in that interaction one is essentially repeatedly refactoring a small part of the program and TNT’s language does not offer much to ensure that these refactoring are correct for any definition of correct. I think a ML style language could be good for teaching too although often the errors that are produced can be quite unhelpful. The book seems like it covers some nice introductory things (like splitting up programs into small functions) and some harder things to get to grips with like quoting. But I haven’t had a very thorough look. The thing I really like about SICP is the idea of building up a model of how programs are interpreted and evaluated. The book produces plausible models for evaluation and demonstrates how one can test between the two and where they are wrong. I like this for two reasons: 1. It really feels like science, coming up with ideas, testing them, seeing when you are wrong. This feels especially useful when one considers mordern systems built out of so many individually large things that it is hard to keep track of things perfectly. It is useful in real life to build up models for what’s going on and think about how you might test them and where you might be wrong. I like that the book reminds you that computer systems may be tested in the same scientific way that the real world might. 2. (Because these evaluation models are implemented in code) it makes the process of compilation and evaluation seem much more understandable and less like magic. One can have an ok understanding of machine code and how a machine roughly works without ever having to write any. On the other hand maybe these reasons are wushu-washy and no one really needs such concepts for computer science.