Working for an integration company has changed my perspective on things. I used to be totally web-centric, focused on AppFuse, Tapestry, Spring, Hibernate, etc. While I still have interest in those things, my horizon has expanded beyond that single application silo.
Ruby on Rails interests me a lot, but I keep having fear, uncertainty, and doubt about the platform and supporting infrastructure. I know that a lot of bile has been spilled over Rails versus various J2EE frameworks, but I believe that a lot of that is fueled by fear. People who've invested the last several years honing a skill don't like to hear that it's being obsoleted by the next new thing. Ruby and Rails look like a threat, so some people want to discredit it. (If you object to that point, you're probably one of them. 😉
But my fear is not based on that; I've never been the type. I tend to throw myself into the unknown with great abandon. I left behind a guru-like knowledge of embedded, real-time C++ (I could tell you what instructions the compiler would generate from a given section of code; I could convert IEEE floating point format in my head; it's quite sick, really) in the world of avionics for the great unknown of J2EE. I didn't even know what an application server was at the time I started at ATG. Thank you, crazy tech bubble, for making my career change possible. And now I find myself in the land of SOA and ESB. No one can accuse me of being complacent.
My fear of Ruby is based on investing time and energy in a technology that never pans out and leaves me hanging, half-way through. Being a sucker for bright, shiny things, I worry that I can't trust myself to assess the real value of this new bauble.
So, today (really for the past couple of months), I'm weighing Ruby and Rails. I've never really liked Java syntax, and the efficiency of Ruby feels like a return to my lean and mean C/C++ roots, where men are men and, you can assign a value to a variable at the same time that you test it in an if-statement. (I like a lot of rope.) I believe in code generation, and Rails does a nice job of providing a quick way through the tedium. But the thing that keeps me up at night is the platform.
Is the Ruby runtime anywhere near the quality of fourth and fifth generation JVMs? How's the threading model? Garbage collection? JIT compiling?
And even if you don't want to be a totally anal-retentive nerd, dinging the VM for academic shortcomings, what about interoperability? I would imagine that you could fairly easily implement things like JMS and JMX in Ruby, but they don't exist today. I can think of so many things I could do with Ruby if it offered such technologies. Without them, I feel hesitant to commit, as much as I am ready to fall in love. Do I want to limit myself to a platform that can only serve basic database-backed web apps (no matter how quickly or nicely)?
The question remains whether Ruby will grow up to be a platform that can displace Java. Java has accomplished some remarkable things. It wasn't the first bytecode interpreted language, but it was the one that stuck. It wasn't the first environment to run on multiple platforms, but it is the one that was ported to mainfames and smartcards. It wasn't the first language to promote code reuse, but I've never seen anything like its vast library of reusable code in any other language (which is also a source of great pain, but that's a topic for another JCranky post). You can run JRuby in a JVM, but you can't run Java in Ruby. The JVM is a formidable incumbent.
Java is not just a language, it's an environment. And so must Ruby be. The question is whether Ruby's environment can grow up to be as robust, rich, and performant as the JVM. I really hope so. I could say goodbye to Java the language with no regrets. I can't say the same thing about Java the platform.
C'mon, Ruby, I'm pullin' fer ya! Don't let me down.