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.