Choosing a web framework: Python, Django vs. Ruby on Rails
One of my responsibilities in my new job is to lay the groundwork for development of the company’s technology. One decision that was pretty easy to make is that we’ll be building tools that you can use from a web browser, that is to say, a web application. Next comes the choice of what language and framework to build the web application in.
Having been writing code for 25+ years, the differences between programming languages fade away in my mind. I know that I, like any good software engineer, can be productive in basically any language. Certainly within object-oriented languages, (which is where essentially all serious software engineering happens these days) the differences in the language itself are IMHO small compared with other factors in choosing a platform. Other important factors I consider include:
- Quality and availability of libraries.
- Quality of tools like IDEs, debuggers, automation systems.
- Size and healthy of the active community using the framework. (i.e. If I run into a problem, how easy is it to google the answer?)
- Ease of hiring people who already know the platform.
All of these considerations are IMHO more important than compiled vs. interpreted or run-time performance or whether the language is statically typed or dynamically typed, or even if it’s open source vs. proprietary technology. But there is a single common factor which directly feeds into all four of the criteria I list above: How many people are actively using the platform?
The last time I was really writing much code was back in 2007. At the time Ruby on Rails was the coolest thing since sliced bread. I played around with it, was amazed by how easy it was to quickly put together simple database-driven websites, and got very frustrated with it when I wanted to color outside of its lines. A major concern of mine was the level of “magic” that happens behind the scenes — this makes Rails beautiful and elegant when it works, but difficult to debug or extend. I blogged about my experiences with rails and in particular my conclusion that at the time Rails was not ready for large, complex projects, partly because of a lack of good tools, libraries and sensible error messages, all of which can be fixed by more users.
Around then I started working for Google and stopped writing code. The next year or so saw a couple big things happen for Ruby on Rails. Twitter famously had trouble maintaining even 99% uptime (fail whale anybody?), and everybody knew they were running on Ruby on Rails. Also, Google launched AppEngine, which supported Python, not Ruby, and pointed people like me to an alternative high-level web framework: Django.
So now, in 2010, I return to the fray, and I’m trying to decide between the two frameworks. There are of course other alternatives, but for the purpose of brevity, I’ll leave out my process of reducing my choices to these two: Rails or Django?
[Update: Commenters point out correctly that PHP has its own MVC frameworks, the most popular of which I believe are CodeIgniter and CakePHP. While PHP is vastly more popular than either Django or Rails, none of its MVC frameworks come close in terms of popularity, and raw PHP is not comparable in terms of sophistication.]
Measuring community activity
I often use Google Trends to measure relative interest in technologies. My time is very valuable, so even downloading something and reading its documentation is an investment I’d rather shortcut if I can. This crude measure of relative search activity can actually be quite telling, and has saved me a bunch of time in choosing packages.
The relative values are hard to take literally since “django” as a single word search query will naturally be higher than a 3-word query like “ruby on rails”, but the search for “rails” by itself will clearly have lots of irrelevant searches. Likewise, some people searching for “Django” won’t be looking for the web framework, but rather the guitarist or the movie or what-have you.
But it is clear that search activity for Ruby on Rails peaked in 2007-2008 and has been declining since then, while Django has been on a steady upwards trend. [2012 update: We shouldn't consider this too strongly though since the Django trend is probably due to non-python versions of the term, and honestly both have been pretty flat in recent years.]
Elsewhere I can find evidence that Rails is still a more used platform. Stackoverflow has twice as many questions about Ruby on Rails vs Django: 13,882 versus 7,496. To me this indicates pretty clearly that Rails is more active than Django. Either that or Rails is more confusing and people ask more questions about it, but I doubt that. [2012 update: now the numbers are 66,845 vs 29,570, continuing the trend.]
The Tiobe Index attempts to objectively measure activity across programming languages. By its easily manipulated measure, Python has twice the activity of Ruby, independent of the django / rails frameworks, with both languages in decline.
On balance, I find the stackoverflow numbers the most compelling, unbiased indication that Ruby on Rails has more activity than Django / Python. Even though I’ve been frustrated by it in the past, by my own objective criteria, that seems to make Rails a better choice for building a new web application.
What’s your opinion?
If you have experience with both frameworks, I’d love to hear your experiences. Please leave a comment.