Skip to content

Book Recommendations


  • Effective Java (3rd Edition) - Joshua Bloch

    Full of recommendations on how to write good Java code and, especially, good APIs. Written by one of the architects of the Collections library.

  • Core Java SE 9 for the Impatient - Cay Horstmann

    Solid coverage of the core of Java that you want to know.

  • Modern Java in Action - Raoul-Gabriel Urma, et al.

    Covers Java 8, 9, and 10 with more depth on Lambdas and Streams along with "functional reactive". Also covers the latest on concurrent classes, such as CompleteableFuture and the fork-join mechanism (that underlies parallel streams). You'll also get the earlier edition of this book that covers Java 8 only.

General Programming

  • Refactoring: Improving the Design of Existing Code (1st Edition) - Martin Fowler, et al

    The first edition of this book uses Java code for the examples. This book explains the concrete steps to change your code in safe and predictable ways so that it's easier to work with and more testable. It also shows how to recognize "code smells" (code that's not great) and how to refactor away those smells.

    The 2nd edition of the book uses JavaScript for the examples, but the same principles of good and bad code still apply. Martin summarizes the changes between the 1st and 2nd edition here. If you buy the 2nd Edition, you get access to the expanded online version found here.


  • Spring in Action, 5th Ed. - Craig Walls

    Fifth edition covering the latest in Spring 5 and Spring Boot 2. You'll get the fourth edition as well, which covers Spring 4 and a bit of Spring Boot.


  • Java Concurrency in Practice - Brian Goetz, et al.

    While somewhat dated, it's still the go-to book for understanding the depths of concurrent programming in Java. Not for beginners.

  • The Secrets of Concurrency (#146) - Dr. Heinz M. Kabutz

    Not a book, but a regular (and long-running) blog by an expert in Java concurrency. The above link is a good start. However, if it's too advanced for you, then take a look at the basics of threads in the Core Java book mentioned above.