A while ago, Christian Sepulveda wrote an interesting post Why Rails will Reign Supreme. This is the latest variation on a theme that’s beginning to resound in the Rails community, and I can’t help but to disagree.
EDIT : Christian also has a follow-up post, Why Rails will Reign Supreme, revisited .
For the record, I am a big fan of both Ruby and Rails, and use them both in my daily work and personal projects. However, I cannot see them going mainstream anytime soon, or in Christian’s words, “Ruby/Rails can and will replace Java as the language and platform of choice for software development in the enterprise”.
Other worthy contenders have tried and failed1
Python has had a reasonable foray into the enterprise with Zope/Plone2, Twisted, and now Django and Turbogears. Heck, it’s one of Google’s “big four” languages for crying out loud. What better endorsement than that? But Python job numbers aren’t even close . Hmm what’s this? Rubyists haven’t even overtaken Pythonistas yet? What’s with all the hyperbole then? I know the growth chart shows Ruby growing at a phenomenal rate, but even then how many years before it can Eclipse Java?
Enterprise. Powerful language. Does not want.
So now Ruby, with funky belligerent offspring Rails in tow, is the next challenger. But it is too similar to Python. Simply put, Ruby the language is much too powerful for the mainstream — the same way Python is too powerful, the same way Lisp is too powerful. (This is using Paul Graham’s definition of power of course.)
The reason powerful languages fail is simple. Big enterprise does not want them. Remember, big enterprisey non-tech companies don’t like to hire superstar programmers (who typically prefer powerful languages). They prefer to have developers as low-cost interchangeable parts. It doesn’t matter if they have to hire 50 of them. Google around for some combination of the words ‘average java team size’ and see for yourself.
Java with design patterns3 scales a lot better for average programmers. Bear in mind I’m talking scalability with regards to team size, not with regards to deployment.
With Java, you lack a convenient way to use functions as first-class data . You can’t just open up a class and change default behavior like you can in Ruby. There is limited, if any, meta-programming. Roadblocks and safety nets abound. All these are reasons why many coders spurn Java, but they are the exact same reasons why it is so useful in big teams of mediocre coders. (You’re going to see me using terms like ‘mediocre coders’, ‘average programmers’, etc a lot. No slight against the top Java developers, but there are millions of Java developers and by definition most of them are average.)
Anyway, all this leads to senior developers being able to dump each programmer into a nice little cubbyhole coding a Facade/Adaptor/Observer where he isn’t likely to break anything. Half the naughty things generic programmer ID81732 can do should be caught during compile, and the rest that might get through, well there’s static analysis tools . With dynamic languages, there aren’t those safety nets4.
You can mention the wonderful Ruby/Rails ecosystem. Yes I know we have plug-ins and gems out the wazoo. The huge missing piece here is schools. Java has a veritable JavaCoderFactory of vocational schools and colleges churning out graduates year after year with students who know nothing but Java. In most schools, Ruby has to be learned outside of class, ie not mainstream. The battle has already been lost there, let alone 4 years later when those students are looking for jobs.
Christian concludes with “economics will dictate the needs of software and will establish the supremacy of Ruby and Rails”. I agree with the former. As for the latter, one of the chief concepts of economics is scarcity. And right now, good Ruby coders are scarce compared to their Java brethren. The scarcity of Rails coders compared to Java coders will raise the costs of developing with Rails (since with a limited supply Rails developers can charge more) to an equilibrium point with the cost of a Java team powered by a horde of mediocre code churners.
Another way of looking at this. Suppose one night DHH appeared to every CTO in the world in a vision and said “Tomorrow thou shalt start using Ruby and Rails”, and they all wake up and start looking for Ruby coders. What then? The sheer lack of programmers who know Ruby to fill that demand will mean other languages will have to be used. Mainstream? Pshhh.
I understand from Obie that a lot of big companies are starting to use Rails. That’s great news. But to truly go mainstream goes far beyond that. The companies listed all have (and need to have) a huge online presence. But going mainstream also means winning the hearts of non-tech companies who need bespoke applications. The kind of applications you never see or hear about. They don’t come with fancy gradients, social networking, or RESTful APIs. Yet million-dollar contracts are flying around to get them coded. In Java.
So what’s the big deal?
Why would Ruby/Rails developers want it to be mainstream anyway? There’s another term for becoming commonplace, and it’s called commoditization. Sure if Ruby becomes the new Java, then the early adopters suddenly have 5 years experience when everyone else has 2. That’s why this scenario is so appealing. However, mainstream also means hiring decisions will to be influenced more by non-tech people who don’t understand that 1 senior developer at 120k a year is more cost-productive than 3 junior developers at 30k per annum.
Paul Graham’s RailsConf 2006 Keynote Address, Power of the Marginal, was only two years ago. What’s happened since then? Why the obsession with being mainstream, when we’re having so much fun being on the outside?
Part of the appeal Ruby and Rails have is that they’re on the cutting edge. The moment there’s an “R2EE” out there will probably mark the beginning of the end for many. Time to look for a new language and framework. Scala on Sails. Javascript in Jail. Erlang with Extra-terrestrials. Whatever floats your boat.
PS: Once again, nothing personal against Christian Sepulveda - this essay is directed at anyone who thinks Ruby/Rails is taking over programming as we know it anytime soon - his just happens to be the most recent such post I have come across.
1 By ‘failed’ I mean that it still plays second fiddle to Java and C# in market adoption.
2 Yes I don’t think Zope/Plone then comes close to Rails now, but you have to consider the state of software frameworks available across all languages at that time.
3 For a hilarious look at Java, check out Steve Yegge’s Execution in the Kingdom of Nouns
4 Yes I know dynamic languages espouse testing, but good Java shops use tests too. Static analysis is something Ruby/Python et al cannot do.
CitrusByte developer Tim Goh aka ProgProg was previously a Python/Django hacker but is now a Ruby/Rails convert. He has been charged multiple times with method_missing abuse.

{ 18 comments… read them below or add one }
I’m waiting for Io on Ions.
I haven’t much to add at this point but.. I agree with you pretty much 100%.
“Super star” developers are like property snobs. Once enough “mainstream” programmers get on the Rails bandwagon (if this ever happens), those “super star” developers will engage in a developer variation of “white flight.”
JavaScript has already won the Language War. Every other lang is in some stage of decomposition. All we’re waiting for is client- and server-side JS to blend elegantly, decent E4X support, and a clean way of abstracting away CSS in a similar fashion.
In ten years, we’ll all be writing nothing but JavaScript. Though the nomenclature will probably change, and we’ll just call it flat-out “script,” because, well, all the other scripting languages will be rotting legacy software.
1.
Zope failed for the same reason Netscape died: they took everything apart and stopped having forward-moving releases. There was Zope 3, and Zope 2, and then they tried to put some 3 features into 2 with Zope 5 (”2+3″, ha) so people would think they were still alive. I was a Python programmer, and I tried to figure out how to write a Zope program, and I couldn’t even figure out what Zope to use. The fact that it was Python was completely incidental to its suckage and demise.
2.
If companies like lower-level languages, why stop at Java? Why not write “enterprise” software in Pascal? If implementing everything by hand is better than abstractions in source code, we can go a lot lower!
Interesting read. In general there is a truth you exposed — paying more for higher quality people produces far more output then hiring a bunch of people at a lower rate. I think this is true in most businesses where the creative capital and thinking ability is the prime determination of the success of your product.
People who are just “ok” are likely to make just “ok” and average products, and who wants to buy that? See Seth Godin on this point, he has a lot of excellent things to say about it.
See, here’s the problem:
1) You have a very powerful tools: Ruby + rails
2) You have an unknown developer
3) He starts coding in anger (pushing Ruby and Rails to the limit)
4) Nobody understand his code (cause there are no comments)
While in Java, albeit it might take a while, I would argue that you will understand his code one way or another.
What makes you think that Rock-Star developer will write comment? Geeks are known for their code-poetry (or coding as his/her porn). Geeks don’t think documentation is cool.
Besides, Rock-Star developer is the type of person that gets bored easily. There’s a reason why he jumped to different languages quite often. The same attitude will show up in the job. So one day, Rock-Star developer argued that “Hi CIO, Ruby is no longer good enough for our project, let’s switch to LISP today”. Then what happened if he got rejected? He left the company for a better opportunity. He’s a Rock-Star developer right?
Most CIO and managers aren’t that stupid. Most Rock-Star developers aren’t that smart either. They may be super good in coding, and not in everything else.
Most Rails programmers are PHP convert by the way. Most Rails programmers are also Java convert by the way. None of them are LISP convert. So that makes Rails the average PHP and Java community.
So if Rails programmers are in “scarcity”, I’d say, let them be. It’s much better without these mix crowds.
I always wonder why (the average) Ruby and Rails people think that they’re better than Java developer (speaking in terms of average). Most Rails developers can’t push Ruby to its boundary. Most Rails developers can only code as good as their Java/PHP code.
So where we are right now?
*
A small pool of Ruby on Rails developers
*
Only top 10% can code Ruby correctly without shooting someone else’s foot
*
So probably only a tiny useful developers
If I’m a CIO, why would I decided to use Ruby on Rails if most of them aren’t as good as advertised?
I’m not surprised one bit when I found and used broken Rails plugins with no documentation when I was using Rails.
@Donny:
Whoa, that doesn’t make any sense.
If I want to write obfuscated Java I can just as easily as I can write obfuscated ruby. If it takes someone that knows java a while to figure out what I wrote, it will take someone who knows ruby about the same time to figure out what I wrote. The problem, here, it’s that there are far too fewer ruby devs than java devs.
“The huge missing piece here is schools. Java has a veritable JavaCoderFactory of vocational schools and colleges churning out graduates year after year with students who know nothing but Java. In most schools, Ruby has to be learned outside of class, ie not mainstream. The battle has already been lost there, let alone 4 years later when those students are looking for jobs.”
This, of course, is why colleges today only teach hand-entered machine language. After all, colleges only taught hand-entered machine language back when that was the only viable option, and once they started teaching that, the supply of hand-entered machine language programmers was so vast there was never any other reason for Big Business or colleges to change.
Oh, wait…
Colleges once taught hand-entered machine language as the mainstream business programming language. Then COBOL. Then C. Then C++. Now Java.
To say that “battle has already been lost there” means one of two things (possibly both):
1.
You failed to learn from history.
2.
You’re one of those people for whom, if the problem isn’t solved in the next five minutes, it’s unsolvable for all time.
I’m not saying Ruby will displace Java as the language of business. Statistically speaking, it’s not terribly likely, because the odds of any given language replacing the current mainstream one are not very good.
However, some of the same arguments as yours were used back a decade ago, explaining why Java would never be a mainstream programming language (e.g., nobody teaches it).
“Those who do not learn from history are doomed to repeat it.” — Santayana
@Nicolas
I didn’t say it has to be obfuscated. A heavy deep metaprogramming is enough to make some people head spinning.
There’s a reason why most people aren’t using LISP and settle for Ruby.
Heck most Rails programmers don’t do heavy metaprogramming.
Exactly. This is why I’m not sure if even Scala will succeed in the mainstream. Pity.
@Donny:
Maybe I shouldn’t have said obfuscated. What I mean is that your point doesn’t make sense, because if you put someone that knows ruby to read ruby code, then it will figure it out.
Even if your code is super-duper-magical and you rewrite the entire program inside out every 4 lines with dark metaprogramming techniques or if you obfuscate the code, or if you don’t comment it, or whatever.
Other programmers will be able to understand it, even if it takes them a considerable amount of time.
Have you ever read _why’s posts with weird “magical” code? :)
My point was that if the code is hard to read, it doesn’t matter if you write it in java, in ruby, in perl or in brainfuck, it’s hard to read, not impossible
@Mark:
You need to understand that the circumstances surrounding the rise of Java are unique. This is because Java’s growth went hand-in-hand with the explosion of the web and a huge growth in the demand for computing services.
Compare the size of the ‘computing’ section in bookstores between 95-96 and now. Many schools that didn’t offer computer science or programming courses back then have now started to, heck vocational schools purely for programming have sprung up. The size of computer science enrollments has grown. The job market for programmers has multiplied phenomenally.
Any wide-scale change in the languages being taught would have that much more inertia to overcome.
There were a number of educators that actually couldn’t wait to teach Java (see the citations of the first sentence “here”:www.math.ups.edu/~brichards/Pubs/java.pdf (pdf), because previously they had been teaching C or C++, and a language with managed memory made it easier for them to teach concepts.
Yes, the default language of choice taught in universities has evolved over the years, but there are far less pain points with using Java for education than there were with COBOL or C++, ergo less incentive to change. Bear in mind the first release of Ruby and Java was the same year (95/96), so the choice of Ruby has been available for some time.
To truly learn from history one must understand the background behind events, instead of just looking at the events themselves.
Just remember something worth citing.. Paul Graham’s “The Python Paradox” .. It’s about 3.5 years old, but is relevant to this debate.
Perhaps its fair to say the author is a programmer and isn’t really looking at this from a management perspective. Technology adoption has nothing to do with small technical bits. Its all about mindshare and risk.
There’s a risk vs. delivery curve for every technology. Enterprises move to whatever platform gets them the fastest delivery for the least amount of risk.
None of the internal managers give a rats arse about Java. Java became a ’safe’ bet vs. Visual Basic or some proprietary C++/Foxpro monstrosity. If Rails or python or whatever gets them a higher throughput on internal deliveries they’ll move to it as long as they think its safe and can sell it to upper management.
Right now the mindshare is with Rails and companies are starting internal pilots and smaller sample projects and most are reporting much higher success rates than with Java. Give it 4-5 years and Rails will be the new ’safe’ choice for the enterprise. (Rails adoption is currently where java was in ‘98-’99, companies are testing the waters).
Current market inertia is no indicator of the future. You could have said the exact same arguments for Java in ‘98 (Java programmers were a niche group, there were no RFP’s, etc) and yet here we are 10 years later and Java is a popular solution for enterprises.
Why did Java succeed? Because it reduced risk and improved delivery. Why else? Because it had mindshare. There was a great ’story’ behind Java (write once, run anywhere!) and even if only 70% true enterprises bought into it and started adding Java pilots and eventually started creating RFP’s for new projects specifying Java.
Rails has that sort of mindshare now. And will continue until the next platform comes around to offer a better value proposition.
@Sam
Thing is that not only success rate is important. But maintainability, changes, support and talent pool are also very important. And BTW for a larger app I would not use Rails as both backend and frontend. The bigger the app, the harder to maintain it - for Ruby.
I don’t think Ruby and Rails are too powerful for enterprise. While you can do things that are “dangerous”, it isn’t as if hoards of naive developers are accidentally changing addition routines so 2+2=5.
For less experienced developers, Rails can seem like a godsend — you can develop useful applications without having to build lots of infrastructure nor having to deal with concurrency, database connections, etc. (It’s fair to note CakePHP and Django have similar benefits.)
But for experienced developers, or the noted Rock Star”, Ruby allows for some very elegant solutions with very little code.
Ruby, by itself, would have been hard for enterprise (and other markets) to adopt. But Rails provides support for the learning and flexibility for the knowledgeable. As for the in-between, who but presume capabilities they don’t have, well…you are going to run into problems in any language.
I think Python has been stigmatized in enterprise as a utility scripting language. Had Python originally entered enterprise as the Python/Django combination, it may have had more impact.
This stigma makes it hard for stakeholders to support developer pleas to use Python (and possibly Django) where they would use Java.
While Ruby has been around for years, it has been considered an esoteric language few knew of. But Rails is new and hot right now. And business stakeholders are hearing about its economic benefits of increased productivity and quicker time to market. In many cases, both developers and stakeholders are interested in Rails and this gives it a favorable position. (I think it is worth noting that a similar phenomenon occurred wit Java in many cases as it gained market share.)
Another aspect of this discussion is cost of entry for the enterprise project. Selection of the development platform has as much to do with Ruby adoption as the commodity aspects of hiring. When a manager sees the expense associated with standing up a Microsoft development team and looks over at Java and sees nothing more than hardware and people costs, the choice is simple. Nothing to do with Ruby but that is what happens.
The argument that Ruby/Rails has a similar entry cost is a close call but has some flaws. Currently, hiring a Senior Ruby developer would be a difficult proposition; the only one I know is starting his own company and is not interested in “taking a step back” by coming back to big enterprise. I imagine this mindset is not exclusive to him; read “Rock Star.”
I would certainly entertain the idea of slipping RoR into the system I am responsible for if it fit the bill but I have to consider the management’s perspective and limit us to the most cost effective and maintainable solution. In this time and place, that happens to be Java/J2EE.