Thursday 22 August 2013

Beyond craftsmanship?

Regarding creative work, I hear the following term a lot: Creating something from nothing.
A musician has the silence, and fills it with sound waves. A painter has an empty canvas, and fills it with paint. A programmer has a problem, and creates a solution. It can be challenging at first to grasp, but the initial state is not nothing and we're not creating anything. We are only transforming materials. This might be easier explained if we observe other crafts like carpentry or metalwork. Carpenters and blacksmiths create solutions to their customers' problems by crafting furniture and forging weapons  amongst many other things. So why do we sense a big distinction between the so called "creative" work from "physical" work? I'll share a little secret: given that each person we observe in each field is a professional, the only difference in their way of working is the materials they use.
Rachel David
The blacksmith has some raw material, an anvil, a hammer and a chisel. A carpenter is equipped with some wood, a saw, a hammer, some nails, carving tools and a grinder. A painter starts off with some paint, brushes, sponges and a palette. A musician with an instrument of choice, and a programmer with a set of programming languages, paradigms and software tools.

Nobody denies the importance of learning the craft for the physical professions. To understand how to handle the tools correctly in order to create something valuable for the customer, each apprentice must learn from a master. May that be a father or a local craftsman or a professional teacher. For each apprentice, a master exists.

Musicians are trained in a similar manner. They have the option to study music at school or from any private tutor. The main goal is to practice so much, that the handling of the tool transforms to muscle memory. When that happens, the apprentice is ready to actually experience playing music instead of playing an instrument. Not so long ago I've stumbled upon a very frank writing by Phil Morse on He wrote that there are two types of musicians:
  • A “formal” musician is doing grades, and they’ve been to a lot of classes. They can read music. They could be heading to a career in “organised” music – orchestra, that type of thing. They can be hugely dedicated, but by the same token, some may not even particularly like playing music. (We all know of people who’ve been forced to take piano lessons by their parents, for instance…)
  • A “spontaneous” musician is usually self-taught, although they may have had training too. They enjoy playing along to what’s on the radio (on their keyboard, or guitars, usually), and so they can pìck out chords and melodies and copy them pretty fast. They tend to form bands. But they can be lacking in a lot of pretty useful musical knowledge at the same time. (By the way, by “spontaneous” I certainly don’t mean they can “just do it” without any effort – this type of musician practises just as much as the first type…)
Of course metalworkers and carpenters can be self-taught too. The sole reason this happens rarely is the cost of raw material and proper tools they can practice on. As students of an institute, they'll have access to anything they need in order to develop. 

Painters have similar opportunities. Many art schools exist to build up the muscle memory to use the different types of brushes, and to know what type of paint and material they should apply for the required outcome. The cost of self development for them is less expensive.

Programming craft on the other hand does not have such a clear path. Of course many schools teach some form of computer science, and many individuals coach and mentor others to become better at using their inventory. The craftsmanship term did not exist in our industry all the way up to 1992, when it was first suggested by Jack W. Reeves in an essay: that software engineering is more of a craft than an engineering discipline. Fortunately the idea spread and brilliant materials have been created to support the journey of a craftsman. Apart from gaining access to a computer, learning programming can be achieved free of charge.

This lead me to the conclusion that, the less expensive it is to practice a profession, the less important craftsmanship appears.

Is craftsmanship important though?

I've visited an art gallery not so long ago. I wasn't particularly interested in the exhibit but was excited
Untitled 107 (not the one I'm talking about)
to meet a visual artist friend of mine, so I tagged along. We wandered around looking at weird street art, abstract sculptures, a photo series of naked Russian homeless people and some old fashioned paintings. As usual, I was a bit upset about what people put on gallery walls and call art. At least this time I was accompanied by someone who could actually confirm my beliefs, or bust them by explaining what to value in the creations.

You are probably familiar with the feeling when you spot something that is way above average in quality and content. Let it be any form of creation from music to product design. Perfection simply stands out. We found a painting almost at the end of the path we took in the gallery which caught our attention. For me, it was the first item in years I could've imagined on my wall. The professional with me got sucked into a specific state of mind I felt familiar from somewhere. She started analysing the painting and explaining her insights to me. All the details about handling brushes, choosing canvas material, selecting paint types and strokes. She reminded me of myself when doing a code review. Analysing the design patterns, naming and formatting conventions, extendability, testability, etc.

And then it struck me:

Would a painting stand out just by the perfect technique it has been created with?
Would a painting stand out just by what it depicts regardless of the quality?
Would a piece of music be appreciated just for the way the instruments are used?
Would anyone use a sword-shaped piece of metal if it's not sharp?
Does a piece of code have any value if it's perfectly crafted, but is not solving the customer's problem?

Is there value in craftsmanship alone, or is there something about the way we use it that actually represents value?

Once we've learned everything our masters had to teach us, we will be able to mimic their work perfectly. If Leonardo Da Vinci was our mentor, we could paint the Mona Lisa equally well. 

The question kept on bugging me: what is art then?

On the same week I met with Ward Cunningham at an eXtreme Tuesday Club night. We sat down for a chat and as he was talking about similar stuff, I've shared the thoughts puzzling me. We went through many examples from other industries and professions and realised that the pattern I've described above is present in each and every of them. It doesn't matter how small or large the stakes might be. Whether you're planting a flower or building a skyscraper. If you are a true professional in your line of work and take pride in what you're doing, you will most likely end up doing art.

What is art then?

Currently I feel that the value of art for the creator is the journey of value creation. May that value be anything from others' delight to money making.
Watching my friend analysing the painting, programmers reviewing code, musicians listening to others' music I got to the following conclusion: The way to create timeless art is to produce equal value to the customers and fellow artists as well

So does that mean that ART means that you have to be a craftsmen AND be able to use your tools for the right thing? Maybe. Right now, I feel that it does, and one is not good without the other.
We know that tool usage can be taught. Can the other half be taught, or is it something that people will (or will not) acquire by experience?

Conclusion: Programming is art!

The way I see it, programming is no different from painting or writing music. We have to know our toolset to choose the most appropriate tool and approach in order to serve our audience's needs. It is in our own interest to be good citizens and create "clean code". Without that, our creations will be thrown away or turned into something else. They'll rot.
Are you ready to experience programming instead of using a programming language?

Remember: Earth without art is just: Eh.

1 comment :

  1. It's completely true that the initial state is not empty: every creative person uses tools (created by others) to form the final result of their work or thougts. In these cases the empty thing is the region where the added value - the part of the whole implementation that didn't exist before - resides. The creative value is a virtual thing (a concept), that has of course a physical aspect - and the this aspect is always part of something else that's wider or bigger and has several previous added values, too (like Newton: "If I have seen further it is by standing on the shoulders of giants.").
    The creative part is the activity of adding and filling this tiny (?) part of the whole, where the ability to recognize the possibility of the gap is important (to see a relationship that wasn't seen by others and cannot be deduced based on the previous rules of the exiting context).

    By the way: "A programmer has a problem, and creates a solution". This is not the creative programmer ('developer') - this is rather craftmanship (which is really important), but the creative programmer find new problems, mostly based on his/her previous knowledges about what can/could be possible (discovers new ways - the most experiences the better). The difference in approach is similar to that between an 'applied' musician (who has to serve the client/guest's - sometimes rather low - needs, for example in a restaurant with music) and the one that has own compositions (which has to find the audience later - and the succes of this depends on many other factors, too).
    So a developer's creative work is filling the empty editor with something (always following the rule: 'You never get somthing for nothing'...). And of course, the editor is the result of other's creative work ('the shoulder of the giants').
    I just can't consider a programmer creative who can only extend examples (to solve known problems with known solutions). The creative ('artist') person always extend the boundaries of the current relations.


Note: only a member of this blog may post a comment.