Commercial programming is clearly a craft. Unfortunately, the failure of our profession to recognize this has allowed two profound problems to grow. First, programmers almost never work to a plan. All craftsmen exercise their skill within a context well defined by detailed, written descriptions of the desired ultimate form. These plans are typically devised and drawn by an architect, a role rare in the software world. Architectural plans are necessary to ensure that the work of multiple craftsmen dovetails together, and that it meets the buyer's expectations. Most contemporary programmers work only from a list of features and a deadline.
Second, programmers are almost never supervised. Craft is by nature detail-focused and deeply involving. Good craftsmen regularly work in a state of flow, so they must depend on others to make sure their efforts merge with those of other craftsmen. The supervisors aren't there to keep craftsman from dodging work, but to ensure that the big picture is tended to. A well-crafted building, for example, is more than an assemblage of sturdy walls; the walls must connect properly. The craftsmen can do this, but they rely on someone else to coordinate their work.
Excellent food for thought from Alan Cooper. While he is focused on programmers, I think his points are more broadly applicable to a variety of knowledge work settings. He helps identify some of the critical dimensions along which knowledge work as craft differs from industrial work and how those differences have important implications for management. Thanks to Roland for the pointer.