mardi 5 février 2008

Top Five Java Technologies to Learn in 2008

Carlos Perez has posted his list of the top five Java-based technologies to learn in 2008. (http://www.manageability.org/blog/stuff/five-java-technologies-to-learn-in-2008).


Software Technology will always been in constant flux. Change will always be inevitable. So as a Java developer you need to continue to groom your career by learning new techniques and technologies. It's both a curse and a blessing. It's a blessing because Java, without a doubt, is where a lot of innovation happens. The question though is, out of the multitude of Java projects out there, which ones should we invest our limited bandwidth on? This is my attempt at answering this question.

Here is what I humbly believe to be the top 5 Java based technologies to learn in 2008:

  • #5 OSGI - Reality check, monolithic containers carry too much baggage and Java libraries are so richly cross dependent. The trend is there, a lot of frameworks are moving towards OSGI to bring some sanity in their deployment. Projects that have employed OSGI in anger are Eclipse via Equinox, Nuxeo and BEA Event Server,
  • #4 JCR - Reality check, not all data fits well within a relational database. In most cases, users want to store their own documents and have those properly managed (i.e. versioned). JCR with it's Jackrabbit implementation is becoming the de-facto standard for maintaining data other than the structured kind. Some examples of projects that have used this in unexpected and innovative ways are Drools BRMS for managing business rules, Apache Sling for universal resource storage and Mule Galaxy for SOA governance management.
  • #3 GWT - Reality check, AJAX is here to stay and Javascript is still a pain to work with. GWT is gaining traction like wildfire at the expense of other Java web technologies like JSF. A lot of projects have begun creating extremely cool products with it. Some impressive examples are Queplix a CRM, Compiere an ERP and GPokr a multiplayer Texas hold-em poker game.
  • #2 Groovy - Reality check, sometimes you have to write quick and dirty scripts to get your tasks done quickly. There's a lot of traction these days for dynamic scripting languages like Ruby. However if you want to truly leverage your existing skill set, then it's more efficient to take a evolutionary step. Groovy has come a long way since it's rocky beginnings. I believe Groovy is finally mature enough (it finally has a debugger) that it's safe to dip your toes in it. Furthermore, there's are a of books, books about frameworks (i.e. Grails) and tools (i.e. IntelliJ) that help you from getting lost.
  • #1 Cloud Computing - Reality check, sometimes it just isn't worth it to setup your own physical servers. Amazon's services are going to be an extreme boon to development productivity. One of the most time consuming efforts, and one that is too often taken for granted, is the deployment of a load and performance testing harness. In a lot of rigid organization, it is sometime problematic to acquire so much hardware for use only for short time periods. There aren't many tools out there yet for the Java developer (see: "Grid Gain Distributed JUnit"), however it's ramping up pretty quickly. So just as we create our builds from the cloud via Maven repositories, one shouldn't be surprised to find cloud based testing resources to be part of every developer's tool chain in the future.

With all these nice new shiny objects to play with, I'm constantly surprised why people keep claiming that Java is dying!

I'm certain you are all agreement with me on what belongs to this list. However if you've got some violent objections, I certainly would like to hear your view.

Here are the "Top Five Java Technologies that Did Not Make the List"

  • #5 Android - Google's attempt to turn the telco space on its head. This is expected to be not only game changing but disruptive. I of course will like to wait for (a) an actual hardware device to play with (b) Google winning the 700Mhz spectrum and (c) the deployment of 700Mhz cell towers across the states. The problem I have with Android is the problem the plagues J2ME devices. How do I keep my sanity as the variety of mobile devices increases exponentially? I have yet to have heard a compelling story (OSGi perhaps?) in this area. That's plain unfortunate because it's the biggest pain point for mobile developers.
  • #4 JRuby - Rails is certainly getting a lot of attention; JRuby channels that attention towards the JVM. The Ruby job market has grown to a stunning 3.3% of the size of the Java market. If you need something new (don't ever try this with legacy code) then possibly the quickest route to a working application is via Rails (use Streamlined while your at it). However, not all applications consist only of CRUD screens, you'll need to add more mojo into it. That's when you have to question Rails viability. Convention over configuration only works well if you're building something conventional.
  • #3 Scala - Scala is a brilliant well thought out language. It's a language that is not only extremely expressive but one that doesn't have the performance baggage of a dynamically typed language. In short, you could use it to build bleeding edge infrastructure stuff. The kind of stuff you would never dream of building using slow as molasses languages like Ruby. Sure, you have to subscribe to the static typing religion, it's an unfortunate trade-off you have to make if you want to build really tight systems. It however didn't make the list because I would only recommend it to 'rocket scientists' building serious heavy lifting infrastructure. Web front end developers need not apply.
  • #2 Seam - Gavin King (Hibernate's creator) is an accomplished developer. So when he builds another framework, it behooves you to take notice. Seam is his latest creation and it merges JSF and EJB3 into a seamless workable framework that's all hangs together with Annotations. Unfortunately, its strength is also its weak spot. All that annotation work is going to be a nightmare to debug. Personally, I think Spring is good enough, however if you must have an overarching framework then Seam would be it.
  • #1 Flex - If anything should have been on the list, this would be it. If you want to build rich applications on a browser then plain DHTML and Javascript isn't going to cut it. The most innovative desktop like applications on the web are unfortunately built on Flash. GWT isn't going to help you build applications like YouTube, Mindomo, Buzzword, Sketchcast or Pandora but Flex will. The bad news is that Flex isn't Java, however the good news is that Adobe's soon to be open sourced server (BlazeDS) is thankfully in Java.

Aucun commentaire: