2004-05-21

The Artless World of Software Engineering

It didn't take me very long to show interest in writing commercial software. I was dreaming of it by the age of 12, perhaps younger. In high school, I developed my interest in animation, and thus thought I must be good at it. Somewhere in the middle was computer animation.


In college, I discovered CS 185, taught by the now dismissed R. Hyde. It was an important lesson, and a well-earned A. The lesson was our group tried to write a video game in 10 weeks, in assembly. Concept art, planning, and module identification was as far as we got. What we learned is that unless there's enough money, there is never enough time to write it correctly.


An artist can spend years on a painting. A programmer cannot spend years on software unless it is a work of art. Who considers software a work of art? There's vivid, artistic software out there, even the experimental/visual efforts are noteworthy (just gaze at WinAmp's visualizations as an example). None of it is regarded as art, not widely.


Paint is really interesting. You can slop some on your hand and press it against canvas, or flick it off your brush. You can even fill a balloon and drop it from heights to burst it onto the canvas, or do wild things like spin the canvas while dripping paint onto it. A child can create art. I envy visual arts. They end up on the family refrigerator. Software, however, does not. Avoiding the anticipated drone of self-pity, you can imagine that software engineering is difficult to reflect approval, acceptance, and praise. Such things are important as a child, hence the interest in computer animation.


There was a period in time where computer software was regarded as an art form, back when there were limitations of the equipment. Programmers used to devise clever mechanisms for accomplishing certain previously inescapable goals, such as vivid color screens on a 32-color raster display long ago. For a computer software engineer, this borders on impropriety, but the genius, the art of coding still thrives in a dark corner. True viruses remain to me the most stunning example of art. Code capable of polymorphism, self-replication, stealth, and even mutation; a rare effort. The beauty is they are given away, even if you don't want them. Sadly, that's evil genius.


Intrusion Detection Systems naturally must exceed the sophistication of viruses, but knowledge of these is several orders of magnitude less common. A first-grader may know the difference between a worm and a virus, but how many government employees know what is helping keep them safe, 8-5?


Every sufficiently complex program has errors. Errors are often accepted in the world of art. Look at the works of M. C. Escher: he made a career partly out of his impossible perspective drawings, a career out of errors. Errors in software are not perceived as art. It may be an art form to actually use error-prone software with any stability, but the software's errors are not art. The errors get in the way of human expression. Errors in software are as useful to most as a sweater with no opening for a neck. Immediately, your mind thinks of ways to make use of such a sweater, doesn't it?


Humans need to relate to what they experience in order to regard it as art. Be it music evoking an emotion, comedy connecting with our own experiences, or a photograph that captures a word-thought. Until software reaches us on that level, it is abandoned as potential art. At this point, you might be considering something like a video game to be art. Can you do that fairly to all involved? It is multimedia, but the art is in the media, not the software. I carve a careful exception to some AI programming in video games and custom software such as Massive by Weta Digital, where the art is distinct from the media.


Art in software engineering lies on the fringes. The endless sea of software is a vast and jumbled space. When the sea rises to consume those breaking shores, the waters on the fringe are drenched in mass, and the art, the limits of software move elsewhere.


Head for shore.