« A long time ago in a galaxy far, far away... | Main | Adding triples to a Wilbur database »

2005-04-20

Programming as a craft

People tend to have differing views about programming as to the nature of this endeavor. Many of us involved with creating software are employed by organizations that regard programming as a form of engineering - a methodical, almost robotic activity of taking a specification and turning it into error-free code (hence, perhaps, the terms software production and software factory). These organizations naturally shun the idea of programmers as artists, although many programmers may consider themselves as such. In an essay titled "Great Hackers", Paul Graham points out that a programming language is a medium of expression, and that the choice of a language (or more generally, the infrastructure for a software project) is not only a matter of adhering to a standard or selecting something that's popular (and thus, as the thinking goes, guaranteeing or at least maximizing the likelihood of, say, finding competent programmers) but an important social decision as well.

Personally, the way I perceive art and artistic expression makes me think of programming not exactly as art per se, but more of programmers as craftsmen. This would make programming, as a practice, a craft; it turns out that this metaphor is not terribly off the mark, since in many ways programming is an activity that benefits from being practiced (as in getting more and more competent and proficient in it). Indeed, despite part of programming being engineering, it also involves "skills of the hand" of sorts, as many of the tools programmers use (say, Emacs) and languages (say, Common Lisp and its 600+ standard functions) can require lots of rehearsing in order to be mastered.

The notion of programmers as craftsmen is also heart-warming to a perfectionist; one could visualize the image of highly skilled carpenters, stone cutters, etc. of bygone ages. In our age of instant gratification and end-justifies-means -style of corner-cutting, a proficient programmer, practicing his craft, is a pleasant thought. I wonder if this approach would have anything to do with the quality of the end result itself? Modern approaches to software creation (such as extreme programming) tend to emphasize the speed of production over careful planning (the latter is seen as a waste of resources). Without taking sides, the actual execution of the act of writing code surely benefits from an approach that is based on experience and proficiency, inasmuch as being a means of maximizing the chance of attaining error-free code, balanced against the time spent writing it.

All of this, no surprise, is compatible with my own desire to write my code just so, that is, exhibiting certain perfectionistic traits when it comes to how my source code looks, how it is organized, and what idioms it uses. A consistent, clear style also leads to maintainable code (as a personal note, this is particularly good for someone like myself who forgets the details of the code about 24 hours after it was written).

In his recent monograph "On Bullshit" (yes, this actually is a serious book), Harry G. Frankfurt discusses corner-cutting as a form of bullshit and points out that craftsmen of the past would even pay attention to details that would not be seen in the end result, since the idea of having done a sloppy job would bother their conscience. In the software business, does such professional pride exist, does it perhaps take other forms, or has it simply been dispensed with because of the inevitable pressures of deadlines and "time-to-market"?

And as to art, sometimes I feel like printing out some of my source code, framing it, and hanging it on the wall. In these cases, people worrying about deadlines might feel that I have spent too much time polishing the code. I wonder. Graham points out that a great programmer can be 100 times more productive than a mediocre one; without making any claims about being a great programmer myself, I cannot help thinking that these great programmers must be the master craftsmen of our craft. Thus, I wonder if the notion of "apprenticeship" would make sense in our business as well?

Posted by ora at 19:20

Comments

This is exactly how I feel about my code. Now I understand why. Thank you, very much!

Posted by: John Connors at April 21, 2005 04:21 PM

OFF-TOPIC: I just leart about WILBUR. Do you think there is any chance that its license becomes clearly "free / open source"? For information, follow this thread of debian-legal: http://lists.debian.org/debian-legal/2003/08/msg01804.html

"Is the Nokia Open Source License Debian-Free-Software-Guidelines compliant?"

At the end, Branden Robinson states that it is not.

Thanks.

Posted by: artime at April 22, 2005 05:52 AM