Craftsmanship as a Bridge

with 8 comments

As a third grade teacher, my wife has an instant connection with anyone she meets. She can captivate anyone for endless hours with the thousands of stories her classroom provides. People want to know what we are teaching our children, they want to know if there is still a smelly kid, and if the schools still teach children how to play The Oregon Trail, which they do. For most, talking with my wife is a nostalgic experience.

As a software developer, I generally get blank stares and questions about how to fix some problem caused by a website that was accidentally visited. Few people feel nostalgic when I explain what I do everyday in front of a computer. A year ago, conversations about my job never developed or bloomed since I couldn’t bridge the gap from what I do into their lives.

Thinking and speaking about software development in terms of craftsmanship has bridged that gap for me. It gives non-technical people a door into understanding what I do everyday. It even has me excited to talk about software development with friends and family. Treating my job as a craft or a group of skills that are artistic practices draws needed parallels to other disciplines.

Usually, I explain how blacksmithing and programming correlate. Both crafts start with very basic materials iron ore and data. Blacksmiths smelt the ore and combine it with an alloy which determines the properties of the metal. Programmers data cleanse and apply a data type which determines the properties of the data. The two disciplines are heavily dependent on strong tool sets also. Wikipedia has an interesting tidbit concerning a blacksmith’s tool set:

Over the centuries blacksmiths have taken no little pride in the fact that theirs is one of the few crafts that allows them to make the tools that are used for their craft.

The same can be said for software developers since the frameworks, scripts and commands used to build software are made up of software. However, the greatest parallels between the two crafts do not come from similar processes.

I find that the biggest eureka moments when talking with non-technical people come from the connotations of blacksmithing. Software is forged. Applications are bent, punched and hammered into shape. Different programs are welded together seamlessly. Before delivery everything must be hardened and tempered. The process is dirty and it is hot. The final product is sculpted to be both aesthetic and functional. The emotional associations the previous sentences draw upon are foreign to most when thinking about software development.

One context non-technical people discover is that blacksmiths are rare now and the craft is archaic. Shouldn’t it be more related to the assembly line or some other post industrial revolution set of practices? No, software development began in 1940 or later. Relatively speaking, the discipline is not that old. Today’s view of blacksmithing describes the current state of software development. A quote from a well known programming book applies here:

One hundred years from now, our engineering may seem as archaic as the techniques used by medieval cathedral builders seem to today’s civil engineers, while our craftsmanship will still be honored. —The Pragmatic Programmer, Dave Thomas and Andy Hunt

There is so much untapped potential that lay ahead.

Another context that I usually bring up is that of apprenticeship or more specifically craftsmanship. At the studio we follow a system of apprenticeship that is similar to craft guilds which were common when blacksmiths could be found in every town. We regularly share new practices, techniques and tools as we refine our craft together. Our job descriptions and roles mimic those of apprentice, journeyman and master also. If you’re more interested in software development as craftsmanship here are some good places to start: the next big thing, software craftsmanship.

One final side note, I’m beginning to read more about software development as an artistic medium. Few non-programmers realize how much computer languages mimic human language. Computer languages have verbs, nouns, grammar, and hundreds of other syntactic structures that parallel human languages. Programming can be a poetic experience when a few lines of code are succinct and powerful. If you’re more interested in programming as poetry join me and take a look: The Poetry of Programming, Diving for Perls – the poetry of programming, Programmers as Poets.

Written by syntatic

July 13, 2007 at 12:15 am

8 Responses

Subscribe to comments with RSS.

  1. A common way of relating software engineering is to compare it to other kinds of engineering and simply talk about how the raw materials are different. I do like the blacksmith analogy though so I’ll investigate that a bit more!

    One thing I like about engineering is that there are aspects of art that are inherent in everything we do. We express ourselves creatively when we come up with novel approaches for things and engineers, like most people, are drawn towards solutions that are simple and “elegant”, while still solving our problem. In areas like interface design this creativity is even more apparent.

    Chris Norton

    July 13, 2007 at 1:10 am

  2. Great thoughts! I found myself comparing code to art when I was talking to NCC students yesterday, but I love that blacksmith analogy. I actually haven’t heard of the idea of programming as poetry before, but it gets me extremely excited because it correlates with a certain project I’ve been rolling around in my head. Heheheh! The untapped potential, as you say, makes life so exciting in this field!!!


    July 13, 2007 at 8:55 am

  3. I came across something a while back that talked about the fact that programming leans a bit more toward art than engineering, but most of us don’t study it the way we would other disciplines recognized as ‘art’.

    An art major who has just received their degree will (hopefully) at least be able to recognize different styles of art, probably place them by period and artist, and describe the techniques used. When I graduated with my degree in computer science, I had seen little code other than my own and the examples in my textbooks, hadn’t even heard of patterns in a formal way (I thought I had invented singletons), and didn’t have a clue about software development methodology.

    I’d love to see a project (maybe on wikibooks?) that approaches an introductory software course from that angle.

    Russell Lankenau

    July 25, 2007 at 2:58 pm

  4. Oh, by the way, Victoria, I’m an NCC alum 🙂

    Russell Lankenau

    July 25, 2007 at 2:59 pm

  5. […] More on software blacksmithing, apprenticeship, and artistry: Craftsmanship as a Bridge. […]

  6. I agree that craftsmanship is a better analogy to current programming practice than an industrial process. I posted a similar take on this, which emphasizes the nature of the running processes we create.

    Blacksmithing a Train Engine


    October 29, 2007 at 12:37 pm

  7. NVwDudslAGmsl


    January 7, 2009 at 10:18 am

  8. […] is what I loved (and still love) about my field—the art of programming, the wonderfully complex craft that could take a lifetime to […]

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: