This, to me, is one of the 4 best books on computer programming. Unfortunately, it is hard. Not because the book is poorly written - it is like a wonderful story, but because understanding how to think declaratively after being taught something like C or Java is like someone giving you a pair of wings when you're a mudfish.
Thinking declaratively changes how you think about problems and how you write code. It's a career changing experience. This book leads the way.
Top 4:
* Structure and Interpretation of Computer Programs (Sussman, Abelson)
* The Art of Prolog by Sterling/Shapiro
* Introduction to Algorithms by Cormen, etc.
* Concepts, Techniques, and Models of Computer Programming by Van Roy and Haridi