Every so often there is a discussion on what books on software engineering we absolutely must read. I have compiled a list about five or six times for various people. Rather than go through this again. Here is the defenitive list. Its not comprehensive of all books. Just the ones I have read
General
Clean Code - Robert C Martin
Probably the most highly regarded book on writing clean readable code. It's not a casual read, each chapter challenges you to really think and work on the contents. There are exercises to work through as part of each chapter. Plus, there's star trek references.
The Pragmatic Programmer - Andrew Hunt & David Thomas
Another highly regarded book. This book is about working out how you approach software engineering as a craft. Its a little old so some references may feel a bit dated given the emergence of git in a post perl world. But the content itself is timeless.
Rest in Practice - Jim Webber & Savas Parasttatidis & Ian Robinson
How many people build an API that is just a bunch of HTTP methods and call it REST? Quite a few of us. This book through a series of examples talks about building true and mature RESTful services and what that actually means.
Java
Effective Java - Joshua Bloch
If you write software in Java. Read this book.
Java Concurrency in Practice - Brian Goetz
The defacto guide to writing multi threaded code in java. It hasn't been updated since Java 6, but is still comprehensive and useful.