| What I like about SICP is how it shows how several different moderately-advanced (for an undergraduate) programming concepts are all related by a basic model of computing that's defined in the book. It builds from first principles (among other things): * (the core) the lisp metacircular evaluator * computer algebra * logic programming [1] * a register machine * a compiler targeting that register machine (lazy evaluation, streams vs. lists, concurrency, and more) I can't think of any other book in the undergraduate canon with that kind of breadth. Personally I didn't really see any of this for the first time in SICP: I think I'd already had the whole "programs are data" epiphany from learning Haskell and reading PL-related papers before I read SICP. Still, it's really fun to see so much collected in one place. (I think the fun part of learning new programming languages is the concepts they teach you. e.g. in my opinion there's another fun "reasoning is a syntactic operation" moment you get from learning a language like Coq.) It's been a while since I looked at it but I remember enjoying "Concepts, Techinques, and Models of Computer Programming (van Roy and Haridi)" for reasons similar to why I liked SICP. (It's a little less broad, but has the same subject of ~"here are a bunch of different models of computing and how they are all related by the same fundamentals"). (Also, poke around http://lambda-the-ultimate.org/ and check out Guy Steele's Lambda the Ultimate papers if you haven't already.) https://dspace.mit.edu/bitstream/handle/1721.1/5790/AIM-353.... https://dspace.mit.edu/bitstream/handle/1721.1/6091/AIM-379.... [1] You know, like Prolog? - from that "AI will solve all problems" moment we had in the 80s. |
Which leads to the funny footnote in section 4.1.1 when discussing implementing conditionals
6 [...] Contemplation of the meaning of true? here yields expansion of consciousness without the abuse of substance.