CodecraftCodecraft

Chef André Soltner recently imparted upon a group of students graduating from culinary school, “We are not artists. We are craftspeople.” Artists make something entirely new every day, while craftspeople take pride in performing generally the same work from day to day, honing their skills, making little improvements, and experimenting on the side. It’s a good reality check to today’s culture of celebrity chefs, the dreams of many and the fate of few.

We’re still waiting for any programmer to become a household name. The social status of our profession is somewhere between busboy and dishwasher for the larger public, assumed to be boring, unintellectual (yes they think that), and generally meaningless. The frustration that regular people feel when wrestling with a Microsoft Word document that has collected some particularly nasty invisible formatting codes—this must be what programming is like.

Funnily enough, the worst days are something like that. Debugging can become a day-long session of trial and error, and when you finally win (as you must) it’s hard to celebrate the hours spent resulting in a single line changed. But then it’s not usually like that, or we wouldn’t be here; in fact, we work every day to make our environments (languages, libraries, editors, runtimes) more predictable, just as a good cook organizes his station and sharpens his knives constantly. Predictability and productivity are the reasons programmers pick technologies and fight like dogs over them; knowing and using a better technology (better for one’s own mindset) means less time fumbling in the dark and more time making interesting things.

That is, if one is permitted to make interesting things at all. Extending the professional kitchen analogy, there are plenty of ‘restaurant’ kitchens these days where craftsmanship can hardly be hoped for—and forget about art. Every dish has been focus grouped from here to Omaha, in a feedback loop whose only inputs are cheese and sugar. It can’t be very inspiring to work on a line that is just an assembly line for meals conceived, prepared, and flash-frozen far away—and the result is not so great for the customers’ health.

Just as a culinary education would be mocked by a job assembling unhealthy prepared dishes, so is computer science by the neverending attempts to turn it into factory work. Even more so than cuisine—whose finer points are certainly lost on the modern public but which at least involves visible and edible matter—programming is a mysterious craft. It’s also expensive. Factoring in its low social status, it’s a wonder programmers haven’t been rounded up to work on custom shopping carts, wordpress installations, and reporting tools in firewalled camps where eyes can be better kept upon us. The next best thing is what’s commonly done, accounting for every hour of programming work and being sure that all software ‘ideas’ originate and are prioritized by those safely insulated from any understanding of how software is written and implemented.

But maybe it is time to start fixing this dysfunction from the bottom up. After all, computing has never been more central to culture and life. Technology has never been more fashionable. It’s absurd that software-dependents continue to assume that most coders (certainly they ones they may encounter, or work with) are some species of keyboard-hunching mole, while the few responsible for the web sites they love are millionaire 20 years-olds. Choose your demeaning stereotype!

As we know, it just isn’t like that. Most of us do work with passion to produce things of value and of beauty, that will please their users and last for years to come. The many little decisions that make up our days affect software products much more than the back scratching, eye clawing theatre of the conference room. And we know software better than anyone that doesn’t write it: what is possible now, what will be possible soon, and what really needs to happen for the next breakthrough. This passion for the how of computing, nerdy as it sounds, isn’t any more pathetic than tweeting a photo from an iPhone is pathetic. Computing what humans do these days, and we make it possible.

So many of us are working to produce amazing things in different disciplines. There are people slaving away in restaurant kitchens to become master chefs, and there are programmers working to become master builders of software. We’re part of a generational movement to revalue production, from handmade goods to motorcycle repair. This labor is respectable. The work that should be held in question, if anything, is that which has no intrinsic value.

What we in the productive, and sometimes creative, class must do is look out for each other. Us. People that make things, across disciplines. As software writers we should consider the products and services we purchase: are they meaningful, does a human share in the work and profit of their production? Is a news publication insightful, does it come alive with an editorial voice or is it claptrap manufactured for easy demographic targets? Do we respect productive labor that we don’t fully understand? All of these lines can draw programming out of its longtime cultural swamp, as we align with our counterparts in other professions and they recognize the humanity of our work.

In some mutually understanding future, it might even become normal to have master software builders in charge of building software, the same as a head chef decides the menu at any restaurant worth visiting.

But please: do not call yourself a software artist. At least, not until The Code Network goes on the air in 2012.

Codercomments

Wonderful. Think. Be proud.

Cheers Stephan

Artists make something entirely new every day, while craftspeople take pride in performing generally the same work from day to day, honing their skills, making little improvements, and experimenting on the side.

As programmer i make something entirely new every day, with some improvements from the day before. If i do generally the same work from day to day, i do it the wrong way.

So, yes, i am an artist, where software is only one way to make art…

I always considered programming to be blend of craftsmanship and art. Too much of art results in unmaintainable code. Too little kills innovation. Anyway it’s a great post. Congratulations.

I am pretty tired of software programmer/developer/engineer/architect/analyst and their various I/II/III levels as labels for those who write and design software

most of us come to programming from different backgrounds but, over time, come to appreciate it as a craft that takes time to develop and fully come to appreciate. Any software program can be hacked together to do the same thing a quality solution timtowtdi but it takes a craftsman’s mindset to appreciate different approaches and variant tradeoffs with some breadth of understanding from experience and a Pirsig-like curiousness about code quality.

I try to approach software authorship as a wood-widdler would look a pile of wood. This type of wood might be cut more elegantly using this tool would equate to this problem could be solved more elegantly using this feature in this language. This group of behavior keeps being repeated, maybe I can make an easier abstraction here. Or even -nosoftware - maybe software is not the right solution for this problem.

Software Craftsmanship

codecraft++

Thanks for the link, Doug. I hadn’t seen that Wikipedia article or much of the existing literature it references. Good to know there are others of a similar mind!

The word I prefer these days is “Artisan,” which I think conveys the blend of art and craftsmanship necessary to make quality software.

See here, too: http://arxta.net/

Corey Haines also has some good things to say about the topic, here: http://programmingtour.blogspot.com/

I like that too. I would especially like to be writing “artisanal software.” :)

I don’t understand this need of some programmers to liken themselves to artists. Why can’t you just be a programmer, and have “programmer” mean something? Artists, true artists, are traditionally temperamental people. Do we want to be known for working on a creation to the point of obsession and starvation?

Programming will not be an “artform” until one writes a program that has no other purpose than to be art. Programs are utilitarian, art is not.

Art is a communication of ideals, emotions, values from the artist to the consumer. Art is when you gaze at a painting of red sploches of paint thickly plastered on a giant canvas and suddenly feel the anger of the artist in full, flaming effect.

The best programming is completely hidden from the user, completely tucked away with no evidence that it is happening. The better programming that is in an application, the less imposing the application is to the user. The user is happiest when they are not reminded that a programmer made the program. That’s what your MS Word analogy means, the bugs in the software remind us that a fallible human created it.

Programming is not art, it will never be art. To say that it will demeans both art and programming. Programming is its own thing, it doesn’t need to be art. Art is something different, it doesn’t need programming in its ranks.

If you have an axe to grind, everything starts to look like a post saying that programming is art.

Great post. When I read ‘The Case for Working With Your Hands’ I failed to link it to my code-craft the way you have. I was being too literal, and lamented the fact that I’ve let my physical hand-craft skills wither. Not that I should be proud of that - but I’m glad to hear your reading of it.

 @matt I’m a fan of Corey Haines as well. though I think he calls himself a journeyman
:-P

@sean I don’t understand what you mean when you imply software written by a programmer has to be seen by a user for the programmer to be happy. I am not talking about ‘html programming’. I am taking about an algorithm that does more with less steps or a cleverly partitioned set of software modules that clearly follow the single responsibility principle. I agree that sometimes no UI is the best UI and some times the best software is less software.

When I talk about craftsmanship I am also talking about having pride in one’s work, not so much the expectation one has when when someone else is viewing their work (programming rockstars).

Art is subjective. Opinions are subjective. Working on a software project will the goal being maintainability and clarity should be objective. There is still beauty in functional form.

Add a comment