Jul 022011

A comment on Hacker News is arguing that our self-assessment quiz for computer scientists is in fact a self-assessment for computer engineers since computer science is about computation complexity and not programming. At the same time, a popular article at the Elegant Code blog is arguing that software development and traditional engineering are fundamentally different. Now I am confused because apparently programming is neither a science and nor an engineering. Then what is it? It has to be an art.

Let me start with a comment on the John Sonmez’s post on “Why Software Development Will Never be Engineering.” I think John over estimates engineering. Engineering is not as structured as he assumes it to be. Engineers’ analytic models often fail due to reality and a big chunk of engineering consists of developing solutions in the absence of analytic models. What John describes as engineering is closer to science, and I do agree with him that programming isn’t a science.

Scientists, e.g., physicists, study the nature and this universe while trying to explain why systems behave the way they do. They create theories but they do not create solutions that solve people’s problem. In contrast, programming is about creating new systems, which is closer to engineering. However, engineers inherit some rules from physics which implies that given the same constraints and requirements, two engineers are more likely to end up with a similar solution. Programming is different from both science or engineering: programming has more degrees of freedom and there are no set mathematical rules. I call programming an art for three reasons:

1. The word art literally means skill. Programming is a skill that some of us know and apply. In general, the programmer starts on a blank canvas and uses his/her skill to paint the picture. It is also noteworthy that similar to artists, programmers also improve with experience.

2. To program is human. By definition, science is the study of existing systems while art is something that is created by man. Computers are man built systems and programs are creations of the artists, aka. programmers.

3. There exists style and taste in programming. Different programmers program differently. There is aesthetics involved and there exists tips and tricks that vary from person to person.This man-to-man variation exists because it is an art and involves creativity.

Thus, I argue (and the famous computer “artist” Donald Knuth agrees) that programming is an art, not a science. There can exist a science of an art which tries to understand what the artist has done (computer science in this case) but I don’t think that programming can be dissected down to a science.

  15 Responses to “Is Programming an Art or a Science?”

  1. [...] the original post: Is Programming an Art or a Science? | Future Chips Categories: Programming 0 Comments Tags: a-science-nor, art-and, post, post-argues, programming, [...]

  2. [...] Blog post by Aater Suleman: Is programming an art or a science? [...]

  3. [...] Blog post by Aater Suleman: Is programming an art or a science? [...]

  4. the answer is no definite in excatly please reagain give answer

  5. [...] Is Programming an Art or a Science? شارك الموضوع مع أصدقائك 30 أبريل, 2014 | بواسطة :نشوان دعقان | مصنف ضمن فلسفة المواضيع المتصلة [...]

  6. [...] Esta claro que buscabas un programador cientifico, pero… y si era un programador artistico? Is Programming an Art or a Science? | Future Chips Ostia, la de powepointistas que se van a matar por poner en el curriculum que son expertos en [...]

  7. [...] Is Programming an Art or a Science? 2015-03-08 admin السابق: تقنية لـ”قراءة الأفكار” عبر تعبيرات الوجه التالي: الإقبال على مواقع الإعلانات المبوبة لطلب وشراء الخدمات [...]

  8. An interesting and convincing argument laid out here…

    Although I think an even better way if describing programming is: a *craft*

    Actually sits nicely between science and art :)

  9. Like Alex said, I consider it rather a craft.


    Well, Art has no boundaries. Art focuses on expression and aesthetics. In Art, function follows form, if there is function at all. If Art has a function, its called Design, which by many artists is not considered “real” Art at all, because it follows restrictions.

    In Programming on the other hand form follows function. Programs are tools, they are beeing used while yes, you can reason about code aesthetics or beauty, but in the end what matters is the job it’s doing, the problem it solves.
    As such, I consider programming craftsmanship, like e.g. construction.
    It can (and should) incorporate aspects of Art, Science and Engineering, like beauty, reasoning and empirical prove. Though the sensegiving, defining aspect about code is it’s function and it beeing a hand-crafted entity to do something.

 Leave a Reply



You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>