As a veteran of two and a half decades of this battleground we call Information Technology, I’ve seen a lot of technologies come and go, and I’ve seen a lot of companies fail to embrace technologies that could have made a significant difference in their ability to deliver software quickly and efficiently. Sadly, in far too many cases, IT leadership (management and senior architects) adopt a play-it-safe approach, opting to “ride it out” with tried-and-true technology stacks while their competitors (often smaller, newer and more nimble) embrace and fully exploit modern advances in technology.
Fifteen years ago, this often meant opting to continue to build mainframe-based applications using stalwarts like COBOL and CICS rather than upstarts like Java. Today, it means avoiding modern languages and frameworks like Ruby on Rails, favoring the safety of the familiar – Java and C#.NET.
In recent months, I’ve had the privilege to conduct “architecture assessments” for three very different companies – two large, established firms with large IT groups and well-established architectures, and a new, small firm with almost no permanent IT staff and a “do what makes sense” attitude toward technology.
The differences among these companies is striking. The largest and most established of these companies, coming from a strong J2EE background, was busy rebuilding a set of customer-facing applications, purportedly to increase reuse of components among them, and to reduce the ongoing cost of maintenance. This project, which was having some serious challenges, was not only using dated J2EE technology, but was piling an incredibly heavy, layered architecture on top of it – resulting in application code that – reuse benefits aside – is going to be as difficult to maintain as anything they currently have in production.
The smallest of these companies, in stark contrast, decided to throw away a VB.NET application that was only six years old, replacing it with a lightweight application my company built for them in Ruby on Rails, which is easily, without exaggeration, fifty times simpler to customize and maintain than the application it replaced.
This set of experiences has had me thinking lately. How much could be accomplished in large, established companies – which tend to have sizeable groups of talented software engineers – if they were to cling to the safety of the past a little less tightly, and more aggressively seek to harness the power of modern languages and frameworks?
Having personally built applications in technologies ranging from COBOL/CICS to PowerBuilder to J2EE to Grails and Rails, I have seen the steady increase in productivity offered with each set of advances in technology. I have also witnessed companies fail to embrace these benefits until well after their competition had done so, nearly always to their detriment.
If you are a CTO, IT manager, architect, or anyone who is responsible for the technical direction of your company’s suite of applications, you owe it to yourself to learn as much as you can about modern, dynamic languages (Groovy, Ruby, etc.) and the web application frameworks built on them (Grails, Rails, etc.). The leading reason companies tend to avoid these technologies – slow execution speed relative to Java or fully compiled languages – is usually given more importance than is warranted, since most performance problems tend to stem from sluggish database interactions or network data transmission time. And many large companies tend to overstate their own performance demands. Sure, your internal applications get a lot of use, but are they really under more of an onslaught than the thousands of public-facing web applications built in dynamic, interpreted languages?
Consider this an open letter to the guardians of reference architectures across the Fortune 1000. Do yourselves a favor. Do not ignore Ruby on Rails. or Groovy and Grails. There’s a whole segment of applications tailor-made for these technologies, and far too many of them are still being built with Enterprise Java Beans, by teams that are far too big and not nearly productive enough.
7 thoughts on “Ruby on Rails: Serious Software?”
I am a huge fan of Ruby having seen how well it works for creating well designed apps quickly. Its an easy choice between VB.Net and Ruby. Convincing a large organization to retool 300 Java people to do Ruby is a harder sell. Additionally, many mobile platforms (Android and Blackberry) are Java based.
I love Ruby. I just wonder how many big companies can invest in it.
Great article with many good points. I’m sure there’s a lot of IT professionals in the Fortune 1000 companies whose skills and creativity are being limited by the enforced obsolete technology.
I feel like this could apply to universitets, to some extend, as well. There should be lessons in new and trending technology, instead of only teaching 5 years old material. I know that this is a challenge and you would need to go over that stuff every year, but it just seems like the universities are riding with blind folds at the moment.
Well, the beauty of Ruby and Rails is that you can do some pretty great things with very little investment. Everything in the language and the framework is about leverage – making the most of the time and talent of those doing the development. Rails teams are naturally smaller than Big Java teams, and the output per person is, by my estimation, 10X at worst, and mabye 30X at best (mileage will vary, of course). This means there’s no need to retool hundreds of developers. Just selectively pick a handful of bright, eager developers, give them an environment in which they can learn (read: have time to learn), and before long they’ll be cranking out features in burst mode, and the envy of their peers.
You do make a good point about certain development platforms like Android and BlackBerry requiring Java. And that’s fine. Actually, Java on those platforms isn’t so bad. Sure, mobile platforms tend to force you to work with hopelessly outdated versions of Java (to get decent backward compatibility on BlackBerry you’re going to be in Java 1.3 – say goodbye to generics and those nifty, concise for loops) – but at least you’re not working with EJB’s and heavy-duty architectures. And it’s only a matter of time before mobile platforms go dynamic. Progress is being made in Groovy on Android, and rumors are floating about Apple supporting Ruby on iOS in the not-too-distant future.
I’m sold on dynamic languages. I actually like Groovy a little better from a pure language standpoint, but Ruby’s on fire right now in the marketplace, and Rails is way ahead of Grails in terms of feature set and availability of open source add-ons, so at this point I’m spending the bulk of my time there. And I’ve seen so many great things done with Ruby and Rails that I wonder how many big companies can affort not to invest in it.
It’s true that many university IT and Comp Sci programs are hopelessly behind the technology curve. The ones that tend to do the best at staying current are technology-focused schools like IIT and DeVry. My company just attended a job fair at DePaul University in Chicago, which has one of the largest technology programs in the country, and I was pleased to see how many soon-to-be-graduates had been studying Ruby. A lot of state schools and traditional private colleges are still primarily teaching C and Java. The good ones throw in some Lisp, so at least there’s some conceptual leg up when graduates hit the marketplace and have to pick up a language like Ruby.
In this field, though, to stay on top, you have to be learning constantly – so it doesn’t really hurt that students find themselves having a lot to learn once they land their first job. It’s just preparing them for the rest of their careers. Take it from a guy whose Big Four languages in school were COBOL, BASIC, Fortan and Assembler. 🙂
I like Ruby on Rails as have worked with it.
IT professionals should try to work with it.
I’m pleased to hear about your experience in Chicago, seems like a great university.
I’m currently studying CS at a IT University in Copenhagen, Denmark. The languages we will be going through are Java, C#, F# and Assembler. I think that the time spend doing C# could be replaced with something else, like Ruby, Python, lessons on new technology like NoSQL, whatever that is just remotely more connected with new technology.
You say that it’s important to be able to pick up new languages and technologies, I certainly agree. I just think it would be a great help if universities helped students realize this by forcing them to look into different trending technologies.
They’re also overlooking the whole web-thing. Not a single class on web-applications or programming. This is a huge field (and where I spend my time), but the university just skips right over it? There’s a lot of paradigmes you meet with web-programming that you don’t have to worry about when writing a small Java-application.
COBOL, BASIC, Fortran and Assembler… At least they moved a bit forward since then 🙂
I really like Ruby on Rails. Since I learned VB before there was something publicly called .NET I got hooked on the feeling of creating something. I haven’t ever been to college and since learning to develop applications and websites I’ve been through all the major web languages.
PHP stuck with me for the longest and was the one I really despised the most.
Rails is a great framework and it certainly does allow for rapid development. But I can’t help to think why most of what’s obviously made with Rails seems so lazily built? I have some Python friends that for a long, long time told me to ditch PHP and go with Rails (or Django) instead so eventually I did. I know it’s a different culture and I do like the culture a lot better. But with all it’s hype and so forth, why isn’t there something to show off that leaves the technologically agnostic end user with something to be impressed with? In the beginning I asked for some excellent Rails open source that I could learn from and there was some great resources. But nothing with an interface that could convince my then business partner it was a good idea to learn something new.
There was pretty interfaces like Locomotive CMS but it’s not really built for practical usage. Going through working with the admin interface it’s not even that pretty. It sort of feels unfinished which it might just be.
Then there was the champion and spiritual leader 37 signals which seemed intelligent at first but after a while felt like a marketing scam. It felt much like all that talk about not making half-ass applications but just half-products were just a smoke mirror to cover for actually not caring about your product and it’s users. Don’t get me wrong, you shouldn’t give in to featurenititis but their product doesn’t feel finished either.
I guess what I’m trying to ask is wether or not this rapidness didn’t just mean people got “greedy” instead of more creative? With rapid development it seems so obvious to go into more details and make something awesome but it looks like people instead goes for quantity.
I’m not sure why this is. It might be just because it’s not as mature yet. Might be because people who develop with Ruby on Rails are busy making money. Might be because Ruby on Rails empowers everyone to roll their own CMS or forum or whatever easily so therefor no one goes together and make open source solutions that can match things like WordPress. I’m not claiming WordPress doesn’t have it’s shortcomings, I’ve made many solutions with it and certainly can be annoyed at some of their approaches and hacking it to death. But I’ve always sort of known I couldn’t make anything as thorough a piece of software as that with the resources I had available or client was willing to pay for.