Thursday, December 31, 2009

End of the Noughties

I've found one thing out - it's not in me to regularly maintain a blog. For a couple of reasons. One, I could never keep a diary either; I'd rather do than record what I've done. I don't have the habit of confiding on paper or to a computer. Second, I'm never happy with what I just wrote. I'm a pretty good technical writer, where that kind of obsessive attention to detail is fine, but I suspect I'd be a disaster as a novelist: good material, but about a page per week.

Nevertheless, it's the end of 2009, and it's a worthy moment to write a blog entry. If for no other reason than to maintain the fiction that I might eventually keep this thing up.

On the software front I'd call it a good year. Not a great year, but nonetheless a decent year. The company I work for is weathering the recession, no mean feat for what is still a startup. We're trying to diversify our client base, which is understandably important. We're unfortunately, by dint of our current customers, rather more tied to only J2EE, and obsolete J2EE at that, than I'd like. But as they say, mendicants can't be choosers. One major downside of this is that if all your resources are occupied with J2EE 1.4 work, it's difficult to find adequate downtime to keep up with the Joneses. State of the art technology-wise, that is.

Speaking of technology, just in J2EE (forget about .NET, all those ERP systems, and so forth) and related (support) technologies things are getting a bit too scrambled for me. I'm starting to like the stately advance of MS .NET quite a lot. Granted, Microsoft moves at a pretty quick clip themselves, and they foster a huge 3rd party ecosystem, but compared to J2EE they are very stable.

In our case (my colleagues and I) we're stuck into mostly OAS 10.1.3.x from Oracle. J2EE 1.4 with EJB3 (most of it) slathered on top...imperfectly. I'm thirsting to ditch JPA and ORMs entirely, and stick with iBatis. Or more to the point, we're starting to realize that not every Java persistence solution ought to include JPA. And of course oc4j 10.1.3.x uses JSF 1.1...not even JSF 1.2, let alone JSF 2.0. Christ. Quite frankly we'd all love to use Spring MVC et al. - we're all familiar with it...but you need clients that are willing to use it.

What's with Spring anyway? A person barely assimilates most of Spring 2.5, and now they're onto Spring 3, all DM and OSGi and what have you. And Maven is no longer their fad favourite anymore - now we have to start considering Apache Ivy. I consider myself a pretty bright spark, but there are only so many hours in the day to keep up with all this crap. I'm biting the bullet anyway, and learning Spring DM.

Eclipse Galileo (3.5) is a disappointment. I say so. It's got too many quirks. NetBeans, certainly for all of the 6.x series (I'm trying out 6.8 on Ubuntu 9.10, and have 6.7 on Mac OS X 10.6 and Windows XP SP3 both), is way ahead. Unfortunately a lot of people develop for Eclipse and neglect NetBeans. Too bad. But if you're an Eclipse person, stick with Ganymede. Unless you can't.

Parallels for Mac is a disappointment. Again, I say so. If all you're going to do is run Windows VMs, it's OK. But VMWare is much better. And VirtualBox rules for running Solaris VMs on Mac OS X. Hands down.

Java is a disappointment. Yes, I say so. For a professional programmer I am unusually unpicky about language quirks and deficiencies. I can make things work. And Java is without a doubt a good GP programming language. But they lost their way on a few things, which ought to have been dealt with no later than Java 6. Now that I think about it, what real importance did JDK 1.6 have anyway? Anyhow, I believe the JVM needs to understand true value types, sooner rather than later. True first-class functions (methods), and so lambdas and closures, would be nice too.

But the main thing I see that Java really has a problem with in years ahead is concurrency. Yes, concurrency. Seems ironic, seeing as how Java was the first language touted as making concurrency easier to use. Well, yes, it is easier to use. But it's still hard. Other languages like Scala, Clojure and Erlang have Java beat hands down in this regard. Why would a developer want to use the difficult and complex concurrency constructs in Java when they can use much higher abstractions? Either Java builds these abstractions in or it soon becomes irrelevant. IMHO.

Ultimately, is software development more simple today (Dec 31st 2009) than it was 10 years ago? Not hardly. It's more complex, and becoming more so. I used to laugh at all the efforts and projects and initiatives that wanted to put design power into the hands of business users. I still think those efforts have a long way to go, but now I genuinely want them to succeed. Because Joe Average Coder is becoming overwhelmed with all the plumbing. Anything that takes some of the load off us is welcome.

Best of the New Year.