The software craftsmanship movement has been accumulating an increasing amount of attention lately and I think it's an important development for the software industry. When I first heard the term used, I have to confess that I wasn't a fan. I detected a faintly unpleasant air of superiority and pomposity surrounding the whole thing. In hindsight, I see that this was primarily a defensive reaction on my part, stemming from an unacknowledged realisation that my own set of development practices at the time weren't working as well as I'd hoped. But since then, my thoughts regarding software craftsmanship have altered radically, in line with improvements that I've gradually been making to the way I develop software.
Fundamental to this change have been my early experiences with the various XP practices. As I've discussed here before, my experiences with XP have been something of a mixed bag. Part of the struggle has been in the small team size and the lack of a single, unifying project to work on. The company I work for is simply not a good fit for out-of-the-box, vanilla XP. However, some of the practices have had a hugely positive effect on our productivity and none more so than test-driven development. Seeing and feeling the benefit of TDD in my daily work was a trigger for me to analyse other practices and approaches that might make me a better developer.
At that point I started to read a lot of technical books. I've always been an avid reader, but reading for me before then was always about escapism, so I rarely bothered with non-fiction. Now it is the other way round; I rarely have time to read fiction because my stack of unread technical literature is piled so high. Most of the books I read during this period were good. A few of them, though, were just magnificent. These few have filled in some of the other holes in my approach to software development, continuing the process that TDD started:
- Refactoring, by Martin Fowler;
- The Pragmatic Programmer, by Andy Hunt and Dave Thomas;
- Clean Code, by Robert C. Martin;
- Pragmatic Thinking & Learning, by Andy Hunt.
So now I find myself thoroughly approving of the idea of software craftsmanship. It feels as though a great myth of our industry is finally being busted. Software development is not engineering. It is not science. It is craftsmanship.

0 comments:
Post a Comment