November 9, 2008

...Learn TDD with Codemanship

Software Craftsmanship 2009 - What's It All About?

Life is tough.

This morning I had to suffer a couple of hours lying by the pool reading and taking the occasional sip from my home-made banana and vanilla smoothy.

This afternoon I have some more chores to do. Between now and sundown I have to absorb some photons. And somebody's got to splash about a bit in the pool, too. This evening, after all the photons have dried up, I have to absorb some alcohol. Those frozen margaritas don't drink themselves, y'know...

Luckily I've managed to squeeze in a few moments to blog, and again my thoughts turn to the upcoming conference on software craftsmanship.

Very soon, once the exact date and venue have been concreted over, I'll be sending out an informal request for session proposals to folks on my RFP list (email me if you'd like to be included in that first RFP).

Now, I'm very keen not to waste anybody's time submitting (or reviewing) session proposals that have no chance of making into the final program. I've got a pretty specific notion of what's going to be "on topic" and what, therefore, will be considered "off topic".

In my own mind - and that's not a place you want to end up, believe me - it helps to think of it in terms of an analogy. Draw a parallel, if you will, between software craftsmanship and musicianship. Now, musicianship is not the ability to create music that people will like. And it's not the ability to manage a band of musicians. Neither is it the ability to critique a piece of music.

Do you get where I'm going with this? Musicianship is the ability to play music. To play it cleanly (or roughly) as required. To hit every note (or miss it exactly as specified). It is a sense of pitch and of harmony. It is rhythmic co-ordination. It is the ability to read and write a musical score (in whatever notation is appropriate). It is the ability to play anything, in any style, and to do a good job of playing it. It is knowing your scales and your modes and being able to play them in any key and in any octave. It is knowing your Major 7th from your 7th chord, and being able to play all inversions of both in any key and in any octave.

If you can play Ravel's Piano Concerto for the Left Hand in D Major all the way through at the correct tempo and make no mistakes, you have a higher standard of musicianship than a pianist who can't do it without fluffing it here and there. And there will undoubtedly be many piano students who can't play even a few bars of it without getting into major difficulties.

You may not like Ravel, you may not like his piano concertos. That's fine. That's your personal taste. And it has nothing to do with musicianship.

Musicianship is all about playing it right. Whatever it is. And great musicians devote thousands of hours of their lives to practicing and learning - scales, modes, chords, arpeggios, sight reading, ear training, fingering, bowing, picking, blowing, breathing and all the other techniques that take thousands of hours to master and that can only be learned through regular practical training - so that they can pick up any from a massive repertoire of works and do a stand-up job of playing it the way they think the composer wanted them to.

And, of course, some of them also compose. And that requires a great deal of musicianship, too. A great composer like Ravel crafted his scores like a watchmaker. He was widely recognised by his peers - people who really knew what they were talking about like Claude Debussy and Igor Stravinsky - as a master craftsman.

But some folk like simpler stuff. And som folk like pop. And some folk like rock. And that's fine. Some pop and some rock is as expertly crafted, in my opinion, as a Ravel score. (Though not much, it must be said.)

It doesn't have to be complicated or overblown. It can take true craftsmanship to create something truly simple and elegant. And such music can be equally challenging to play as the musicians must focus more attention to each and every tiny nuance - nuances that are easily missed in more complex pieces.

And that's what the Software Craftsmanship conference is all about. It's about building software right. It's not about whether or not we built the right software. That's a different conference. And it's not about how we manage groups of software developers. That, too, is a different conference.

This new conference is going to be about the skills and the principles that underpin the creation of software itself. The equivalent of scales and modes, harmony, reading music, ear training and all the exercises we have to do every day to build up our programming muscles so they are strong, as fast and as supple as a violin player's fingers.

So now you know. Or at least, I hope you are getting a vague steer on the underlying message for the conference. This isn't going to be about requirements management, project management, test strategy, enterprise architecture, Agile planning, retrospectives or any of that hifalutin stuff without which you can still - just about - build software that works.

Don't get me wrong. All these things are important. But so are doors and floors and walls and windows. And we're not covering those in the conference, either. The scope is defined.

And as well as the "hard skills", we will also be devoting time to pondering the process of acquiring and honing (and expanding) those skills, principles and techniques. Much has been made of the idea of apprenticeship in this context, for example. What other ideas can help here? What exercise techniques and practice regimes, for example, might help? What experiences have people had with them? What's the best way to build those design reflexes and those refactoring muscles? My real hope is that we'll see some of these learning and practice techniques in action on the day.

And we'll also be entertaining session proposals on the wider topic of software craftsmanship in the workplace. If you're a developer, how do you "craft" your working life to accomodate software craftsmanship? If you're an employer or customer, what does software craftsmanship mean to you and your users, and how can you support and encourage it?

Software Craftsmanship is, then, simply a conference about building it right. I hope that will steer your session proposals into fruitful waters, and I look forward to sending out the RFP very soon.

Posted 12 years, 6 months ago on November 9, 2008