Saturday, May 31, 2008

The Software Artists: Pedagogy and Practic in Software and in Guitar

Very few people graduating with a college degree in Computer
Science or Information Technology are prepared to write
production code or to test production software.
Companies that hire recent college graduates often have special
training for such employees before they may work on actual
projects. Joel Spolsky has written extensively about how his
company Fog Creek trains young software workers. Publications
of the IEEE mention the issue frequently. The well-regarded
software consultancy Thoughtworks has “Thoughtworks
University”, a six-week “boot camp” style training event for new
hires hosted in Bangalore. Even the journal CrossTalk: The
Journal of Defense Software Engineering says:

It is our view that Computer Science (CS) education is
neglecting basic skills, in particular in the areas of
programming and formal methods.


The Craft of Software

Besides the mentorship approach Spolsky takes and the “boot
camp” approach Thoughtworks takes, Robert C. (Uncle Bob)
Martin, Pete McBreen, Dave Hoover, and others have for some
time advocated a master/journeyman/apprentice system for
teaching software, much like the ancient guild systems. Mr.
Hoover in particular reports notable success with this approach.
But using 15th century teaching techniques for a 21st century craft
seems unlikely to succeed on any reasonable scale without
considerable adjustment.

For one thing, both the in-house training systems and the guild
systems of pedagogy tend to keep effective practices secret.
Knowledge is passed from person to person directly, without
involvement from the community.

For another thing, craft alone is not sufficient to produce excellent
software or excellent software creators.

Brian Marick has a remarkable weblog post from May 2007
called “Six years later: What the Agile Manifesto left out”. In it
he cites four values in which software creators should invest:
skill; discipline; ease; and joy. Of this list, Marick seems to
equate “skill” with Martin's idea of “craft. “Ease” and “joy”
follow from the practice of skill and discipline. The most
remarkable aspect of this essay is that “discipline” is a new idea
in the public discourse of software practice.

Martin's idea of “craft” and Marick's idea of “discipline” exactly
echo the language of the teaching philosophy of the well-known
guitarist Robert Fripp.

Robert Fripp: Craft and Discipline

Those who do not know Robert Fripp's musical work may know
him as the creator of the new sounds for Windows Vista. He has
been at the forefront of technology in music since the late 1960s.
Since 1985 he has been teaching an approach to music and guitar
called Guitar Craft. Many of his students, for instance the
California Guitar Trio, are quite successful in their own right.

There are sanctioned Guitar Craft programs in Italy, Japan,
Mexico, North America, South America, Spain, and the UK.

The two axes of Fripp's teaching methods are Craft and
Discipline. Fripp uses these terms in a way very similar to the
way that Martin and Marick use them. But unlike Fripp's notable
success at teaching music over the last two decades, software has
no single successful long-running education project with a
consistent philosophy.

While a mature discussion of software craft exists, that discussion
has yet to demonstrate any repeatable successes. Martin
discusses software craft in conjunction with professionalism, but
the milieu in which “professionalism” is exercised is somewhat
limited: professionalism for Martin is “...about behavior, attitude,
and professional ethics”, and that “Writing clean code is a matter
of both skill and character. “

These are fine and noble sentiments, but ethics and character have
little to do with actually creating great software.

Brian Marick, in the same essay where he identifies the four
values, explicitly says that “...new Agile teams... are
floundering.” While his essay identifies the problem, it fails to
explain how to exercise skill, discipline, ease, and joy in the
service of creating software, except to pronounce that these
qualities are necessary.

By contrast, Guitar Craft has thousands of words from Robert
Fripp and others on how the interaction of Craft and Discipline
are necessary for performing this music on guitar:

The invisible side of craftsmanship is how we conduct
ourselves within the process of acquiring craft, and how we act
on behalf of the creative impulse expressing itself through music.
In time, this becomes a personal discipline. With discipline, we
are able to make choices and act upon them. That is, we become
effectual in music.
It is notable that when Fripp re-formed the band King Crimson in
1981, they chose to name their new album “Discipline”.

Like Martin, Fripp uses the apprentice/journeyman/master
metaphor, but adds an additional role of “genius”. Each role is
delineated in a number of ways:

The apprentice acquires skill.
The craftsman acquires sensitivity.
The master acquires vision.
The genius attains freedom.

The apprentice is noisy.
The craftsman shapes sound.
The master shapes silence.
The genius is silent.

The apprentice practices the craft of craft.
The craftsman practices the art of craft.
The master practices the craft of art.
The genius is artless.
Beyond the four roles, Guitar Craft also recognizes seven levels
of accomplishment. The details of the seven levels are not
relevant to this discussion, except to point out that the well-
delineated roles combined with levels of achievement that
correspond to the student's commitment to practicing Guitar Craft
provide a well-designed structure for communicating the
principles of Guitar Craft not only to the community itself, but
also to those outside the community who may be interested in
examining the practice of Guitar Craft. Software craft has no
such well-defined hierarchies of learning or commitment.

There are of course technical details of Guitar Craft, having to do
with posture, tuning, left- and right-hand techniques, etc. etc.
Such details are beyond the scope of this paper. Such details,
while important when playing the guitar, are not relevant to the
discussion of whether software craft can learn from Guitar Craft.

While it is not actually possible (or desirable) to separate the
philosophy of Guitar Craft from the actual practice of playing the
guitar, there is so much in the written history of Guitar Craft that
is provocative for “Software Craft” that mining the Guitar Craft
canon for software methodology could be a valuable exercise:

If an apprentice does not hear what a master hears, is
then that quality not present in the music? Yes and no.
In the world in which the apprentice lives: no.

...if I cannot manage to persuade the members (of the
group) of what I see to be the next course of action,
how do you expect the group to deal with the
expectations of thousands of people. It is not possible.

These are ten important principles for the practice of
craft:
Act from principle.
Begin where you are.
Define your aim simply, clearly, briefly.
Establish the possible and move gradually towards the
impossible.
Exercise commitment, and all the rules change.
Honor necessity. Honor sufficiency.
Offer no violence.
Suffer cheerfully.
Take our work seriously, but not solemnly.
You have to find a way of recognizing and describing
the quality inherent in the music. If you fail to do that,
then the piece itself is compromised.

The history of Guitar Craft demonstrates that the ideas of Craft
and Discipline together can create a successful international, self-
perpetuating teaching and performing regime. And the language
today's most skilled and prolific software creators that it seems
worthwhile to find out if ideas from Fripp's way of teaching
music might translate to the similarly creative process of teaching
software.

2 comments:

third relation said...

I think the software craft should include "posture" as part of the whole, this isn't just a key to guitar playing.

James Marcus Bach said...

I'm not sure why you say we have "yet to demonstrate repeatable success." It seems to me such successes are easily found. Find anyone who loves their work in software, and seems to do it well, and inquire carefully and deeply about how they acquired their joy and their abilities. I think you'll see a pattern right away.

We acquire our sense of craft from our experiences, our play, our social connections with colleagues, our ambitions and intentions within the interplay of problems encountered and solved.

To some limited extent, we acquire them through explicit instruction, too.

This is extremely repeatable! Anyone who wants to can do it. Resources to assist the learner are abundant.

Personally, I have trained many testers in the craft of testing. Some of them are long-term students who grew into leaders in the field. So, I'm not sure why you feel that this is somehow happening in the music field but not ours.

I bet it isn't happening in music any more than in software. Witness all the listless school bands in the world. I once played the trumpet in elementary school. I know whereof I speak!

However, music is a little harder to fake than software. And professional musicians aren't paid much, unless they are top flight. Professional music probably has less tolerance for mediocrity than we have in software engineering.