Traditionally computer programming was considered an art, however due to pressures form society computer programming was forced to become a science. Because of the “art-like” nature of computer program this misclassification of computer programming as a science has hurt both students and professionals in the field and it is only through the reclassification of programming as an art that members of the software development community will gain a deeper understanding of computing applications and the study of computer programming.
The classification of objects, concepts, and ideas is necessary for study of them, because classification allows for the development of abstraction. By classifying plants, animals and all living things into domains, kingdoms, phyla, classes, orders, families, genera, and species, biologists are able to create abstraction, which reduces the volume of knowledge about living organisms biologists must mentally store to be effective researchers. If a zoologist is informed regarding a certain animal in the class mammalia through the use of the classifications and abstractions set up, the zoologist will know that the female sex of the species will produce milk. Through the generalization by classification of living organisms the zoologist was easily able to derive knowledge about a specific animal with only knowing its class. Although abstractions aid scientific study, it is important to remember that classifications and abstractions are created and not discovered by man,10 so revisions to the classification system will be periodically needed. Just like biologists, people in academia classify fields of study. Although many layers of classification are typically used, the top layer of academic classification splits the areas of study between the “arts” and the “sciences”. Computing, specifically computer software development and computer programming, has been classified as a science; however, just as taxonomy in biology can be wrong, the classification of computing as a science is unjustified, due more to the pressures of society then the nature of the subject itself. Finally, the question of under which category should computer programming be classified is important because just as the proper classification Homo sapiens as under the class mammalia gives a zoologist insight into the biological structure of humans, the correct classification of the field of computer programming gives insight into the field of computing.
Human beings have been creating art since their earliest existence on earth; the concept of art however has changed along with that which is classified as art. The formal definition of the word “art” is given as (1) “skill acquired by experience, study, or observation”6 and (2) “the conscious use of skill and creative imagination especially in the production of aesthetic objects”6. Clearly the word “art” in today’s society invokes visions of the “fine arts” such as painting and sculpting falling from the second definition. The purpose of art in this “fine arts” sense is for the self expression of the artist and to share with others the artist’s thoughts and abilities in a physical form.5 However, before the twentieth century the term “art” was mainly used in respect to the first definition, referring to skill.7 Etymology reveals this strong connection between the term “art” and skill, seen in the fact that the Latin roots of the term “art”, “ars” and “artis,” mean “skill”.7 The idea of art as skill can also be seen in medieval times where the first universities were deemed to teach “liberal arts,” which were such subjects as grammar, rhetoric, logic, arithmetic, geometry, music, and astronomy.7 The medieval use to the term “art” implied “something derived by man’s intellect”.7
When the term “science” first was introduced its meaning was very similar to that of “art”.7 People would speak not only of the “liberal arts” but also of the “liberal sciences,” which referred to the same seven “liberal arts” fields.7 Furthermore, this interchanging of the words can also be seen in the thirteen century, where Duns Scotus called logic “the Science of Sciences and the Art of Arts”.7 As society progressed the ideas behind the words “science” and “art” evolved different meanings, the end result being that “science” conveyed the idea of knowledge and “art” the “application of knowledge”.7 For example, according to this more modern definition of the two terms, astronomy would be the foundational “science” of the art of navigation.7 This relationship between art and science was discussed in much detail in the nineteenth century.7 John Stuart Mill, a English philosopher, political economist and influential liberal thinker in the 19th century, viewed science necessary to form the ground work of art, because science deals with knowledge.8 According to John Stuart Mill art should be generally consistent with this knowledge of science, but take the knowledge and convert it into abstractions that are more convenient for practice not just convenient for thought.8 The idea that science is the foundation of art can be seen in a field like music, where composing music is an art, creative in nature, but the theory behind the music is science based on mathematical and logical reasoning.9
As society progressed through the scientific revolution,1 the enlightenment,2 and onward through the 20th century, the shift in mentality to science progressed. Society began to perceive scientific knowledge as truth of the highest form tangible by humans. Because society holds science in a high place of importance in order to gain academic importance scholars have shifted such studies to be more scientific in name. For example, theology, which can not possibility fit in the realm of science, has been redefined as “the science of God.”3 Clearly this redefinition is an abomination of the idea of scientific and its methods, however it clearly points out the paradigm shift towards sciences in our society and misclassifications of subjects can be brought about by pressure from society. Computer programming in its early days was thought of as an art, but in order to ensure that “computer programming [was] to become an important part of computer research and development, a transition of programming from an art to a disciplined science”11 was thought to be need. According to Donald Knuth the only reason computer programming ever became a science was simply because computer programmers called their field a science.7 Although computer programming did became classified as a science due to pressures from society and no inherent property of computer programming itself, subjects can become sciences according to the distinction between “science” and “art” proposed by Donald Knuth which states that “science is knowledge which we understand so well that we can teach it to a computer; and if we don’t fully understand something, it is an ‘art’ to deal with it.”7 From this distinction it can be seen that in some cases this shift to science in a field of study is a reflection of a new understanding of the underlying concepts that governor a field being arranged into laws. The laws of logic and mathematic on which computer programming rely clearly are a science, however this science creates a medium in which computer programs are expressed it does not turn computer programming in to a science.
In many respects all arts are based on science through a layer of theory. For example the art of music composition is based on music theory, which in turn is based on the science of mathematics. Visual art such as painting or drawing is based on theories of perspective and color theory, which also have a scientific foundation. Typically the science behind an art will create the medium or boundaries of the art. Clearly in the case of computer programming the science of logic and mathematics creates a frame work in which all programs sit.
It is interesting to note that Donald Knuth’s distinction between “art” and “science” bridges on the modern connation of art, which is “fine art”; however still remains planted in the aspect of “art” as skill. If art is defined solely under the first definition as skill acquisition through “observation, study, or experience,”6 alone this is useless for the classification of a field of study as most academic fields will in some form or another clearly include this idea of skill acquisition. The second definition relating more to the idea of “fine arts” is specific and exclusive to some fields or academic study—therefore appropriate for the categorization of a field but alone is not the appropriate for field classification as it leaves out the deep idea of the term as held in the phrase “liberal arts”.
So in order for software design and computer programming to be classified as an art not only does it need to abide by the purpose of “art” in the modern sense, but also needs correlate with the Knuth’s more traditional definition of “art”. Traditionally “art” has meant “skill”, computer programming is most certainly a skill that can be acquired. Furthermore, key components to the study of computer programming include logic, arithmetic, and grammar; three of the seven subjects listed as “liberal arts” by the scholars of the medieval age.7 Even more so, by their definition of “art”—something that derives from man’s intellect—computer programming clearly is an art. Computer science does not fit as neatly in with the purpose of the modern idea of “art” as program development often done practical value other than just to express the creativity, emotions, or ideas of the programmer, but computer programming and software design is a very creative process. This process is rooted in the theory and science of mathematics and logic, which are typically viewed as being rigorous and free of creativity, but these structure sciences create a medium on which programmers can express ideas and be creative, even if the end result is practical. Creative art can be practical too, poetry for example is often used to expressive a deep or complex feeling to another human being. Poetry’s practical use is as a communication tool but it most certainly has an artistic and creative natural about it. Poetry, like all arts, relies on a medium, in this case language, which is constructed from rules and theory. Due to the fact that computer programming is creative expressive act conveyed on a medium constructed from scientific theory like all arts, computer programming should be classified as an art as well.
If computer programming is classified as an art then the way it is taught and viewed should be derived from other arts, just as information about a specific species of organism in the class mammalia can be derived from a study of the class. The classification of computer programming as an art mean that the way art is taught, analyzed, and viewed can be related to the way computer science is taught, analyzed, and viewed as they share similar properties.
In the arts the idea of practice is widely accepted. Even professional musicians will practice at least 3 hours a day and the truly great ones practice upwards to 10 hours a day during the years they are learning and performing.8 Chopin a great composer, pianist, and teacher would tell his students to practice the scales until they mastered them. In the world of music no one questions such a philosophy of practicing the basics; however in respect to computer science and programming students are immersed in real word exercises often not being forced to practice the basics.8 If students were given problems of logic or program proving which is highly theoretical but has little application, the teacher’s methods would be questioned.8 This mentality is most likely due to the fact that most students in computer science are aiming for careers of programming or in other areas of software development so on the surface practical learning exercises seem the most beneficial. Students of computer science are hasty and tend not to practice to the level expected of professionals in other arts remaining novices all there lives. The distinction between an amateur and a professional can be summed up as, “an amateur is one who practices till [they] make no mistakes, but a professional is one who practices till [they] cannot make a mistake.”8 By this standard clearly most “professional” programmers are really amateurs when compared to their fellow artists. In software engineering and development “bugs” in software are common place, even joked about—this is an unprofessional attitude a best. Professional artists such as musicians practice rigorously; when asked how to make ones playing prefect, a revered piano teach, Lechetizsky replied with the following algorithm: put 10 buttons in a box and when one wants to practice a piece, take a single button out of the box for every time it is played correctly, but if a mistake is made all the buttons are placed back in the box, repeating this process until the box is empty.8 An algorithm like this might be directly applicable when it comes to software development, but the concept of rigors practice that it invokes is applicable to computer programming students. However, students of computing do not even approach such discipline and dedication in their study; frankly, computer science students are lazy, complaining when asked to perform simple practice tasks such as writing programs out on paper before they hack it out on a machine.8 This idea of code correctness before a compiler has verified it and the program has been tested, steams from that of the perfection that musicians exhibit over their musical pieces. From the view of science, the hacking mentality fits as simply every attempt at a compilation and run of a program is an experiment, but is costly in time and energy. So viewing computer programming as an art means that practice is an essential element to the process of learning to become a professional programmer.
Practice is not the only concept that can be learnt from fellow artists to add students in their development as professional coders, also the idea of studying great works of art can contribute greatly to a programmer’s education. Typically visual art students must view and analysis art throughout history, scrutinizing what makes the pieces powerful and esthetic. Computing students are rarely exposed to other software developer’s code, not even monumental software exhibiting expert coding. Like in the world of paintings there are no lack of works to be analyzed in computing. The open source movement has made it so that anyone can view and analyze many of the great pieces of software for free. For example, perhaps the greatest software ever developed was the UNIX operating system. Many of its derivatives such as FreeBSD are available for download with the source code included. Studying the structure and style of such a piece of software would influence the way students thought about software development and through their mimicking of the correct and effective structure of the code would be much more likely to produce code of the same or higher quality in the future. Furthermore, the pseudo artist Tristan Rêveur stated "bad art is more tragically beautiful than good art 'cause it documents human failure." This concept of the documentation of human failure is very applicable to computer software development. If computing students are looking at their field of study as art they should also explore the failed pieces of software. By examining the failure of software development projects students should be able to develop a clear understanding of what problems result in software project failure and be able to prevent such mishaps in their own development. It would be unfair to say that students are not warned of the many hazards of poor software development; however, most students feel the need to test and explore these well documented warnings, if students were exposed to poor code and failures they would quickly understand the reason behind the words of their advisers and not need to explore poor software techniques in their own projects. The quality of code programmers produced would be increased if programmers were taught to analyze and evaluate projects from the past in the same way fellow artists look for insight in the revolutionary artists that have gone before them.
The fact that programs are often given strict specifications for the program they are to implement seems to contradict the ideas of programming as art; however when viewed as an art even the most mundane programming task can be used as a creative outlet by the programmer. This creativity occurs through the programmer’s style. Coding style is a creative aspect of computer programming; most programmers develop and prefer a style of their own. When computer programming is viewed as an art it can be easily understood that there are is no one “best” style just as there is no one right style for painting a picture;7 however when viewed as a science the rigors of science can be used to claim that there is only a single correct style of programming. It is unnatural for people to be forced into a mold, conforming to the same style as it crushes programmer creativity and moral.7 However in many respects it is understandable for companies to enforce a standard coding style for their programmers to follow as it makes code easier to read my all members of the company and easier to identify in copyright lawsuits. Because of the esthetic nature that style brings to code it can neither be called good or bad, unless the style is mischievous in intent. Just as paintings hanging on the walls of a gallery can be interpreted, so too can be the style of a program’s code—great beauty can be found in both the gallery and the code.7
If programming is viewed as art, the efficiency of the resulting program can be affected due the style of the programmer. In the early years of programming efficiency was the primary indication of how well a program was code—the limitations of the hardware demand this. Although hardware in respect processor speed and memory size is still limited, the amount of computational resources which a programmer can utilize has dramatically increased. With this increase in the memory usage and CPU utilization by the program the programmer is free to structure and program code in a style that optimizes the elegance of the software system and not just the programs use of the computers resources. So if computing is viewed as an art as apposed to a science the way programmers will program will most likely negatively impact performance; however, with highly optimized compilers and with the large amount of resources a typically home computer has adding style to the code will not greatly effect overall performance. In fact because style often makes code less convoluted and easier to read resulting in less bugs in the final code. Therefore through the use of style and elegance viewing computer programming as an art positively impacts the quality of the code produced in terms of accuracy, but not efficiency, which is of less importance in today’s world of high speed computers.
Computer science and academia go hand in hand. Often software projects are done as research investigating whether a particular system can be designed to meet the needs of a certain task. Often such projects have to be badly manipulated to fit the typical form of scientific research. Many computer science papers merely present a project or a program having little to do with experimentation which most scientific papers are modeled from. It would be better if computer science projects were discussed not an “experiment” of sorts but remained truer to their roots as art and were discussed as such.
Although most computer programs are written for a practical purpose many are just simply written as art with no clear external purpose. An example of this are a class of programs known as “polyglots”, which are legal programs in more than one programming language.12 They show computer programming that is only done for esthetic value.12 Typically a polyglot cleverly uses comments to selectively hide language constructs that are illegal to the other language in the polyglot.12 Furthermore, Sharon Hopkin’s demonstrates another completely esthetic computer program in her work entitled “listen” which is a poem written using correct Perl syntax.12 Programmers have always tried to push their skill and creativity developing programs with a little as possible often just for fun. This mentality of programming, as pure art, reflects the true range of the purpose of computer programming.
Science creates the medium in which programmers work and create, but computer programming is an art. By the definition of an “art” as a “skill” and as creative process computer programming fits neatly under this classification as art. Reclassifying programming as an art affects the way society inside and outside the world of computing should look at computer programming and its purpose, the way it is practiced and taught, and how it is developed and researched. It can be seen from the other art fields that computer programmers need to practice more in order to become true professional artists. The fact that computer projects do not neatly fit into the form of scientific research because they are art, show that the way research in computing is carried out needs to be revaluated. Like other great artists computer programmers must study the great works of the programmers that have programmed before them in order to gain insight into how to become a revolutionary programmer. Finally esthetic computing allows for computer projects to have no purpose other than esthetic and programming style to become an important outlet of programmer creativity. Programmers are passionate about their work because of the creativity and emotion they pour into their programs—they are artists in this sense just as any poet.