What if you could condense Java down to its very best features and build better applications with that simpler version? In this book, veteran Sun Labs engineer Jim Waldo reveals which parts of Java are most useful, and why those features make Java among the best programming languages available. Every language eventually builds up crud, Java included. The core language has become increasingly large and complex, and the libraries associated with it have grown even more. Learn how to take advantage of Java's best features by working with an example application throughout the book. You may not like some of the features Jim Waldo considers good, but they'll actually help you write better code.
It's Josh Bloch's book Effective Java for people starting out with Java. I found the chapters on serialization and concurrency hard to understand, but thought the book provided an accessible survey of generics, garbage collection, and the JVM. Jim Waldo provides some pretty interesting anecdotes about the early days of Java's development.
Seeing that other reviewers have not given this book a very good rating, I think it may be unfair that I only skimmed it for "the good parts" or the parts I didn't know about. For an intermediate Java programmer there are interesting things to offer, including discussions of the Garbage Collector, concurrency, and remote method invocation (which I had never heard of). Also, being from the Java generation and having taken many of its features for granted, I feel that I gained a greater appreciation for the convenience of cross-platform bytecode, a huge choice of libraries, etc.
This book just doesn't have enough depth to be very useful. Waldo spends too much time on the definition of "good" and not enough time on Java.
The fact is, anyone using Java needs to know a lot more than what is covered in this book. You need to know the good, the bad and the ugly. At best you'll see the not-so-good parts in third party libraries and you need to know how to deal with them. At worst, you'll end up using them inadvertently and/or incorrectly without realizing it.
Nice reading for an inexperienced Java developer, but not as recommended as Thinking in Java. The examples are really boring. The anecdotes about the birth of various java parts are interesting, but very sparse. Not recommended for experienced developers.