I’ve been reading Dan North’s post on programming as a craft, and Adewale Oshineye’s response. I also don’t view programming as a craft. I believe that programming is merely the vocabulary in which we express our craft or trade (and I’m ambivalent about the difference between craft and trade). Focusing exclusively on programming is like learning how to write excellent essays, poetry and email, when 70% of our communication is non-verbal. However, within that limited sphere, I do care about being fluent in our vocabulary, and I think that the people involved in the SC movement and I pursue many of the same goals. I would be surprised if any of us pursued those goals exclusively.
This post is more about the Software Craftsmanship manifesto, whose existence discomforts me.
I dislike the wording of the manifesto’s points because I don’t think they differentiate between programmers who genuinely care about the value they deliver, programmers who care about the beauty of their code, and programmers who hold a mistaken belief in their own abilities. Any software developer – even the naive, straight-out-of-college engineer with no knowledge of design and little knowledge of incremental delivery – could sign up to that manifesto in the mistaken belief that they were doing the things it espouses. I used to be one such developer, so I speak from experience.
I dislike the statement, “That is, in pursuit of the items on the left we have found the items on the right to be indispensable.” Indispensible? Absolutely necessary and requisite? Plenty of valuable code has been delivered by individuals trying out a new idea on their own; by coders like my dad who can’t make a maintainable product to save their lives, but who can rewrite it if they need to; by parties who started out on a basis of distrust and only learnt collaboration later on, let alone partnership; by people who couldn’t find the software they needed so wrote it themselves, or discovered unintentional value and responded to the change. If that phrase read, “That is, the items on the left are a good start and we would like to help you pursue the items on the right too,” it would be a less elitist message. For those developers who would like to be better, and who are aware that they’re learning, the manifesto casts them into the role of the “others” which Software Craftsmen are “helping to learn” the craft. I guess I’m one of those “others”, because I’m still learning about the items on the right, and I certainly can’t see myself as one of the craftsmen with the manifesto phrased in the form it currently takes.
Ade has outlined a number of mistakes which proponents – and I believe opponents – make regarding the software craftsmanship movement. I think supporters of the manifesto are doing exactly the same thing; failing to look at the background of the movement, and jumping on a bandwagon which lets them concentrate on the things they find stimulating while ignoring the bigger picture. “The glamour is overtaking the intent”, as Dan North put it. If Dan’s post does nothing but address the glamour and steer developers away from indulgence in the technical intricacies of their work – refactoring to oblivion while failing to deliver, focusing on test coverage while the company continues to leak money, worrying about the latest testing tool while failing to talk to stakeholders, or insisting that no one can interrupt their two-week sprint once they’ve made a commitment, for instance – then I applaud it.
I particularly liked the conversation between Dan, Aviv Ben-Yosef and Jason Gormand over Twitter, in which they concluded that Software Craftsman is a status you should be awarded by someone else. If nothing else, Dan’s post has let us have a conversation about what craftsmanship really means; a conversation which should be at least as public as the manifesto itself.
Ade, a further reading section attached to the manifesto is an excellent idea. Without it, that manifesto is the face of the Software Craftsmanship movement. I don’t much care for the expression on that face.