What’s A Java Developer To Learn?
With the economy continuing on it’s tailspin, lots of developers are finding themselves out of work. Those that are lucky to still have a job (like myself) live in fear that their company may downsize at any time and they’ll be looking for work.
This means that it’s more important than usual for a software engineer to be “marketable”. Engineers need to make sure they stay current on technologies that are widely used in their field. This is a somewhat daunting task considering just how many technologies there are out there. Luckily, there are resources to help narrow this down.
What follows is an investigation into what technologies/products/frameworks/languages/tools are showing up in job postings for Java developers using Indeed.com. This sort of thing can be very handy if you’re looking to improve your skillset and would like to focus on improvements that make you more likely to land a new job if you were to need to.
Obviously, one of the most prominent traits of good Software Engineers is a natural curiosity and motivation to learn. Most engineers I know (including myself) have a list of technologies and tools they’d like to check out. This article is merely meant to help engineers prioritize their list to whatever extent they are being motivated by career aspirations or security. In other words, you may not see “Haskell” on this list, but that does not mean I am somehow arguing that Haskell isn’t worth learning. I am merely saying, to whatever extent your career is a priority, perhaps a different tool or language may be more of a priority for you than Haskell.
I also want to reiterate that this analysis is for Java Developers. Why Java? Because the stress of this article is on career, not academia or intellectual pursuits, and Java and .NET are still the industry leaders.
So if you’re a Java developer, you want to learn something new, and you want to help protect your career from economic instability, take a look at each of the sections below and, if you aren’t familiar with either the “most popular” or “fastest growing” technologies, add them to your list.
And if you feel that I’ve missed an important technology, please leave a comment and I’ll update the post.
Persistence Frameworks
Most applications need to save data to a database. Most large applications rely on frameworks to help with this process. For this category, I’ve searched for toplink, hibernate, ibatis, jdo, spring dao, and ‘jdbc’ itself.

Java Persistence Frameworks
The big winner here is clearly Hibernate. There seems to be a still-present (and possibly rising) number of job posts that mention JDBC in the listing, but that may well be in conjuction with other technologies.
Databases
To see which database technology is the most popular for Java developers, I’ve searched for mysql, postgresql, sql server, oracle, sybase, and db2

Databases
Oracle returns the most hits here, though it’s difficult to know if that’s always the database platform in every case. Microsoft’s SQL Server is a big winner here as well. As far as open source tools go, MySQL is where the jobs seem to be.
Web Frameworks
Writing web applications without a web framework is pretty grueling. Most companies recognize this and use web frameworks to lessen the pain. Here I’m looking at spring mvc, struts, javaserver faces, tapestry, wicket, and webwork.

Java Web Frameworks
The big winners here are Struts and, to a much lesser extent, Spring MVC. Struts seems like something of an old standard, while SpringMVC is the up-and-coming technology.
Web Technologies
For developing on the web, you’re going to want to be familiar with various technologies, even as a Java developer. For this, I’ve searched for html, css, ajax, javascript, google web toolkit, flash, and flex. Note that I’ve added “java” to each query to ensure that these skills are important for Java developers.

Web Technologies
HTML and Javascript are the big winners here, no surprises. Ajax seems to have passed CSS as of 2007, which is interesting. Flash and Flex seem to both be on a steady but slow rise.
App Servers
In a perfect world, Java developers would never need to know anything about the server in which they are deploying an application since they’d all follow the same standards. In reality, however, the popular application servers offer many different features and companies that don’t mind running the risk of vendor lock-in code their applications to those features. As a result, knowing the ins and outs of application servers can be important.
Here I’ve looked for websphere, jboss, apache geronimo, weblogic, tomcat, jetty, and glassfish.

Application Servers
The big winners here are WebSphere and WebLogic. Tomcat and JBoss, however, seem to be on a clear slow growth.
Environment Tools
Many companies believe that hiring a developer who is already familiar with the development environment they use will allow their new hire to hit the ground running. This means that sometimes job posts will mention IDEs, version control systems, and build tools.
For this comparison, I’ve searched for ant, maven, git, subversion, cvs, eclipse, netbeans, and intelliJ.

Environment Tools
Eclipse is a big winner here, as is Ant. In the version control war, CVS came out the winner, but the growth rate of Subversion seems to indicate it will eventually overtake CVS. In a related observation: holy crap people still use CVS?
Other Languages
Good developers branch out of their comfort zone to pick the right tool for the job, and good companies know this. So what should a Java developer know other than Java?
For this, I looked for ruby, python, scala, erlang, c, c++, php, groovy, and perl.

Other Languages
There’s no way around it, the best way to bolster your Java career is by expanding into C/C++/C#, though it’s possible these numbers may be partially attributed to job posts that look for candidates familiar with EITHER Java or C++.
Additionally, I was surprised to see Perl so high on the list. PHP, Python, and Ruby all seem to be on the rise as well, so learning those may put you ahead of the curve.
Overall
So far, we’ve seen a large number of technologies that are worth learning if you want to strengthen your career as a Java developer. Unfortunately, our time is limited and our wallet finite, so it may be handy to see which of the above popular choices are more popular than the others.
I’ve taken the top couple of search terms from all of the charts above and combined them into a single search to get a handle on relative importance. I’ve also added spring, ejb, and junit to the list. Why? Because, had I created a category for each of them they would have completely dwarfed the rest of the items in the category anyway.
The search terms are ejb, junit, spring, perl, eclipse, ant, websphere, javascript, ajax, struts, springmvc, and hibernate. I’ve removed C/C++/C# from the comparison because it dwarfs everything else.

Overall Comparison
Javascript and Perl (I’m still surprised by this) are the big winners overall. This indicates that the two strongest skills for a Java developer to have are, somewhat ironically, to know how to program in something other than Java.
Let’s remove everything that isn’t Java-specific from the chart, searching only for ejb, junit, spring, eclipse, ant, struts, springmvc, and hibernate.

Java Specific Overall
So the best Java technologies for Java developers to know are Hibernate, Spring, and Struts. Following that, companies seem to value skills with EJBs, Eclipse, Ant, and JUnit, with SpringMVC gaining popularity.
I suppose that all of this data means the ‘quintessential’ industry application is a Struts-based web application built using Spring, Hibernate, and EJB technology with an Oracle (MySQL if using an open source stack) database, written using Eclipse, built using Ant, tested with JUnit, and deployed in WebSphere (JBoss if using an open source stack).
Designing and implementing a web application using Struts, Spring, Hibernate, EJBs, MySQL, Eclipse, Ant, JUnit, and JBoss seems like a pretty solid way for a Java developer to make sure he or she has the skills that are in highest demand, and doing so would cost no money whatsoever.
Absolutely No Machete Juggling is a blog about software, programming, computers, and me. I'm a programmer working in Colorado, mostly with Java and Ruby. 



Demian:
MS SQL Server, WTF. I have worked with Oracle, WebSphere, WebLogic, JBoss and none of them are anything that anyone couldn’t pick up in a week at least to be productive as a developer. Hopefully employers don’t get too hung up on exact word matching.
It’d be interesting to know more about Struts2. Interesting to see that JSF is so low. I’ve used it briefly, had a 1 week class and as far as I’m concerned it’s entirely crap. Be weary of guys in suits selling expensive tooling.
22 December 2008, 5:19 pmJoe:
Great stuff, Rod!
In Chad Fowler’s book, “My Job went to India and All I got was this Book”, he argues that spending time learning what is hot today is not an effective way to be marketable, because there are already so many folks out there who know the technology in question. Essentially, it is now commodity. The real value in the graphs you have assembled is looking at trends and using a little guesswork (and getting a little lucky), you can learn the technologies that will dominate in the near future.
As Demian pointed out, any good developer can pick up most of the currently popular stuff quickly (lots of books and websites), but for interviews, it is probably a good idea to be able to discuss at least the high level aspects of the most popular of them.
23 December 2008, 12:49 pmRod:
Joe:
If everyone out there knows the technology in question and you don’t, that seems like it would be a problem for your marketability. ;)
I agree it’s good to learn the next big thing, but if all of my contemporaries know their way around Hibernate and I don’t, I’m at a disadvantage.
23 December 2008, 1:18 pm