For those who don't know, there was a 20th Anniversary edition of The Pragmatic Programmer released a few years ago - It's still full of a lot of the same great advice, but they've brought the context and examples up to date.
Agreed. I was pleasantly surprised by how general and practical it was. I assume it was an over hyped shallow book but I was the one being shallow... Definitely worth a read.
Structure and Interpretation of Computer Programs
Design Patterns: Elements of Reusable Object-Oriented Software
Code Complete
Refactoring: Improving the Design of Existing Code
The Pragmatic Programmer