Is programing an art, science, or engineering? Paul Graham thinks
art, and I mostly agree.
Today slashdot had a link to an interesting article
by Paul Graham on how programing is more similar to the arts than engineering.
I think I agree with most of what he is saying. There are a few
items I quibble with. In particular I find the structure
provided by some degree of static typing helpful (Java good,
Pascal not so much). I also find working out complex
program wide aspects, like syncronization, on paper before hand
helpful. This is probably because programing has more in common
with engineering (we are building machines after all) than any of
the other arts.
Your exception to Graham's analysis points to what I think the real relationship is: Programming is more like architecture than painting, in that it lives at the intersection of art and practicality. Programming is like painting in the same ways that architecture is like painting, and programming is like physics in the same way that architecture is like physics.
I'm convinced of his credentials as a painter and programmer but I don't think he has much insight into engineering. A concise definition of engineering is "design under constraint" and by this definition some of the most creative people in our history can be described as engineers.
For example, J. S. Bach's approach to musical composition can be thought of as engineering; he placed himself under a tremendous number of constraints in terms of style and structure. All these constraints might have crippled a lesser composer's creativity but Bach's musical genius allowed him to surpass himself time and time again.
Part of the problem may be that great engineers, like great programmers and great painters are few and far between.
I love dodgy analogies. This one follows hard on the heels of 'Programming is like Gardening' elsewhere in Artima. Provided you don't take them seriously they can provide an interesting oblique view of their target - in this case programming. I think the Painting and Programming analogy is very good.
I've just seen an article comparing different programming languages and two of its various conclusions were that the development process is affected more by the qualities of the programmers than by the qualities of the languages they use. This immediately put the following 'dodgy' analogy in my mind:
Programming is like Sport - You can't do it properly unless you want to. - Some people are naturally better at it than others. - More people do it for enjoyment than actually produce results. - The only way to get better (and stay good) is to keep practising at it. - Regardless of the level of your ability, a coach or mentor can provide invaluble insights into your strengths and weaknesses. - Having a coach (or manager) crack the whip can keep you focussed. - Playing in a good team can improve your own performance. - Playing against a good team can improve your own performance. - Better equipment certainly helps but is no substitute for ability. - Skill and experience are worthy opponents to youth and energy. - Match or race days are like deadlines. - There are plenty of people on the sidelines who are more than happy to tell you how you could have done it better (whether you won or lost).
I could go on but I think that a pretty good comparison to start with.