Sunday, September 09, 2007

Become a better software artist

There's been an interesting discussion on the software-testing mail list about the failures of Six Sigma and other process-quality religions to map effectively to software development. I think you might get better software the same way that you get better music.

Practice.

Almost every musician starts by playing along with recordings. After that, playing along with the radio builds improvisation skills. After that, playing along with other people broadens and deepens the communication spectrum. Throughout all this, work on the basics like scales and chords and tempo don't stop. The conscientious musician practices as many styles of music as possible. The professional musician may not enjoy blues, or orchestral works, or jazz, but there are certain forms that all professionals master in order simply to be professional.

Rehearse.

Music is constructed for listeners. Rehearsal is where the details of the performance are designed and implemented. Rehearsal is not where musicians improve their skills; it is where musicians, together, plan to present their work to an important audience.

Perform.

Real artists perform. They create music for real listeners, who pay for the privilege of doing so.

Trying to apply Six Sigma or Lean or CMM in order to get better musical performance doesn't seem very smart. But humans have been performing music for our entire time on the planet. We know pretty well how to go about getting good performances. If it's software:

Practice.

Work the exercises in the books. Then make up your own exercises, or look for interesting questions. (My first serious program was to throw the I Ching in Perl, using the instructions from the back of the Wilhelm/Baynes translations as an algorithm. The script also calculated the changing lines, and printed both hexagrams to the console. I learned a lot.) Learn the basics, and keep expanding: conditionals, loops, objects, design patterns. Learn other languages, even if you don't like them much. (I've started Head First Java 3 times, I'm slack.)

Rehearse.

Share your programs, work with others to improve theirs. Publish your code as a demonstration or a work in progress. Get feedback, and read and comment on others' work. Join an open source project. Or a couple of them. Write documentation-- if you can't write it down clearly, then you don't understand it well enough.

Perform.

Real artists ship. -Steve Jobs
Make stuff for users. As often as you can. All kinds of users, all kinds of products.

1 comment:

Zeljko Filipin said...

Another great comparation of creating music and creating software.