Once up on a time (just a couple of days ago to be a little more exact), some colleagues at Dynabyte had an interesting discussion on the future of Java at our office in Stockholm. Someone suggested we should take some notes and throw the result out into the blogosphere. First a short note on the constellation of the group: Some variations; anything from one to ten years of professional experience of Java. Some of us very Java oriented, some of us having Java just as a language among others (C# and Ruby being the main alternatives). Some of us slightly hostile to the language in principle (ill-designed from the start with bloated syntax was one of the less flattering comments), some of us quite fond of the good old beast. So, variations in outlook tend to be a good ingredient in bringing about a good discussion and I’m pretty sure it contributed this time.
The discussion started with some clarifications as to what we meant by Java. Java as a platform in a very wide sense – the JVM, the rich developer community, the numerous successful and widely adopted Java-based open source projects combined with the strong position for Java among vendors and in the corporate sphere – seems to stand a much better chance of long term survival than does the actual Java language. Alternative languages such as Scala, JRuby or Groovy might one day replace or at least eclipse the Java language on the Java platform.
Should Java as a language be further changed and updated or should it be kept as it is? We didn’t reach agreement. Some of us ran arguments along the lines of the dangers of language bloat and syntactic and semantic feature creeps. Some of us took the opposite view arguing for the immediate enrichment of the Java language with proper language support for properties for starters (no pun intended). “Just throw everything into Java. Make it as powerful and flexible as possible and then let the developer decide what to use”. We didn’t even agree on whether or not generics were a good move for Java or not. In hindsight: A miniaturized conservatives vs. radicals discussion … and from that perspective I think I ended up on the wrong team … or at least not on my usual team. On the other hand, the discussion could be equally well regarded as minimalists vs. shameless bloaters. From that perspective I feel more on the right team and don’t have to lose any sleep for betraying my sacred values.
If Java is to be dethroned, who or what will take its place? Scala? C#? Groovy? A happy family of DSLs on the JVM? Ruby? Some of us are quite keen on Ruby but could Ruby really replace Java as the language of choice for building larger systems? No one seemed to be willing to carry the Ruby-as-Java-successor-banner all the way. We then got kind of sidetracked but in an interesting way. Ruby was claimed to be on a conceptually higher level than Java and concerns on how that would affect an imagined post-Java-generation of developers were raised. Would a newly hatched developer breastfed with Ruby stand clueless when faced with problems from the scary lower regions of the conceptual stack? Agreement was reached that those concerns are legitimate but also very old and equally valid at any point in the progression from low level direct hardware instructions to assembler programming to C and so on. You lose understanding and give up control at every stage. By having technology solve problems for you, of course you’ll not be fluent in solving those kind of problems yourself. Working at a conceptually higher level probably pays the price or otherwise the progression in that direction wouldn’t continue. And hey, you can still write assembler code. Nothing stops you. For most of the problems you are faced with in our line of business you’ll not be very productive, though.
Oracle. Well, they bought it. All of it. What will happen now? With the JCP? With NetBeans? With JRockit? We are geographically close to JRockit and it turned out one of us knows developers on the JRockit team as well. Could Oracle bring financial muscles to the Java platform and do good? Will Oracle owning Java increase the risk of the platform diverging somehow or forks of some kind? Time will tell.
If your local fifteen year old computer enthusiast, keen to learn how to program, asked you to recommend a language, would it be a good idea to recommend Java today? (“Would that ever have been a good idea?” was the immediate objection of course.) Does Java have that kind of future? Should a consultant with his or her main experience of Java from college take time and effort to strive towards Java expertise today? Sure, we have tonnes and tonnes of Java code out there (Java will be the new COBOL as someone wrote not too long ago) and lots and lots of legacy applications will be Java based in the future. There will be work for the Java expert for sure. Especially if you are willing to get your hands dirty in a legacy application … but to end on a more positive note: If it turns out that some variation of the family-of-cool-languages-on-the-mature-JVM scenario plays out in the real world, your time invested in Java will both pay the bills and empower you as the developer of tomorrow.
Next topic up for discussion is “What to expect from an integration platform in the near future” and we plan to post a summary here – stay tuned!