You start your morning drive to work and before you get out of your driveway a car flies by doing 3 times the speed limit and almost hits you. Once you're out of the driveway, you get cut off by someone texting on their cell phone and not paying any attention. A couple miles further, you pass a 4 car fender bender on the shoulder on a straight stretch of road with no off roads in sight. Just before you pull into the work driveway you get t-boned by a drunk driver that ran a red light.
Such is the highway of a career programming.
The computer science field is full of distracted, careless, unskilled programmers who write code or claim to be able to write code just because it's something that gets them wherever they are going. And there are a lot of them. They don't take pride in the work they do, they don't really care if it's done right, and frankly they are unprofessional.Troy Hunt pretty much sums it up.
Something that has always struck me as a bit unique about the software industry is the huge variances we see in professionalism. Consider industries such as medicine or aviation; the lower bounds of their professionalism is comparatively high and the deviation of expertise within the practitioners is comparatively low when compared to software development. Of course there are exceptions - every now and then a doctor malpractices or a pilot crashes - but these are relatively rare occurrences compared to how often poor quality code is written.
Jeff Atwood points out why this is a bad thing, and I completely agree with him.
Three years later, I'm still wondering: why do people who can't write a simple program even entertain the idea they can get jobs as working programmers? Clearly, some of them must be succeeding. Which means our industry-wide interviewing standards for programmers are woefully inadequate, and that's a disgrace. It's degrading to every working programmer.
It's degrading specifically to professional programmers.
It's a complicated problem to solve and this usually means it's talked about with generalizations, simplifications, and abstractions- but I think there is definitely something to be said about the role both the industry and higher education is playing.
You've got your high school student, backed by his high school guidance counselor, looking at a chart of high paying careers and programming is up there. So why not, being a programmer is on the table. Or, maybe it happens after a couple semesters in college when it's time to actually chose a major. In any event, that's the light bulb moment when he decides what he wants to do as a career. He doesn't even know what it is, but it's now what he wants to do. Then, he goes through a substandard college education in computer science (or a related field) only because the school has to lower its standards to get students through the program and keep it from being dropped. The industry demand is way higher than the supply and the way it's being mitigated is with more low skilled programmers. He never really had a desire to understand how to be a great programmer or the passion to keep up to date with it. In fact, any passion or desire he had was killed the second he decided to be a programmer, but that won't stop him from getting a job programming.
Being a great programmer is difficult. So much so that I think it's better to look at it in terms of being less bad. However, this means that there is a constant struggle to make it easier to program under the disguise of progress. Unfortunately, that tends to draw in people that would otherwise not be able to write code to solve a problem. There are many levels of understanding and experience that play into just writing a simple program. From the bowels of the hardware, to the communication protocols, and all the way up to the language there is a lot to take into account. And all the time I see new languages and new tools who's sole purpose is to limit what somebody needs to know and understand to write code. You get a watered down language in a limited environment under the facade of having some cool bells and whistles. The end result is you get somebody with a masters degree in computer science, maybe even subsidized by good work ethic, who doesn't give a rats ass about programming but can write a Java program that reads a text file. He couldn't really tell you anything about what's happening, but he'll show up for the interview and might even get the job.
So, a big factor is whether the programmer was driven to the career, or the career was driven to the programmer. I'm not implying you need a higher calling to be a professional programmer, but it's not for everybody and it should stop being treated that way.