Reading through a generally execrable post by Gael Fraiteur of PostSharp fame, I came across a video by David Harvey that took a similar skeptical stance about Software Craftsmanship.
The reason Gael’s post is so execrable is that it perpetuates the total nonsense that software developers can be split into two groups, those that ‘care’ and have ‘passion’ and those supposedly godawful 9-5 developers that only care about covering their asses. This is a meme that really needs to be combated and destroyed at every turn. I know a number of people who are on the Software Craftsmanship bandwagon, and they are in many ways great folks, but I’ve worked with some of them. They aren’t really all that intellectually superior or more passionate than the people they think they contrast themselves with. Not even close. With my massive ego that can be seen from space, I can ‘out-superior’ any of them pretty easily and most of what they think is “Craftsmanship” is garbage. But I digress.
I don’t think Harvey’s presentation is entirely successful, but he makes a couple of points that are worth discussing.
Paraphrasing a bit, Harvey points out the obvious “Being against craftsmanship is like being against World Peace or kittens.” Moreover, “there is nothing new about craftsmanship, it’s been around since there has been software development.” The latter is a healthy point to make, as it pushes back against the current Manifesto driven people who think they are pushing something new.
But though I think Harvey was being somewhat facetious when talking about “World Peace”, it is an analogy that is important.
It’s all well and good to “pull a John Lennon” and sing songs about giving peace a chance and what not. It’s a nice sentiment and all. But it sort of runs against the reality of the world in thinking that sentiment is going to change all that much, or that you should think having a nice feeling but completely naïve sentiment is in and of itself a good or useful thing.
It’s basically idiotic to think that, for instance, the Middle East conflict or the conflict between India and Pakistan are conflicts that exist simply because all of the various participants don’t understand that you should give peace a chance. The world is just a little bit more complicated than that. While idealism has always been a force that can push people and cultures in directions that wouldn’t be possible otherwise, idealism is almost always, in and of itself, a failure. Actual reality, actual context, trumps naïve idealism.
To push the analogy, it’s all very well and nice to push an idealistic view of current software development practices as being of craftsmanship against ass-covering, but it’s an unrealistic picture of actual reality. The idea that (generally misguided) views of software development deficiencies will be solved if only we can get enough Software Craftsmen involved is not only idiotic, but a waste of time. Actual reality, actual context, trumps naïve idealism.
But continuing to push the same analogy, just because you don’t think that chanting “Give Peace a Chance” at a bed-in is all that useful in solving world conflicts, doesn’t mean you don’t believe in finding peaceful solutions to global conflicts. Similarly, just because you don’t think that introducing SRP into every possible software development practice will make software development practice perfect, doesn’t mean you don’t believe in making software development better.
It is possible to practice good software development using DataSets, or not doing TDD, or . Against the backdrop of Idealism, it will always seem bad, or just “that sort of thing that 9-5 people do”, but that isn’t the case.
I’m not sure which is more likely to be solved earlier, the conflict in the Middle East or the ‘conflict’ in software development. The former actually matters, the latter is generally not that important.
But I think it is important within software development to make clear that the 'monoculture’ of Software Craftsmanship ™ is dangerous.