Another day, another coding horror. *sigh* not how I wanted to start off this week. At least the problem isn't technical, but rather an embarrassing misunderstanding of a business rule – and of course the system's in production. It could be the client's fault for not being clear in the first place, but that really doesn't matter. It's frustrating, a programmers happiness is directly tied to the quality of the code he or she produces – end of story!
Jeffrey Palermo talked about this very same thing
not too long ago, and all of his points were bang on. He's particularly right about how easy tools make it to get something, anything, out the door. There are a lot of parties responsible for the current state we find ourselves in. Schools quickly come to mind: be it I.T. condensed courses or Universities. Joel went
on and on and on (and on and on) about how important knowing C is for new grads, and I agree. Of course, individuals are to blame too. How many developers got into it for the money instead of actually loving it? Your misery is well deserved. How many refuse to learn from their mistakes?
As easy as it is to blame schools or even individuals, I put almost all the blame on lazy and underskilled managers and HR departments. Managers (or leads, or whoever does the hiring) need to know what they are looking for
as well as how to find it. If you want a junior programmer, make sure you have the right team/person in place to properly mentor him or her. Jeffrey talks about the Apprentice/Journeyman/Master relationship (they are called Artisan's in WoW) and in my experience it's a vastly underused concept in software development.
I'm sure money plays a big part in all of this, but I'm reminded of a great book called
Peopleware by Tom Demarco and Timothy Lister. There's pretty strong evidence that the best programmers outperform the worst programmers by a factor of 10. I used to think that there was no way one developer could outperform another one by a factor of 10. I now have no doubt of it when you take into account the total cost of a project. Back to the figures, it means that if you're starting salary for a new grad is 40K (doesn't necessarily mean they are the worst), you've got a steal on your hands paying 100K for an actual no-BS senior guru. I don't know about everyone else, but 100K for a non-consultant in Ottawa isn't going to happen. Instead, what you end up seeing are lazy HR departments flatten out salaries and lump them into a few categories (or maybe just 1: “Programmer”). All this isn't to say that you shouldn't hire new grads. You might end up paying a little more for what you get in the short run, but in the long run the investment will be worth it.
I will go off a little and point out that Microsoft doesn't make it very easy to determine a developer's skill. I'm specifically talking about their certification program. Maybe it makes sense for I.T. professionals (you know, network people, help desk, cicsco/active directory/novell…), but when it comes to software developers, the MCP/MCAD/MCSD are total failures.
Microsoft needs to cancel the MCP/MCAD/MCSD program for developers. I took an MCP test, thinking that I would get my MCSD. It was a joke of jokes – 20 minutes of my time, answering superficial questions. A LOT of the questions actually asked for answers or gave examples that promoted BAD practices. Worse, it's extremely easy to cheat on these exams. If you see a job description asking for MCAD/MCSD certified people, DON'T APPLY – unless you absolutely have to. It's a tell-tell sign of a shop that doesn't know HOW to look for people. Even if you are the right person, you'll be working with, or replacing someone who isn't.
Thanks for letting me fume a bit :)