Anyone can be a programmer, right?
The web is full of API documentation and programming tutorials. Tools like Eclipse and Xcode are free. There are even free sites that provide entire online programming courses. These days anyone can become a programmer, and that’s a great thing.
Or is it?
Anyone can’t just become a doctor, an airline pilot, a civil engineer, or a lawyer simply by googling a few how to’s. Those jobs require a structured education and passage of a state or federally administered certification exam, as well as mandatory continuing education, licensing, and insurance. Someone who practices medicine without a license is known as a quack. Software developers require no training and no license and many people hire “quack” developers all the time.
There are only two milestones that matter when developing software. The first is the point at which the software appears to be fully functional, in the sense that it behaves in a way that is consistent with expectations. It’s easy to test for this: just hand the app to a QA person, or anyone familiar with the requirements, and have them bang on it for a few minutes. If it doesn’t crash or do something obviously wrong, it passes. Call this point A. When you’re at point A, you don’t know anything about how well the software will scale, how it will adapt to a wide range of user conditions, or what will happen when new features need to be added. You just know that it looks as if it works.
Then there’s point Z, the point at which the software is perfect: well designed, scalable, documented, unit tested, and built on technology that’s just right for its feature set. There is a vast swath of real estate between points A and Z; it’s where most programming happens. Nobody actually gets to point Z, but it’s reasonable, on most projects, to expect to get 80% of the way there. That’s what we’re taught to do as educated developers. Once you’ve worked this way for a while, you forget that there’s any other way to go. But there is.
There are really two software development economies out in the world. There’s the one where everyone assumes that point Z is the goal, and there’s the one that knows nothing of point Z and is just looking for the fastest route to point A. Think of them as the professional economy and the hacker economy.
There’s nothing wrong with being a hacker. Hackers prove concepts. Hackers generate excitement. But hackers don’t produce quality code. The problem is that developers aren’t in the habit of clearly identifying themselves as either professionals or hackers, nor are project sponsors in the habit of saying which kind of developer they want. Everyone likes the word “professional” so everyone claims they are, or are looking for, professional developers, even though that word has no precise meaning in our industry. “Hacker” has a generally bad connotation, so instead you’ll hear people use code words for hacking, like inexpensive and fast.
As professional developers it’s frustrating when we get caught up in a project run by hackers. Deadlines are always impossibly tight, budgets impossibly low, and the work we put in to move the project beyond the point of minimal functionality goes unnoticed and unappreciated. By the same token, managers and project sponsors who end up hiring hackers instead of the professional developers they expected are left wondering why the application that seemed to work so well in testing is now failing in the hands of real customers, or why it requires a complete rewrite to add a new feature.
Software is too important and too pervasive to exist without a formal way to certify and license software developers. A college degree serves this purpose for recent graduates, but has little meaning for anyone who’s more than a few years out of school. So we rely on a smorgasbord of informal techniques like interviews, references, unregulated private certification companies, or the success of past projects (which may have failed for reasons completely unrelated to software design). You wouldn’t pick a doctor this way. Software is still the wild west.
A state-run certification system like that used in the legal profession would go a long way toward helping both developers and the people who hire us. No, I’m not suggesting that every high school kid with a bright idea for the next Angry Birds ought to have to pass the programming bar exam before being allowed to post an app in the app store. I am suggesting that businesses who want to hire a true professional ought to have an easy way to filter out the hackers. And that we, as professional developers, ought to have a simpler and less subjective way to prove who we are than walking our potential client or employer through pages of job history and references.
So let the hackers hack, and let the free market be free. Let the legions of amateur programmers writing code in their basements soldier on. All I ask for is one word they can’t have without earning it. I’d like to call myself a professional programmer, and have it actually mean something.