You can play this game with anything. Programming is like engineering. It's like math. And yet it's not exactly engineering, or math, or a craft or a trade or anything. People find one attribute where the metaphor fails and go "Aha! Programming is not X!" Let's step away from the "find the perfect metaphor" game for a second and ask, which word works in daily discourse? Like you, I'd agree that "craft" works pretty well. It's not perfect, but I'd argue that if you want the perfect word, just use "programming."
Additionally, I find the author's argument that "with a craft, the product has an intrinsic beauty in its own right," rather uncompelling. Aside from the fact in aesthetics, the notion of "intrinsic beauty" is suspect, software can certainly have aesthetic qualities. Their audience (other programmers) may be small, and aesthetics may sometimes[1] be hidden from customers, but that doesn't mean code can't be beautiful.
[1] Sometimes, because poorly crafted software tends to have bugs or other problems that annoy customers or otherwise visibly manifest themselves.
Just like it takes a little training to appreciate the intricacies involved in the construction of a piece of literature, classical music, painting, or other work, it takes training to appreciate beautiful software.
Code is just a much newer canvas for ideas, so it's not as mature.
http://viewsourcecode.org/why/redhanded/images/hpricot-aby.p...
http://viewsourcecode.org/why/redhanded/images/a-personal-ex...
http://viewsourcecode.org/why/redhanded/images/aside-from-th...
http://viewsourcecode.org/why/redhanded/images/gem-mirror-on...
/!\ /!\ Epilepsy warning: /!\ /!\ http://viewsourcecode.org/why/redhanded/images/irb-lex.gif
Ditto, to a lesser extent: http://viewsourcecode.org/why/hackety.org/images/goa-trance-...
And then, of course, Hackety.org:
Hackety.org is for artful computer hacking. Mind expanding code.
Hobbyists & amateurs welcome. Business trends and language wars?
None for us, thankyou!
[More](http://viewsourcecode.org/why/hackety.org/about/)
http://viewsourcecode.org/why/hackety.org/Craft is about applying creativity and skill and produce some product. Art is about expression, it doesn't have to solve a problem, and can come to life using any medium, software included.
So we could said while all software is craft, some software is art.
A better metaphor is a block of Legos, but where none of the pieces fit together well and 2/3 of them are of such poor quality as to make them almost worthless and, worse yet, you can't choose not to use them because the people setting requirements don't know or care about block quality and "just want it to work".
I'm experienced both in software and creative writing. I've read (and written) some awful short stories and poems. Bad writing is embarrassing. Bad software is a much higher dimension of evil. Bad code kills businesses.
- It is labor-intensive
- It is creativity taxing
- It produces better results the more skilled the craftsman is
- It can only be learned by practicing
That extends to all professions that can't be automated and benefit from highly-skilled labor. They are all crafts.
The author is just confusing craft and art.