The lovely wall you see before you is the wall of my son’s bedroom, freshly stripped of wallpaper. Note the beautiful drywall exposed in some parts and the hole in the wall, (not put there by me).
Note the two different colors of paint you see beneath it, (since I managed to rip up paint as well) and the fact that it’s gonna be nearly impossible for me to paint over this with the lovely blue my wife picked out. Now would you hire me to do your wallpaper stripping?
It’s about talent
For years I assumed that if somebody cared enough about what they did they could eventually become a software craftsman. Talent doesn’t figure into it, just a desire to absorb as much as you could about software development and to do the best you can with the skill set you have today.
Indeed I figured this was true for most professions, outside of perhaps professional athletics or maybe jobs that require a certain inborn charisma like politics or sales.
Then I look at this wall. Now you could tell me all the mistakes I made stripping wallpaper, and the next time I strip wallpaper I’ll probably make an all new set of mistakes, because I am just not good at doing virtually anything handy.
Is it cause I don’t care? Well I certainly care more about the quality of this room more than almost anybody alive. It’s my son’s room for crying out loud but it simply doesn’t matter.
In spite of the fact that construction work doesn’t seem to take any skill that can’t be learned by somebody dedicated to doing it, I have always been completely horrific at these activities. Truthfully it’s lucky I didn’t lose a finger, despite the fact that no sharp objects were involved.
Software Development is much the same way. Joel Spolsky has anecdotally told stories about 90% of computer science students not understanding pointers, and bailing on programming altogether.
While I can’t find a good citation to prove that it’s true, it certainly jives with what I’ve seen. Some people just don’t get programming, some just run off and love it. Those are the people that are potential craftsmen.
It’s about caring
Allow me to tell you a story about somebody I used to work with, who shall remain nameless cause he’s a nice enough guy. This guy would have flown through intro Comp Sci. classes, because he’s freakishly smart.
He could code faster than anybody I’d ever met, and his apps were generally high-quality for whatever he was thinking of at the time, and he could maintain his apps well because his incredible memory.
You can probably see where I’m going with this. His skills worked against him. Since he could remember where all the code was he didn’t care if it was duplicated, didn’t care if you couldn’t maintain it because he didn’t realize most people couldn’t remember like him, was terrible about edge cases, had no use for design, etc.
Programs that read like a Allen Ginsberg poem. He produced at a high level, from the perspective of the business, because he could fix his own bugs fast. It didn’t occur to his bosses that he shouldn’t write them in the first place, or that other people should be able to fix the mistakes.
For all his natural talent he simply wasn’t a craftsman because he didn’t care about the craft of code for codes sake. He may have cared about getting things done, but he didn’t care about writing better code. It didn’t interest him.
It’s about both
With hard work and practice I could probably move up to “sucky” at wallpaper stripping, but my clumsiness would eventually put an upper limit on how well I could do the job. In addition, while I may care about how the room looks I certainly don’t care enough about handyman skills to immerse myself in them.
To finish my son’s room with paint I need somebody who is skilled enough to do a great job, and cares every bit as much as I do about the room’s ultimate quality because he cares so much about painting itself. Which is why I won’t be doing it, a skilled craftsman will.