- Clean Code by Robert C. Martin - How to write easy to understand code.
- Effective Java by Joshua Block - THE book that will make you a better Java programmer, regardless of experience level.
- Bad Practices of Testing - The name is play on words, learn what you're doing wrong and what you could do right.
- TDD Step By Test Example - An example of doing TDD where each commit is classic red/green/refactor. Work through each commit to see what happened.
- Software Architecture for Developers Great introduction, and proposes the C4 system as a simpler alternative to UML.
- System Design Primer - Rapid introduction into the key components for large scale system. Includes a fantastic list of must read software engineer blogs.
- Domain-Driven Design: Tackling Complexity in the Heart of Software by Eric Evans - How to design used DDD. Aka "The DDD Blue Book"
- Implementing Domain-Driven Design by Vaughn Vernon - When you're read the "why" now read the "how". Aka "The DDD Red Book'
- Architectural Styles and the Design of Network-based Software Architectures by Roy Fielding - Why REST works.
- REST in Practice by Savas Parastatidis et al - Once you've read the "why" read the "how".