Skip to main content

The Craft Of Programming

This essay, sparked by a conversation about how to hire good developers, is nearly ten years old, but a few stories I've heard recently brought it to mind again, so I thought it would be worth reprinting. Some of it is dated (I don't write much Perl anymore) but the principal is still sound. (The team I hired using these principles did some really wonderful work, I might add, although they were also a bear to manage on occasion. But I wouldn't have traded them for a hundred by-the-book uncreative and uninteresting programmers.)

The software industry is crying out for more craftspeople; people who are skilled at building things and doing it for the love of it. Modern software isn't awful because software is inherently awful; it's awful because it's being built by people who don't love it. The experience of using well-designed software can be as enjoyable as sitting in a well-made chair or using a perfectly balanced knife in the kitchen. It may not be something you stand in a museum and admire, but a well-designed tool is a pleasure to use. Too much software is poorly designed and a chore to use.

Beautiful things are built by people who are passionate about them. Whoever heard of a shipbuilder who didn't sail? Or a luthier who didn't play guitar? It is theoretically possible for a musician to write a functional specification for a new guitar -- page after page detailing neck measurements and fret thickness, exact plans for a guitar that could then be built by some salaried mechanic who has a degree in woodworking, but doesn't play and rarely listens to music. But how good would that guitar be?

Imagine that musician bringing a guitar to a repair shop and handing it over the counter, saying, "It feels mushy and won't stay in tune," and then being asked to fill out a detailed bug report with an exact description of the problem? "Please don't use abstract terms like 'mushy' -- you must be specific. And is this reproducible?" The very idea is insane. Musicians bring their instruments to people who love music, who play the instrument themselves, who have an intuitive feel for good work. Yet, users of software are put in this position continually.

Beautiful software exists. Take the programming language Perl -- a shining example of how a software developer can express his ideals and worldview through his work. (The fact that so many people hate the language is in itself testimony to its character.) Larry Wall's language is a joy to use. Infused with his personality, it inspires the same feeling as a good book or song -- you want to meet the author; you know you'd get along wonderfully. You share in his belief that there should be More Than One Way To Do It, that laziness and impatience (the desire to avoid needless drudgework) are virtues, and that pride goeth before a fall. As a result, the language is a joy to use -- simple where it should be simple, powerful when you're ready to use it.

Is it any coincidence that some of the best software out there consists of the tools that programmers themselves use? Text editors, debuggers, integrated development environments -- many of them show care and thoughtfulness that are sorely missing from, say, certain popular office suites. The designers of these tools built what they would themselves like to use; they built something that would help them fulfill their passion for programming. They built things they wanted to own and use and love, the same way a luthier does.

So if you want great software, then hire passionate programmers. Programmers who are excited about what you do, not about how you're going to do it, who are wedded to your product and your vision, not their favorite programming language or operating system. Get them talking about your industry, about the site you're hoping to build. If they get excited about it and start throwing ideas back at you, hire them. They'll make your project sing.

Recommended reading:

Donald Norman, The Invisible Computer
MIT Press, 1998
"Good tools are pleasurable tools."

Norman's disgust with the design (or lack thereof) of the personal computer drips off every page, and drives a passionate discussion about how technology can be elegant and enjoyable.

Brian Eno, A Year With Swollen Appendices
Faber and Faber, 1996
"When people program -- i.e. decide on which sent of possible options they should make available -- they express a philosophy about what operations are important in the world. If the philosophy they express is on anything like the level of breathtaking stupidity that the games they play and the Internet conversations they have are, then we are completely sunk."

In this somewhat rambling year's worth of diary entries, Eno returns frequently to his frustration with many musical tools and software and the fact that he doesn't have the programming skill to write the tools he needs. Finally finding one he likes, he exclaims "It was designed by musicians (who know what kinds of things might be relevant) for musicians (who are extremely impatient with manuals)." Interestingly enough, Norman cites electronic musical equipment as some the best existing examples of well-designed computer software and hardware.

Hermann Helmholtz, On the Sensations of Tone As a Physiological Basis for the Theory of Music
Dover, 1954 (Reprint and translation of original German edition, 1877). Also available as free e-book
"The horizons of physics, philosophy, and art have of late been too widely separated..."

A fascinating and beautiful 19th-century tome about why we hear music the way we do. Helmholtz was a polymath: a musician, physicist and anatomist, he was equally comfortable discussing the use of modes in Handel's Messiah, the integrals expressing the vibration of pianoforte strings, and the operations of the cochlea in the inner ear. Helmholtz was a geek with passion!

Larry Wall, Perl, The First Postmodern Computer Language
Speech at Linux World, March, 1999

"Postmodernism [in programming] puts the focus back onto the carpenter. You'll note that carpenters are allowed to choose whether or not to use hammers. They can use saws and tape measures if they choose, too. They have some amount of free will in the matter. They're allowed to be creative...

"One of the characteristics of a postmodern computer language is that it puts the focus not so much onto the problem to be solved, but rather onto the person trying to solve the problem....Perl is humble. It doesn't try to tell the programmer how to program. It lets the programmer decide what rules today, and what sucks."

Larry Wall created the Perl programming language. He romps through deconstructionism, the 60s, and duct tape, examining the "deeper reasons for writing software," which look an awful lot like the deeper reasons for playing music. Another geek with passion.

David Gelernter, Machine Beauty
Basic Books, 1998

"We tend to think of science as discovery, art as invention, but that is not the whole truth, as classical Greeks understood; good scientists and good artists are piano tuners listening attentively, as they finagle, for the sound of exact rightness."

Beauty, Gelernter says, is the driving force behind good science and technology. He rejects simpleminded classifications: "Programmers are machine designers." The best algorithms are beautiful ones, and Alan Turing was an artist.