The why and wherefore
So, let me straighten a few things out.
First off, this is my personal blog. What you see here is me speaking my own personal mind, and I neither represent nor want to represent anything larger: not Django, not Python web development, not my employer, not anything except me and whatever I feel like writing about. This is an important point to keep in mind, because I don’t have any claim to represent anything else:
- My role within Django consists almost entirely of bureaucracy. I’m not as smart or as talented as the folks whose names show up on the commit messages, so I do what I can: tagging releases, making tarballs, staying in touch with package maintainers, and occasionally fixing typos in the documentation. My relationship to Django, then, is almost entirely as a user of the framework, and that’s the role I take in writing here.
- Within the larger Python web-development world, I really don’t do much of anything. I read the blogs, I read the mailing lists. When I write articles on how to do stuff, or write and release software, it’s because I found it useful and, by sharing that, hope to repay some of the enormous debt I owe to the smarter and more talented people whose work enables me to make a living doing what I love.
When it comes to debates about the design of Python web frameworks, I’m happy to engage in constructive discussion and I’m incredibly thankful for chances to do so. But generally, when someone who’s smarter than I am is talking, I try to keep my mouth shut and pay attention. I don’t always agree with Ian or Mark or Jonathan or Ben or any of the many other smart folks who are sharing their experience and knowledge, but I respect that experience and knowledge enough to know they’re well worth listening to.
My personal stance on frameworks is that people should use what works for them. Pretty much as long as I’ve been in the business of Python web development, I’ve maintained that there are multiple different and valid approaches to building web frameworks in Python, and that the approach which works for me might not work for you, and vice versa; for the most part, I think these are apples and oranges arguments, and I tend to say as much.
Just as importantly, if one framework doesn’t solve your problems and another does, I wholeheartedly encourage you to use the one that helps you get things done. For me, that’s Django. For Jonathan LaCour, it’s TurboGears. For Ben Bangert, it’s Pylons. For godlike figures like Ian Bicking, it’s the amazing things they manage to whip up from whatever parts they have lying around. Ian could build an application from baling twine and duct tape, and it’d put anything I’ll ever write to shame.
If I ever lead anyone to believe otherwise then I deserve to be put in my place. Very often, the aforementioned smarter folks do so and, much to their credit, do so gently.
When people post ignorant FUD, I try at first to ignore it, because it’s generally not worth the dignity of a response. But when it persists unashamed, when it takes a dismissive attitude toward the goodwill and hard work of people I know and like, when it keeps coming even after the cooler heads have tried to settle things calmly, well… that’s when I get a little bit cranky.
I am not generally a hot-headed person; there are only a few triggers that can really set me off. So if you want to bash me or my code, go for it; if I find something useful in the criticism I’ll take it to heart and, if not, I’ll ignore it and get on with my life. I do what I can to improve myself and my goal is to get things done and leave the Web better than I found it, so anything you want to say about me is just fine.
But if you want to bash on people I know or work with, or on things they’ve put years of their lives into developing and giving away for free so that other people can have an easier time of it, well… that’s when I get more than a little bit cranky. When you do it under the umbrella of a respected brand in this industry, I have to write multiple drafts of a response before I can tone it down to something printable.
In between working at my day job, working on the various apps I’ve released and working on the book I’m writing, I’ve been trying to write a worthy response to Jonathan’s explanation of why he uses TurboGears; it’s the sort of thing I think we could use a bit more of. But every time I sit down to edit that draft blog post, the same old dick-waving contest starts up again. The same old shit starts getting flung again. It all goes to hell again.
I have great sympathy and respect for Ian when he says that he takes this personally out of concern for a larger Python web community, but I cannot and will not stand by when ignorant FUD works its way into that community. I cannot and will not stand by when people who ought to know better take an arrogant or dismissive attitude toward people who are trying their damnedest to make the Web better. I will call them out and I will call them exactly what they are.
That doesn’t necessarily make it right for me to do so, or prudent, but that’s why I wrote that rant earlier today. Now I’m going to crawl back into the woodwork and keep my big fat mouth shut until I have something useful to say.