Years ago, one of my dearest friends, Jennifer Elms, and I were discussing a short bit of prose that I had written. She had just finished reading it, and I had asked for her opinion.

“I think I’m a competent enough writer,” I said.
“Oh, I wouldn’t call you competent,” she said, “but this is better than some of what people call ‘good’.”

I was stunned.

“If I’m not competent, who is?”

She paused and reflected for a moment. “Joseph Conrad was competent. Try Lord Jim.”

‘Stunned’ quickly ceased to scope to my reaction. I read Lord Jim, and I met the unknown. It took some time to find my hubris, identify it and begin extracting it, but the journey was one of the better investments of my life.

In the last few years as a software developer, I have reflected more than a little on this exploration. I know better than to call myself a competent developer–I know better than to attempt objective qualifications on my abilities.

Crockford muses that software development is the constant struggle for perfection. He’s right, but it’s also much more than that. Software is poetry. Development is a discipline. Despite their flaws, languages are tools which we both leverage against the world and whose understanding changes us. Code is a means of communicating designs and intentions between humans that must also be translatable by the compiler into something flawless and (as a consequence of this requirement) something altogether unintelligible.

Like every other developer I know, the code that I write today is the product of the Muse. Unequivocating genius. Quite unlike the code I wrote yesterday, which was unmitigated toxic waste.

As a writer, after talking to Jennifer, I used to set the bar at ‘competence’. As a developer, that’s simply not good enough. The bar has to be set at perfection. For someone who’s still not competent, the disparity between here and there is significant.

Fortunately, we get a lifetime to make the journey.