Java and Cruft: Save me now

With one of our biggest customers right now, I'm working on a series of SMS applications. Neither is particularly complicated, but there's been an interesting disparity between developing each of them. The first one provides special alert information to your phone. The entire system is built in Java on top of a Maven/Tomcat/Struts/Hibernate stack. The other one provides information from a major news organization directly to your phone. This is a one-file php file which parses some XML and sends the message.

I began on the Java application first just a bit before Christmas. While I don't consider myself a Java Guru, I pioneered this customer's Ant build development and testing, so I generally have a clue. Right off the bat, I jumped into Maven, Struts, and Hibernate. I understood the concept of the problem each of these systems was built to solve, so I appreciated their value and dug in. Immediately, I was hit by the sheer amount of misdirection… er… reflection involved, the obfuscated class hierarchies (not the fault of the above applicaitons), and various other oddities and structures required to track down what the underlying code was doing. This was frustrating, but I dug in and started learning about all of it.

The beginnings of it weren't too bad. Reverse engineering the class hierarchies wasn't fun (no source available), but was able to do it with some judicious use of Jad. Following the reflection and references was a whole other story. Getting an overview of how the previous developer arranged things helped quite a bit, but there has still been a relatively difficult learning curve.

Then I was asked to do a similar process in PHP. The concept was almost the same but there was a much smaller data set to use. Eight hours later, I was done. That wasn't all coding. That was tweaking the simple API, ripping apart the XML, adding logging (more than initially requested, but exactly what was finally requested), refactoring the logging into something more useful, tweaking the messages as per customer requests, adding a few other things, and deploying to production (dev was 4.3.x, prod was 5.x). All in all, quite simple… and less code than I have in my struts config file.

The comparison is hard to ignore… and then Caleb on CodeSnipers did this post showing how brain-dead simple it is to implement a Singleton in Ruby.

Is this the death knell for new Java development?