So I’m out here in Boston (home of the Free Speech Zone) at a seminar on distributed enterprise application development. The instructor is Pinku Surana, who certainly seems to know his stuff. I found this interesting article in his blog, where he argues that programmers are idiots, and I have to say he makes a pretty good case.
I occasionally teach IT programmers. I’ve taught over 100 people now and I can honestly say I’ve met maybe 5 good programmers. The rest are dangerously incompetent. In fact, they are so profoundly ignorant of computer science and programming that they actually believe they are fairly good. This is the perverse effect of ignorance: because they don’t know what they don’t know, they think they know everything. Brookes’ Mythical Man Month described the uberprogrammers who are mysteriously 10x more productive than the average. I would go further and say the uberprogrammers aren’t really so uber; rather, the average is abysmal.
He goes on to say that if non-IT companies want effective software, they should ditch their programmers and demand flexible software from vendors.
I agree with him on the first point. We, as programmers, are not nearly as good as we think we are. I think it probably stems from the fact that even a novice programmer knows more about computers than nearly everyone he knows, and they all praise him for being “so smart” when he fixes their printer or gets rid of their virus problem. My mechanic is “so smart” about replacing my car’s water pump. No one really praises him for it because cars have been around a long time and there’s not much magic to them. I don’t think I’d have my mechanic build me a new car from scratch, though.
I disagree with Pinku on the idea that you can solve your software problems by demanding configurable and interoperable software from vendors. It’s a great idea in theory, but when you start dealing with vendors in reality, it quickly breaks down. We already demand these things from vendors, and they either don’t deliver, or don’t deliver as expected. Most programmers dislike vendor solutions because they’re crappy in some way and hard to integrate with. That’s because the vendor’s programmers are idiots, too. The vendor’s programmers spend a lot of time griping about how the customers write crappy architectures that are hard to integrate with their “well-written” solution. So, which is more dangerous, the idiot you know or the one you don’t?