I Declare For Software Craftsmanship
Thursday, 20th January 2011
There is currently a raging (but incredibly civilized) debate over the Software Craftsmanship Manifesto, which is a set of four values, backed up by some longer explanations of what Software Craftsmanship is.
In essence, the idea behind Software Craftsmanship is that we all want to write better code. Code that can be easily maintained. Code that has been honed, rather than code that just performs its function. Imagine master-coders taking on apprentice-coders and sharing with them how to write really clean code - that has to be a good thing right?
One argument against using the phrase "Craftsmanship" compares the builder who carves a gargoyle on a church to one who builds a utilitarian bridge; describing the stonemason as a craftsman, but the bridge-builder as some other worker. To extend this description, I would say that many developers are like the bridge-builder - once the code is finished and performs its function, the job is done. I would compare other developers to the stonemason, because once the code is finished and it performs its function, they refactor it to make it more understandable and easier to maintain. This additional work that is performed after the software is functional is craftsmanship.
The most reasonably presented argument against Software Craftsmanship comes from Martin Fowler's blog, in which he voices his concern that Software Craftsmanship may increase the gap between developers and their customers. I think that this is an important point, because anything that makes communication harder between developers and their customers is a bad thing - but I don't think that Software Craftsmanship equals bad communication (and as Martin points out, the fourth value in the manifesto even mentions communication with customers).
Most of the discomfort with Software Craftsmanship surrounds the details of its implementation - but as far as the manifesto is concerned, I'm happy to sign up to those values - not as a craftsman, but as someone who aspires to be one.