Tuesday, August 07, 2007

Masters, Journeymen, and Apprentices

I've really enjoyed reading this series of blog posts by Fred George, Masters, Journeymen, and Apprentices. In it, he says what everyone knows, but few teams seem to accept: all programmers are not created equal. He divides programmers into Masters, Journeymen and Appentices. I must say, that reading his descriptions, even the lowest level on his scale, the Apprentice, is more skilled at OO development than most of the developers I encounter. He's another thoughtworker, a company that consistently seems to attract the best programmers, so it's not really surprising that there's such a high bar. The truth is that your average Microsoft programmer in your average company's development shop knows almost no OO at all. I don't consider myself a great programmer, I'm probably at his Journeyman level, but I'm consistently the only guy who's doing OO programming (as Fred George describes it) at the majority of my clients. I think it's really down to the fact that it's very hard to measure the ability of a programmer at programming and so it's ignored by management. There tends to be no concept of growing programming skills by mentoring or training. This is especially true of OO skills. I would say that being skilled at OO provides a step change in any programmers productivity, but this is rarely measured or encouraged. In fact OO programming practices are relatively uncommon in most Microsoft shops and are often dismissed as an academic waste of time. I was told by one 'architect' that we were doing OO programming because we were using C#, regardless of the fact that most of his procedures where hundreds of lines long and had a cyclic complexity of about a million:) Sure you can read lots of books on technologies and do lots of Microsoft exams, but that's about APIs and technology, the actual art itself is often totally neglected. And it is an art. With no way to measure ability most management simply measure seniority by length of service. What I often find is that the quality of the whole team is governed by the quality of the senior developer(s), the guy who does the recruitment interviews. If he's good then then he tends to be able to recognise good people and recruit them, if he's not so good then the team too tends to be poor. But even if he's good it's a struggle, you have to be prepared to turn away a lot of people with all the right qualifications and pay good money to get the few people out there who really know OO. That's a hard sell to management who far too often see developers as plug and play components. It's quite depressing really. I constantly hope that I'm going to get to work with a Master programmer because I know that's the only way I have any hope of ever attaining that level myself, but apart from the odd great team (only two I can actually think of in my career), it's a vain hope.


Andrew Craven said...

I coulnd't agree more. Management and hiring are such crucial pieces of software development that are all too frequently overlooked, despite the enormous effect they have on the resultant software. I have actually been in interviews where the senior developer has said to me "I don't care what language you code in, it doesn't matter to me", for a development position. Such developers are never going to manage to handle a complex project with any degree of quality.

I'm enjoying reading your blog. You have very similar views (and skills) to myself. And you're also the only person who has been able to satisfactorily explain to me why I'd use Windsor... ;)

Anonymous said...

Quote: "I'm probably at his Journeyman level, but I am consistently the best programmer at the majority of my clients"

Cue Tina Turner;-

"you're simply the best
better than all the rest
better than any one
any-one i've ever met
i'm stuck on your heart
i hang on every word you say
Tear us apart, baby I would rather be dead"

Mike Hadlow said...

Thanks anonymous, point taken. I deserved it, it wasn't really for me to say :)

I was talking specifically about OO programming with reference to Fred George's original post, so maybe I should re-phrase it, "I'm consistently the only guy who's doing OO programming (as Fred George describes it) at the majority of my clients".