Sunjay Pandey of AlterThought has an an article that makes a case against Ruby on Rails. I usually try to stay out of these discussions; every technology has advantages and disadvantages, and I am well aware of the good (quality, speed, testing, maintainability, small community) and the bad (Ruby needs a good VM, Rails is young, small community) when it comes to Rails.
So after a pro-Rails post, Sunjay decided to outline the problems with Rails. It isn’t a very good presentation of Rails’ problems, and yet Sunjay’s focus is interesting. He focuses on the Rails community and Rails developers when discussing what is wrong with Rails. Here is the core of his argument:
The unfortunate reality of the RoR movement and market is that there are a number of below average soloists passing themselves off as solid developers due to the level of demand.
and
(1) Rails helps bad coders write unscalable, unmaintainable, unmentionable code faster, ergo (2) Rails helps organizations fail faster.
The first quote is interesting. The second is completely wrong.
What is the developer quality of the Rails world?
(See Dan Grigsby’s recent article on the Rails contract market for prerequisite reading.)
Rails largely draws its market share from PHP and Java. Rails apps can be written as quickly as PHP, and can be as robust and maintainable as Java. And developer satisfaction exceeds both.
In my experience, the Rails community is extremely strong at the top, like the best of the Python, Java, and Lisp communities. People like Dave Thomas set the tone of the Ruby and Rails community, and you couldn’t ask for a better tone-setter. Most professional Ruby developers that I know are smart, personable, and pragmatic – the kinds of folks that you want on your development team.
At the same time, there are a more and more mediocre Rails developers watering down the community. This wasn’t true two years ago, but as Rails grows, it attracts more and more newbies. There is nothing wrong with this; Rails is pretty welcoming to newbies, and today’s newbies are tomorrow’s experts.
If there is a problem with the quality of work coming out of the Rails world, the problem lies with demand. Rails allows applications to be written more quickly, and therefore more cheaply. This means that many businesses who are looking for a cheap option look to Rails. Not content to save money through the efficiency of Rails, they also look for cheaper developers. In essence, they create a demand for $40/hour companies and $10,000 social networks. And you know how markets go; if the demand is there, someone will meet it.
Newbie Rails developers aren’t a bad thing. Newbie Rails developers passing themselves off as experienced Rails developers, because a client wants top quality work for $40/hour, are a problem.
So what does this mean? Don’t hire a $40/hour company unless you want $40/hour work. Don’t hire someone with a thin portfolio unless you’re willing to accept the risk. Don’t hire anyone who claims to be a Ruby rockstar, ninja, pirate, whatever. If you want a well-written app, and if you’re dealing with complex problems, hire a good developer with good experience, and pay them what they’re worth. Like the authors of Railspikes. (Shameless plug – sorry!)
Does Rails encourage bad code?
As I said, the Rails community is mostly a mix of ex-Java developers and ex-PHP/Perl developers. PHP isn’t all bad, but it is unfortunately a magnet for bad code. This could be because many bad coders choose PHP, or because PHP has really low barriers for entry, or because PHP itself encourages bad development practices. I suggest that it is a combination of these. The end result: PHP does not have a culture of high programming standards. Design patterns, unit testing, etc. are on the margins of the PHP world. There are good PHP developers, and you can write good code with PHP, but PHP (and the PHP community) isn’t going to help you out too much.
Sunjay assumes that the latter is true of Rails, but he is wrong. The Rails framework and the Rails community are both built on a culture of good programming habits.
- Unit tests? Built in and highly encouraged. Rails all but screams at you if you don’t test your code.
- Deployment automation? Capistrano takes about 10 minutes to configure and works beautifully.
- Source control? Rails assumes you’ll use source control. There are rake tasks that automatically add new classes to your SCM, and Capistrano pretty much requires it.
- Code generation? Check.
- Web services? You get REST for free.
- Design patterns? 80% of Rails is an implementation of MVC and ActiveRecord. ActiveRecord works like a charm for the vast majority of applications, and MVC is a beautiful way to structure web application code.
- Platform? Stay away from Windows. OS X, Linux, BSD, Solaris, work great. (This is “checkmate” when it comes to good programming habits.)
Rails pushes developers in the right direction. Give Rails to a bad coder, check back in two years, and you’ll find a good developer.
So Rails doesn’t “helps bad coders write unscalable, unmaintainable, unmentionable code faster”. It encourages you to write scalable, maintainable, mentionable code. If you do the opposite – no tests, logic in your views, duplication – it’s because you’re misusing Rails.
Profile of a Rails community
I am fortunate to be involved with the Ruby Users of Minnesota. Most of my opinions about the Rails community come from my experience with RUM (along with reading blogs and attending conferences). Based on these experiences, here is my impression of the Rails world.
- Rails is full of really good Java developers who got sick of writing XML. Like: the folks who would be leads on most Java teams; the folks who choose (and enjoy) the hard problems; the folks who know what is right with Java, what is wrong with Java, and what other options exist.
- The average Rails developer has pretty good business sense. Rails lets you code pretty closely to the business problems. If you can write an e-commerce engine in a few weeks, the ratio of time spent thinking about interaction and user experience compared to time spent writing low-level classes is pretty high. So it helps to have good business sense.
- Similarly, Rails usually draws developers with good people skills. (This might be related to the previous point.)
- Most Rails developers are interested in technologies beyond Rails. Functional programming, for example, is pretty hot at our local Ruby group.
- Most Rails developers made a conscious choice to switch to Rails from J2EE/Perl/PHP/whatever. So they usually aren’t technology zealots, and they usually see the other side clearly. At our last two meetings, we had a Python developer present Django, and a Groovy developer present Grails, and both were very well received.
That’s the Minnesota Ruby community in a nutshell. If RUM is a microcosm of the larger Rails world, and I think that it is, then the Rails community is a pretty interesting place to be.

Just my two cents…
I think it really depends on your experience coming into Rails.
I come from a strong java background and you describe me to a T in that last set of bullet points.
But at the same time, I see a lot of kids (and yes, the 14 year-old kind) who pick up rails before anything else and either get discouraged by the strict conventions, or don’t take the time to learn about how much rails actually does behind the scenes. Then when a problem arises, they hack away until something fixes it which 1) wastes a lot of time since they didn’t have a correct understanding of the problem in the first place and 2) results in the horrible script-kiddie non-sense you speak of
Rails only can not make a something you like to quote as a culture of high programming standards. If you do a research, you can find that
+ PHP has at least 2 Unit Testing libraries: SimpleTest and PHPUnit + PHP has tens of good quality OOP, MVC frameworks that are similar to Rails: Zend Framework, SolarPHP, CakePHP, Symfony.. that are all unit tested. ActiveRecords is a false buzzword. PHP frameworks embrace a better solution: Table Gateway + Deployment: you know PHP world has Phing for a long time. + PHP world does not love OOP? Please have a look at pear.php.net and phpclasses.org + PHP community does not care about architecture and software design? Please have a look at sitepoint.com and devnetworks + PHP and Webservices? It hardly find which webservices that PHP does not have library to support.
Ruby is a beautiful language but when being compared to the advantage that PHP has gained so far, it can not be same peer. The same to Rails and Zend Frameworks, SolarPHP, Symfony
Two sentences in this article deserve a comment.
The first is about the benefits of Rails as a framework:
“Rails apps can be written as quickly as PHP, and can be as robust and maintainable as Java.”
The second about the degrading quality of Rails developers since it has been adopted by a larger community:
“At the same time, there are a more and more mediocre Rails developers watering down the community. This wasn’t true two years ago, but as Rails grows, it attracts more and more newbies.”
Newbies?
Or was it PHP and Java developers?
Now, if you believe that Java web applications are more maintainable and robust than PHP’s, then you must be a former Java fanatic who has never seen a J2EE cluster crash miserably under a fraction of what a single PHP server can take.
Can you relate these two facts: desperate Java developers embrace Rails’ productivity, soon after the quality of the community starts to sink down to the levels of language fanatism.
Sun’s embrace of Rails looks very much like the kiss of death to me …
I don’t see why placing the blame on Rails is appropriate. All of the points seem to point to the people being the problem, not the tool. I think he’s blaming the tool for the operator’s inadequacies. “What? They make hammer shafts with padding on them now? Well, crap! We’ll be put out of the job by some soft handed newbie! And they can’t even drive that nail as well!”
Even further, he makes wild assertions about how the framework is bringing the end of software engineering as we know it. “Blargh! It helps you build you crappy stuff if you don’t know what you’re doing!” Here’s a clue: if you don’t know what you’re doing, someone who does will notice. If the person is too stupid to realize it or isn’t willing to hire someone who knows what they’re doing, I wholeheartedly feel they deserve to be taken to town by these so-called “pretenders.” You can’t blame the crappy code that cheapskates get on the cheap provider. That’s like blaming the Dollar General because you don’t get Godiva chocolate, even though it’s quite obvious from the wrapper that’s not what you’re getting.
And what the heck is his obsession with the swiss army knife? The point of a software solution is that it solves a problem, not every problem that you can conceivably think of. I can’t tell if he’s trying to drum up business for his consultancy or if it’s statements like these that he plans to use to destroy it.
(As for “complex processing” with Rails applications or “message queueing”...just because it’s not built into the framework doesn’t mean it can’t be done. Install a gem, because there are plenty. As for Rails, I’d rather have a toolbox rather than a giant wrench that I can’t even pick up: let me pick the tools I need and leave the rest alone.)
No offense, but I agree with very little of your post.
One thing that I would add is that in the first screencast I saw for rails, DHH said that he was not a programmer until he started rails (or something to that effect). I think this should be a major red flag.
I find a lot of the controversy around RoR versus other languages and frameworks kind of silly.
Learning Ruby on Rails is only a bad thing if learning something new is a bad thing.
I learned it after coding mostly in PHP and I enjoy it. It meets my needs. I still code in PHP though, because that also meets my needs.
If I have time, I’d like to learn Java too, although I think I’m probably going to back to the roots and really nail down C++ first.
Learning new stuff is fun, and if you can make great applications using a certain language and/or framework, then why not do so? Deciding that one thing only is the “best” and focusing all your attention on that is counter-productive. Surely, that one thing won’t be the best thing forever…and is it best suited for all possible tasks?
Hey! Why can’t you hire a rockstar?
I can see not hiring a $40/hr rockstar…. that wouldn’t be much of a rockstar. That’d be more like the guy that squeegee’s your window and asks for money.
We’ve seen more and more of our prospective clients coming in with unreasonable budget expectations over the last couple of years. People think they can launch a top-notch maintainable application that will make them rich for less than it costs to buy a Prius.
However, at the same time, we’ve seen more startups with money interested in developing in Rails. People who have the pick of languages to use and are willing to pay what it takes to get a quality application developed for their business.
-hampton.
I find his lack of real sources troubling. He has some very strong opinions but not much real data to back it up (such as his whole opinion on poor rails developers). It sounds like he had one project fixing a rails project and all of a sudden all rails developers are terrible. give me a break. If he wants to make such sweeping stereotypes on rails developers, at least back it up with something tangible.
I think every language has its good and bad programmers. You can argue that because Rails does allow quick construction of simple applications that it may attract less qualified programmers because they see it as an easy ride, but the same can also be aimed at PHP, since the release of the Zend framework most of the negative press it has gained has been from less than qualified developers who find it hard work, the fact is that you get out what you put in, and yes the Zend framework is more complex than Rails + CakePHP but it is also much more adaptable.
Does it mean that because Rails enforces a strict structure that it is hiding the poor coders who if you let them loose on a less structured framework would make a mess? Your guess is as good as mine.
pcdinh – “PHP has at least 2 Unit Testing libraries: SimpleTest and PHPUnit”.
Use them with PHP5, and bang your head to wall frustatingly :-P Are you a PHP salesman? :-P