Books

During my software devlopment career, I have read a dozen of books about the different aspects of creating software.

The best

Here are the books that has been most valuable to me:

Domain driven design, by Eric Evans

Everyone keeps talking about how important it is to design and implement a proper domain model that reflects the real-world domain you are working with. And someone even tells you why. Eric Evans tells you how! Takes some time to read, but is well worth it.
More info here.

The pragmatic programmer, by Andrew Hunt and David Thomas

In a very inspiring way, this book describes a set of sound principles for software development. The authors argues, using real-world examples, that these principles should be applied almost everywhere in the development process, from the initial writing of requirements, through design and implementation, to the production deploment phase. An enormous amount of knowledge condenced into a manageable amount of pages.
More info here.

Effective Java, by Joshua Bloch

This book describes common tips and trick that, if applied properly, can make you a more efficient Java developer. Easy and fun to read.
More info here.

The runners up

These books have also been valuable to me:

Concurrent programming in Java, by Doug Lea

Describes the building blocks of concurrent programming in Java, and how apply them efficiently, written by the expert himself. If you think you know your way around concurrency, and that the code you write is thread safe, then read this book. It might change your mind...
More info here.

Innocent code, by Sverre H. Huseby

Most books on computer security focus on infratructure, like protocols, firewalls and certificates. This book is about what the software developers can do to enhance the security of the systems they develop.
More info here.

Better builds with Maven

To my knowledge, this is the only decent piece of information about Maven, which do not leave you with more questions than answers.
More info here.