Wednesday, March 18, 2009

Software Craftsmanship

I'm a fan and subscriber of InfoQ. Lots of good stuff, a bit of dross, and the occasional jewel. The latest newsletter included news of the Software Craftsmanship Manifesto: A Call to Arms.

As aspiring Software Craftsmen we are raising the bar of professional software development by practicing it and helping others learn the craft. Through this work we have come to value:

  • Not only working software, but also well-crafted software

  • Not only responding to change, but also steadily adding value

  • Not only individuals and interactions, but also a community of professionals

  • Not only customer collaboration, but also productive partnerships

That is, in pursuit of the items on the left we have found the items on the right to be indispensable.

© 2009, the undersigned. this statement may be freely copied in any form, but only in its entirety through this notice.

History Lesson

Many years ago, somewhat fresh out of school, I figured I was doing ok as a coder. The work I was involved in was generally interesting and I felt I was doing a pretty good job. That all changed dramatically a short time later when I was given the responsibility for designing and constructing from scratch the debit card PIN encryption and verification infrastructure for a New Zealand household-name financial services provider. This involved writing C++ code to interface to the hardware encryption module locked into a rack in the computer room and communicating with PIN Pads and Encoders attached to computers in the branch network, plus a little GUI development to drive it all. These were the days before the emergence of Web Services and WCF; Windows NT was the target platform for both server and workstation — there was a lot of low-level boilerplate that just didn't exist. Ultimately it all worked well, I was reasonably happy with the resulting code, and the system provided many years of reliable, low-maintenance service.

However during the project I found myself in a deep hole with respect to a core aspect of the design. I was working for a vendor organisation at the time and when I asked for some assistance the silence was unnerving. I suspect there weren't any people in the organisation with relevant experience but what I needed was more peer review than technical assistance. Fortunately I'm not shy about asking for help when I need it. I finally got to sit down with another developer who pointed me towards the newly minted Component Object Model (COM).


I started reading and haven't really ever stopped. One of the early books I read was Scott Meyers awesome Effective C++. Finding out how many things I had been doing incorrectly was painful but enlightening and really highlighted to me what a challenge it is to produce good quality C++.

Eric Meyer's Eric Meyer on CSS was another watershed moment for me. After an initial foray into writing code for the Web I finally began to understand how it could work. Lets face it, up until recently everything we've done on the Web is a hack. We pretend the browser is just a dumb terminal and not a sophisticated development platform in its own right. With Web 2.0, AJAX, and REST we are beginning to see the browser platform being taken seriously with good separation between client-side and server-side.

Jeffrey Friedl's excellent Mastering Regular Expressions is another great book, David Flanagan's JavaScript: The Definitive Guide, Fowler's Patterns of Enterprise Application Architecture, Andrew King's Speed Up Your Site, Uncle Bob's (& son) Agile Principles, Patterns, and Practices in C#, Joe Celko's SQL Programming Style. Just a few of many great and often extremely readable tomes informing and affording better software craftmanship.


Having personally witnessed the likes of copy-paste coding, superstitious code, and voodoo chicken coding, I've often found myself trying to raise the standard of the development efforts in which I've been involved. But I've also frequently found myself working without peer-review. It is that latter situation where the right book can be valuable, far more so than wading through pages of Google search results trying to identify the one nugget of information I'm looking for.

I've rambled on long enough. Read the article, sign the manifesto, join the LinkedIn group, and raise the bar.

No comments: