I blogged in the past about how far behind is the Java language and have since played more with a few of the JVM languages.
I will focus on Scala, Groovy, JRuby because they are more general focused and are backed up by bigger companies (Scala is supported by Typesafe, JRuby is supported by EngineYard while Groovy is supported by SpringSource).
Clojure has its uses, but being a functional language requires a significantly different programming paradigm. However, I understand that functional languages lovers are big fans of Clojure. I personally find it hard to use.
Jython is loved by Python people, but I don’t see why move from Java to Jython.
I spent some time playing with Scala and the Typesafe stack (Play and Akka). I have to say that I really don’t understand why someone would ever design such a cumbersome language. It is just not intuitive at all even after a couple of good weeks of coding, reading Scala books and having some more experienced Scala people on the team. It seems way too geeky in syntax and it really affects productivity and one of the main reasons to switch from Java is productivity: both less code and simpler/clearer syntax. My other problem with Scala and Scala tools it their love to only support Sbt as the build tool and also change from the standard project structure followed by maven, gradle and similar build tools. Sbt doesn’t add enough in the build space and has very limited IDE support. My last problem with Scala is the lack of monitoring tools and being able to use the Typesafe Console even for development only after getting a support contract – that is a big no if they want wider adoption because no startup will pick Scala when there are other free tools. On the other hand I have to say I like the actor pattern a lot and because of that Akka framework and Play. Since both Akka and Play have also Java APIs they ca be used from Java or any JVM based language.
JRuby had my interest over 5 years ago and I know that a few companies are still trying to push it (like ThoughWorks). Ruby’s syntax is not too bad and it really increases productivity. There are plenty of tools written in Ruby, from build tools (like buildr) to web frameworks (JRuby on Rails) to test tools (Cucumber) and deploy/env management tools (Puppet and Chef) which all show how easy Ruby can be used for almost anything. For Ruby developers I see JRuby as the perfect companion, even if Ruby and it’s frameworks don’t seem to be at the front of the innovation as much as 4-6 years ago.
Groovy, like Scala, is a programming language design for the JVM and it supports 3 different syntaxes (from Java like code to very dynamic style syntax), so I propose that every team should pick one of the syntaxes styles and stick with it. It is a very easy transition from Java since any Java class could just be renamed .groovy. Groovy also has a good selection of frameworks and tools: gradle for builds, grails for web apps, geb/spock for testing. I like gradle a lot and to some extent speck/geb. Grails is pretty impressive, but I recommend not using their GORM for anything other than prototyping. To e certain extent the same applies for their scaffolding and code generation. Sometimes it feels like there is too much magic under the hood in grails and the fact that is uses Spring MVC and Hibernate by default is somehow disappointing. I also expected groovy to get a much higher adoption over time, but I guess the cool and hipster programmers ditched not just Java, but also the JVM for node.js, Erlang and other cooler languages and platforms.
As a conclusion, if you are not ready to join the hipster programmers with node.js and Erlang (writing distributed map reduce queries in Erlang is pretty cool) I recommend either Groovy (if you still like and know Java very well) or JRuby if you know Ruby better than Java.