QualityCode.com Essay: Why I Enjoy Developing Software
For me, software development is five great activities rolled into one: Puzzle solving, Creating an artistic work, Creating a tool that people can use, Cultivating something as it grows, and Giving orders.
On those occasions that I sit down to solve a crossword puzzle, or work out a tricky math problem, I generally have a lot of fun. Puzzles are great mental exercise, involving both logic and creativity. Plus you get great joy upon completion.
It may not be obvious just by looking at a word processor or arcade game, but every computer program was written in the form of “source code”. There are literally hundreds of different computer languages you can code in, and probably thousands of distinctly different styles.
Well-written source code not only causes the computer to behave in a specific way, but it also has an artistic beauty. Great code is simple, elegant, balanced, and nicely formatted. Coding is quite a bit like writing poetry that relies on specific, unusual text formatting. The poet tries to find the right mix of meaning, rhythm, sound, and visual appearance. The programmer tries to find the right blend of function, clarity, and performance.
Although it can be beautiful, and inspiring, poetry rarely serves a utilitarian function. Computer programs, on the other hand, can actually be used. I have helped write software that has been incorporated into medical equipment, programs that have helped police officers communicate with each other in the field, and helped blind people hear audio books. And those are just a few examples of the tens of projects I have worked on over the last twenty years.
You can imagine the feeling of accomplishment a coder has, knowing that they have directly improved someone’s life. Even a game provides entertainment to brighten a day, and even boring business software provides tangible benefits to employees and/or shareholders.
Computer programs generally aren’t written in a day. Most interesting software takes weeks, months, or even years to reach a mature level. This process of growth is only now starting to be appreciated by the software development industry. To paraphrase the ancient saying, “An enormous program begins with a single line of code”. From a blank page springs a program with just a little bit of functionality. It barely hints at the potential greatness that it may later become.
Creating software is a bit like gardening, and a bit like parenting. You don’t really quite know what the end result will be until you get there. Along the way, there are many surprises—both pleasant and unpleasant. And along the way you (hopefully) develop a strong bond with whatever it is that you are cultivating. A bond formed from respect, care, and pride.
Finally, computer programming is perhaps the biggest ego boost in the world. Through software, you are directly controlling a machine. A machine which can almost seem to be alive. A machine that is capable of doing great things.
Within this world of software, you are in complete control. You are the master of all. Your every command is immediately executed with absolute precision, and without question. The machine is so responsive that it can be frustrating to discover that it is doing exactly what you told it to do, instead of what you actually wanted it to do.
For those of us who are compassionate and introverted (as many programmers are), this ability to control something so completely is probably theraputic. We don’t enjoy giving orders to another person, but we can give orders to the computer without any embarassment or guilt.
Creating software is not a science, nor is it pure art. It is a craft of logic, creativity, and love. Those of us who make our living writing code are richly blessed. Many of us are conscious of that, and do not take it for granted.