Is Programming Art?
Don’t look now, but I’m pretty sure this makes three weeks in a row of doing at least 1 reader question per week. Today, I’m going to tackle a question I received: is programming art? Here is the actual text of the question. It’s a well-written consideration that cites two parallels: painting and writing.
This article asks if computer [scientists] apply scientific methods, but perhaps we should reconsider the premise, is computer science even a science at all? I contend that a software engineer has more in common with an artist than a physicist. If a painter applied scientific principals and determined that the most pleasing color is purple and the most pleasing subject matter is a tulip, then all artists would paint nothing but purple tulips, which would not be pleasing at all.
Lets compare the developer to another type of artist, the writer. Whether you’re writing the great American novel or assembly instructions for a book shelf, or anything in between, you must consider questions like what tone of voice should I use, how formal should it be, how long should each chapter be, etc. There is never a single, scientific answer to those questions any more that there is to questions like how long should a method be, how descriptive does a local variable name need to be, etc.
To answer these questions, any writer or developer must consider the target audience. The great American novel will be written in a much different tone than a book to teach children how to read. The audience for your code is not the user (that’s the audience for the UI). The audience is the CPU, but much more so, its the next developer who needs to edit your code, or even a future you.
Bear in mind that this was written against the backdrop of this post that I wrote back in the fall, in which I answered a reader question about whether what programmers do is scientific (as in the “computer science” that we learn). Thus the sentiment here seems to be, “I think maybe what we do is better compared to art than experimental science.”
What Is Art?
But before going further, I’d like to level set a bit with the actual definition of art. If I go the classic, find a dictionary definition route, I get an adorably Lieutenant Data-like answer.
1. the quality, production, expression, or realm, according to aesthetic principles, of what is beautiful, appealing, or of more than ordinary significance.
2. the class of objects subject to aesthetic criteria; works of art collectively, as paintings, sculptures, or drawings: a museum of art;
an art collection.
If I go look for any number of essays on the topic, two main themes emerge. The first is some rallying around the “it’s hard to define, but maybe it’s like the obscenity case in that I know it when I see it.” I think this line of reasoning is intended as inoculation against the philistine in the art museum saying, “throwing paint at a canvas ain’t art — I coulda done that!” That one isn’t particularly interesting for our purposes here, which brings me to the second theme: aesthetics.
From this working definition, consider the examples in the reader question. The first item of interest is the painter arriving at the ‘optimal’ painting of purple tulips. That might be the optimum, at least until the audience grew bored and wanted something different. Due to saturation, the purple tulips would lose aesthetic appeal.
Next up are the various flavors of writing: book shelf assembly, great American novel, children’s phonics book. Using the aesthetic heuristic for art, do these quality? The answer is, “no, yes, no.” An instruction manual isn’t intended to appeal aesthetically, though a bored writer may try to inject some panache into its writing. The great American novel is intended purely for aesthetic purposes — it does nothing but entertain. The children’s book? That’s intended to be instructional. Aesthetic appeal here would be intended to hold the children’s attention — helping with its true functional purpose. (As an aside, the aesthetic heuristic makes considering the ‘audience’ to be the CPU get a little surreal.)
What about Programming?
So far I’ve talked a good bit about art, and some about painting and writing, but none about software. Using the aesthetic heuristic, can we say that programming is art? I would say, yes, absolutely. But I’d say this only if you include the realm of video game programming. If you leave aside the cultural baggage of “Is Halo really art,” you’ll observe that video games sell aesthetics in the form of entertainment. Audiences get excited over impressive visual rendering and realistic AI competition. They’re not buying video games to learn nor are they buying them to increase profitability of a venture. They’re buying them because they appeal.
Outside of that, is programming art? It’s hard for me to buy that line of reasoning because most software in the wild has an efficiency-increasing value proposition, meaning that it’s motivated by something other than aesthetics. You don’t add a plugin to your corporate Sharepoint because of the beauty of the Sharepoint API — you do it so that the company doesn’t need to incur the salary cost of a temp to key in data manually.
Now, I understand the line of thinking that goes, “this is more art than engineering/science” when talking about something whose solution space is extraordinarily open ended. Is your door hinge squeaking? No mystery there — throw some WD-40 on it. Is your door missing? Well, there are so many options for replacing it, that we’re talking more art than science. It’s easy to get caught up that way as you contemplate what door would look nice, but let’s not forget that your main goal is to keep raccoons from wandering into your house.
Programming as _______
I can succinctly summarize my answer to the question in the title. Is programming art? Sometimes, but usually not. Interestingly, this would also be my answer to, “is programming science?” And that’s kind of interesting, because it is suggestive of the degree to which software development has permeated society.
At its core, software development is optimization, I’d say. It’s about figuring out what can be delegated algorithmically, and then constructing that delegation. This applies to the Sharepoint plugin and other mundane line of business things, but it also applies to sleek apps and video games. In the case of the latter, you’re automating entertainment. Instead of going outside to play basketball, kids are playing it virtually on their phones.
Because programming is becoming woven into the fabric of our existence, I think you’re going to have a fairly easy time finding examples of when it looks like or even is something else. Programming can be art. Programming can be science. Programming can be engineering. Programming can be mindless data entry. Which of these things it is when you’re doing it is within your control. Mostly.
Editorial note: If you’d like to submit a question, please feel free to do so here (or at the sidebar, any time)
Great essay and great topic. As a software developer with a degree in studio art, I have to jump in here. First, I’d say that there is a key piece of the definition of art that you left out, which is the idea of self-expression. The best artists aren’t necessarily thinking about the aesthetic impact on their audience; they are trying to express some element of their own humanity in a physical form (with the hope, yes, that other humans will feel a connection to that humanity). I think that this definition makes programming a little bit closer to art… Read more »
in Enterprise computing the goal is to ensure programmers code in a way that makes it impossible to identify them by their style. You will find that stated in a number of places, mainly concerned with Agile development. Therefore the aim of Agile and enterprise computing in general is to turn programming into something that is not art. My experience indicates it is not Science either. It does seem close to something like civil engineering, where, say, a bridge reflects technical needs and seldom the personal style even of the architect ( I think modern day suspension bridges are all… Read more »
I was thinking of architecture, as well, and it’s a term we also use in computing. The author almost touched on it with his door/racoon example.
It’s worth pointing out that “the folks who wrote Basecamp or Trello or Microsoft Project” is equivocal- the folks who designed the concepts are probably not the folks who wrote the code, and even if so, designing the product and writing the code are two distinct disciplines even when I perform them both.
Fair points all — I’m spoiled by working in a setting where I am directly involved in both architecture design and construction of software, so I get to have my own approach included. There are certainly settings in which this doesn’t happen. I’ll note that I don’t think software has to express the individual humanity of just one person to be art — art can be collaborative. It can express the humanity/unique world view of a team.
I think the question of whether programming is a creative venture or not wouldn’t be terribly controversial. I definitely agree with your assessment that it is. For the rest of this, caveat emptor. I am no expert in the domain of art. But, when it comes to self-expression, couldn’t this take us into the “anything as art” territory? For instance, I might get bored while doing my taxes and draw different-looking 1s and 7s on the form, which could be construed as self-expression, I suppose. Maybe not the greatest example, but hopefully it conveys my meaning. Are you proposing the… Read more »
Doing your taxes online takes away the possibility of having unique looking 1s and 7s. It becomes harder to say that anything about your taxes is an art.
For a while now I’ve considered the enterprise development I do as neither Art nor Science… I don’t discover new things or invent ways of using existing things in new ways which to me is science. Nor is what I am doing self-expression or aesthetic so it’s not really art. (Parts of the computer field can of course be Scientific or Artistic!) But the day in day out enterprise developer is a crafts-person – I use known tools to build the systems that my client has requested using (hopefully) best practice methods. I consult with and review the work of… Read more »
Well even craftsmen can be creative and create something beautiful. Look at some antique furniture or swords and guns made by master craftsmen. However there does seem to be a tendency in Enterprise development, to try and ensure that such self expression is impossible.
Certainly the programming as craft metaphor has mindshare in the industry. Based on my understanding of that term, I suspect that it’s an apt metaphor for programming more frequently than science, art, and probably even engineering.
I have been developing solutions with software for over 30 years and in that light it is definitely a craft. You hit the nail on the head Evan. However, you could have hit that nail with a hammer or a nail gun or with many other not so conventional tools. That is what a programming language is and nothing more. A Tool. It can be used to produce works of art, help the scientific method and of course, to solve complicated business problems. A programming language provides the levers we need to control a magnificently flexible machine called the computer.… Read more »
I am a programmer! And i like your article.. i already think it a long time.. programming is definitely art !
What sort of programming do you do that you consider it to be art?
I do various programming both web and desktop, the idea is you create something out of nothing, and for generations after you people can still view your work! Basically programming is modern art! In the 1800 when Van Gogh created something he made art that was in that times seen as something from the future, First in the 1900’s we see these vivid colors! Similar to programming, we can create something that even in 100 year from now, people will still be able to open on the web and enjoy! So yes programming is definitely art !
There is also one more part to the definition to art. I learned this from studying antiques with my wife. Art is considered to be a form of expression through a medium that serves no functional purpose, such as a painting or a sculpture; however, this form of expression that does serve a purpose is called a craft. If you take a furniture builder, who builds quality furniture by hand, he/she is called a craftsmen. I think programmers or more like craftsmen rather than artisans.
I think you’re in broad company there. As I said in another comment, I think craft is the metaphor that I tend to encounter most frequently, and it’s often hard to poke holes in this thinking.
Programming is art. Definitely. And it’s (as far as I can tell) the only art form in which you can have a wrong answer — very unusual…
I dunno… I think a lot of musicians that I hear on the radio have the wrong answer 😉
Engineers use physical parts to build machines that serve a purpose. What they build may be revolutionary or a copy of something designed and made before. Developers use command sets to build logic machines made of bits and bytes. You could say an engineer who designs an amazing new aircraft, is mostly an engineer, partly a craftsman, and partly an artist. I think developers are closest to engineers, but we can also add our own style and art into it, if we have the opportunity. We creatively assemble logical command structures into a piece of software which meets a real-world… Read more »
I feel like the term “software engineer” probably originated in more dubious, marketing-oriented fashion (i.e. the previous job descriptor sounded crappy). I bet this is also true of the major “computer science.” I haven’t researched this, but I’d be willing to bet at least a few bucks that there was some original uncertainty as to how cognitively challenging these things were and whether or not it belonged in the same bucket as more established fields. So, “we’re scientists/engineers too!” is where I imagine this started. That said, I think your assessment that we wear different hats as we do this… Read more »
On the true origin of “Software Engineering” as a name for our field: http://homepages.cs.ncl.ac.uk/brian.randell/NATO/NATOReports/
You will especially enjoy the attached Appendix.
There has been controversy over what we should call it for a very long time; the standard term in Germany is ‘Informatics’ since 1959, and in the early 60s Peter Naur was promoting the names ‘Datology’ and ‘Data Science’.
The reason people make these analogies is the extreme majority of “software engineers” don’t apply any principles that are remotely similar to engineering.
I wonder how many software engineers would get into an airplane or submarine if it was built with no design plans.
Software engineers are largely at the mercy of non-engineering managers who want the product yesterday so they can beat their competitors to attract customers. We have families to feed and we do the best we can with the time and resources we have. And these days it’s all about speed to market, so planning and quality can suffer – which we hate, but we have little choice in it. However, if a software engineer is in a medical company, designing some firmware code for an artificial heart, or is employed by NASA to write the code which will launch a… Read more »
I think the place that “software developer as engineer” would get the most interesting is in the embedded/firmware world. Though, I suppose that’s just the place where faults are most likely to have especially nasty consequences. Certainly there are non-physical places as well (finance, etc). A lot of software gets written that probably doesn’t ever need to rise to this level of rigor, I think. The scary part is wondering how much of it does need the rigor but doesn’t apply it.
I still remember one of my very first engineering classes as a freshman in college. The words my professor said to me have never left mind
I would have to disagree, at least slightly. I think art can be found in nearly any human-created work even if that work has practical application. It is true that the likelihood of finding art in such a simple thing as a construction manual for shelving is rather small, but surely a textbook can have an artistic component, and not just for the practical purpose of keeping the reader’s attention. In the same way, I would guess that all of us have run across code that we found ‘beautiful’: in its clarity, its attention to form and structure, its elegance… Read more »
First off, agreed on the frequent hand-waving connotation of “this is more of an art than a science.” Often I when I hear that phrase, I process it as, “I don’t fully understand the problem space and I’m kinda guessing.” As for the rest, I think I agree with the concept here, but it gets nebulous in my head. Certainly, a person might inject some aesthetic expression into what he’s doing. For instance, here’s something I submitted to the Daily WTF years ago: http://thedailywtf.com/articles/Feng-Shui (variable names changed to obfuscate the domain). For whatever reason, the guy that wrote it assembled… Read more »
Gadzooks! That code fragment you linked to was quite the opposite of what I had in mind, though the visual layout was a bit fun. I was thinking more of the logical beauty seen in, say, an algorithm that is simple and clear, solving a non-trivial problem with a minimum of fuss. Or that so-rare beast, a module/class/library that manages to be truly self-documenting, showing that the writer was thinking ahead to the poor sucker who had to understand, utilize, or extend it. Perhaps I am being rather vague, but I’ve occasionally come across code that brings a smile to… Read more »
For me art is the result of creating some sort of a metaphor. When coding we are actually creating a metaphor of a real life situation. So, someones can consider this as an art, but I think the key here is what Jacob Mattison said, the self expression part, although we always put something of ourselves in the code we deliver we are advised to not do so, we should use patterns, frameworks, best-practices. So, some code can be considered as art and some doesn’t , it depends, coding falls into this grey area between engineering and creation, but I… Read more »
Personally, I think the question of “is programming art or science?” is likely to be fundamentally wrong. Programming can be used for both, but in itself it is neither. In the same way that pens and paper aren’t art or science, but can be used for both. You can use pen and paper to record observations – whether as art, by say sketching a fruit bowl as a still-life, or as science, recording the result of an experiment. Or for creation, drawing a picture without references for art, or writing down a theory and possible experiment as a part of… Read more »
I’d say programming (not programs) is art, like architecture is art (but buildings are not).
Buildings are for working/living/whatever… They are not meant as a piece of art.
But Architecture can be art.
As a matter of fact, software architecture does exist 😉
Great post, I really enjoyed reading the post itself, and the discussions that followed. To me this is an extremely important question, as the answer sort of “frames” the profession as a whole – both in professional practice and in education. So it’s unfortunate that we don’t have an agreed upon answer to this. For what it’s worth, I certainly push for more of a science angle, but in the end I think it’s more engineering than anything else. Reason being is that when building software systems the concept of “correctness” is ever present, just as when your building physical… Read more »
I think that what you’re mentioning here, the concept of “correctness” (or, at least, expected behavior), is an important consideration. Certainly, this is heavily interwoven with the idea of aesthetic ends (in aesthetic pursuits, there is no concept of “correct,” per se), but I think it’s worth considering in its own right.
When I’m work writing code to save my company a few bucks as either a bug fix or new feature, then that’s hardly art. Playing the guitar and writing a song isn’t going to save anyone money in the same way a Sharepoint plugin would. However, the implementation of that plugin is most definitely a form of art. You need to be creative to write code. Although there’s no scientific answer on how long a method should be, any decent programmer who looks at a method 1000 lines long will instantly know that is not how you do things. That’s… Read more »
I take your point here, though I tend to think of it as the ambiguity of a problem space. It’s easy to consider the “there’s an art to it” angle when there are nearly infinite ways you can do something. But to me, the distinction comes in the purpose being aesthetics. Whatever scales/chords/licks you learn to play guitar and then assemble into a unique work all have the purpose of aesthetic appeal. There’s a similar feel to using algorithms and design patterns to build a program, but most such programs are designed for some other purpose.
I think both the questioner and the author miss the point the here. The “art” that is relevant to a discussion of science vs. art is art in its meaning of craft or skill, not in its meaning of fine arts or expression for its own sake — as in “the art of the deal,” or “practitioners skilled in the art,” or “a term of art.” When somebody says “It’s a science” or “It’s not a science,” what they mean is that there is or isn’t a single correct answer that some set of rules inexorably lead to, when properly… Read more »
I think there needs to be a distinction made between science and engineering. Computer Science is not Software Development just as Theoretical Physics is not Mechanical Engineering. Scientists role is to develop a deeper understanding about a subject and prove that understanding to the point that we can confidently make predictions/assumptions using that knowledge. Engineering’s role is to take that understanding and ramp it up to apply to different areas or unique situation and knowledge learned from science makes the result much more predictable. Additionally the world is not black and white. Scientists can do engineering and engineers can contribute… Read more »