It's not exactly news to the faithful readers of TheServerSide that we're fans of Martijn Verburg. He was an important speaker (and part of the JavaRanch contingent) at the final Symposium TheServerSide threw in 2011 (TSSJS), his work on JSRs and the JCP has made him an important member of the community, and he's been a good sport when we've poked fun at him for some of his comments at last year's JavaOne conference. So, it was with great pleasure that we were given an opportunity to review his latest title, The Well-Grounded Java Developer, a title he co-wrote with his partner in crime, Ben Evans.
The book is an interesting attempt at doing just what its title suggests - creating a well-grounded and well-rounded Java developer. It's not an introduction to Java book, that's for sure. The first section of the book starts off fast with a discussion of some new features of Java 7, such as NIO and Project Coin, topics that you'd have trouble grasping if you were still struggling with your copy Michael Ernest's Java SE 7 Programming Essentials. But if you do have a decent grasp of the Java language, which describes the vast majority of TheServerSide readers, you'll enjoy the way the content is presented and explained. There are plenty of examples that are easily reproduced with nothing more than Notepad and an installation of the JDK, and the content is pertinent to what an enterprise Java developer should be focusing on in order to keep their skills up to date and in demand.
The Well-Grounded Developer: Section by Section
After getting the reader up to speed on some of the latest bells and whistles that Java 7 has to offer, the book tackles the ins and outs of some of the most common and important development and design techniques that are in use today, including inversion of control (IoC) and dependency injection (DI), concurrency using the fork/join framework and the Java Memory Model (JMM). The book tends to slow down a bit when it starts dealing with classloading and Java bytecode, although the discussions on garbage collection and Just in Time compilation aren't without merit.
The third section of the book is perhaps the most interesting, demonstrating how to develop simple little programs using a variety of programming languages, namely Groovy, Scala and Clojure. No, Ceylon doesn't get any mention. You're not going to get hired as a senior Scala developer after reading chapter 9 of course, but for an enterprise Java developer who hasn't worked with any peripheral languages at all, this section on polyglot programming is enough to help one speak intelligently about the topic, and give them enough confidence to explore their language of interest further.
Looking at Application Lifecycle Management (ALM)
The final section deals with what is commonly referred to as Application Lifecycle Management task (ALM), which itself has become a hot topic on TheServerSide over the past eighteen or so months. The book finishes strong covering test-driven development (TDD), continuous integration (CI), rapid application development with Grails and Compojure, and finally a recap to help remind the reader of the journey they've taken through the past five hundred pages.
A well-grounded developer in the Java space should know something about Android. If the book can elucidate the reader about Scala, Groovy and Clojure, a quick chapter on mobile development wouldn't be all that hard to pull off, and it would serve the reader well.
The other topic that a well-grounded developer should be comfortable with these days is big-data, so it would have been nice to see the book dealing at some level with Java based NoSQL technologies. Having said that, there is an appreciation that a book like this can easily become a victim of scope creep, and moving into persistence technologies or mobile programming might be a slippery slope that the authors wanted to avoid.
This book is a solid 9 out of 10, and it has a definite place on the bookshelf of any enterprise Java developer who is worth his or her salt. One thing I will say about the book is that to really appreciate it, you need to be part of its target audience. As was mentioned before, it is not a book for a junior developer who is struggling with syntax. It's targeted at more senior folk. In fact, I think in many ways it is targeted towards the people who read TheServerSide.
A busy enterprise developer rarely gets a chance at work to play with the latest language features. And active developers who are working hard maintaining traditional Java projects that are JSF based or use the Java Persistence API will never get a chance while at work to play with some of the popular new JVM languages. But at the same time, any enterprise developer that has been working for years with standard middle tier technologies knows that they're being left behind if they don't know something about Scala or Clojure, or even Maven 3 or Jenkins. For those people wishing to catch up on the important new topics that might be leaving them behind, this really is the perfect resource for them. It gets you caught up to speed quickly; making you not just an expert in your respective field, but it will make you a well-grounded Java developer as well.
The Well-Grounded Java Developer: Vital techniques of Java 7 and Polyglot Programming
By Benjamin J Evans and Martijn Verburg
Java SE 7 Programming Essentials by Michael Ernest
Scala in Depth by Joshua Suereth
Groovy in Action by Dierk König
Hibernate Made Easy by Cameron McKenzie
NoSQL Distilled by Martin Fowler