This is the last post in my series on software craftsmanship. I thought I’d end the series with a brief summary and recommending a (new or just different) definition for software craftsmanship.
Is Software Craftsmanship some code-obsessed mishmash of martial arts and carpentry?
I started my series by asking Is Software Craftsmanship some code-obsessed mishmash of martial arts and carpentry?. Unfortunately I think the answer is "yes". But it didn’t have to be like that.
For me the emphasis on doing the right thing (thus not writing crap) and self-improvement are the real virtues of the software craftsmanship movement.
It is unfortunate that some of the language hides this. "Code Kata", and other martial arts inspired practices, are an example. They offer an opportunity for useful practice, and are probably fun for those that do them, but the names put some people off (well, me anyway). Mind you, "self-improvement exercises for programmers" might be a little bland and probably wouldn’t get the same buzz in the blog sphere.
I don’t find categorisation as "apprentices", "journeymen", and "masters" helpful. Partly because the analogy with medieval guilds is inappropriate and the working model outdated. But also because nobody can agree how people advance in this progression; the one person who has put their hand up and asked Am I a Master? has been shouted down with accusations of "a lot of ego and a diminished capacity for self-doubt and self-awareness" (Ade Oshineye, quoted on Software Craftsmanship: John Wood).
Attention to Technical Excellence
The Principles behind the Agile Manifesto promote technical excellence:
"Continuous attention to technical excellence and good design enhances agility". And I think attention to technical excellence is what the software craftsmanship movement is really about.
With that in mind I think Dave Harvey, despite being anti the craftsmanship movement, offers a pretty good definition of software craftsmanship:
Professionalism, taking responsibility for work, a dedication to improving one’s knowledge and skills: these surely have to be taken as a given — not just in software, but for anyone working in any domain where value is ascribed to the end result of activity.
Quite like that one.
There are hints of it in the writing of the craftsmanship advocates. I suspect Bob Martin wouldn’t object to it too much given he sees craftsmanship as the way to avoid writing crap.
I also found support for this in Hoover and Oshineye (2009) although the quote is from somebody else:
I guess it basically means having the attitude that there’s always a better/smarter/faster way to do what you just did and what you’re currently doing. Apprenticeship is the state/process of evolving and looking for better ways and finding people, companies and situations that force you to learn those better/smarter/faster ways.
quoted in Hoover & Oshineye (2009),
Apprenticeship Patterns: Introduction
What I make of it all
I think there would be a lot more clarity and a lot less controversy if the software craftsmanship movement adopted a variation on Dave Harvey’s definition of craftsmanship:
Professionalism, taking responsibility for work, a dedication to improving one’s knowledge and skills
Hoover, D. & Oshineye, A. (2009). Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman. O’Reilly. [Available on-line http://ofps.oreilly.com/titles/9780596518387/]