

Ask HN: The SICP book readers? - jozi9

Everyone is saying that it&#x27;s one of the best books for CS, and you can learn a lot from it, but I feel they&#x27;re just bluffing because no one explains WHAT they have learnt exactly.
======
deangiberson
They 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.

------
am391
I'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
Can you give me ONE example?

~~~
am391
Sure, checkout Chapter 2 ([http://mitpress.mit.edu/sicp/full-text/book/book-
Z-H-13.html...](http://mitpress.mit.edu/sicp/full-text/book/book-
Z-H-13.html#%_chap_2)). 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
Thanks!

------
jonjacky
I 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
I 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
What 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.

