Craft or art?
One of my teachers once said to some of his students: «Your job is both beautiful and cursed». He was referring to the fact that, in Computer Science, one has to always learn something new while being certain that what he learns will become obsolete in a shorter or longer period of time.
However, this is only a partial reason. At least, for the programming part of Computer Science.
The sheer joy of making things, especially things that are useful for others, the pleasure of knowing that our work is used by others because they find it useful, all of these give programming a high value in terms of rewards for labor hours.
However, one most perform perfectly in this world. Like in a legend, the magic of programming will not work if one single glyph is wrong, if one chevron is wrongly encoded. An improperly done incantation will not work. An incorrectly written program or a buggy one will not work as designed. Still, the number of human activity areas that demand a so high level of precision and perfection can be counted with only one hand. Adjusting for the requirements of this level of precision is something which may make programming difficult to grasp (and a more daunting effort lies in the realm of non-imperative programming).
Yet, the programming activity can be compared with designing complex systems from tiny pieces, like in a puzzle. Making various parts interact between them in a infallible way is the fascination that will overcome the previous stated painful strive for perfection.
Add to this the joy of always facing new things due to the non-repeating nature of the task. Each program, even the basic Hello world can be written in a new style. Sometimes, the mind blowing task of modifying one source code to look more readable, elegant and intelligent gives enough adrenaline to make one content of what he has done in that day. This is specially true in functional programing languages but the others are not so much different in this aspect.
However, poor design, lack of good documentation or throughout coverage from the tests, dependence upon others (either in terms of using one library or waiting for one colleague to finish his part of the project) are things which always delay the moment when the product will be done. Add to them some social activities or other things you have to do and you’ll find that the delays are hard to predict in time. Maybe that’s the reason that Starcraft 2 took so much time to be released and much time is needed for the Duke Nukem Forever.
The last factor which make programming hard is debugging. With any creative activity come dreary hours of tedious, painstaking labor, and programming is no exception. Imperative programmers know that the debugging part is hard, and testing drags on and on, the last difficult bugs taking more time to find than the first. Different ideas arose to solve the problem represented by the debugging, however, the solution is yet to be found.
Nevertheless, as time passes by the technology advances. By the time more complex projects will be finished another technology is starting to gain public acceptance. A new, better and more fool-proof product starts to be written, making the shiny, newly finished one to become obsolete. «Honour what you have burnt. Burn what you have honoured» can be said to any programmer. Even though that program will take time to be written, one can see the last day of his product. And that day is closer if the product is a highly used one.
However, there is one last sweet spot. At least for the more dreamy people. Programming is poetry. Programming is building things out of thin air. Castles and monsters in a video-game are built out of nothing, the only ingredient being pure imagination. Very few jobs can claim the advantage of creating something, of becoming closer with the divinity by gaining the attribute of constructing new realities.
However, unlike poetry or theoretical physics, the program construct becomes real after the last bit of the incantation is done, after the last key is pressed. Number crunching, picture drawing, message relying, and others are things transforming the legend into the real thing.
Lastly, in a more earthly consideration, programming needs a clear mind. Coding for more than a few hours without a break is daunting. One has to interleave programming activities with other: documentation of code, reading books (preferably not programming related, although there are a lot of them out in the wild just wanting to be read), watching movie, doing sports, etc. More, having a week full of writing documents and application letters (like I did during the GSoC application period or during the last week) without looking at the code you’re writing, that is loosing contact with your code, may mean the end of the project.
To conclude, programming, be it art or craft, beautiful or cursed, must and should be interleaved with other activities in a very balanced way. This way, the artistic part, the beauty of the craft and the mythical aspect of programming is the one that predominates in our daily routine.
: 12 years, according to wikipedia
: still in development, after changing several technologies and undergoing conflicts and lawsuits (see wikipedia)
: There is a story about an engineer which designs a new machine which is highly received and he is nominated for a very important prize. His colleagues throw a party to congratulate him. However, at the party, the engineer is missing after a while. They found him looking on some sketches representing the design of an improved version of his machine. The creative mind is always in look for something new, always discontent of what already exists in teh world.
: Out of pure mathematical constructs, Eintein discovered the relativity theory. Subnuclear particles and planets where discovered using the same procedure of creating something out of pure air just to fit into the missing points of the existing theory. This happened in a period when physics was considered to be complete, as Lord Kelvin said «There is nothing new to be discovered in physics now, All that remains is more and more precise measurement».
Post inspired by the «Mythical Man Month» book