Apprenticeship Patterns: Concrete Skills
One of the things I appreciate about Dave Hoovers book Apprenticeship Patterns is the idea that writing software is a craft. Unsurprisingly, not everyone wants software writing to be a craft. If software is a craft, you run into some problems with personell and hiring, because unlike line workers, craftspeople are not interchangeable or easily trained. And some people don’t understand that a simple retaining wall is just as much a product of the stone masons craft as a soaring cathedral. Me, I like the idea of craftsmanship, even if I sometimes forget that I’m still an apprentice.
When I want to remind myself of where I sit in the craft hall, I just think of a task that should be automatic and isn’t. The kind of thing I’m thinking of is what Hoover calls a concrete skill, things like writing build files and deployment scripts, setting up Rakefiles and automating tasks. The sorts of things that need to get done but aren’t particularly fun to do. When you are in the position that I’m in right now, trying to get on a skilled team that offers a great learning opportunity, it helps to have some concrete skills that people value.
But this concrete skills thing gave me an idea for a different kind of coding kata… a kata that focuses on coding infrastructure rather than coding itself. I’m not sure what these utility kata would look like, but the idea sounds good. Maybe a Rakefile kata… create a rake task that runs a specific set of tests. Or a Puppet kata to write a puppet task that installs a particular project from github, stuff like that.
What are the concrete skills that would make a rookie an instant asset to your team?