There are many books that are essential for your bookshelf if you're a Java developer. But if I had space for just five books, which ones would I recommend? This question came into my head when I read this post about book recommendations.
Going Back To Basics
[img_assist|nid=4382|title=|desc=|link=none|align=left|width=76|height=96]Topping the list of essentials for me has to be A Programmer's Guide to Java Certification. I bought it before I did the certification exam years ago. Even though the edition I have refers to Java 1.4, it's always been an excellent reference for the basics of the language. Without doubt, it's the best book available to get going in Java.
[img_assist|nid=4383|title=|desc=|link=none|align=left|width=76|height=100]A few years back, I was working on some performance intensive features. I thought I knew threads well enough - I was wrong! This seems to be a common trend among all developers, we don't have a great grasp on concurrency. Thankfully, Brian Goetz does and published Java Concurrency In Practice
As well as simply explaining threading you'll find how to design and test your applications for concurrency. As multiple cores become more common this book is a must have for Java developers - especially as we dispel the myth that Java can't be fast.
Becoming A Better Developer
[img_assist|nid=4384|title=|desc=|link=none|align=left|width=76|height=96]The Pragmatic Programmer surprised me when I read it first. While not being specific to any language it sets out some great principles, habits and approaches for developers. I still read it every year or so to refresh. It's been good for my own growth as a developer, and for the growth of development processes I've been involved in.
This book should be used in all computer courses, as it would lead to a higher percentage of graduates with a practical view on development.
Becoming a Java Expert
[img_assist|nid=4385|title=|desc=|link=none|align=left|width=76|height=76]The second edition of Effective Java has been a welcome addition to my developer bookshelf. It has some great tips that I wouldn't have picked up had I not read the book. And with such high praise from James Gosling, it's a book that can't be ignored.
"I sure wish I had had this book ten years ago. Some might think that I don't need any Java books, but I need this one."
Designing With The Future In Mind
Picking a final book is difficult. It's tempting, and predictable to add the GoF Design Patterns book. But I'm not sure that it lives up to the hype anymore. However, it has set the scene for other books on patterns and design in general. Emergent Design: The Evolutionary Nature of Software Development really caught my attention recently. It has a nice concise appendix of design patterns giving a non-software analog for each, which really helps with understanding them.
It's a great book for architects and developers to read to make designs more futureproof, stable and helps answer the question How Much Design Is Enough. It easy reading and shows how the software development industry can mature, and what you can do to improve your own practices.
I'm sure this isn't the definitive list for all developers so I'd be happy to see your own opinions. What books related to software development have you found indispensable?