Higher-Order Fun

Game Design & Game Programming

Programming is Art

Programming is a subject most often lumped in with engineering or science, and there are countless books dedicated to writing better code, but is this a good approach? To me, it seems much more reasonable to understand it as a form of art.

Does it matter? Yes, I think it does. I believe that this distinction is important, and I believe that many other programmers agree with it. I also think that it affects how we view and hire programmers, and, ultimately, it greatly influences the productivity of software development in many companies.

Art?

So, why is it art? Writing good code does not come solely from studying books and lectures – like other forms of art, it requires practice. Books and lectures can teach you the theory and the technique, but not the art. To be a truly great programmer, you need years of painstaking practice, where you constantly challenge yourself into doing things you’re unfamiliar with – just like other forms of art. You can study music theory all you want, but without lots of practice, you’ll never be a great composer. Peter Norvig makes a compelling point that mastery of programming, like other arts, takes some ten years of practice.

This opinion that programming is art is hardly radical or new. Donald Knuth‘s “The Art of Computer Programming“, one of the most important computer science books, alludes to the idea in its very title. On an essay on the title of the book, Knuth says:

Our discussion indicates that computer programming is by now both a science and an art, and that the two aspects nicely complement each other. [...] 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 will 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.

Knuth is not alone. In that same article, he quotes another great computer scientist, Edsger Dijkstra, who, while not spelling it out, clearly seems to share that vision. Harold Abelson opens MIT’s legendary “Structure and Interpretation of Computer Programs” 1986 lectures (based on the also-legendary book by the same name) with the following statement:

“I’d like to welcome you to this course on Computer Science. Actually, that’s a terrible way to start. Computer Science is a terrible name for this business. First of all, it’s not a science. It might be engineering, or it might be art, or we’ll actually see that computer so-called science actually has a lot in common with magic.”

So why are people so reluctant to accept that it’s art? It’s obviously not traditionally listed as a form of art, but a century ago, neither was cinema. The biggest stumbling block might be that programming is a sort of invisible art – the customers, who ultimately pay for the work of the programmers, never get to see the actual code. If you hire an illustrator, you can see his portfolio and judge his work, or if you hire a musician, you can listen to his compositions and performances. In that sense, the art produced by those can be directly experienced by the client.

In contrast, the art of programming can only be experienced indirectly, by the performance of the software it describes. Unable to understand the actual program, all that the clients can do to judge the work is to see whether it works correctly or not – which is, of course, of paramount importance, but masks the true costs involved. “Works” doesn’t mean that it will always work correctly, that it will always have good performance, or that it will be easy to maintain in the future. In the end, the client has no easy way of knowing how skilled a programmer is, and handling a project to an unskilled team is a fabulous way to overrun the budget.

Not All Programmers are Made Equal

This view that programming is a mechanical process, that its output is either “correct” or “incorrect”, without conception of a vast gradient of quality in-between those is, in my view, dangerous. The most dangerous misconception is that all professional programmers are roughly equally skilled. So, just as you’d expect any IT specialist to fix your networking issues in about the same time, or any medic to diagnose your symptoms, or any engineer to be able to design a bridge within your budget – with perhaps a few select few among those capable of doing a slightly better job – you might expect all programmers to be able to turn your requirements into a decent quality software.

Yet, time and again, studies show that the difference between average programmers and the best programmer is enormous. It’s difficult to evaluate the actual quality of the code generated, but if you measure efficiency by how long it takes to fully develop the software (including any necessary analysis, testing and maintenance), top-class programmers are up to 20 times more efficient than average ones (see: Coding Horror). Let that number sink with you for a while. It means that a single high-class programmer can replace twenty average programmers. This sort of difference in skill is unheard of in most crafts – but it’s not unusual in art. You wouldn’t expect a medic being twenty times as good as another, but what about a musician? A painter? It seems reasonable, to me.

Similar claims are made in The Mythical Man-Month (the classic book on software engineering, and managing the development team), chapter 3. The titular essay within this book also elaborates on why it’s better to have one good programmer than many weak ones, and, in fact, better in general to have as few programmers on the project as possible. It seems to me that, if the skill difference is so great, and so relevant, then we do not pay enough attention to this fact, and the unspoken assumption that programmers are roughly on the same level is probably responsible for enormous amounts of money being wasted in companies all over the world every year.

On Hiring Programmers

I believe that this mentality is most clearly seen in the job requirements for most companies. Most will expect you to have formal education on the area – graduation, at least -, but do not ask you to provide with samples of your earlier work, done privately for your own purposes. Why? If a programmer truly loves programming, and has had time to accumulate experience, then he must certainly have a number of projects under his belt – and probably many made without being hired to do so. In my opinion, that’s amongst the best ways to evaluate how good a candidate programmer will be.

Expecting that a diploma in computer science is guarantee that the candidate will be competent (or even adequate) is naïve at best – not only it’s not a guarantee of any sort of competence, but there is data suggesting that the majority of those are unable to make even the simplest of programs. In my opinion, graduating in computer science can teach you many things – but nothing that you couldn’t have taught yourself with curiosity, love for the subject, and Google. There will always be a place for formal education, but it should not be thought of as a requirement. Writer Isaac Asimov said:

“Self-education is, I firmly believe, the only kind of education there is”.

The situation is perhaps best illustrated by taking the title of this post literally. Imagine that, instead of hiring programmers, you were hiring artists. Say that you want some concept art or illustrations for an important project. Two artists show up for the interview. One of them presents you a wonderful portfolio, full of beautiful and inspirational pieces of art, but admits that he never attended a single class beyond high school. The second has no portfolio to show you (though he assures you that he has done some “pretty similar” stuff on his last job), but he has a diploma in some art major by some prestigious university. Without thinking twice, you hire the second, telling the first that while his work is “impressive”, they’re not interested in hiring people without a diploma.

Does that sound absurd to you? In my opinion, it’s exactly the same for programming. And if you are the kind of manager who will do the same when confronted with the above situation, but when hiring programmers, then it’s my belief that you are doing your company a huge disservice.

11 ResponsesLeave one →

  1. Anonymous

     /  2011-02-16

    I get annoyed by these blogs posted on reddit. I don’t see the point here. Why didn’t you google anything? You cite the art of computer programming? Come on.

    Software Carpentry treats programming as a craft, which is really what you mean. If you truly expect it to be an “art” as in a fine art then I’d argue only a small subset of programs have been made that intentionally art.

    If you want to say that programming is expression, there’s plenty of literature out there to support that as well, just google for DECSS and art.

    What I’m trying to get at is that you as a blogger did not do your due diligence and even bother to google your topic.

  2. KS

     /  2011-02-16

    I agree & disagree. I definitely use the barometer of “does this guy do cool technical stuff/learning outside of work” to judge his intellectual curiosity.

    What you get with a good degree, though, is a *drive*. I’ve hired people with only i) cool work independently and ii) great degree, and over the long term, neither have truly shone.
    The ones that did are the one who wanted to learn stuff & continually drove themselves to do so too.

  3. haha! this is interesting, I have asked to many, many people the same question over again; What Art is!? and unfortunately only few of these people have answered this question properly, I mean a solid clear strong answer/opinion. The question itself is not as abstract as what art could be for many of us, but definitely people are very confused about it. One day I was in India (for holidays) and there was a guy (very passionate) speaking about some shapes made of rubbish material which was for me very bad looking, and he said; this is a very high expression of art, and I asked him; first could you please explain to me what’s the meaning of art? and he said; Simple, Art is a record of a very unique and complicated feelings expression. The more intellectual educated you are the easier it is for you read/feel these records. All these made sense to me, so, I don’t entirely believe programming is Art, first because of it doesn’t involve much feelings, and second when you program (yes you are a creator, making things) but how unique these things are? Art is a little bit more complicated than that, if it doesn’t record and broadcast feelings, it is not art. Alex Nino (yoambulante)

  4. [quote]I don’t entirely believe programming is Art, first because of it doesn’t involve much feelings[/quote]
    I strongly disagree with you. Skilled programmers are the ones that do not only have good coding skills, but also know very well how to properly translate a ‘problem’ into a ‘solution’. They know how to devide one big problem into several smaller problems. This involves a lot of ‘feeling’. A good programmer can structure the solution for a big problem more easy than a less experienced programmer in a shorter time, because he ‘feels’ how to do it. He doesn’t need to go into little details to this well. His ‘feeling’ is based on experience, not on theory from a book.

    How do I know this? By looking at myseld. How I used to write programs 30 years ago and how I write them today. I often see errors in other people’s software designs, but I can’t always tell them exacly ‘why’ it’s wrong. It’s just a feeling, but that feeling has almost never let me down. With my 30 years of software development experience, without any shame, I can say that I understand the ‘art’ of programming.

  5. Anubis

     /  2012-10-26

    As with any field, the ones that do it plainly, it is no art, the ones that are not only advanced but care much about it, it is then an art-form, hence the expression *anything, its an art. A surgeon may have been told what to do to complete a heart transplant, but one with such skill and insight, will execute it as an art-form. Art-form is quality, Art-form is intuitiveness, art-form is an expression of ones whole (skills, knowledge, experience) and the reflection of that in the final product. All the other people arguing about it, simply are arguing two different ways of looking at the same thing, this is global.

  6. BassBassBass

     /  2013-04-03

    Programming does have more in common with engineering and science.

    The only problem here is that people don’t rightfully consider engineering and science as art.

  7. Greg

     /  2014-02-26

    “Writing good code does not come solely from studying books and lectures – like other forms of art, it requires practice.”

    Sports require practice and they’re not art.

    “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.”

    So it’s a craft, not art. Very bad argument!

  8. knowsmorethanyou

     /  2014-04-08

    Rodrigo, first: how on earth can you compare making music with making a computer program? Other than programming, music actually is art because it requires something you can never learn: being gifted.

    As some have already correctly suggested here, programming isn’t an art, it’s a craft. Don’t mix having a passion for something up with being talented.

    Second: You’re a person that omits curly brackets. Why do you even remotely think about considering the stuff YOU produce as art?

  1. Tweets that mention Programming is Art | Higher-Order Fun -- Topsy.com
  2. Why programming fits into our brains | Learn Computer Programming
  3. test « kojexconsult

Leave a Reply

*