I believe that Java developers are under a tremendous amount of pressure at the moment. However you may not feel it if you believe that Java is going to be around for a long time and you are happy to be the one maintaining the legacy apps in their twilight. Elliotte Rusty Harold has it right in the comments when someone says that there are a lot of Java jobs still being posted. If you enjoy feasting off the corpse then feel free to ignore the rest of this post because it is going to say nothing to you.
Java is in a tricky situation due to competition on all fronts. C# has managed to rally a lot of support. Some people talk nonsense about C# being what Java will look like in the future. C# is what Java would like if you could break backwards compatibility and indeed even runtime and development compatibility in some cases (with Service Packs). C# is getting mind share by leapfrogging ahead technology-wise at the expense of its early adoptors. Microsoft also does a far better job of selling to IDE dependent developers and risk-adverse managers.
Ruby and Python have also eaten Java’s lunch in the web space. When I am working on web project for fun I work with things like Sinatra, Django and Google App Engine. That’s because they are actually fun to work with and highly productive. You focus on your problem a lot sooner than you do in Java.
The scripting languages have also done a far better job of providing solutions to the small constant problems you face in programming. Automating tasks, building and deployment, prototyping. All these things are far easier to do in your favourite scripting language than they are in Java which will have to wait for JDK7 for a decent Filesystem abstraction for example.
Where does this leave Java? Well in the Enterprise server-side niche, where I first started to use it. Even there though issues of concurrency and performance are making people look to things like Erlang and JVM alternatives like Scala and Clojure.
While, like COBOL and Fortran there will always be a market for Java skills and development. The truth is that for Java developers who want to create new applications that lead in their field; a choice about what to do next is fast approaching. For myself I find my Java projects starting to contain more and more Groovy and I am very frustrated about the lack of support for mixed Java/Groovy projects in IDEs (although I know SpringSource is putting a lot of funding into the Eclipse effort to solve the problem).
If a client asks for an application using the now treadworn combination of Spring MVC and Hibernate I think there needs to be a good answer as to why they don’t want to use Grails which I think would increase productivity a lot without sacrificing the good things about the Java stack. Companies doing heavy lifting in Java ought to be investigating languages like Scala, particularly if they are arguing for the inclusion of properties and closures in the Java language spec.
Oracle’s purchase of Sun makes this an opportune moment to assess where Java might be going and whether you are going to be on the ride with it. It is hard to predict what Oracle will do, except that they will act in their perceived economic interest. The painful thing is that whatever you decide to do there is no clear answer at the moment and no bandwagon seems to be gaining discernible momentum. It is a tough time to be a Java developer.
3 thoughts on “The Java Developer’s Dilemmia”
Very interesting post
Excellent post. Four years ago, I had a neutral opinion on the C#/java question, but over time the convenience of C# won out. I’ve thought about this a lot, and I’m still not sure why. On the one had, restrictions imposed by the java language made sense in an academic context, but seriously hurt productivity. At other times, it seemed the language was fine, but the JVM conspired against me.
In keeping with the focus of your post, forget for a moment about the java language, and focus instead on the JVM. How tightly coupled is the JVM to the java language? For example, could the ECMA portions of C# be implemented in the JVM?
I use IKVM to generate managed dlls from jar files. Works incredibly well. Its not a silver bullet, but makes an excellent migration path for anyone who has a serious java investment, and needs to expose it in .NET/mono.
I think you’ve misunderstood my post. I would regard a Java programmer moving to C# as crazy. It is like someone jumping from a sinking ship to a sinking canoe. The problems and the languages are the same but there is far more Java work than C#. About the only rational would be if you wanted to move into Windows application development.
The Java Developer’s Dilemma in my view is about trying to move to the next generation of languages not rearranging the deckchairs on their current choices.