"That tension— between beauty and cynicism, between what the Brazilians call futebol d'arte and futebol de resultades— is a constant, perhaps because it is so fundamental, not merely to sport, but also to life: to win, or to play the game well? It is hard to think of any significant actions that are not in some way a negotiation between the two extremes of pragmatism and idealism."
Jonathan Wilson, Inverting the Pyramid

This was supposed to be "Week 138", but I never got off my duff. It's just as well as I read Flashman and the Dragon in the interim and it colored my thoughts on this post. I want to clarify and expand upon what I said in the last post about the danger of falling too much in love with one language, one web technology. Some of that is just my personal bias: I spent my formative development years working at a consultancy that took on work in all manner of languages and on any number of platforms, so I think that's How Things Should Be. I've always prided myself on being "language agnostic" in terms of programming. A few times on a job interview or when trying to land a client I think this has cost me— you see a wrinkled nose or the torrent of questions turns into a trickle— but I've never really minded because I think insistence on working in one way is the path of the small-minded. It's something I rail against in general, the tendency for everyone to think where they live, how they live and what they think is based on some cosmic template of How Things Are Done and anyone who's opinions, skin color, language differ from that template is doing it wrong.

That kind of thing infects your thought. If I were designing a curriculum for a school, it would include a week discussing Kipling's "[W]hat should they know of England who only England know?" A week at the inside. Make it the basis of a year's worth of forming thought. Too many developers focus on one thing, get comfortable in it and then don't know what to do when that technology turns into a dead end. Or, worst of all, don't ever find out that technology has turned into a dead end. There's nothing more frightening than meeting a new client's old developer via his work. "He has his own way of doing things." "He was very specific about that." Etc. If you don't think there are people making a good living writing dead-end solutions for clients who don't know better, find out how many copies of Microsoft Access were sold last year. Ask why people are still looking for VB6 compilers ("I don't like to upgrade [to] 2008. More than 10.000 lines of code")?

So what the hell am I doing trying to work in Django all the time? First we should discuss the lie I told above. I'm not language agnostic. Not exactly. I try not to be a fan of anything, but that's not in my nature anyway: I expect to be let down by anything I rely on. But I don't stop myself from hating. This week, a partner asked me if I knew any ColdFusion consultants. My thought process:

  1. Why would I hang around with a sorry bastard like that?
  2. Hey, I've written thousands of lines of ColdFusion!
  3. Yeah, and you hated every second of it.
  4. Oh, right.

No thanks. It's one of the few languages I've worked in that I feel sets you back (note: all opinions circa 2002 and CF4/5). Like ASP, its limitations make you think programming has to be hard and that there are things that cannot be done. It never fails to amaze me when a developer says something "cannot be done". It's almost never accurate. 99% of the time it either means it can't be done in budget or the developer does not know how to. And that second case is when you should drop a developer post-haste. I've rarely done anything interesting as a programmer when I knew how to do it at the outset. You only learn and grow when you get challenged.

So, again, why work so much in Django where you can develop a comfortable rut and never be challenged by ideas and paradigms from other languages that might show a better way to do things? So much of life comes back to biology, and working in one language is incestuous. Healthy populations have lots of differences, providing more opportunities for mutations and evolution. I could hang out with the world's smartest Python programmers and all I would ever learn is the best way to solve problems in Python. Which is not necessarily the best way to solve a problem. Going back to Kipling, it's hard to appreciate what you have if you don't know what the alternatives look like. It's human nature to assume what you have is the best option. My favorite Americans, the people who I think are our best citizens, were citizens of the world. Franklin, Jefferson, etc. were Americans intimately familiar with England, who spent much of their diplomatic lives in France. The synthesis of different ideas results in totally new avenues. Even just the ability to synthesize different ideas is important.

The answer turns out to be a surprising one: I, and by extension, this company, am not a programmer. It's what I do to accomplish client goals, but it's not what clients want. They want a solution to a problem. Ideally a secure, high-performance, user-friendly solution, but in no case do they care about the language it's written in or the format of the code. They just want something that leaves them happier than they were before. All that stuff developers argue about, languages, platforms, editors, it's all fanboyism. I'm too old for that and I'm more interested in accomplishing something than being right. Or I'm trying to be.