Wednesday, April 18, 2007

The Art of a Programmer

It is sad to watch people using my programs and viewing them merely as utilities to accomplish a task. In the basest, most grotesque way I suppose that is really what they are, but to me they are works of art. I see and appreciate the hours of sweat and tears that went into creating this something out of nothing. I marvel at the layer after layer of “paint” that harmonize and co-exist so that this “piece” comes together in perfect flow. I see the living, breathing beast that lurks behind the scenes slaving away to make the user’s life that much easier. I know every letter, every nuance, every dark and forgotten corner of the program. And when they get sick, I know exactly how to fix them so they get all better. I am not God, and I will never know what it feels like to control the power of creation. The closest I could ever get is watching one of my programs come to life and feeling the pride and joy of knowing that I created it. It is at those moments that I marvel at the skills that God has placed in my hands. Too often I take them for granted, shrugging off the gifts as nothing all that special. But when it all comes together in that one almost-perfect masterpiece, I realize how beautiful and wondrous those skills and the process really are. I see the fruit of my labors, little works of art, not just a utility to accomplish a task.

The Life of a Programmer

I am sitting here staring at the screen watching my program, which takes a combined time of 20 minutes to run, get all the way to the 18th minute before it decides to crash. I robotically try to decipher the error message, which becomes increasingly more difficult when the computer starts getting an attitude and spits out messages like "You screwed it up again, IDIOT! Failure at Module: 42342413442343143432413463452345# Now try to figure out what that means, Genius!" But I am a programmer and I don't know the meaning of the word defeat. So, I change some small thing like a semi-colon or comma, and decide that surely that was enough to throw off Module: 42342413442343143432413463452345#, and I start it up for another test run. Invariably, 18 minutes later I am greeted by another warm, encouraging message from my computer like, "Please don't breed, with you in the world we are already over our quota for morons. Failure at code line 3.825. Muah, Ha, Ha, Ha [Best Demonic Laugh]!" However, never deterred and never once pondering why I decided to become a programmer in the first place, I press on. I decide to make a big change this time and attack a period or maybe a question mark. I then confidently sit back, grinning from ear to ear, and run another test...slightly smirking at having bested this infernal machine. This time it DOES NOT stop at minute 18...nor does it stop at minute 20, or even minute 75. Actually, I lost track of time when I fell over asleep onto my keyboard, it was the spark created by my drool hitting the power source of the keyboard that jarred me awake. Apparently, I have an infinite loop now...which requires me to manually stop the program...but at least the computer doesn't get the last word this time. I spend the next hour and a half fading in and out of consciousness as I try to read over the 2.7 million lines of code that make up this program, making corrections here and there, but ultimately deciding that I have had enough and thinking that nobody will really notice the remaining issues if I throw in some dazzling graphics. So, here I sit again watching the program attempt to get through another test run. Did you know that if you put your finger tips together while keeping your hands as far apart as possible, and put your thumbs up to your nose while looking through the space made by your pinky and ring finger, that it feels like you are viewing the world down a tree lined street? Five minutes, 10 minutes, 15 minutes, and 20 minutes later, SUCCESS! Just as long as nobody expects those numbers to add up exactly.