It seems inevitable that whenever I run into problems because something isn't working right, it's because some programmer out there somewhere (whoever programmed the tool I'm working with) overlooked something obvious or made some other stupid decision.
For instance, I just finished an ASP .NET program that complements another ASP .NET program already published in my company's intranet. So, it seemed logical to put it within that program's folder, making it a nested ASP .NET application. Should be easy, right? Just copy it in, make it its own application in IIS and bam, you're set. Wrong. Some programmer at Microsoft decided that nested ASP .NET applications should inherit all the configuration of the parent application by default (or should I say "dofault" since it's an initial setting that does cause a fault instead of preventing one). This includes configuration that would cause dependencies to the parent's assemblies, which of course would be missing from the child's bin folder (since they have absolutely nothing to do with the child application). And, of course, broken dependency equals completely nonfunctional application.
So I thought, "Well, this is a pain in the neck. Now I have to tell the child application not to inherit configuration from the parent." Wrong again! There is actually no way to do that. No, instead, you have to tell the parent application not to make the child applications inherit its configuration!! I hope, I really sincerely hope that I don't have to explain what makes that a really really bad design...
Another thing I run into all the time happens when you import from Excel into SQL Server. If a column contains some number values and some text values, making the column type textual instead of numeric, instead of converting the number values to text like any sane person would do, it omits the number values altogether! (I would say anyone with half a brain, but I actually know of someone who had half her brain removed due to brain cancer and she's actually pretty smart.) Guess what, I need those values too! Otherwise, they wouldn't be there. So the only solutions I have found are A) Manually convert every numeric value cell to a number stored as text, B) Write a Visual Basic macro to do this for you, or C) Save the spreadsheet as a CSV file and import that into SQL Server. All of these solutions are either tedious and time-consuming or really really crude and ugly. I hate resorting to crude methods...
So this has me wondering: Do people purposely do stupid things? Like, it's hard for me to imagine that these people actually think these ideas are good ideas. I mean, they have to realize at least to some degree how stupid they are. The only reasonable explanation that I can come up with is that implementing a good idea would require more effort up-front and they were simply too lazy for that, and since they don't care, they just went with the bad idea. So really, it wouldn't be "stupid programmers", it would be "lazy, careless programmers". Which is worse? Well, "stupid" is not as bad since a "stupid" person doesn't know any better. But a "lazy, careless" person can be held accountable because they know better.
Now for me, I simply cannot stand to do anything a certain way when I know there is a better way to do it. Or even if I know there might be a better way to do it, then I am driven to find it. I am always thinking of how decisions will affect the project in the long-run, always doing things now to save time on an ongoing basis later. I won't comment on my smartness, but while I may be lazy at times, I am definitely never careless, and my carefulness at least prevents me from being lazy in a way that will affect the quality of my work. For me to knowingly implement something stupid would be cruel and unusual torture for me. I would be ashamed to be associated with such work. You could not pay me to do it. I would find a new job if I was forced to cut corners regularly.
Am I the minority?
Is it because many programmers aren't very smart or is it because they don't care? You know, I would argue that the two are not mutually exclusive. Since computers and software are constantly changing, you have to be constantly learning in order to succeed in this profession. If you don't care, you won't want to learn, and you'll end up doing stupid things. If someone were to ask me if they should enter this field, I would tell them the same thing one of my instructors in college told me. He said, "If this is what you really love doing, and you really really want to do it for a living, then go for it. But if you're not that into it, and you just want a job to make money, you might want to consider a different major." I stuck with it because I live, eat, and breathe programming. I was programming before I went to college. I go to work and program, get home from work and program, and constantly read and learn about programming. I do it because I love developing software and I am passionate about it. I think that's what makes me good for this job. It's not knowledge or skills; my current knowledge and skills will no doubt be obsolete in little more than a few years. But I won't be because I will be continuing to learn. So if you're a programmer who doesn't care about programming, you're going to be left behind and probably find yourself out of work. That may be sad for you, but ultimately good for software. But will that nature of the field be enough to weed out the careless programmers?