Every new technology or language version brings with it a raft of books; there are, however, a few timeless classics that every serious software engineer should be familiar with.
These books are not just ones that you will read once, but that you will want to keep on your desk, reference frequently, and re-read year after year.
The list below should be short enough for everyone to own and read. Many are shorter books and partly deserve their classic status because they make their points clearly, without waffle.
If you aren't sure where to start, try Peopleware, The Mythical Man-Month, Design Patterns, The Pragmatic Programmer, and Refactoring, and then move on to the longer books.
Start filling your library — order a book you don't own, read it, and then come back and order the next until you have every one of them.
See some of the books we have read and recommend on management, design and programming.
Management books - Getting it right
It's hard to recommend these books without sounding like their publicist, but they really are that important. If you do not own it already, I recommend you put in an order today for Peopleware, by Tom Demarco & Timothy Lister. Don't just take my word for it — it deserves the five star rating it has at Amazon.
Another publication truely deserving of it's “classic” status is The Mythical Man-Month, by Frederick Brooks. Sage advice about software development — now you know the source that people take their quotes from.
Design books - The language of design
Proven solution strategies should be used for well known problems. If you aren't familiar with façades, observers, factory methods, singleton or visitor, then you need to read Design Patterns, by Erich Gamma, et al., and learn these basic patterns.
Patterns provide a higher level of abstraction to easily communicate and discuss design concepts. If you write enterprise software (as opposed to packaged, embedded, or other types), then the basic design vocabulary you need can be found in Patterns of Enterprise Application Architecture, by Martin Fowler.
One area not covered by PoEAA is messaging, which is covered in the followup book Enterprise Integration Patterns, by Gregor Hohpe & Bobby Woolf. Messaging, as opposed to file transfer or shared databases, is a backbone of modern architectures, such as Service Oriented Architecture (SOA), and this book is well on it's way to becomming a classic.
Programming books - Where the rubber hits the road
An important contribution to the craft of programming is The Pragmatic Programmer, by Andrew Hunt & David Thomas. The tips in this book will help the experienced, talented programmer take their craftsmanship to the next level.
For a broader coverage of the basics (but with enough new ideas even for the experienced developer), the classic is Code Complete, by Steve McConnell. A longer book, but still worth the read and it's many facts and figures make a good reference.
Similar to patterns, you need a vocabulary to discuss whats wrong with a program and how to fix it. First of all, buy Refactoring, by Martin Fowler and read it; then go out a buy or download a refactoring tool for your current language (if you don't already have one).
A picture tells a thousand words. UML Distilled, also by Martin Fowler is an invaluable concise handbook. If you already know some UML, buy it as a desktop reference; if the only thing you know about UML is class diagrams (or if you didn't even know that), then there is no doubt that you need this book.