At last we have a book that tackles the problems rather than pretending there are none.
I do not usually review books on Java because I have enough poor books about C++ without adding such a rich source of junk. However, just as there are some exceptional books on C++ hiding among the dross there are also some pretty good ones on Java.
This is not a book for those just starting Java. In order to read this book you need to think that you are a Java programmer. Second it is to your advantage to be concerned with server side programming because this is the domain that this book approaches with a systematic search for the causes of problems. Bruce Tate focuses on the anti-patterns of Java programming and how to deal with them. The fundamental premise of the book is that it is possible to learn form other people's mistakes. Well, not quite: more that it is possible to learn other people's solutions to common mistakes.
I am not going to try to summarize this book, I know there are reviewers who do that but I do not think that is particularly helpful. What you want to know is whether you should invest your time reading this book. Ss I have said, the premise is that you can already write Java, but actually I think that anyone working object oriented at sever side code would get a good deal from this book. Even if you are not even that, the author's style makes the book pleasurable to read. He starts each chapter with a short anecdote that has nothing to do with programming (such as the opening half page where he writes about preparing to shoot a Class V waterfall in a kayak) but as we read on we find it is not entirely unrelated to the content of the chapter. Whenever the going begins to get tense he will add a few more lines to the anecdote before going on. I know some who resent this style because they think that technical authors should keep focused on technical issues. I disagree, books should be readable and if you do not like the interludes you can always skip over them.
I think quite a few Java programmers will be surprised by some of the subjects covered in this book. For example the whole of chapter six is dedicated to memory leaks. I will even forgive the author his comments on C++ (you do have to learn the right idioms to manage memory in C++, and I guess those around him in his C++ days just did not know them) because he is honest enough to expose Java's problems instead of going with the myth that it does not have any. Of course that means that you have to have got passed the hype and accept that Java, like any other known programming language, is imperfect and provides you with opportunities for making a real mess.
I could drift around telling you a bit here and a bit there but what you want to know is should you buy this book? I think that if you are a serious Java programmer the answer is a resounding 'yes'. Your programming will get better for spending time studying this book, and you will save yourself an awful lot of pain from the help and insights you will get. If you are not a Java programmer you still might enjoy reading a friend's copy. If you are responsible for interviewing Java programmers, get this book and mine it for interview questions. You really would prefer your employees present and future to be familiar with it.
At last we have a book that tackles the problems rather than pretending there are none. Finally, what about the title? Well when does coffee get bitter?