As I have said before to numerous colleagues, Java as the platform will provide the most value in the future, not Java as the language. The news about Gosu, a new JVM language, shows this once again!
Gosu is the latest JVM language I’ve seen pop-up and it certainly has some benefits over the current contenders. Gosu has all the newer language features that we have come to expect in dynamic languages, but is still statically typed. Sound familiar? It should because this is exactly Scala’s position. Gosu provides one important benefit over Scala though, it’s easy for existing Java developers to learn, which Scala is not.
I think the best way to describe Gosu is that it’s somewhere in the middle of Scala and Groovy. It provides the static-typing of Scala and the ease of use of Groovy. So, what is the value? Well, to answer that question, we’ll have to dive in to the details a little more. Gosu provides an interesting comparison chart, but honestly these items won’t make a bit of difference to 90% of the people I work with on projects. I’m not saying that I don’t work with smart programmers or that I don’t care about modifying existing types or an extensible type system, but rather I’m simply saying that the need to do these advanced level techniques rarely comes up on my projects. So, what do I care about? Here’s my list: longevity, repeatability, productivity and frameworks.
As an architect, I always try to recommend technical solutions that are maintainable. The most prominent part of maintainability is the technical stack that a particular application runs on. So before I would recommend any language for a business application, I need to know the basics of longevity! How long has the language been around? How many developers work on the language? How many companies use the language? Is there vendor support for the language? In terms of Gosu, it actually looks pretty good! It’s been around since 2002 (privately until recently) and is used by lots of companies via Guidewire Software Inc.
One great thing about a big company is you can move around to different teams and try something new. One horrible thing about a big company is when you move around to different teams they often do things completely different. Java and .NET solved this problem for the industry. Java is Java and C# is C#. It is very easy for one Java developer to move to a completely new team and start adding value pretty quickly because all Java code looks pretty much the same. This is not always true though and PHP or Perl are perfect examples of this. There are so many different ways to do things in PHP and Perl that it’s often very hard to read other people’s code. Scala has a different spin on the same problem, it’s so complex that other developers can’t comprehend what’s going on, ha! Gosu gets another +1 in this area as a language that looks very repeatable (at least from what I can tell so far) and developers should have no problem reading and understanding code somebody else wrote.
Everybody wants to be productive in their jobs. It doesn’t even matter what industry you work in. If there’s a way to automate a task or reduce the amount of work it takes to accomplish a task while still producing the desired output, why not pursue it? This is the whole idea of convention over configuration that Ruby on Rails inspired. Why do work when you don’t have to? So, before I’d even consider a new language (or framework), I need to understand the benefit to productivity. I have actually done some basic testing to see how fast I can accomplish tasks in Groovy vs Java. So what about Gosu vs Java? What about Gosu vs Groovy? I haven’t played around with Gosu enough to really know how productive one can be with it, but from what I can tell it looks pretty good and has the basics of good IDE support (Eclipse), closures, etc.
Finally, it’s time to discuss frameworks. One of the most important rules of programming is don’t reinvent the wheel. In other words, a language is no good if there aren’t any established frameworks to use with it. I often hear people say they use Groovy to build their websites, but this really doesn’t even matter, does it? What I really care about is that you used Grails because then I know you used an established MVC (Spring MVC) and ORM (Hibernate) to build your application. Same thing with Scala and Lift. Lift provides all the base components you need to build your next killer Scala web app. Groovy is to Grails as Scala is to Lift and Gosu is to Ronin. In my research, Ronin looks like it has a lot of potential as a solid MVC and ORM (RoninDB), but it failed my obligatory framework test. There’s lots of activity in the project, which is good, but it’s not stable enough yet. There are also only two contributors right now which simply introduces too much risk to adopt right now. Hopefully this changes in the near future. Or maybe I’ll even try to become a contributor!
So there you have my personal take on Gosu, a new JVM language. A language with good potential, but I probably won’t use it for a new project quite yet! I’m certainly going to keep my eye on Gosu and Ronin though and it will be interesting to see how quickly they progress!