5 ms·
Ask HN: The SICP book readers?
Everyone is saying that it's one of the best books for CS, and you can learn a lot from it, but I feel they're just bluffing because no one explains WHAT they have learnt exactly.
- am391 12y agoI'm reading SICP at the moment and have to say it's been a real eye opener. I'm finding that seeing concepts I take for granted when I'm programming being built up from first principles changes the way I think about the languages I use. I'm not sure it's made me a better programmer, but it has given me a better understanding of why programming languages are the way they are.
- jozi9 12y agoCan you give me ONE example?
- am391 12y agoSure, checkout Chapter 2 (http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-13.html#%_chap_2 http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-13.html...). It shows how you can define data structures such as lists or trees from a simple pair concept and then define generic operations over them, such as map. For me that's been one of the great things about the book, it shows how you can build higher and higher levels of abstraction from relatively simple structures.
- jozi9 12y agoThanks!
- deangiberson 12y agoThey can't explain what they've learned, because SICP covers so much ground. The best way I can explain is by negative examples. SICP is not: - A learn X in 7 days book - A technique driven solution book (cookbook) - A quick overview of the new hotness library/language/api/framework - A list of all the functions that you should know - A reprinting of the half complete wiki documentation of a weekend github toy - A one off read that you dump in the recycle bin SICP gives grounding to some of the core problems in computer science. I've returned to it several times, and I always learn something from what I've missed before. Understanding how functions/closures/namespaces/objects all interrelate, how to think in recursion, building higher order programs from pieces, it even covers simple examples of VMs. It's a very strong entry text that has stood the test of time, and is still providing value. Few texts in comp-sci can say the same. SICP does a good job of connecting the theory of comp-sci with a real language without overwhelming the student with absurd language syntax problems. When any one asks me to recommend a computer book I recommend SICP. Best of all no one has to take my word for it, the book is free. https://mitpress.mit.edu/sicp/ https://mitpress.mit.edu/sicp/ go read it and form an opinion. Who is SICP not for? If you are at a high level with programming with multiple languages under your belt, most of this would seem like a refresher. If you really "know" VMs then this is going to very low level stuff. If you want a quick read to learn the syntax for scheme this is not the book for you.
- jonjacky 12y agoI recently looked at SICP again after first reading it many years ago. I had retained the overall impression that SICP demonstrates how to build many of the celebrated creations of computer science - interpreters, compilers, databases, logic programming systems, circuit simulators - using a very simple programming language with just a few constructs. But I had forgotten many of the details. Here is just one: in 3.1.1, Local State Variables, SICP shows how to, in effect, define classes and create objects using only function definition with lambda and set! (that is, assignment) in the definition body. The function you define this way is a like a class, the functions it returns are like instances. So you can do all this without any specifically object-oriented language features. This occupies just a few pages near the beginning of a long book - the whole book is dense with worked-out ideas like this.
- jonjacky 12y agoI would add that the cumulative effect of all these examples in SICP is to demonstrate that you can solve any programming problem from first principles - that is, by combining a few simple but powerful constructs in the several ways they describe. Moreover, a solution constructed this way might be simpler and easier to understand than a solution made the more usual way: by looking for a specialized language construct or library that seems to offer an already-made solution to the problem.
- informatimago 12y agoWhat SICP teaches is how to use various types of abstractions to build software. (It is lacking syntactic abstraction, as provided by Common Lisp macros, but one can argue that metalinguistic abstraction, which is covered, supercedes syntactic abstraction). Also, for normal programmer, it works (along with the videos) like a mind-openner: you won't understand programming the same way after having studied it. It has a mind-freeing effect.