Programming is art. Let me define art briefly (taken from my art
writeup): Art is a method of communication which unifies surface details and form while taking both the intended meaning and aesthetics into account. This requires significant amounts of problem solving. The artist is constantly asking, "How can I best express this idea without ruining the proportions of the work as a whole."
So how does this apply to programming?Programming is an attempt to communicate with the computer. The programmer is trying to get something across to the machine.The programmer is required to do this while staying within certain guidelines (including speed and efficiency requirements, formal requirements like a class structure, and so on). See my node on creativity for more about problem solving and art.Because of all this, a programmer cannot simply plug values into a formula and say, "My work is done." Every problem (a program that must be written) requires a different approach.
West Country Guy: You're correct that engineers solve problems creatively; however, they aren't trying to communicate. This is what differentiates creativity and art. Creativity is one of the components of art; but creativity is not art itself.
This is something I forgot to make clear, though.
You definitely have a point about technical drawings being communication. Is this a separate discipline from engineering itself, however? I'm not sure about whether or not the end result (a bridge, for example) is a form of communication. Perhaps if alphabetical symbols were written into the design (although this might be getting into some special case).