{ End Bracket }: Is Programming an Art? — MSDN Magazine, October 2006
“The reason we say programming remains an art, not a science or an engineering discipline, is because we haven’t as yet been able to break it down into component steps and mechanize it. Once we succeed in that, a new scale of possibility emerges: programs to write programs from people-oriented design languages (PODL), programs to prove program correctness, and to analyze and support semantic query. Until then, however, programming remains an art, or so conventional wisdom has it.”
Wait, what?
“The reason we say programming remains an art, not a science or an engineering discipline, is because we haven’t as yet been able to break it down into component steps and mechanize it.”
With all due respect, Mr. Lippman (and I most certainly do have a lot of respect for you and your work), who’s we? And since when does breaking something down into component steps and mechanizing it turn this same something from art into science? In this regard it almost seems as if you are suggesting that science is defined as the final state instead of a series of experimental steps that help bring about this same mentioned state.
Then again, using the term “final state” isn’t really something that can be applied to this analogy either, as when was the last time anything anybody has ever created through the process of science, or maybe better said, the process of trial and error, stayed in this same “final” form indefinitely? Of course, through the *art* (or is it a science?) of preservation, there are those who can do a pretty good job of keeping the original state of something as close to its original state as possible. But even then its no where near perfect, and in many ways the very act of preservation goes against the very essence of what life is all about,
Change. Transition. Transformation. Progression.
Just to be certain we are both on the same page, lets take a look at the definition of “science”,
sci·ence (sī'əns) pronunciation
n.
1.
1. The observation, identification, description, experimental investigation, and theoretical explanation of phenomena.
2. Such activities restricted to a class of natural phenomena.
3. Such activities applied to an object of inquiry or study.
2. Methodological activity, discipline, or study: I've got packing a suitcase down to a science.
3. An activity that appears to require study and method: the science of purchasing.
4. Knowledge, especially that gained through experience.
5. Science Christian Science.
“The reason we say programming remains an art, not a science or an engineering discipline, is because we haven’t as yet been able to break it down into component steps and mechanize it.”
When I read the above definition, and then read this statement, I am at a loss as to how this conclusion even makes any sense. Science is not the component steps or the mechanization of these steps (I believe the term ‘macro’ or ‘algorithm’ would provide better defintion of these items) but the process of making a determination as to what these component steps are and how to go about mechanizing them, the macro or algorithm representing a particular snapshot, or static state of these macros and algorithms, though most definitely in no way do they represent their final state, as if life is not represented by the terms “Change. Transition. Transformation. Progression.” (and I believe that it is, though is more than *just* these, quite obviously), then it most certainly can be represented by a series of revisions, each building upon the last (though sometimes this means taking several steps back before being able to move several++ (pun intended ;) steps forward), which ultimately leads us back to the same mentioned terms “Change. Transition. Transformation. Progression.”
Setting this aside, lets look at the definition of “art”,
art (ärt) pronunciation
n.
1. Human effort to imitate, supplement, alter, or counteract the work of nature.
2.
1. The conscious production or arrangement of sounds, colors, forms, movements, or other elements in a manner that affects the sense of beauty, specifically the production of the beautiful in a graphic or plastic medium.
2. The study of these activities.
3. The product of these activities; human works of beauty considered as a group.
3. High quality of conception or execution, as found in works of beauty; aesthetic value.
4. A field or category of art, such as music, ballet, or literature.
5. A nonscientific branch of learning; one of the liberal arts.
6.
1. A system of principles and methods employed in the performance of a set of activities: the art of building.
2. A trade or craft that applies such a system of principles and methods: the art of the lexicographer.
7.
1. Skill that is attained by study, practice, or observation: the art of the baker; the blacksmith's art.
2. Skill arising from the exercise of intuitive faculties: "Self-criticism is an art not many are qualified to practice" (Joyce Carol Oates).
8.
1. arts Artful devices, stratagems, and tricks.
2. Artful contrivance; cunning.
9. Printing. Illustrative material.
“The reason we say programming remains an art, not a science or an engineering discipline, is because we haven’t as yet been able to break it down into component steps and mechanize it.”
So if this were true, then could we state that art is the represented by that in which has not been broken down into mechanized, component steps?
I don’t think it does, but lets step back a bit from all of this and try to understand why there could be such a difference of opinion as well as definition in regards to the terms “art” and “science.”
Is art the result or the process?
It’s both.
Is science the result or the process?
Again, it’s both.
It seems that people forget that writing code is a form of ‘Art’. While Art is defined differently by each individual (which is the point, btw…), there is one thing we Artists all have in common.
We like to keep changing things. We like to adapt things. We like to refine things. We like to…
I’m sure you get the point.
Now apply this to software platforms. Which platform is best suited to deal with the constantly changing climate that is the Art and Science of Software Development?
When Donald Knuth began to think about, write about, develop, and teach software development, he obviously had a choice of what to call the series of titles he would begin to publish as a result of his work.
Just in case**, the series title he chose?
> The Art of Computer Programming <
Now maybe I'm wrong, but I don't believe it was by accident, or some strange coincidence that he chose the series title that he did. So why did he choose the title?
Can't say I know for sure, but I'll give it a shot anyway...
>> The Beginning of The End, Is the End of The Beginning >> In The Beginning, Art Was Change >> If Change There Was, There Art Began >> Where Art Began, So Too Was The Artist >> Else Not Began Art, Was There Change? Let Us Compute >> Computer, Let Programs Change Where Art Begins >> Begins Art Where Change, Programs Let Computers Change Where Art Begins >> Begins Art, Where Change, Computers Let Artists Change Where Art Begins >> The Changing Art >> The Changing Artist >> The Artist is Changing The Art >> The Art of Computer Programming << Programming is Art << Art is Created by Artists. << By Artists Changing Creations, Art Form Appears << Appearance of Form Creates Change in Art << Art is The Changing Form of Appearance << Where There Is Change in Appearance, There is Art << Where There is Art, There Is Change << Change There Is, So Artists There Be << Be There Artists, There Is Change, Where There's Change There is Art, Where Theres Art, It Begins << The End of The Beginning is The Beginning of the End <<
The above is from a comment I made a while back to my own post in regards to the differences between the Java language and platform and the .NET languages and platform.
Of course, since that time a ton of things have happened which hold significant potential in making the analysis in regards to the differences between Java and .NET a moot point. But that doesn’t change the underlying message, which is this,
Art and Science are defined in many ways, some of which can be seen as one in the same, others of which most certainly can not be seen as one in the same. But without a doubt, there is one common trait between both Art and Science that is most definitely the same (or is it most definitely different? ;),
The ongoing process and result of change.
With this in mind, what makes programming both art and science is the simple fact that art and science are both the process of creation, as well as the resulting creation in and of itself.
Now, one could argue that there’s nothing about a word processor or a spreadsheet that even closely resembles art. Then again, one could counter argue that it’s the process of creating this word processor or spreadsheet that represents the art, not (necessarily) the resulting creation of this process.
Of course, there is no single definition for art, an ever changing list of terms and definitions, each representing a single snapshot in time and space. In this regard, art can not truly be defined, only appreciated, and from this viewpoint a word processor, spreadsheet, or any other software application for that matter can easily be seen as a representation of art, dependent, of course, on ones own perspective.
Ultimately, that last statement; “ones own perspective” is the underlying point in all of this,
“Is Programming an Art?”
Yes!
Or is it no?
Art is change, and change is a matter of perspective — As individuals we each perceive things just a little bit different than that in which other perceive them. It’s what makes life such and interesting and wonderful process (or is it result? I can never get those two right!)
So again,
“Is Programming an Art?”
“Yes!” and “No!”, all at the same time.
Thanks for reading. :)


Dear MD Peterson,
Your lengthy comment boils down to your (almost) last sentence "Yes and No, all the same time" ... why the lengthy panegirik before it?
Mr Lipmann was not using the term "science" in its primary menaing but rather as an overarching term. I think ...
Regards: Dushan
Programing is art to the extent that it's creations have artistic merit, or aethetic value. Are there no programs with artistic merit?
Programing is a science to the extent that it is a discipline subjec to consistent logical analysis. Is it possible to analyse programs and programming problems logicaly?
Programing is engineering to the extent that we design and produce complex products according to a pre-concieved plan. Is it possible to do so?
So programing is an art, a science and an engineering discipline. In fact, this is all so because the act of programming is an act of expression just as much as writing in any spoken or written language. Written languages are capable of atristic expression. They are susceptible to scientific analysis through linguistics and they can be engineered in the sense that new languages can be constructed.
Which of these we choose to emphasize simple depends on the context from which we look at the discipline.
Quick thought - "art" ostensibly is the realm of muses and talents, whereas "science" is the realm of smarts and proofs. If you accept these facetious assumptions, then the question "Is Programming an Art?" can reduce to "Are you an Egghead or a Picasso?"
I took a degree in Computer *Science*, which taught me how to develop solutions from scratch, or based upon a rudimentary library, how to analyze algorithmic complexity etc, but on a day-to-day basis, the majority of my time now is employed as an *artisan*, building things out of pieces I and other people have previously built. This is different from an *assembler*, mind you, and requires a certain amount of artistry and an understanding of the underlying science or engineering, and this process, when I take the time to record or opensource any useful techniques etc I have developed, contributes back to the science.
I've recently been working with XSL 2.0, and am really impressed that a single transform (process) can create multiple documents (product)... the result of my daily "artistry" is at least two products, one economic (the product we sell) and one scientific (blogging about the process later, opensourcing). I think it is important to note that these two products are published through different (transport) media (if I profitted from blogging through AdSense, the media would serve purposes both economic and scientific).
It's like in A Hard Days Night when a reporter asks Ringo if he's a Mod or a Rocker, and he replies "I'm a Mocker..."
Thanks for writing. ;)
In Donald Knuth's 1974 Turing Award Lecture, "Computer Programming as an Art," he explains the choice for the title and affirms that he means it, along the lines of definitions (6-7) that you cite, as well as making the observation "that computer programming is by now *both* a science and an art, and that the two aspects nicely complement each other."
Here's his summary: "We have seen that computer programming is an art, because it applies accumulated knowledge to the world, because it requires skill and ingenuity, and especially because it produces objects of beauty. A programmer who subconsciously views himself as an artist wil enjoy what he does and will do it better. Therefore we can be glad that people who lecture at computer conferences speak about the *state* *of* *the* *Art*." (All emphasis his.)
I think the writer of the MSDN article confuses science with craft or technique, exhibiting a misunderstanding of science.
What does it matter?
I think you're being too prescriptive. The original comment included "engineering" as one of the alternatives to "art". Also note that none of the possibilities in the original quote used Capital letters as if to signify something, as you do with the word "Art" or "Science".
Programming is not yet engineering because we have not yet been able to provide quantifiable repeatable techniques with which to create provable and testable programs.
Programming is still the work of "artisans", people effectively trained in a number of techniques, more in the nature of the old-fashioned apprentice and guild from the renaissance than modern engineering.
This is not necessarily a criticism. Great works of joinery, furniture and other works have been created by artisans and "master craftsmen". But they can't produce Ikea's level of repeatability.
The only difference between art and feces flung at the side of a barn is the skill with which one flingeth. So it is with programming. I'll split the difference and call it a craft. We should form a guild.
I can't agree with you. I won't agree because there is about as much difference between programming an Art as there is between a data structure and a beat. Sure, both of these endeavours can be the results of a unique creative process, but they don't run in the same way on the same platform. If programming was an art, I would have expected the laws of computation to dance.
Perhaps I have a limited view of what Art is, but I really think it requires a human on the receiving end to enjoy (or despise) it. Good programming is so caught up on creating beauty and elegance in the way it manages code that much of the hard work is burried underneath the surface, where it's rarely noticed. Why else would user interfaces be so frequently retouched by «artists» so that regular people can finally relate to the software they use?
Why even revendicate programming as an artform? Is it a title of some kind, to be attained to justify some unrecognized aspects of our work? Or is it a call to approach our craft in a more liberal way than we do in schools and at work? And what is it with Art anyways?
In a way, I agree, programming is a bit like art, but I'd rather call it what it is (too bad that «informatique» doesn't translate to English - does it?) and let become its own thing. Just thinking of all the crap we tried to pass as Art during the last century stirs up my stomach un undefinite ways and gets me pedantic enough to the point of writing out loud that programming isn't Art, and that they just happen to be two activities who share the same superclass.
I thought ISA statements were abandoned on this planet long ago. Read Robert Anton Wilson. He even wrote a book without using this construct.
@Dushan,
>> ... why the lengthy panegirik before it?
This is your first time here, isn't it? Well, you'll either get used to it or you won't. I type as fast as I talk, and those in whom have heard me talk understand there are few who can hold a candle to this blabber-mouth of mine, so in a nutshell -- there ya have it. :)
>> Mr Lipmann was not using the term "science" in its primary menaing but rather as an overarching term.
You sure about that?
>> I think ...
Apparently not.
While I agree (update: ... that he was using the overarching meaning as it relates to his own viewpoint), it would be a stretch, in my opinion, to suggest that he was referring to the overarching term in the sense of the overarching term encompassing both art and science. I'm not sure if you read his entire post, but if not, take a moment and read through the whole thing -- there is no room for artistic interpretation here -- this is a flat-out statement that says,
Computer Science is *NOT* ART!
If Mr. Lippman feels that his definition is more liberal than this... then let Mr. Lippman say so himself (though I have my doubts that he will.)
@Simon,
AMEN BROTHER!!! :D
@piers,
>> It's like in A Hard Days Night when a reporter asks Ringo if he's a Mod or a Rocker, and he replies "I'm a Mocker..."
@stochastio,
It seems that buried somewhere in there are several points in which suggest that programming can be both an art and a science. I tend to agree with your point that there is a TON of crap out there that gets labeled as art, and as such holds potential to develop a "hands off -- this is art, and therefore it is good because I say it is good."
However, from the reverse side, this -- once again -- comes back to the interpreter -- the person in whom sees or hears or smells or touches or tastes something and whatever that something is provides meaning to them that goes beyond the science of its creation. Art is a very personal thing. That said, so is science. It all has to do with your particular perspective, which can change at any moment without any warning what-so-ever.
It's just one of those things that doesn't really have an explanation beyond that of the perception of the person in whom is making the interpretation as to what something is and what it is not via their human sensory system.
None-the-less, you have some very valid and fair points, and can easily understand why you feel the way you do. So with that...
Peace :)
>> If Mr. Lippman feels that his definition is more liberal than this... then let Mr. Lippman say so himself (though I have my doubts that he will.)
@orcmid,
Thanks for this! Obviously I completely agree with both you and Donald Knuth, though I hadn't read and/or seen this before now.
Thanks for bringing this to the surface!
@Will,
>> Why does it matter? > A programmer who subconsciously views himself as an artist will enjoy what he does and will do it better.
@jakob,
via http://en.wikipedia.org/wiki/Robert_Anton_Wilson
>> In a 2003 interview with High Times magazine, RAW described himself as a "Model Agnostic" which he says "consists of never regarding any model or map of the universe with total 100% belief or total 100% denial. Following Korzybski, I put things in probabilities, not absolutes... My only originality lies in applying this zetetic attitude outside the hardest of the hard sciences, physics, to softer sciences and then to non-sciences like politics, ideology, jury verdicts and, of course, conspiracy theory."[2] More simply, he claims "not to believe anything," since "belief is the death of thought."[citation needed] He has described his approach as "Maybe Logic." Wilson wrote articles for seminal cyberpunk magazine Mondo 2000.[3]
>> I'll split the difference and call it a craft.
Okay, deal. ;)
>> We should form a guild.
Will there be meetings? ;)
via one of my favorite actors/movies/movie lines of all time, http://en.wikipedia.org/wiki/Grosse_Pointe_Blank
"Will there be meetings?" - Blank
"Of course!" - Grosser
"No meetings." - Blank
Thanks for the laugh! :D
@Ron,
>> This is not necessarily a criticism. Great works of joinery, furniture and other works have been created by artisans and "master craftsmen". But they can't produce Ikea's level of repeatability.
I don't want to see progamming turn into some kind of beauty contest.
Hmm, code beauty contest. Sounds like Web 2.0 gold. :)
I think the "Turing test" of art or science is: Will two programmers ever come up with the same solution to any given problem? Then replace "two" with "the majority of N number of"...
@Will,
>> I don't want to see progamming turn into some kind of beauty contest.
@Erik,
>> I think the "Turing test" of art or science is: Will two programmers ever come up with the same solution to any given problem? Then replace "two" with "the majority of N number of"...
When I'm writing a piece of music, I care about how it will be percieved aesthetically, not about reducing the distance traveled by my bandmates' fingers during its performance or about staying below my synthesizer's maximum polyphony.
When I'm writing a compiler backend, I'm focused entirely on correctness and efficiency.
A good painting isn't the result of counting brush strokes, and good code isn't the result of slick variable naming. The question of whether programming is art offends me on some level both as a programmer and an artist. Maybe I'm just sensitive.
Thinking in terms of artistically solving programming problems is the same thing as thinking in terms of creatively solving them. Should we not be creatively solving problems?
"What would Van Gogh do?" is certainly not the first thing that comes to mind when I'm confronted with a difficult problem. Can you give an example of a computational problem solved artistically?
@Will,
> The question of whether programming is art offends me on some level both as a programmer and an artist.
Wow.
> Maybe I'm just sensitive.
I would run with that and see where it takes you.
> "What would Van Gogh do?" is certainly not the first thing that comes to mind when I'm confronted with a difficult problem.
Nor would "What would Donald Knuth do?" when sketching or painting. That doesn't mean that either of these world renowned artists are any less significant, and instead focused on a different type of art. Is painting the only type of art that exists?
>> Can you give an example of a computational problem solved artistically?
Sure.
Take a look at http://www-cs-faculty.stanford.edu/~knuth/taocp.html
Take a look at http://picasa.google.com/
Take a look at http://fxsl.sourceforge.net/
Take a look at http://saxon.sourceforge.net/
Take a look at http://www.jenitennison.com/
Take a look at http://www.jenitennison.com/xslt/grouping/muenchian.html
Take a look at http://kamaelia.sourceforge.net/
Take a look at http://code.google.com/p/aspectxml
Let me know when you're done and I will give you a brand new list to study. Be prepared, however, as I have a list of software applications, coding techniques, algorithms, solutions, and various other items related to programming that both myself and *MANY* others consider some of the greatest art work that has ever been created.
Of course this brings us back to perspective which is the point you seem to be having the hardest time grasping. If you don't feel that programming is art... Fine by me. But because you find it offensive that there are those who feel that programming is art doesn't mean I or anybody else has to change our viewpoint.
Let me know when your ready for your next batch.
@Will,
I take ~three walks of ~1.5 miles each day -- I find that it helps me in all aspects of my life to step away from my computer, get outside, enjoy the fresh air and the beautiful scenery here in downtown Salt Lake City where I live. I just came back from one of these mentioned walks -- I take one at the beginning, middle, and end of each day, and even sometimes in between those times -- and during this 20 or so minute period I was thinking a lot about your comments.
In particular, what grabbed my attention was your point regarding being a musician, and it occurred to me that to you, music is your form of expression. I may be wrong, but it sounds to me that what gets you out of bed each morning, so to speak, is not the thought of going to the day job to write code and instead the thought of creating music. If I'm correct, then it seems fair to suggest that what makes "Will" -- Will -- is that of musical expression. It's what puts a smile on your face; It's what brings you, and potentially others, into your own personal groove; your own personal formations of artistic impressions tunneled through the peaks and troughs of the sound waves you create.
You know what gets me out of bed in the morning?
Writing code. It's how -- or at least one of the ways -- I express myself. My thoughts and emotions and feelings are tunneled through the formations of algorithmic expressions. Its what puts a smile on my face in the same way it seems music puts a smile on yours.
As mentioned by myself and several others, art is *VERY* much a personal thing, very difficult to define, though I do believe can be sensed through the following expression,
Art is what helps bring a smile to your face. It's what helps get you out of bed each morning to do what you do such that you can be what you be -- whatever, and whomever that might be.
Everyones an artist, Will. Painters, actors, mothers, fathers, musicians, academics, mathematicians, graphic artists, friends, family, carpenters, janitors, teachers, students -- and while this list is no where near complete -- yes, even computer programmers can be artists too. It's all a matter of what helps bring a smile to your face.
It's all a matter of perspective.
Thanks for sharing your thoughts and contributing to the overall conversation, Will. This type of stuff -- communication, whether that be through agreement and/or debate and/or anywhere in between -- is how we, as people, can understand one another.
This stuff -- communication through self expression -- is important!
did we ever get a definite yes/no answer on this? my client is waiting on a solid answer.
Interesting comments.. :D