Programing as an art
... title such as "engineer" to reflect this status. Language influences our perceptions and our values, so using the wrong job title can derail an entire profession. Programmers' chief responsibility is creating a product, not solving technical problems. Having chosen the wrong job description, our profession finds itself suffering from a profound misunderstanding of its role. The result is failed software products, executives who are terrified of programmers, costly tech support and training, and a fruitless quest for a cure in evermore obscure engineering processes. Although programmers solve tough technical problems all the time, software isn't mass-produced, and it's definitely not "manufactured" by interchangeable, marginally trained assembly-line workers. But software's unique nature was unforeseen by any industrial age thinkers. Software can be copied and distributed without limit, so it shares the egalitarian access of industrialization, but—unlike washing machines or cloth—it can be custom-morphed and configured for each installation. This "mass-customization" is a new, purely information-age concept that was neither technically nor economically feasible in the industrial age. It resurrects the notion of craft in the preindustrial sense of requiring experts' talent, training, and skill, focused solely on a practical outcome. Engineers primarily devise manufacturing solutions and solve technical problems. They're rarely responsible for the actual construction of things. For example, a structural engineer devises solutions that allow a building to stand firm, but he or she lives in a world of paper and mathematical models and won't lift a finger to weld steel or pour concrete. It behooves the engineer to try numerous solutions, exploring dusty corners of the problem to find opportunities for improvement. It behooves the craftsman to stay on well-known ground and to avoid costly experimentation. The engineer works on paper prior to construction, and the craftsman builds the end product. The engineer throws away paper; the craftsman throws away time and money. Both are prized for devising creative solutions to difficult technical problems, but craftsmen are most highly prized for constructing sound artifacts quickly, efficiently, and expertly, with a minimum of waste and a maximum of predictability. I asked a friend who supervises building construction how he defines "craft." He said it's characterized by a proclivity to think things through, to understand the problem fully, to have the necessary experience in the job, to get results with top-notch quality, and to meet the customer's expectations. The last point is important, because it differentiates art from craft. ADVERTISEMENT A programmer friend, describing how he is a craftsman, asserted that he works the way a sculptor or painter does. He was incorrect, but understandably so, because it's easy to confuse craft with artistry. He was referring to the demanding techniques of construction, and the pride and personal satisfaction he gets from his efforts. But art rarely has a practical purpose the way that craft and virtually all software does. It's an artist's privilege to change the context, form, and meaning of his or her creation, but the external requirements placed on software can't be changed simply because the programmer wishes it so, and there's little room for the artist's whims or wanderings in the programmer's cubicle. Art can include craft, but the reverse isn't true. Comparing a programmer's work to an artist's is a compliment, not a literal analogy. An essential ingredient in professional craftsmanship is knowing how to work within the box—a box that's always defined precisely by detailed drawings and plans that an architect created and engineers vetted. My late father was an electrician who knew his trade inside and out. He was bright, though not formally educated. He would confound his supervisors occasionally when first arriving at a new construction site, because instead of diving into the wiring, he would look, and measure, and mostly stand and think. He was calculating mentally how to accomplish the wiring with the greatest efficiency of effort and material. One of his bosses said, "When Bob Cooper was just standing there thinking, he was being the most productive." He was clever, creative, and proud, but he always respected that a great result did not, and could not, include any redefinition of the problem. He knew that good craftsmanship meant fabricating the best component for the whole solution. He wasn't free to redefine the problem, but his efforts had to be a coherent part of a well-planned whole, a design. Above all, my father was a craftsman. Commercial programming is clearly a craft. Unfortunately, the failure o...