Tuesday, December 1, 2009

Art or Craft?

These days many of the programming legions are upon us with new criteria we have to meet to play "their" reindeer games. Let's say I don't care, let's say I care more about the art than the craft. For that is really true for me.

What's the difference? Well look at this picture, to the left. You know what it is right? It's a circle right? But it's not exactly a circle is it? It is also not totally finished and it is not wrong. It is unique and organic.

So, what does it matter? It is a circle for most of us and it is more. It is personal and is a stamp of identity of its creator. If you asked them to tell you how to create such a thing you might not understand the answer and you might even think they were being evasive.

Now, on to our next exhibit, this set of perfect circles is constructed using precision - using geometric rules and patterns. It is one you could follow by using a formula and recipe from a book. It might help to have a teacher present but you could still do it without any help. It is pre-destiny.

To do it requires you to master some tools for drawing, measurement and so forth. You need to adjust for changes in the drawing tools and medium. To me it is craft, the craft of drafting that comes to bear here.

I certainly accept one can have and benefit from a teacher in learning such a craft (in fact in high school I took a drafting class and benefitted from having a teacher). I admit there are masterful tricks and approaches. However, there is no way I will be convinced that one can realize the first image, the organic one, using the tools of the second example.

Okay then where am I going with this? Well, as I write this I see something like "islands of order" (craft) within the "ocean of chaos" (art). When we put together little bits like DTOs, DAOs, Facades and Adapters we are "craftsmen" (like plumbers in fact). When we go up higher and see the interfaces and user interfaces and the whole heaving ocean of parts that make up our application we are "artists".

Artists, especially ones who paint images like my first example are beyond myriad details. They see things beyond the well honed arcs and angles. Craftsmen are down at it, doing each part with polish, pattern and often a good bit of a priori knowledge of how all the parts will fit. They have a blueprint.

I have experienced two kinds of coding:
  • Emergent - "Artistic" code which comes from somewhere in the back of my head.
  • Convergent - "Crafted" code based on patterns I already saw and for which I could tell a detailed story.
The emergent kind came from my 10000 ft. flight in my mind over our problem space. The convergent came from detailed reduction.

We all have "flavors" or perspectives if you will, and around this center we inscribe our own "circles". I prefer the art to the craft. I prefer the free which is based on high level principles to the more precise and crafted. I like to experience the snarling tendrils of systems as they grow, wither and curl. When am I done? How about now?

It is personal and it is a preference, and even in the face of a movement trying to define the "right" way to be... I will be an artist (of sorts) who writes code. You can be what you want, just please don't be a pain in my a$$ about it.

1 comment:

  1. As I re-read this I think I see a new middle ground. It is true that great artists like Dali, Cezanne, etc. spent a large amount of time mastering the craft of their tools and media. Yet mere mastery of these will not cause great art to emerge. I think most of us can agree that you need a vision and a direction. Hopefully it is one your audience wants.

    So, I think you need craftsmanship skills to realize good art. I see why I want to improve my craft in programming, cooking, drawing, and more. Yet, creating a complete work in any field is an art, and I am glad to hear other people see this relationship too, as well articulated here http://www.infoq.com/articles/arsMagna-agile-essay.

    ReplyDelete