There was a lot of fantastic feedback from readers regarding my recent series, "How to Think like a Programmer" (Part 1, Part 2, and Part 3). Two readers, staticonthewire and Mark Miller made some extremely astute comments regarding the role of emotions. The series left out emotions, but that is not to say that they do not play a role. staticonthewire remarked that, contrary to my example, he has met scientists who made lousy programmers and a mystery novel buff who was fantastic, and that the difference was passion for programming.
I cannot agree more. A programmer who treats their job as a way to make money and nothing more will rarely offer make than what they are asked to give. These are the programmers who churn out mediocre code on a mediocre project, do not involve themselves in making better software, just meeting the project specs, and so on. The programmers that are passionate about technology and code writing are the ones who will go home and research the best way of doing something, write code in their spare time, learn new things after hours, and more. These are the programmers you want to hire.
My initial experiences with programming were amazing. I loved having a problem to try to solve, and figuring out the solution using nothing more than my own wits. We did not have Internet then, the answers were not a Web search away. You succeeded or failed based upon the knowledge, experience, and skill of yourself and the people you were working with. The debugging tools were primitive at best; dumping variable state information to the screen or a file was the best and easiest way to see what was happening at run time. Frequently, I would print out all of my source code, and follow it through by hand, inventing user input and seeing how the code operated in response. I could not have been happier.
What I love about writing code is the nitpicking and problem solving. A few days ago, someone asked me to describe what it is like to do my job. I told them, "I am a professional nitpicker. Every detail counts. On top of that, my job is to think of the craziest way someone could use my product, and then have it continuing functioning." I think that sums it up pretty nicely. I enjoy programming for the same reasons that I enjoy reading great books, doing crossword puzzles, listening to "artsy" music, looking at modern art, and watching David Lynch films. It is really all the same type of thinking, just a different medium.
It seems that in the last ten years or so, colleges started moving away from teaching Computer Science as an offshoot of mathematics, as a mostly theoretical discipline, to teaching Computer Science as a vacation. Instead of learning about "big endian systems," "O numbers," formal logic, and so forth, CS students are being taught how to write code in Java, SQL, and other languages. They are being given a four year education in "best practices." These are "shake and bake programmers." The passion, the excitement of solving problems has been taken away, to be replaced by painting by the numbers. The worst part about being taught programming at the vocational level, is that the industry changes rapidly enough that whatever you learned is going to be outdated by the time you graduate. Chances are, it was outdated by the time it got into the curriculum.
Programming is increasingly a matter of gluing together libraries written by a few select people, the ones who are having all of the fun. At this point, the places where truly interesting codesmithing seems to occur is in the shops making development tools (Sun, Microsoft, Borland, etc.) and the small places doing niche work. Some of the FOSS projects are extremely interesting as well, and they have the advantage of not caring about profits, so they are free to work on unusual and creative projects regardless of potential market size. Anyone in between these types of environments is just gluing together libraries written by a big-time player into a standard, boring C/R/U/D application.
One thing I have found over the years is that when I am enjoying myself at my job and being challenged, the passion is there. Put me on a tight deadline to come up with something that seems impossible, and you get great results. If you hand me a project with a long deadline and involves zero creativity or problem solving, it is likely that I will enjoy myself as much and the project will drag. The passion just cannot exist for a dull project. I think this is one of my big concerns with the IT industry. There was an extremely long period of time where things were being changed constantly, and when a piece of software or hardware, or a way of doing things became obsolete, it was replaced by something markedly better and more interesting, and more pleasant to work with. Every day brought exciting change.
It is a shame that the world of programming seems to be moving slowly towards "shake and bake" code. Maybe the direction will reverse? I certainly hope it will! I am passionate about programming. I am one of those twisted individuals who writes code in their spare time. I rarely have a day truly off of work, because even when I have the day off I cannot resist popping onto the VPN and doing a few things. For me, writing code is like playing Civ III, but instead of "just a few more turns!" it is "just one more subroutine!" When a project is rolling, I have been known to spend 16, 24, sometimes 50 hours straight at the office working on it (they know better than to make comments about the smell, and to just smile and appreciate the results). This is not too uncommon for programmers to do, and has been the source of jokes for decades. How many other jobs are notorious for having these types of things happen? Let's hear it for passionate programmers would wide, and give ourselves a hand.