I just read, or possibly re-read, Effective Java: Programming Language Guide by Joshua Bloch. This is a classic book in Java, and deservedly so. I’ve already changed a lot of my Java development practices because of reading the book, from using final a lot more to being more careful in my implementations of toString() and hashCode().
Effective Java is very similar in structure to Peter Haggar’s Practical Java: Programming Language Guide, but the focus is different. Practical Java focuses more on details of Java development, explaining the difference between arrays and Vectors (it’s also a little old, obviously) and the difference between primitives and wrapper classes. Bloch assumes a higher level of development prowess in his readers, so he starts a bit higher, but then gets to more complicated (and often under-discussed) topics like threading and serialization.
While I was reading Effective Java, I felt that I had read it before. Perhaps that is due to the similarity to Practical Java. Perhaps I had borrowed it years ago. Perhaps I had read enough snippets when using it as a resource that it was familiar. Or maybe it’s just that the advice inside makes so much sense and was so well written that it seemed not to be new.
I’m really glad that I read Effective Java this month; my code is already better for it, and isn’t that the main reason we read technical books?