If you have programmed in Java for more than a couple of years, or you consider yourself an intermediate or advanced programmer, then you either have read this book, or you NEED to read this book. This is probably the most important piece of text about the proper style and patterns to use in Java I've ever read. It will undoubtedly settle countless design discussions about the "right way" to do something when the issue is over the language itself. This book is not a book on Domain Driven Design or Object Oriented Programming, but it does require a good knowledge of these areas to fully comprehend the arguments posed. No, it tackles the heart of the language API paying a lot of attention to java.lang and java.util and spending some time on concurrency, serialization, and what makes Java beautiful as well as what is not so intuitive about the language.