Here are my top 5 books that meet this goal (in no particular order):
1) Freeman, Elisabeth, Eric Freeman, Bert Bates, and Kathy Sierra. Head First Design Patterns. O'Reilly, 2004.
While there are many books on Design Patterns - this is by far the best introduction I've read. Design Patterns are a way to recognize and solve types of problems that happen over and over again.
2) Bloch, Joshua. Effective Java (2nd Edition). Prentice Hall, 2008.
Typically, the shelf life of a book that is based on a specific version of a technology is pretty limited. Bloch's book is one of the few entries in this category that has remained very relevant to writing code in Java. With a recent update in 2008, the book is still one of my favorites: contains information about rules one should follow when writing java (i.e. if you override equals(), you must override hashcode()).
3) Hunt, Andrew and David Thomas. Pragmatic Programmer, The: From Journeyman to Master. Addison-Wesley, 1999.
A list of tips on how to be an excellent software developer - this book is programming language agnostic.
4) Fowler, Martin, Kent Beck, John Brant, William Opdyke, Don Roberts. Refactoring: Improving the Design of Existing Code. Addison-Wesley, 1999.
One of the most misused terms I hear in software is "Refactoring." People often use it when they mean "Rewrite my code." Refactoring is much more subtle - it's the application of algorithmic processes to existing code to make it more maintainable / flexible, etc. This is the primary text on the subject.
5) Cockburn, Alistair. Writing Effective Use Case. Addison-Wesley, 2000.
Writing excellent software starts by understanding the task at hand, and use cases are a great way to distill and document this understanding. Most people understand how to write a use case, but aren't sure the best way to approach this process; this book answers that question.
What are some of your favorite Software Engineering books?

Here are some I see on my shelf right now:
ReplyDelete_Effective C++, Third Edition_, by Scott Meyers
_Effective STL_, by Scott Meyers
_C++ Coding Standards_, by Sutter and Alexandrescu
_UML Distilled_, by Fowler and Scott
_Programming Pearls_ and _More Programming Pearls_, by Jon Bentley
And, just for fun:
_The Tao of Programming_ and _The Zen of Programming_, by Geoffrey James