The Craft of Programming
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?
Wouldn't it be theoretically possible for Richard Thompson 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 guitar construction, but doesn't play and rarely listens to music.
Imagine Robert Cray bringing one of his guitars to a repair shop and handing it over the counter. "It plays sort of sluggish," he might say. Would he expect to be asked to fill out a detailed bug report with an exact description of the problem? "Please don't use abstract terms like 'sluggish' -- 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.
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. 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 much of the best software is used by programmers? 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.
So do you want great software? Hire passionate programmers. Hire programmers who are excited about what you do, not about how you're going to do it. Get them talking about your industry, about the site you're hoping to build. If they get excited about it, 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) - "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.