_The Little Schemer_, _The Seasoned Schemer_, _The Little MLer_. Those are made to be burned through, though. Probably not one sitting (many ideas need time to sink in), but only a couple sessions each.
More recently, _Land of Lisp_. I already knew much of the material, but a very fun read. (Nice stickers, too!) I'd suggest this as a starting point for people new to Lisp, maybe even before _The Little Schemer_ (!).
I read most of chapters 3, 4, and 5 of SICP in one night and the following morning. (I'm on the second pass, doing most of the exercises, and nearly done with chapter 2. I'm taking a break, though.)
_Thinking Forth_, by Leo Brodie et al.
_The Awk Programming Language_ by Aho, Weinberger, and Kernighan.
_Programming Pearls_ and _More Programming Pearls_ by Jon Bentley.
I couldn't put _CTM_ (http://www.info.ucl.ac.be/~pvr/book.html) down, either. It took a while to get through, though - It's quite large. I tend to read two or three books in tandem and switch between them, but I was on that sucker 100% cover to cover. What a wonderful book!
I'm currently reading _Erlang and OTP in Action_ by Logan, Merritt, and Carlsson. I just got it in the mail yesterday, but quite good so far.
Also: When you're reading hard programming books, do the exercises! You don't have to do them all, though at least half is a good idea. It reinforces what you've read, and shows you what you actually know vs. what you just think you do. I tend to read the book first, then do exercises on the second pass.
I definitely agree with the Schemer series. I wouldn't leave off the The Reasoned Schemer, I've been working on that book for over a month now. Better than coffee. Might actually finally understand monads.
SICP is astounding. Thoroughly worked through the first three chapters years ago. I'm constantly revisiting the later chapters.
I haven't worked through CTMCP, but that book is written in a lovely, compelling style with eye-opening statements on nearly every page. I'm also also finding that it's the ultimate Clojure book.
We've already talked about _The Reasoned Schemer_ in another thread. :) I may give it a try again eventually. Clocksin's _Clause and Effect_ is a similar book, in Prolog.
Monads aren't that hard, they're just one step too general - at first, it's not clear what their examples have in common. It helped when I realized I'd already written "monadic" code in OCaml and Scheme, and with pipelines in shell scripts. (Getting away from the avalanche of category theory terminology mixed with nonsense about burritos and space suits also helped. The epiphany itself matters, not the stepping stone!) Also, starting with a simpler monad (e.g. Maybe) makes the plumbing clearer.
For interpreters / compilers, I prefer the treatment in EoPL to SICP's. There's an awesome "converting an interpreter to a continuation-passing-style interpreter to a CPS-based compiler" section in (only) the first edition of EoPL.
What really impresses me about CTM is how much deep material it ties together, from all over the place, yet the book is still extremely easy to follow. Somebody just starting in CS could benefit tremendously from reading its take on concepts when their other textbooks stump them. It's one of the most readable textbooks I've seen. (PAIP is another.)
To understand monads in a context where they are both useful and necessary (Haskell) I highly recommend the later chapters of Learn You a Haskell for Great Good (http://learnyouahaskell.com/). I'd read through all the different analogies (burritos, space suits, etc) and it didn't click until LYAHFGG showed how they are a logical way of attaching some extra context to a bit of data (or more generally a computation).
The Little/Seasoned Schemer books where the first programming/technical books that when I finished them I had that same feeling you get when you finish a good novel. Land of Lisp is the first book I've picked up since then that's given me the same feeling so far.
Since the first 2 schemer books can each be read in about a week (they shouldn't be read faster) it's a shame for anyone not to read them.
More recently, _Land of Lisp_. I already knew much of the material, but a very fun read. (Nice stickers, too!) I'd suggest this as a starting point for people new to Lisp, maybe even before _The Little Schemer_ (!).
I read most of chapters 3, 4, and 5 of SICP in one night and the following morning. (I'm on the second pass, doing most of the exercises, and nearly done with chapter 2. I'm taking a break, though.)
_Thinking Forth_, by Leo Brodie et al.
_The Awk Programming Language_ by Aho, Weinberger, and Kernighan.
_Programming Pearls_ and _More Programming Pearls_ by Jon Bentley.
I couldn't put _CTM_ (http://www.info.ucl.ac.be/~pvr/book.html) down, either. It took a while to get through, though - It's quite large. I tend to read two or three books in tandem and switch between them, but I was on that sucker 100% cover to cover. What a wonderful book!
I'm currently reading _Erlang and OTP in Action_ by Logan, Merritt, and Carlsson. I just got it in the mail yesterday, but quite good so far.
Also: When you're reading hard programming books, do the exercises! You don't have to do them all, though at least half is a good idea. It reinforces what you've read, and shows you what you actually know vs. what you just think you do. I tend to read the book first, then do exercises on the second pass.