Five books I think you should read if you hack Java:
- Design Patterns, Gamma, Helm, Johnson, Vlissides. (the Gang of Four).
There are four stages of pattern-awareness. Ignorance (What is a pattern?), Denial (Oh, patterns are stupid), Over-enthusiasm (Let's use Singleton here! And Visitor here!), and finally enlightenment (That looks like an Adapter... Hmm...) Reach stage four.
- Refactoring, Fowler
Keep your code beautiful. An amazingly clear book, very easy to read, with good examples and sage advice.
- The Pragmatic Programmer Hunt and Thomas.
An entertaining book. Where I learned about boiled frogs. Some of the advice in this book may seem obvious to you. So why aren't you doing it? Why? Sometimes it takes someone else reminding you what you've always believed to convince you that you've been right all along.
- Object Oriented Design Heuristics Riel.
A harder read, far more dry than the last three. But it's the best advice I've read about OOAD yet. Good advice on how to compose your objects, divide responsibilities, and structure inheritance.
- Effective Java Joshua Bloch.
The only Java-specific book on the list. If you program Java, you must read this book. Now.