One of the bands I play with, The Prime Time Big Band, had the lucky opportunity to have Sean Jones run one of our rehearsals. It was awesome. He was full of wonderful metaphors, and phrases, and energy. One of his phrases was "the humanity of the music," referring to emphasizing the emotion of the lines and phrases of the music. Another was "playing a ballad is like holding a baby." You don't hold a baby tentatively or nervously. You have to cradle it lovingly and softly. But at the same time, you must HOLD it, firmly, and not drop it!
Cool stuff, but why am I writing about it on my tech blog? Because a lot of what he said, and the passion in the way he said it, made me relate it to my job and my code. For example, he said the difference between a great band and a good band was small, but it was in the attention to detail.
Sean Jones didn't speak to it directly, but I started to think about how much of what he was describing was very specific to artistic disciplines. And yet it had a similar ring to programming. And ultimately it has to do with the freedom of creation. Art, music, and programming all deal with the creation of something via a controlled but very flexible medium. Paint and canvas, 12-tone scales and instruments, or code and CPUs.
Tons of people have equated programming to art because of this creative aspect. But the interesting difference is programming must serve a practical purpose. Art and music don't have a practical purpose, past being pleasing, or challenging, or making money. The practical aspect of programming is what can cause us to forget about, or trivialize, the creative joy of programming.
It is possible to deliver practical but crappy software. That is, the software works, but the code or the UI or the architecture or the performance is for shit. No one wants to spend their precious time building crappy software, but when the clock is ticking and the boss is getting impatient you can get swept away.
I got into programming because I loved the creative side of it. Solving problems in clean, elegant, organized, understandable, and dare I say clever ways is what I love doing. And this requires immense creativity! It is no coincidence that these things are also what leads to better software applications.
So don't forget what you loved about programming! Don't shun the creative aspect of your craft. Apply the attention to detail it deserves and create awesome software!