There's a place I want to be. It's in a
state of mind that produces
art. But I am far from there: I create
software. The best I can hope for is to create
the perfect program. It would be
invisible,
transparent because the
user wouldn’t even know that they are using something I created. They would simply do what they wanted on the
computer unencumbered by the
buttons and
menus that just get in the way. By hearing the
sounds and seeing the
gestures of a user, the perfect program would correctly interpret the
input and act.
The art I create is in the patterns of logic that make up the algorithm that shape the behaviour of a piece of software. No one can "see" this art but only experience it second hand by actually using the software. But art is a tangible component of what I do. My work is creative and has style and structure.
Creatively, I go through five stages: conception, expression, execution, reflection and depression. When I execute my art, I go through four additional stages: design, implementation, testing and documentation.
The conception of an idea is the greatest joy. It makes you want to run down the street naked shouting "Eureka!" Often, the inspiration comes from others; a conversion leads ones thoughts down a new road to discovery. I find that left alone my own thoughts are tired and repetitive. Others bring a fresh set of eyes to old patterns and a new way of looking at a problem leads to revelations.
Raw ideas must be moulded into a recognizable form. I express myself using logic as my medium forming algorithms and bits of code in my mind. I add syntax and grammar so that the ideas are in a language that I can share with others. This process also acts as a sieve where by so called "good" ideas get sifted out as unworkable and we are left with a pearl formed from a grain of an idea polished with layers of logic.
Design is the act of putting pen to paper (or fingers to keyboard). The specification for a piece of software forms the basis from which the expression becomes reality. The art is there but in an encoded form. The meter of a good program is that can you write it down in clear English statements so that even a non-technical person can follow the logic.
I then implement the idea in the form of source code.
Testing is a critical part of the process. Literally, you must criticize every aspect of the software. Also, in a more philosophical sense, if your software doesn't do what you set out for it to do, you have failed as a programmer.
Documentation takes two forms. An explanation so that others, like your boss or peers, can understand what it is that you have done. And, a set of instructions to "condition" the user to make full use of your software. Of course, the perfect program would not require user documentation.
Often, after a project is complete, I reflect on what I have done. Could I have done it better? What will I add in the future to improve it? Does this lead to other new ideas or should it simply be written off as "finished"?
Inevitably, there is a period of post project depression. I’m not sure why I’m sad after a project is completed. Maybe it’s the sense that yet other great idea is now just another tired and repetitive thought going through my mind. I crave new ideas and when I think of all the time I spend on just one of them, I sigh and think there is never enough time to accomplish the prefect program. Or, could it be that my art will never be properly appreciated?
My soul cries out but my brain keeps telling it to shut up.