It’s fashionable, or perhaps inevitable, for tech communities to trash their competition. The Emacs folks like to mock vi users; Windows folk look down on us Mac users (and Linux users mock us both); and everyone likes to mock PHP despite PHP’s dominance in the web world. We geeks make arguing over minor technical points into a kind of art.
This is all pretty understandable: it’s easy to define community in terms of what we’re not. A common enemy focuses and drives us. Competition can take a positive form: when it’s friendly and constructive both communities benefit.
Lately, though, I’ve noticed the tone of the arguments in the Django community getting nastier — especially when it comes to Rails. Again, I’m far from innocent in this regard: I’ve certainly done my fair share of Rails-bashing, and I regret it.
I think it’s important to recognize that we in the web development community do in fact owe Rails and the Rails community a debt of gratitude. Rails helped reframe the way we think about web development, and even those who’ve never touched Rails nevertheless are probably reaping indirect benefits right now.
So I think we should all step back from our personal preferences and plainly say thank you, Rails, for all that you’ve done to move the state of web development forward.
Personally, I’ve learned two huge lessons from Rails:
Development should be fun
At PyCon 2009, while discussing some topics of interest, Ian Bicking mentioned that at times he worries that the Python community takes itself too seriously.
I worry about this, too. When I first started using Python, all eyes were on the Enterprise. Python needed to be a Serious Language used by Serious People at Serious Companies doing Serious Work. This was always a bit of strange goal for a language named after a British comedy troupe.
Then Rails burst onto the scene with a simple message: web development ought to be fun. In retrospect this seems like an obvious development: most geeks of my generation got into computers just because they’re fun. But at some point we realized we could get rich programming, and when the money came in most of the fun drained out. Then came the dot-bomb. Suddenly there really wasn’t a huge amount of money any more; just Serious Work.
But the Rails community turned this on its head. Why should we spend so much time trying to build Big Serious Software when we can build small, fun, light tools that actually make money, too? Turns out that those who enjoy their job are actually more productive — fancy that!
I learned this lesson years ago when I left a my soul-sucking job in New York City for a move to Kansas and a 50% pay cut. It was the smartest decision I’ve ever made, but at the time dropping half my salary for a job that seemed “more fun” got me a lot of flack from colleagues. These days I doubt I’d get the same criticism, thanks in no small part to the ideals that the Rails community put forth.
These days, the Django community has its own special breed of sillyness which brings me no end of joy. There’s some who find this stuff all a bit precious, and I sympathize, but laughter, play, and fun are vital aspects of a vibrant, healthy community.
Simplicity is a feature
My first foray into the CMS world came through Vignette and BEA (now Oracle) WebLogic. My first expose to a “web framework” was Struts 1. My second, Zope 2.
All these tools seem designed with those massive feature comparison grids in mind — the goal seems to be to garner as many pretty √s as possible. CMS development is strongly strongly feature-driven: the goal seems to be to support as many use cases as possible.
Faced with BEA, I couldn’t understand this impulse. Now, as a maintainer of a framework (with strong CMS-y leanings) I understand it perfectly: every single use-case has a real-world developer behind it, struggling to get his job done on time. Saying “no” to feature requests is incredibly hard. I don’t do it as often as I should.
One of the most controversial tenants of “the Rails way” has been this idea of opinionated software. This idea that our libraries should make certain expectations about developers can seem pretty heretical. We’ve certainly taken a softer spin on things in Django-land; we talk instead about “sensible defaults.” The basic idea’s the same, though: make assumptions about common cases to help keep software simple.
This idea turned simplicity itself into a feature, and completely neutered the power of the feature grid. Instead of neat rows of checkmarks, now we’re comparing who can accomplish some task in the fewest lines of code. Monolithic, massive features sets are out; minimalism is in.
So, once again, thank you, Rails. Even though we don’t see eye-to-eye on everything, I’m glad to have you around. You’ve made these Internets a better place.
Comments:
I definitely agree that we have a huge debt to Rails for changing the tone with respect to web development, that being said it's never been the tool for me. However, I don't see the programming should be fun, and building "serious" tools paradigms as being in conflict. For me programming is fun when I don't need to sweat the small stuff, the mundane boilerplate is dealt with for me. Of course not needing to deal with the most repetitive, boring parts of my work makes me happy, but it also makes me more productive. Surely being more productive is "enterprisey"!
Awesome read. And you are entirely right about programming: you should do it because it is fun. You can always work (whether you're a barista or writing a new app for your client) but the more you enjoy doing whatever it is you are doing, the happier you will be.
I'm still a programming n00b but the first time I was able to fix a bug by myself, I was so ecstatically happy. It was one of the best feelings I have ever had and I will never forget it.
Good luck with all your endeavors.
I fear Django is moving towards being too generic, too abstract. PHP started out as faily specific and fairly focused actually, driven to have lots of good features for making websites. Now I see Django moving towards being more abstract and academic in structure. In part I believe as a result of the core maintainers becomming "better" programmers. And not wanting to make as many assumptions about how things should be done. Trying to remove the CMS inclinations. It isn't an issue yet, but I can see it getting there eventually, it always seems to happen. Heck Plone at one time wasn't a giant generic app, it was supposed to solve that problem in Zope, which at one time wasn't a generic mess either.
I agree with "glad to have you around" statement of yours. Having a competitor around, drives you towards improvement, if competition is taken in a healthy manner.
The argument can be applied to browsers (Chrome changed the way people think about browsers), programming languages, CMSs, Operating Systems, etc. They should all thank each other for being around.
A very kind and thoughtful post. Regardless of what framework you use or what language you prefer, I think it behooves each of us to get to know other developers and listen to what they have to say and learn from their experiences while sharing our own.
My philosophy has always been use the best tool for the Job. I think a lot of times, IT and Corporations try to push for some kind of crazy multi-tool (http://www.foxnews.com/imag...) when all that is needed is a screw driver (http://blog.stackoverflow.c...).
I personally try to keep an open mind and try to learn about everything new in IT, programming and design. I have a Windows 7 Pro Desktop at home and my main work computer is a MacBook Pro and all my servers are Linux. I've tried ASP.Net, PHP, Django/Python, Perl and Rails/Ruby.
It just so happens that for what I do and what we do at CIY (http://www.ciy.com) that I've decided that Django is the best tool. But I've learned a lot from looking at other languages and frameworks and anyone who isn't willing to learn and at least look at the positives that other languages and platforms have to offer is a fool.
I agree - Rails was a breath of fresh air, the Java world (in which I still work) learned a lot from it, and we continue to learn from the Rails and Ruby world as their frameworks, DSLs, and approaches to testing keep evolving.
Thank you, DHH and all the Rails crew.
> All these tools seem designed with those
> massive feature comparison grids in mind
Oh, you mean like this one?
http://code.djangoproject.c...
> Instead of neat rows of checkmarks, now we’re comparing
> who can accomplish some task in the fewest lines of code.
Right:
http://code.djangoproject.c...
;-)
It is fun that make us learn, from our first steps in this world till we die. Education systems fail in this topic too much and often create people of weak abilities to seek what germans name "geist" (spirit-mind). Geist is, for me, one of the best values an open source community can get from its dwellers, people getting the job done, sharing it with the world, collaborating with peers and feeling they are having fun in the process as a goal. This is why I like Django, it is funny when you get what you were looking for but, more important, it is funny in the process of getting it.
As a humanist, I always defend that everything in our human life should be built around Man, because "man is the measure of all things". The more we increase distance with this concept, the worse things will work for us. So, translated in frameworks, I strongly advocate for the minimalism in development. Less is more. This is why I like Django so much, it encourages me to improve my skills as hacker of my career, which in turn turns to apply to my personal life.
FYI the closing " after sensible defaults is missing.
Very interesting and wise post. I've not had the time to do much with Rails myself but keep meaning to invest a bit so I can become a bit more familiar with it. After all, its good to know and learn from the alternatives.
I just wanted to say I appreciate the flying pony.
As primarily a ruby developer, can I return the thanks? Ruby and Rails wouldn't be where they were today without Python, Django and assorted other ruby and python projects.
We should thank you too! Without WSGI there might not have ever been rack.
Thanks Rails...
Thails.
I find that we're merely going back to what older customer "database systems" did : rails is mainly a step back towards the 1999 ideal that dBase tried to be, and all it's colleagues.
Rails is a step away from unix and a step towards access.
Since the end of the dot com madness, I have been using one new framework every year or so. At least, I tried not to stick to what I knew. So back then I was mostly doing WebObjects or PHP, then I had some fun with Tapestry, discovered Rails in 2005, and lately have been using two frameworks/platforms with Python as their primary language: Django and AppEngine (you know like barebones AppEngine).
And I 'm developing iPhone applications in Objective -C, tried a little bit of Android (didn't go very far), and the next one is WebOS.
All that to say that your post looks to me like a very good point to make: every tool has its quirks and habits, and Rails is a great framework for doing fun things. And nobody should disrespect other developers because they are using other frameworks or languages anyway.
And yes, staying focused helps developers choose the right tool. Or grow it. I wish you to stay focused.
Regarding fun, I remember the mission statement that Wil Shipley wrote in 1995 for OmniGroup:
- Make great software
- Make good money
- Have fun
That's why I'm in this business.
Very, very well said, Jacob. And as another Ruby/Rails guy, I agree completely with Tom Ward. Rails 3 will skew closer to Django in terms of focus, features and approach than any previous release, and I have to believe that isn't entirely a coincidence.
+1
I agree that Rails brought new ideas to the webdevelopment world and we should all be thankful. But I also think that many years before that, PHP was already there trying to make web development simple (and did it), and other comunities also don't recognize that.
Just mock PHP regardless the huge and fundamental contribution it did to the actual status quo of web applications.
@Nicola Larosa:
Because a wiki page created by Some Random Guy is an accurate representation of the goals of a project, amirite?
@Felipe Ribeiro:
"Mock PHP"? The only thing Jacob said about PHP was that everyone seems to enjoy mocking it, despite the fact that much of the web is built upon it; that seems to be disapproving of the mocking, imo. Now, if you're talking about the rest of us, then you have to realize that the things we find annoying about it are mostly language features introduced after it became prevalent, or things that it's never done well, but was so good at the things it's good at that it didn't matter.
I like the my little pony background.
Well said. I agree fully.
FWIW, s/tenants/tenets/ :)
@James Pearson:
Maybe I didn't express well, but I wasn't talking about Jacob, but about the Ruby/Python communities :-)
Grok (which I work on) is a Python web framework that came out of Zope. It's strongly influenced by principles promoted by Rails. DRY and Convention over Configuration made it on my personal radar in large part because of Rails, and these are guiding principles behind Grok. I also learned from looking at the way Rails was marketed and hyped.
Concerning CMSes and checkboxes: from my experience with CMSes, checkboxitis also happens because customers keep asking for it. I think this in part because customers want to be safe. They often don't quite know what exactly they want with a CMS, so they decide that to be safe they should want everything. Then they find themselves a good checklist to ensure they don't miss anything. Then they ask people who create CMSes whether their CMS implements everything on the checklist and evaluate CMSes based on this. CMS producers also create their own checklists of course that make their own CMS look good, thus feeding into the cycle.
I myself think a far better way to evaluate CMSes would be to look at usability and flexibility, and of course to figure what core features an organization really needs.
P.S. I don't think Zope 2 quite counts as a CMS by itself, though it does have some CMS roots.
This is a great article, and thank you for writing it. It's true, developers often have grudges about who's language is better and those are valid (even necessary) arguments to have.
But ultimately, we often lose site of two things when having this conversation. The customer and fun.
What is best for the customer? And are we having fun writing this software?
If the answer is no to either of those questions, we should really re-examine what we're doing.
I was a rails developer for a long time and have since moved on to Python. I still do a great deal of PHP development, and dabble in several languages. Rails taught me simplicity and the power of MVC. For that, I'm always indebted.
Thank you! I'm not a big web dev, and I've looked at enough php (good ones that got butchered) that merely reinforced my dislike of web dev.
Yet Rails made web dev fun! It made it easy to start something. It works simplistically.
It is a shame that it's politics that is creating this giant conflict that prevents people from realizing that Rails created new expectations of frameworks. I had always sulked at the fact that people who are from Python had nothing but vitriol for Rails/Ruby.
It's rather refreshing to see empathy. It's something that the world sorely needs.
It's hard to explain the level of frustration I get when I hear all the rails vs django ramblings. It's all about getting the job done and learning from one another. This is a post the entire community (both ruby & python) should read.
Thank you for sharing this Jacob.
That's some good piece of text!
We all love to believe that the tool we use is the best that sometimes we forget about everything else.
Thank you for making us stop and think about it.
Great post, but it should read "tenets" not "tenants"
Leave a comment: