Reading a recent discussion regarding Django’s ORM, I got to thinking about how I might respond if someone raise such an argument to me. After some reflection, I think my view on the matter comes down to something I’ve learned from being on the django-developers mailing list for the past several months.
Django is optimized for the common case.
I’ll be the first to acknowledge that Django isn’t perfect for everything, and the more complex a project gets, the less Django has to offer. But for a large number of users looking for a low barrier to entry into the web framework world, Django does very well. In order to describe why I think Django will be successful in the long run, and why I expect it’ll continue to frustrate many people over the years, I’d like to draw a quick analogy: Microsoft Windows vs. the Linux Desktop.
I’m no expert, but the way I see the desktop computing world, users generally fall into two groups. Group A, whom I’ll call “Users”, doesn’t really care what the computer does, or why, they just have a task they want to complete. Whatever helps them get that task done the quickest is the one they’ll choose. Group B, which I’ll call “Hackers”, cares what goes on under the hood. They’re willing to put in some extra time to get things Just Right so that everything works as well as it can.
Users, on the whole, tend to prefer Windows; while hackers, on the whole, tend to prefer some Unix/Linux/BSD variant. The differences between these two groups are a fundamental problem when it comes to trying to sell a commercial Linux Desktop: You’re selling a Hackers product to Users. Getting people away from Microsoft and its many problems is an admirable goal, but most hackers don’t really understand how Users think.
For instance, one common “holy war” in the Linux world is KDE vs. Gnome. Each has its merits, but the thing to remember is that Users don’t care. This is something Microsoft has spent inordinate amounts of money to discover. They’re not interested in choosing a UI, they just want to get things done. They get bogged down in making a choice they know little about, and which will ultimately make little difference to them. They like choosing things they can understand, while ignoring things they don’t. Sure, picking one or the other means losing out on potential features, but the ease of use for Users makes it worth the loss.
Now, the Linux Desktop situation seems to be improving. I haven’t followed it very well, but a cursory look at Dell’s and Novell’s offerings show no mention of KDE or Gnome, and that’s encouraging. But the analogy to the web framework world is still valid. There are both Users and Hackers people involved, but things get a little different.
Framework developers are, almost by definition, typically Hackers; they need to care about the inner workings, since that’s what they focus on. In the case of Django, however, it’s a matter of Hackers writing a Users product. Born in a newsroom surrounded by Users, Django very quickly became tailored to End-Users. Upon release to the public, it very quickly evolved into something useful for Developer-Users. This continues to be the focus, but since the people behind it are Hackers, there tend to be many endless debates about why something isn’t in the official source.
Some frameworks are built for Users, some are built for Hackers. Confusing things still more is the fact that most Hackers like to be Users when they can afford to be. Personally, I’m a Hacker who cares about the needs of Users, because I often like to be a User. So I tend to spend a lot of time plumbing the depths of Django, trying to add things to satisfy my Hacker side, in a way that will be of use to my (and others’) User side. I like to think that’s the driving motivation behind all the core Django developers as well, and that’s what I like most about the whole thing.
So, think about what type of person you are, and which framework best serves your personality. If you find one, use it. If something’s close, improve it if you can. If you can’t find anything out there that suits you, you’re probably just not looking hard enough.