Structure and Interpretation of Computer Programs (1996) [pdf]
SICP shows up every few months on HN, and I upvote enthusiastically every single time!<p>I am a self-taught programmer, and survived a long time on C&#x2F;C++&#x2F;Java etc. I was smugly confident in my confined space.<p>Then I came across SICP. I discovered a world of closures, streams, object-orientation done using closures, infinite series using streams, lazy evaluation, functional programming, and so much more. It was such a sharp pivot that I registered for a PhD because I just had to know what else I took for granted.  I was 42 when I registered (graduated at 48)!