Devoured By Lions

the eternal struggle to tame complexity

Initial Survey of the Ruby Landscape

The last week or so I have been trying to learn a bit about Ruby and Ruby on Rails, and evaluate both of these in light of an existing project for which I have been to date using Java technologies (in particular, rich web frameworks (~ GWT/ITMill) and ORM (JPA + Derby)). Here’s what I have surmised so far:

* Ruby is a great, dynamic, and fun (!) language. However the state of release management, and fracturing of incompatible implementations and platforms is a little concerning.
* Ruby on Rails does a few important things that make it really fast to develop with: 1) for a certain class of application, it makes all the right major decisions for you so you have less mental noise to deal with - the stack is fully integrated 2) provides scripts to automate development 3) the philosophy is to exploit the utility of the Ruby language for all aspects of the framework, so again, there is less mental baggage to deal with (no XML schemas to remember, no extra config file syntaxes). It actually seems quite a bit like Django.
* RoR is plainly targeted towards mass public web sites. Scaling RoR eventually typically involves introducing a bunch of different technologies (somewhat diluting the uniformity effect above). So far I haven’t found support for developing, for example, portable downloadable applications in RoR. But…
* One of the best things about Ruby is JRuby. Apparently it is the leading implementation now, which is great, because it connects Ruby to the wealth of existing Java-based technologies. This also potentially provides the one-click download/run that is possible with Java. There are tools that allow packaging up (j)RoR applications as a Java applications. So JRuby + RoR + Derby + Warbler == instantly portable RoR bundle.

I look forward to trying RoR and packaging as a Derby-based Java application to see if the claimed productivity benefits (developer from Competitious claims in seriousness “100x”) can translate over to the Java platform.

In addition, I’d like to try out Heroku. It would be cool to develop both for JRoR, and Heroku. Unfortunately I couldn’t install Heroku via JRuby, as it appears to require some native integration (so I guess one just needs to use native Ruby when working with Heroku).

On a related note, Mats has said that re-using an existing VM does not save as much work as one would think, but still, it appears to me there are great benefits to doing that (in addition to JRuby there is IronRuby on CLR). Granted the JVM does not (yet) have good dynamic language support, but once you get to a single VM there so many more possibilities and a more efficient focus of resources (e.g. on optimizing or porting the VM). Really, how many client-side database drivers do folks need to be rewriting over and over again. Let’s face it, most programming languages are just a slightly different permutation of features which push the same bits around.