Justin R. Erenkrantz Where do you want to go today?

#include <iostream.h>

void main ()
	char * s;
	cout << "Hello world…" << endl
	<< "Am I a piece of art? (Y/N)";
	cin >> s;
	cout << "Well, I don't care what you think..." << endl;

Untitled Snapshot #2

If you take a look around the world today, it is quite certain that you will see a work of art by a group of people whom you would not normally consider artists. These unsung artists have slowly crept up into our everyday lives. These artisans are becoming more confident in their work and are determined to step out of the shadow of anonymity. They refuse to go unnoticed much longer. Before long (if it has not happened already), these people will dominate our hero worship. It is not because of their charming personality (rather in spite) that we will notice them, but because they are such an influential part of our lives. By now, you are probably wondering what in the world I am talking about. I am talking about the meek little computer programmer. Of course, I have a bias in this whole argument - I am a computer programmer myself. Therefore, I have every reason to further my own cause and the cause of my fellow programmers.

Now, here, I must make a distinction between "programming" and programming. There are, of course, many different ways to solve any given problem. However, there usually exists an optimal way of doing something. Yet, there are always inferior ways of solving a problem - they may reach the same result as the optimal method, but in a rather despicable manner. This is what distinguishes the elite programmer from the masses: finding this optimal method. Finding this optimal algorithm is what makes programming an art. And, you know you have reached that optimal method when you can smile and say, "Yeah, baby, I got it. Beat it." Of course, someone else may come along and beat your puny algorithm into the ground. But, for those few seconds, you were on top of the world. There is no greater high to a programmer than finding a unique or clever trick to solving a problem.

These little tricks of the trade are what make programming so technically fun. But, I will refrain from discussing the merits of having a linear or logarithmic running time versus having an exponential running time. See these details are beautiful for the initiated. However, chances are that you, the reader, are not one of the lucky ones initiated into the programming fraternity. Since you are probably not, you will have to take my word that the technical side of programming is quite exquisite.

Now that we have working definition of what programming is and a warning concerning the technical details of programming, let's return to the question at hand: is computer programming an art? To some art scholars, the definition of art is that it must be made by humans, it must be both expressive and communicative, and, finally, it must be aesthetic. Computer programs are not written by little green men in the sky but rather by little white men in padded rooms, so it satisfies this part of the requirement. Most programs are expressive and communicative because they must interact with its audience to achieve its desired result. Most programs have as much of a desire to be seen as a puppy dog. The puppy can not bear to live without its master, and neither can the computer program. In fact, a lot of people hate computer programs because they require so much interaction (the same could be said for puppies as well). Due to this high level of interaction, the user will inevitably be affected by the programmer's sense of and reliance upon the aesthetics of the program. If the program has poor aesthetics, it will usually be evident in the expression and communication of the program. Therefore, it seems that aesthetics is crucial to both art and computer programming.

Aesthetics is defined as the "guiding principle in matters of artistic beauty and taste." The programmer has his own unique style and ideas as to how his program should look when it is completed. This is why if you visit any computer company, you will find ubiquitous number of whiteboards where programmers sketch out their design ideas with sweat dripping down their brow and heated discussions abound with their team members concerning the optimal design. Most programmers need to conceptualize their program before they can start to implement it. This gives them a roadmap that they can follow when they create the program. If a problem arises during the course of the software development, the problem will likely not have been noticed when the programmer initially conceptualized his ideas. Therefore, most failures in programs can be traced back to logical oversights in the design process. It is possible to fix these design flaws within the current framework by tweaking the code. Generally, this is a bad practice because it leads to a slippery slope where the entirety of the code may be forced to be rewritten as a result of these minor changes. At that point, the program and the programmer lose any sense of the aesthetics for the sake of the overall picture. As I said before, ugly code is not good code. Therefore, it violates my definition of programming. We have now satisfied the criteria of what is art with regards to computer programming. Yet, something is missing: why is the program created in the first place.

According to some art critics, there are four main reason for why art is created. So, if my hypothesis is true, then computer programming must be able to fulfill these four reasons. The first reason is that art is created to make a direct attempt to find or expose truth, meaning, or value. Computer programming's primary purpose is to help find answers to problems, so it easily meets this criteria. The next reason is that it demonstrates a passionate connection between art and the artist. Most programmers have special projects that they work on in their spare time to fulfill some personal desire. They feel a passionate need to expand their own borders and discover and try out new ideas. These programs are not meant to be distributed publicly, but rather as a personal learning experience to increase their own skill in the art. Art can also be created for its own sake. As mentioned previously, most of these small learning experiments are created for their own sake. They have no legitimate purpose other than that they exist. At the opposite end of the magnitude spectrum, however, this reason also appears. For, on large projects, many programmers get into the project with every ounce of energy they posses - it becomes their life. Everything they can possibly give is given to the project. The final reason for why art is created is to have an impact on the viewer and audience. Surely, this reason is met for commercial programming projects. One of the recent trends in the computer gaming industry is to release a demo of a game before it is commercially released. These demos are meant to impact the user in such a way that they will want to buy the program as soon as it comes out. Now, that we have concluded that computer programming just in fact might be an art, let's examine the interaction between the program and the programmer. This interaction is crucial in understanding whether or not something is art.

Like a stage company, programmers work in teams to write a program. Over the life of a successful Broadway play, there is a tremendous amount of cast turnover. People are constantly entering the production, learning new roles, or leaving the production for a better one The same is true for computer programming. A single complex computer program can take years to reach its "conclusion." Therefore, some people may use the project for a stepping stone to a bigger (or higher-paying) project at another company (or even within the same company). Others may be trying to learn on the job, so they must be mentored. At some point, these students will be able to take on more responsibilities commensurate with their skills. Once a stable team is assembled, the team can then concentrate on completing the program.

Usually, by the time the program is "completed," the program is so outdated, it needs to be written all over again. So, unlike a play, most computer programs are constantly undergoing major revision and tuning. Therefore, the distinction between an incomplete product and completed product is blurred. No one can pinpoint exactly when the product is ready to ship because there are always improvements that could be made to the program. It is the function of the project leaders (who are usually the head programmers) to determine when to put everyone out of their misery and send the code off on its merry way. This decision is a highly important one, because there exists a point of diminishing return for improving the program at the cost of time and labor. If the decision is not made correctly, the program will be headed for disaster. But, if the decision ends up to be correct, the product could turn out to be a masterpiece. In every masterpiece, there exists some artisans who were the driving force behind it. To return to our stage analogy, there are great Shakespearean actors that are unparalleled in their quality. The computer programmers have their great masters as well. In fact, the great masters of computer programming are probably infinitely more powerful than any Shakespearean actor could ever be.

One of the biggest computer programming heroes (if you could call him that) is Paul Allen. Paul Allen along with his buddy Bill Gates created this tiny company called Mickeysoft (as some programmers affectionately call Microsoft). Paul Allen is currently on a conquest to own the entirety of the Pacific Northwest's sports teams - he currently owns the Portland Trail Blazers and the Seattle Seahawks. He is one of the few people in the world for whom this goal is attainable. When I watched the Seattle vs. Oakland game over the weekend, ESPN showed a close-up of Paul Allen sitting in his owner's box. There is no doubt from looking at Paul Allen that this guy could program until the end of time and be as happy as a clam. Paul Allen belongs in front of a computer monitor with a keyboard and some cold and stale pizza nearby. Most people who are familiar with the beginnings of Mickeysoft credit Paul Allen with the technical development of the company. Bill Gates, while he is no slouch, is not the technical wizard that Allen is. Bill Gates, however, has tremendous bureaucratic skills as well as the knack for being at the right place at right time. This duo complemented each other extremely well. Thanks to his Mickeysoft stock, Paul Allen never needs to work again. But, I am sure that Paul Allen has a few pet programs that he finds time to work on. To paraphrase one of the greatest mathematicians of the 20th century, Paul Erdös, "Programmers die when they cease to program. They expire when they cease to breathe."

Like the art world, the world of computer programming has its distinguished scholars as well. No computer programming scholar is more widely respected than Dr. Donald Knuth. Dr. Knuth, professor emeritus of Computer Science at Stanford University, has written a series of books called The Art of Computer Programming. In fact, Dr. Knuth has just completed releasing new editions of his original three volumes that were published over thirty years ago. He is also working on fourth, fifth, sixth, and seventh volumes of The Art of Computer Programming. These volumes cover the fundamental aspects of computer programming in minute detail - the algorithms that Dr. Knuth discusses are timeless. The approaches are infallible. Yet, what would possess a man to do such an absurd thing as write volumes of programming books for such a long period of time? No other reason than that he loves to do it. He realizes the beauty and the power of programming and wants to share it with the world. He feels that programming has a distinct need to be communicated with the universe. In fact, these volumes have often been compared by programmers to Sun Tzu's The Art of War. The Art of Computer Programming provides a unique insight into the way which programmers program. When Sun Tzu's book was published over 2500 years ago, people started to realize that warfare could in fact be an art. The same could be said about Knuth's tomes.

However, most people will not be able to make it through the first chapter of The Art of Computer Programming without falling asleep. These people will fail to receive the insights provided by Dr. Knuth into why programming is so beautiful and yet paradoxically so complicated. So, there will always remain those who scoff at the idea of calling programming an art. They claim that we programmers are in the computer world only for the money. They claim that programming has only practical merit. For the most elite programmers (excepting those inevitable exceptions), money and practicality does not matter at all. These elite few programmers are merely in it for the challenge of the job. They could not care less about how much money they are making as long as they have enough to live on. They could not care less about exactly what their program will end up doing (unless it suits their own personal needs). Therefore, programming serves as a communication between the art and the artist. It is our canvas to create masterpieces to show the world. It merely happens that the world will see and use our masterpieces. Our programs will not be tacked on a wall protected by a three inch pane of glass in an art gallery. Computer programs are meant to be used. To some, that negates programming as an art. To me, the use of our programs is merely a side effect of our art.

I will always believe that something magical occurs when I program. I could program all day long and be as happy as a clam. I know that there must be others out there in this lonely universe who feel the same way. While there are a myriad of technical reasons why programming can be considered an art, none of them really matter. I can say this and I can say that, but it all depends on personal perspective. Our perceptions are shaped by our experiences, so if we do not have any experience with computer programming, we will are unlikely to understand its beauty. It is like Galileo proclaiming to a clueless medieval world that the earth revolved around the sun. No one believed him. And, we all know how poor Galileo ended up. Who knows, one day we might all compare the merits of linked lists and binary trees in everlasting harmony. Weirder things have happened.

Justin Erenkrantz
Monday, November 16, 1998

Last Modified Friday, 20-Aug-2010 02:50:28 EDT These pages were made by Justin R. Erenkrantz unless otherwise stated. This work is licensed under a Creative Commons License. These pages will look best in an XHTML 1.0 compliant browser.

Creative Commons Attribution License Valid XHTML 1.0 Strict! Valid CSS!
[Blue Ribbon Campaign icon] [frdm] Support SFLC