Why Pythonians Hate Ruby (on Rails)

My speculation into why Python users usually can’t care less enough about Ruby (on Rails)

Cute green snake!

Being in New York City and coding at home for the past two months, lonely as a yak, I have learned that the NYC Python Meetup group was almost the largest single Python meetup in the world. Being a serious Python user for merely a year, I RSVP’d myself to one of the meetup’s office hours event. The meetup was very warming. Pythonians there were relatively friendly, and we were treated with enormous pizzas and beer. There were nothing more I could ask for.

One topic came up in the meeting though. I don’t remember if it was me who started it, but the word “Ruby” did manage to slip out into the silence of the room. It fluttered there for 30 seconds, like an alien, hypnotizing moth from an alternate universe in Fringe.

Suddenly, someone broke the silence, “We (Pythonians) hate Ruby.”

That begged some deeper investigations. I feel that it’s a more of psychological than syntactical or pragmatical issues here. Although there are of course programmers who enjoy both languages, it is appealingly observable how these two don’t really go hand-in-hand for most users in real world.

Intro to Programming & Python

It is reasonable to start from my own experience with both languages. My background was in architecture and graphic design, and entering programming was not easy. I began playing with Processing, a visual dialect of Java that had kept me tied to the programming world. I later got my hands on OpenFrameworks and Arduino, which were all C++/C frameworks for creative coding and physical computing. It was natural for me to stick to these tools as someone from a design background.

However, there was something missing in C and Java. More appropriately, There was something way too many. It’s the brackets ({ }), semicolons (;) and (let’s not forget) the dreadful for-loops, which always made me feel like the Flintstones driving the pedal car with their feet. It felt unnatural and unnecessarily intricate and laborious to achieve such a common task which the computer could have been able to manage more elegantly.

C-style for-loops make it feels like the pedaling a Flintstones’ car.

I first tried Python as a mean for learning and improving my programming skill, and it turned out to be a lot of fun. Its strong, clear syntax without the nuisances I have experienced with C and Java made me fall for it. The learning curve was very smooth, since white spaces and newlines are quite natural to everyone with typing experience I think even my wife would have picked it up easily. It had become my most beloved language instantly. However, I did not get much chance to use it in my practical work until I’ve met Django.

To be frank, I have heard of Ruby, or rather Ruby On Rails’ popularity for quite some time. Even back in the bookstores of Bangkok, Thailand, most web programming books were about Ruby on Rails and .NET. But it wasn’t until only within the last six months that I had entered the Ruby world.

I have to admit that, at first, Ruby was super fun to write. If Python was a Gauguin’s woman, Ruby was a hot, design-savvy SOHO chick. Writing in Ruby was almost like writing literature over a nice cup of cappuccino. It brought creativity into the coding process, in contrast to other languages (except Perl maybe) which feel like using the tools to accomplish creative work rather than inventing the ways you handle them along the way. Coding have become not just an engineering but writing code itself IS creative, and writing Ruby in Poetry Mode is even cooler. Ruby focuses more on idiomatic code than even, well, readability itself sometimes. However, I did not touch Python for a few months, totally tempted by the charm of Ruby.

What went wrong

It was Rails that went wrong, at least for me. It had taken Ruby to the supreme Nirvana state, by being a super-opinionated framework that takes away the awareness of the developer and let him sit back and meditate. It became clear to me why Rails appealed to many designers and design-savvy developers, and I was surprised to learn on an online forum that someone actually had been using Rails for three years without knowing a basic Ruby idiom I had learned on my first few weeks. As far as I know, it is indeed impossible for someone to write himself a starter blog app in just ten minutes in Rails. That’s incredible, and that kind of speed really appealed to the startup developers who just want to sketch and ship their product fast. However, Rails kind of confused me. I was more of a type who like to feel everything I work on, and by following Rails’ conventions I have soon realized I had to memorize more of what Rails had to provide for free.

I crawled back on all four to Python, like a prodigal boyfriend. At first we even stumbled over some rocky steps. I felt bored using Python, and that’s pretty normal since the magic of writing a literature of a code was no more. It took me some times to get back and make up with her.

So…why (other) Pythonians hate Ruby?

I’ll admit to you that I don’t really know. The followings are just a speculation / opinion of mine, and if anyone has anything to add or negate, please feel free to do so. This is not a programming solution, so there’s no right or wrong. However, if you are someone who is looking to step into Ruby from Python or any other languages, you’re encouraged to entertain yourself.

Ruby is synonymous to Rails (and the web)

You can easily see why, even with the popularity of Ruby on Rails among the startup community, the percentage of people using Python is still much more. In fact, it is the most popular language of this year.

Python is a general-purpose language, and in fact had thrived among the other communities long before web development. Ruby, on the contrary, despite being a general-purpose language too, was not that popular at all before Rails was invented. Although it is arguably applicable to a lot of tasks, People primarily use it in web development.

Ruby complicates coding

if you program in Python long enough to know the Zen of it (and if you don’t, just type >> import this in your Python command line.), you will understand how Ruby violates a few of the mantras. Rubyists take joy in breaking the rules; That’s a no-no for Pythonians. Ruby is also hardly anyone’s first language of choice in learning programming, in contrary to Python, since Ruby’s structure is implicit and it does not try to be clear of what the programmer is trying to do.

Ruby was inspired by Python

To no surprise, Ruby was partly inspired by Python, and bear a few resemblances to it. However, it callously went for the more “adventurous” and “superficial” approach that so tempting and pleasing to the young spirits and became synonymous to the super-cool startup movement and a fresh paradigm of Agile. That’s like having an equally nerdy friend who imitated your work and became a rock star among chics.

Ruby (Rails) is prettier

The official learning page of Ruby language is interactive, well-designed and filled with the famous cartoon foxes by Why-the-lucky-stiff, a renowned developer-cartoonist who wrote Poignant Guide to Ruby

Python has a bad reputation for being ugly, and I mean in the sense of public relations. This blog has it all summed up. Ruby users are mostly designers or they are front-end people who do not tolerate mediocre looks. Therefore, the majority of the websites related to Ruby look amazing, even its official doc. Maybe there’s something in the red than the green, too. But you can’t really blame Python for not being as pretty when half or more of the users are scientists, data analysts, system administrators and more. Python has this deep, deep beauty within and just a different target group.

Ruby has a bad scalability reputation

There was a buzz going on about Ruby being bad at building scalable applications when Twitter announced it would rebuild its service from the ground up with some other technologies and ditch a full-stack Ruby on Rails + MySQL approach. People were saying Ruby cannot scale to the massive traffics on Twitter, and while Professor Amando Fox of UC Berkeley claimed that scalability has nothing to do with the Ruby (or any) language’s features but more to do with its implementation, it hurt the Ruby reputation somehow.

A surrealist, Magrittesque impression of Twitter’s “Failwhale”. Painting by artist Kuni (aka “ka-92" on Deviantart) from Tokyo Japan.

The Rant of Zed A. Shaw

Needless to say, if you’ve been in the web development circle and the especially the Ruby ecosystem long enough, you would have learned about the (in)famous article “Rails is a Ghetto by Zed Shaw, the creator of Mongrel, a web server for Ruby applications who was considered a rock star in the Rails community. I won’t include the link to his article here since Shaw himself had removed the article, and I should well better respect his judgement. Anyhow, good news is Shaw had turned his interest to Python and has written a not-to-be-missed online tutorial for the language. Visit his tutorials here.

Finally, Rails is opinionated

As I have stated, I found Ruby to be a very fun language, but Rails had spoiled my enthusiasm. Rails was originally pulled out of David Heinemeier Hansson’s work. He is the creator of Rails, and is considered a legend alongside “Matz” Yukihiro Matsumoto, the creator of Ruby himself. However, Rails primary objective was to take out all the trivial works (the patterns) from developers’ workflow. If anything is considered a best practiced pattern, it should be automatically handled by Rails, e.g. naming conventions and route creations. This, while great for achieving real-world MVP goals, can be less appreciated by learners and web programming noobs.

Conclusions

While the list of possible reasons can go on for others, these are things that had made me returned to Python and have managed stay with it so far. Ruby is undeniably an elegant language, and if you enjoy writing idiomatic, literature code, you might enjoy Ruby (on Rails).

Show your support

Clapping shows how much you appreciated Pie 'Oh' Pah’s story.