Saturday, May 01, 2010

Future of a Java programmer

As a long time Java only programmer professionally, I have been pondering about how things are changing around me as a Java programmer. Ever since I remember I had no choice but to use subset of C++ dialect (Java lang) with an extremely rich class library and ecosystem (Java platform).

In last few years there has been a drastic shift in number of languages targeting JVM. For example: dynamic (javascript, jruby, jython, groovy), functional + OO (scala) and a lisp dialect (clojure) and so many others. While I am excited about all the options I have today I don't think a single language will dominate on JVM anymore like Java did so far.

In a way this is a good thing, one tool rarely fits all needs (I couldn't curse Java enough for GUI programming). Like C, Java was never designed to be used for developing dynamic web apps, but we still tried and miserably failed with JSP/JSF and plethora of frameworks against PHP/Rails/Python in terms of productivity. One really good thing Java did was to raise a level of abstractions from platform specific details and memory management. These new languages on top of JVM raise the abstraction level even further for its area of strength.

It is not a remote future when we will see concurrent processes being programmed in clojure and presented with jruby/rails with intermediate code written in Java. Each layer of application is going to be implemented in different programming languages while interfaces being transparent for developers working in each layer. This is a big thing, it has never been envisioned before for Java Platform, the lowest coupling we have seen so far is through remoting (web services et. al.) where clients and servers are on different runtimes and languages.

What this means for a Java developer is if you are

  • A web developer: you are going to learn things which are extremely different from struts/jsf/jsps, no more artificial model1/model2 MVCs.
  • A non web-developer : you are going to write code which is far more readable and very specific to your business domain via DSL created in any of the languages mentioned above without worrying about accidental complexity Java and its frameworks imposed on you.

While I can keep classifying developers on Java platform all day long, these two are major ones whose life (and resumes) are going to change soon, they will be expected to know more than one programming languages rather than frameworks now. Contrary to the cool kids on interwebz, I don't think Java the language is going to die anytime soon not because many of the existing libraries are written in it, but because of the number of programmers on earth who know Java, tooling around it and the native JVM support for it. Java is like C in a way, you can do whatever is supported by underlying implementation.

Many of you who are like me are going to see change around them soon, I am thrilled to see how my career is going to transform as polyglot programmer are you?


Tony Piazza said...

Polyglot is definitely my future. I've been looking forward to this day for the last 4 years or so. It makes a lot of sense to use the most appropriate language for each layer/component. I am currently enjoying Groovy but hope to dabble in Clojure and/or Scala soon. I have to agree with you that Java is not going away anytime soon. Like it or not, it's the Cobol of our generation...

Hildeberto Mendonça said...

I'm never comfortable with any kind of future prediction. People have said so many things and the dynamics of the internet is so fast. Better to be good in solving problems than in tools and languages.

Nirav Thaker said...

You seem to imply that being good with tools and languages worsens your problem solving.

However I get it where you are coming from, I used to think same why would I want new programming language anyway. Given that this is how it worked in real life all of us would have been programming in assembly lang for different machine architectures but reality is far from it.

Economics of our industry are not driven by emotions. Why do you use framework Y? because Y is productive, this applies to programming languages as well.

AndrejV said...

I think that any developer that finds programming language that he/she likes in first try in one lucky bastard. Or maybe not. If you know only one language, you are not open to try new and exciting things that world is offering.

In my 20 years of experience, I tried 3-4 languages before I settled with Java. I still know how to work with most of them. And I am still learning new ones, mostly ones that derived from Java (Clojure, Scala). But as backend and frontend developer, I think SQL and JavaScript/CSS count as languages, too.

sethrq said...

Learning multiple languages can help any programmer view new problems from multiple perspectives. "If all you have is a hammer, everything looks like a nail" still holds true. A big tool box with many languages will never be a bad thing