Monday, April 26, 2010

What's is going to happen to Java?

This has kind of been discussed by some lately but I think many people are still wondering but don't ask. Java has been around for quite some time now and has infiltrated many a businesses with its simple syntax yet powerful features. A lot of developers still do java and companies have invested heavily into Java, so I feel like it is here to stay. It's definitely starting to lose its luster lately for a few reasons.
One being the state of affairs with Java's creator and a long time guardian of its innovation.
The other being the multiple-processors becoming the norm in computers.

The former by itself has been quite a pain point of the Java community, even before the take-over. JCP has been relatively slow in keeping up with people's needs. Some of the other languages emerging are giving Java a run for its money in terms of the features and paradigms that they offer.

The ruby community (rubyflow.com, rubyinside.com) has been gaining a lot of momentum in the last few years and I really like a lot of the stuff that is going on there. A lot of innovation, the community is really growing and contributing to its growth. It is evolving at a more rapid pace than any other community as of late.

Erlang picked up interest lately because of its distributed nature, fault-tolerance and high-availability, which go hand-in-hand when dealing with communication type of systems.

There are definitely some interesting languages emerging on the JVM itself (JRuby of course being one).
We have Clojure, Scala, Groovy, Fantom to name a few.

From what I see Java is going to be slowly being superceeded by some of these. I know Groovy is definitely being used quite a bit already and the fact that now we have a statically typed version of it called Groovy++, is going to pique quite a bit of interest.

Scala is a really interesting for me personally, because it in a unique position of being a hybrid language. It is both Object-oriented and functional at the same time. Its speed is nearly identical to Java itself.
The akka framework being developed on top of Scala is the most interesting framework for me these days.

Clojure is really interesting too. It is nearly pure functional programming language and its built-in STM gives it a unique feature that not many functional languages have (I don't know if any do actually).

Fantom is one of the new kids on the block, yes I say that even when some of these other languages haven't even been around longer than a few years.
It brings an interesting aspect where the code written in Fantom can compilre for both the CLR (.Net) and JVM. An interesting way to bridge the gap between the two systems.

I have been reading up on all of these languages because I think they will all be players in the game. In fact they already are. Like I said though, I Java is here to stay.
Look at COBOL (I really don't want to compare it to COBOL), but still, if you look at COBOL, it is still around how many years later?

We live in interesting times and I don't think Java developers have to worry about job security, but I do think the circumstances over the last couple of years have spawned some really interesting languages, that people should check out or at least be aware of. If you're a Java developer, I would highly recommend learning at least one of the new languages, as learning is always good for you and it also opens you up to new interesting points of views and paradigms that you may have never even been aware existed.

9 comments:

M said...

haskell has STM. though the STM in haskell and clojure have fairly significant implementation difference.

Javier said...

only some points:
- akka has borrowed stm from clojure as a library, http://doc.akkasource.org/stm
- in theory clojure can be used in a clr environment but in a developer-only distribution

pveentjer said...

Akka uses Multiverse as STM implementation. And although Multiverse shares concepts with Clojure, these concepts can also be found in other STM implementations. So saying that Akka borrows the Clojure STM goes a little bit far.

ps:
I'm the founder of Multiverse
htt://multiverse.codehaus.org

Maxim Gubin said...

Wow @Javier you are right.
http://www.haskell.org/haskellwiki/Software_transactional_memory

STM is a concept and I don't know why I didn't think it couldn't be implemented in many different languages.

The only reason I mentioned that Akka and Clojure have it is because I haven't really looked much at Haskell. I would love to look at Haskell too when I get a chance.

Mike Miller said...

I started my career over 20 years ago as a COBOL programmer and would never go back! Worked in Java for over the last 10 years and I really enjoy the Groovy/Grails pair - let's you continue to use your acquired Java knowledge, syntax, etc while utilizing a dynamic language, but it's going to take a while to get Groovy into some shops...

jesper said...

I really like your stuff, thanks for sharing!!!!!!!
This is just amazing!!! ñ_ñ

buy viagra

viagra online

generic viagra

Jesper Gronkjaer
3711 Hamill Avenue
Los Angeles, CA 90017

Andrew Milkowski said...
This comment has been removed by the author.
Andrew Milkowski said...
This comment has been removed by the author.
Andrew Milkowski said...

Max, for Haskell, pick up Graham Hutton Programming in Haskell (Cambridge Press)

Also make friends in Haskell/Scala forums and read their blogs

Learn basic concept of a Monad and some other aspects of category theory like Functors etc,

Nice Haskell project is found at

http://holumbus.fh-wedel.de/trac

Erlang, after Haskell should be "ok" transition, would start from triggering and stepping thru code of:

http://www.rabbitmq.com/

Scala future is uncertain, but 2 shops are investing time and development and this might make a difference

Twitter
Fouresquare

I would assemble each individual library from Twitter and assemble a Lift CRUD application using some subset of these,

for Scala aka try github and various benchmarks that were performed to measure performance and stability and against other concurrency approaches

nice example:

http://github.com/jboner/akka-bench

Overal awesome, you are engaged in this:)

best