September 24, 2008

...Learn TDD with Codemanship

We're All Apprentices - But Only Some Of Us Know It

One of the less palatable aspects of coaching software developers and leading teams (and hiring, let's not forget) is that a heck of a lot of folks out there don't know that they don't know.

The bar is set pretty low for developer skills and knowledge, and the sad reality is that 90%+ of us are - compared to the best - just lowly apprentices. But so many developers refuse to accept that, in the grand scheme of things, they are no great shakes. And they also refuse to learn or take their lead from more genuinely knowledgeable and experienced professionals, chiefly because they don't know that significantly more knowledgeable and experienced developers exist.

I'm reminded of those guitar players who are legends in their own bedrooms, and who can knock out a few rock standards and a passable blues-oriented solo in the keys of E minor, A minor and E major.

Unbelievably, many guitar players have never listened to truly great rock and fusion players like Al Di Meola, Allan Holdsworth, Paul Gilbert, Steve Vai, Yngwie Malmsteen or Eric Johnson. They don't know there's such a thing as an extended chord (except maybe the occasional bluesy seventh or ninth), or that there are notes in between the five notes in the pentatonic scale. They don't know about scales and modes, or intervals, or harmony, or complex rhythm beyond what they've picked up by ear from following a few blues rock conventions.

And, having tried to teach guitar at University, I can attest that - when they're confronted by a level of musicianship and technique that's way ahead of what they're doing - the usual reaction is to dismiss it and even pour scorn.

It was very fashionable back in the late eighties and early nineties, for example, to say things like: "Yngwie Malmsteen may be fast, but he doesn't play with feeling". Now anyone who's listened to a lot of early Malmsteen will know that this is a bogus objection. (Check out the opening solo to Icarus Dream Suite on his first solo effort for a fine example of some very expressive and mature playing.) Okay, so these days he's become somewhat of a caricature of himself, and he turns his amps up way too loud at gigs - so loud you can't hear the band - but he's still light years ahead of the vast majority of amateur widdlers out there, including me.

I can admit I still have plenty to learn from the likes of Malmsteen, and I continue to work at it and push my own personal envelope, as modest in reality as that might actually be.

I hold a similar regard for the likes of Robert Martin, Kent Beck, Ward Cunningham, Steve Freeman, Nat Pryce, Alan Cameron Wills, John Daniels, Ivan Moore and other genuinely great programmers. I doubt I will ever be technically as good as they are. Partly because I'm not as bright. Partly because I don't work quite as hard at it. Partly because I genuinely believe they might be hardwired for it in a way that I'm not. That's not to say that I suck at programming. I am - as humbly as I can be about such a boast - considerably better at it than the average John Q. Programmer.

Just like I'll never have fingers as long as Paul Gilbert, and will therefore never be able to do some of the massive stretches he can. Check out this 3-note per string blues run. Scary!

And I've been lucky enough to witness the equivalent scary programming licks in my years in this profession. It's inspired me to try harder and to learn more. And, just occasionally, I like to pass on the odd slightly-scary programming lick to other people who might be happy to learn from me, just as I pick them up from the other apprentices around me.

But I've met so many developers who have never come across this level of ability, so they live in blissful ignorance that it even exists, let alone that it might be worth aspiring to. By their own internal benchmarks, they are the canine's testicles of computer programming. They don't know people who are better at it than they are (or they choose to ignore them), so they naturally assume they must be among the best. "It doesn't get much better than this, folks", they exclaim as they finish yet another 200-line untested method.

Of course, these hackaday heroes still make the big bucks and there are still many, many employers who believe the sun shines out of their behinds. (I'm equally bemused by people who hand over small fortunes to see Keith Richards play guitar.) Nobody in their right mind aspires to be a great computer programmer for love or money.

You might choose to stick with your 3 chords and your basic blues scale because it brings in the chicks, and if you go to an Al Di Meola concert you won't see a heck of a lot of females in the audience. Similarly, if you can earn a six-figure income and get away with reading one book every couple of years, then why bother learning more or trying harder?

But you might decide to do it, just like Al Di Meola decided to do it, because you enjoy it, because you don't want to just get by, and because you actually care.

The first step, though, is to acknowledge - and I mean, really accept the truth that - you are just an apprentice, like me. And you have so, so much to learn. A lifetime of learning and you still won't be satisfied. For me, that's worth getting up in the morning for. And I'll just have to find another way to impress the ladies...

Posted 14 years, 2 months ago on September 24, 2008