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.
December 31, 2007
#
From personal experience, I think the biggest thing to be careful about (and you’ve obviously realized it too, based on your first few paragraphs), is making sure your thoughts don’t come across as representing the Django project (or any other project or entity beyond yourself). You do tend to use words like “we” when referring to design decisions within Django (i.e., “We feel this way is better than that way, which is why we decided to do x.”), which implies a pretty direct relationship.
Personally, I think you were just fine to call FUD on Noah, and I think it should have been obvious to everyone that “Jackass of the Year” wasn’t so much a personal attack as it was a humorous reference to John Gruber. If anyone needs to take a chill pill, it’s the folks who can’t find the humor in that (or, maybe they don’t read Gruber?).
To take this in a slightly different direction:
Ever since I wrote a few articles trying to help people get started with Django, I’ve been confused as being directly associated with the project (as more than a user, that is), and I’ve had Django’s creator e-mail me asking me to, for all intents and purposes, “watch myself.” That sort of soured me on the idea of evangelizing for a tool I value highly. I love Django and want others to benefit from it in the ways I have, but it became very clear very quickly that those at the top of the Django chain want full control over what is said about their framework. Expecting nothing incorrect, fanboyish, or negative to ever be said about an open source project seems like an unrealistic expectation to me, but who was I to argue? So, I pretty much stopped writing about Django.
Bottom line: people like you and me are just trying to support tools we care about by evangelizing them to others. We’ve both drawn an incredible number of people to Django via our writing. We want the project to do well and we want others to “see the light” of this great new way of doing things, so they can share the benefits. While this sort of evangelism is clearly valued very highly by the Django community at large, those at the top of the Django food chain seem to not appreciate it at all, despite the massive numbers of people flocking to Django because of it. That’s disappointing, and, to be quite honest, it really hurt my feelings when I got that e-mail from Django’s creator. It’s tough when people don’t see the value in the work you’re doing.
You’re a better Django evangelist than I ever was, so I hope you keep fighting the good fight, despite the cynics, flamers, and scolding from Django’s top dog.
December 31, 2007
#
Not trying to derail here, but reading that “those at the top of the Django chain want full control over what is said about their framework” confused me a bit given that I suppose I’m one of “those at the top.”
I think, Jeff, that the reason we asked you to be careful was exactly because of what you explain in your first paragraph above: it’s really hard to avoid the Royal We, but that leads to, well, problems.
The fact is that there really isn’t any “we” to speak of: as with most open source communities, Django runs on “rough consensus and working code” — a n00b with a working feature has trumped a core dev. with vaporware a number of times. So not even those core developers really have any right to speak for the community at large. I’ve tried to do so a couple of times, and regretted it each time.
So when we — er, that’s Adrian and I — emailed Jeff, the point was that we wanted him to make a point of explaining that nobody really gets to speak for Django itself. And that applies to anything that Adrian or I say — if I ask someone to tone it down, I do it personally, not as “Django.”
Jeff, I’m quite sorry that we (same “we” as previous graf) managed to sour you on writing about Django. I think I’ve told you as much in person, and I doubt a public apology makes things much better, but you know me well enough to know how much I respect you and your writing.
Ditto for James, so I similarly hope he’ll continue to speak his mind weather I agree with it or not.
December 31, 2007
#
People will always argue whether it is better to ignore a troll or expose his method of generating FUD and his deficiencies logical, genetic, and hygienic. I think it’s better to put it out in the open than politely ignore it. You have to call BS when you see it. This is a good followup to the earlier post and probably necessary to explain for some why you wrote it. I think it’s good one person finally said what everyone is thinking.
December 31, 2007
#
James: when you write stuff like “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”, please add links. Not all of us are in like you ;)
Jeff: dude! Please, please, start writing about Django again! You’re leaving a HUGE hole in the “frameworks are great for mere mortals, and not only for nerds”-field if you don’t. Besides, you have such an unbelievable ability to somehow piss off half of the globe whatever you write — it’s so funny sometimes :)
Carl: “I think it’s good one person finally said what everyone is thinking.” Spot on, man. Spot on.
Here’s to lots of great blog posts about Django and other frameworks in 2008!
January 1, 2008
#
Jacob-
No apology is needed at all. It’s not a personal matter. You and I are great friends, and it wasn’t you that sent me the e-mail, anyway. :)
I just think, perhaps, there are people atop the Django food chain that have unrealistic expectations about what can, will, and should be said about their project. When you release something as open source, you invite in criticism and fanboyism alike. You invite comparisons and debates, and you also invite flame wars around your project (it’s sad that you invite flame wars, but it should be obvious to anyone in this community that you do, whether you want to or not).
I guess I just think e-mailing people who are talking about Django and trying to exercise any control over what they say publicly is silly and futile. It feels a bit like when Apple sues the fan sites for trademark violation. People like Noah, who (apparently) deface Django publicly may be annoying, but they have every right to do so. They may also say things that are incorrect, but — at least in my opinion — if you release something in the wild, you should expect people to comment on it before they fully understand it. People like me, who really like the tool and start evangelizing it before we fully understand it, may also be annoying, but where would Django be without us? And, even if Django’s creator doesn’t like fanboyism, surely he understands that it comes with the territory of releasing an open source project?
To quote the e-mail I received from Adrian, “Decline from commenting. Let somebody else, who’s more knowledgable in the problem domain, leave an answer.” My response to this? Who do you think you are to tell me when I can and can’t comment? You’re not my boss or my Mom, so I don’t think you have a right to tell me what I can and can’t say. Asking is one thing — telling is quite another.
When I saw Adrian’s scolding of James for his previous post, it brought back the hurt feelings I had when he told me to, effectively, end my evangelism. I fear that his lording over ever word that is said about Django and slapping-of-the-wrist of anyone who says something he thinks reflects poorly on the framework might sour even more people on the idea of talking about Django publicly. And, personally, I find that sad. It’s an open source project, open to contributions from the public. I think people have every right to say whatever they wish about the project — and others (such as those more directly involved) certainly have the right to correct any inaccuracies via comments or posts on their own blog.
The bottom line, I guess, is that I don’t think running around telling your project’s biggest fans to watch what they say and scolding them when they say something you don’t like is a very smart way to commandeer a project. That’s all.
It’s not personal at all (towards Jacob or Adrian, both of whom I like and respect personally).
January 1, 2008
#
With most things, including polemics, the solution is fewer, better words. Fifty or one-hundred lethally critical words aren’t a rant, and don’t pull the rant trigger.
Don’t stop writing about Django, James, cuz I need your knowledge and work. When defending, though, a sharp, short knife might be best. I love Gruber, but he doesn’t know everything.
LQ
January 2, 2008
#
James, you’ve been an amazing resource for all things Django. Please, do keep up the good work :)
January 2, 2008
#
Its funny how all this stuff kind of snowballs so quickly!
The point I was trying to make in my post (which I believe we had a very productive and civil conversation about in the comments) isn’t that TurboGears is superior to Pylons or Django. I was really trying to highlight the absolutely brilliant place that we’re in right now with Python for web development. Django, TurboGears, Pylons, Zope, and Twisted all provide really great ways to code for the web in Python, and thats a Good Thing (tm).
If you’re going to rant on something, it might be how people flock to Rails without even considering the myriad of great options that they have in Python. Now, thats some dick-waving I can support! ;)
And, James, no worries about people getting on your case for writing a rant. I agree with other commenters that it really makes you come off in a bad light, but from every other interaction I have had with you, I know that you aren’t mean spirited. I think that sometimes, when people dedicate a lot of effort toward a particular project or toolkit, they often take things personally when they hear outside opinions. I know that I get this way about Python in general, and about TurboGears, and Elixir, and SQLAlchemy for that matter.
Its a funny thing, and since we all get this way, I certainly can’t blame you for feeling the way you did, or even writing the post. That being said, I know Noah personally, and he’s a really nice and smart guy, who has been very important in getting the local Python community organized here in Atlanta. He probably didn’t deserve the tongue lashing for a post which he clearly wrote quickly, without thinking too much about it.
Oh, and please, I hope you don’t end up writing a rant in response to my original post. I think the comments you left, and the conversation we left behind, were highly instructional. If I wrote the piece again, it would have been shaped by all the great points that you made in the comments, so lets leave it alone, if you don’t mind.
All the best James, and keep the blog rocking, its been a lot of fun to read your perspectives, and I’d love to have a beer next time you are in Atlanta. (My treat).
January 3, 2008
#
Jonathan, all I’ve ben trying to do is write an honest explanation of why I prefer Django. The problem is that any time I try that I get the same old FUD flung at me, so I’ve never successfully managed to do it.
January 4, 2008
#
Hello James,
First let me say that you are the only “blog” writer i read every day with joy and trust. Then Happy New Year…. Now, for this topic.
I’ve spent the last 5 years introducing Projects in big Companies that change the way any people should and may work in every day life … Each time i was positionned between Group Management and Plant Officer (between hammer and …). Every day i received about 50 to 60 mails of FUD regarding the project, some were ignorant , some were blunt lies…. The main thing i learnt there is : never escalate, never go ad hominem. The only way to defeat this is to give facts to defeat the lies. to give facts to defeat the ignorance. It’s time consuming, that’s true. But you don’t have to defeat every lies, just the first and second lie of every new FUD, then they lost most credits…
The FUD guys want you to get ad hominem, because it’s the only place where they can fight!! they miss the intellectual background or technical knowledge to deal with a real debate !!
Long said short Keep the good work, you are really a main booster for the django framework, reply to idea not to main (we can very easily elect the jackass of the year from ideas , do not steal us from the choice…)
January 4, 2008
#
FUD statements are usually driven by malice or ignorance. I suspect the charitable interpretation is in order here: ignorance. I don’t blame you for getting annoyed, but the better approach to fighting ignorance is simply a good dose of education. If that doesn’t work, well, the Python community seems pretty smart, and I doubt the FUD will linger.
FWIW, I started using python and django only a couple of weeks ago to build a new site and I’m loving both! Your blog has been invaluable in my learning process. Honestly, other than the djangoproject site, I’ve spent more time reading your posts on import magic, newforms, user registration, etc. Thanks so much for all your work!
January 5, 2008
#
I wrote a commentary to all this, in italian:
Vipere preziose e pitoni stonati http://stacktrace.it/2008/01/vipere-preziose-e-pitoni-stonati/
As a summary, I contrast the Python/Django community attitudes with those of the Rails one, with reference to the recent Zed Shaw outburst. In the end I extend my simpathy to Jeff Croft, saying in a rather colorful way that Adrian was wrong censoring him.
January 6, 2008
#
Hi James,
I’m not a Python luminary or anything. But I do pay attention to what’s going on in the world of web framework comparisons, so maybe I have something of value to contribute.
Perhaps it would be beneficial to decide what it is, exactly, that you want to counter; Is it a person or is it a meme? The main criticism leveled at Django in the article you were originally responding to was that in Django it is hard to use nondefault components like SQLAlchemy. Would it not be most effective to demonstrate here, or point to others’ examples, demonstrating that it is not difficult to use SQLAlchemy in a Django project?
You see, Noah Gift’s statement is a reflection of what I recognize as one of three popular memes regarding Django which is in fairly wide circulation. I do not perceive that there is any sort of FUD machine behind any of the memes. It’s easy to see how they got started and how they perpetuate themselves. And I suggest that it is the memes which need to be effectively addressed, and not the many, many people aside from Mr. Gift who subscribe to them.
For the record, the three Django related memes of which I am speaking are:
I believe that you have already addressed #3 here at b-list. (Though I fear that is the meme that is going to be the most difficult to dispel.) And perhaps you have addressed the others, as well. I confess that although I check in here from time to time, I am not a daily reader. But it seems clear that more effort by those in the know is going to be necessary to supplant these memes with more accurate ones.
And unfortunately, countering inaccurate memes in the real world does not lend itself very well to the DRY principle, and involves lots of boring repetitions.
January 6, 2008
#
I’m just an average joe user, so I’ll put my two cents in from that point of view. I love Python, and I’ve used it for the past 8 years. I love Django, and I’ve used it for the past year. Since first using Python, I’ve seen the flame wars on the internet get more and more frequent, even by bloggers who are otherwise peaceful and reasonable people. But I think that by now we should notice some things about flame wars:
Flame wars rarely result in anything constructive. The best result almost always seems to be to diffuse the situation. The worst result is that people who would have otherwise cooperated now decide that it’s “us versus them” and a lot of time is wasted arguing than doing something else.
Flame wars are always started by those who write before they think or research, always with at least some intent of sounding smarter than they actually are so that people will listen to them because for some reason people listen to “authority”, and portraying themselves as an “expert” makes them sound like an authority. Other times, they already have the weight of a popular website, but write simply because they feel somewhat obligated to live up to that big name, even if they haven’t done their homework yet.
Flame wars are perpetuated by those who are themselves big names on the internet by responding to the trolls, and this only results in giving the trolls more authority because only the big boys play with the big boys. And then all the newbies and laymen like me feel like we are forced to take sides out of loyalty to our favorite authority.
James, I agree 100% that people should not stand idly by when others spread hurtful falsehoods. But from a practical standpoint, those who win the arguments (even in person) are the ones who stay cool, spout nothing but wisdom that is recognized as such, and let the other guy lose their head and look like the jack ass. My method is to read people’s offenses by a hierarchy of severity:
Don’t stand idly by, but don’t let others sucker you into tarnishing your own reputation by making you lose your cool. And this comment about flame wars is coming from a Slashot frequenter… :-)
January 7, 2008
#
Total django newbie here.
Been alive for a few years though so here is a thing:
Internet flame wars are pointless. (fun though) It’s a big internet, we can all find a way to see what we want to see.
They are the way of illusion, of false dichotomies, of smoke and mirrors, these things.
So for things you believe in, throw flowers, things you are unsure of, throw nothing, for things you dont belive in , throw jars of cat piss, laugh and get back to the good work.
Because Django is good work.
Beware the True Believers and zealots.. they are the signposts along the false path. Fk em all and just do your thing ;)
January 9, 2008
#
James,
I think thorough application of Hanlon’s razor, which states “Never attribute to malace that to which can adequately be explained by stupidity” to what “advocates” for various frameworks say will help you to correct FUD, while maintaining and growing relationships.
If you view someone as evil, that’s pretty darned hard to fix, but if they are just ignorant of the facts, that’s actually something you can do something about. ;)
January 26, 2008
#
I’m not going to add my thoughts on your previous article. I merely wanted to stop a while and tell you (James) that you are an incredible asset to the Django-team in my opinion.
You’re very credible, knowledgeable and your learn-by-example style articles were the perfect bridge between reading the Django docs and the Django source while learning.