- 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/ 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.
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.
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.
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.
(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.