The Joy Of Programming

January 21, 2007

I started writing code when I was 16, on some creaky teletype at school. In the last quarter century or so as a professional I have hardly gone two weeks without writing some kind of code. Obsessive? Hardly, I just find writing code to be a joyfilled, fun thing to to do.

Wonder why the open source community is so filled with people writing amazing software for free? It's because I am not alone in finding enjoyment in the act of creating software. There is something magical about starting with nothing but an idea, and then building the software that makes the idea real. Finally there is the joy that comes from having people use it.

The sad thing comes when the joyous software development process becomes a hard cold business function. In too many places software developers are now seen as bodies to be plugged into a "system", engineered to be efficient, and instantly replaceable by anyone with an idealized resume. White-tower architects enforce a strict set of rules that must be followed, project managers detail the precise schedule by which all work must be done, and top IT management requires exacting methodologies that make software development supposedly more predictable. This sucks all the joy out the art of programming, leaving a cold dead husk with all the imagination of a moon rock.

Yet look around the open source community (in any language, framework, OS, etc) hundred of thousands of programmers working, inventing, cooperating, competing and finally delivering amazing software for no other reason than it seemed like a good idea. All of the open source tools I use (Ibatis, Jetty, H2 and the host of frameworks from Apache) are of wonderful quality, supported for free, updated for free, and available with source for all to investigate and even modify. I can actually talk with the creators, learn things from them that I can actually add to my understanding. Being able to use such well-crafted and generally reliable parts makes my job easier, and adds to my joy since I don't have to deal with bits I am not as familiar with.

In most IT shops where the joy has been sucked out of the programmers, the quality of the end result is equally joyless. I've seen (as a consultant and employee) way too many places filled with pathetic attempts to create rigid regimented environments in the mistaken idea that joy and fun in their software process must be replaced with cold hard efficiency. Happy, flexible, inventive programmers can't be trusted to deliver quality systems; yet the open source community continues to do so in many cases with nary a manager in sight, no buzzword-compliant methodology, and not even a financial reward.

To me starting with a good idea, building the pieces of whatever application it is, creating software that is relatively elegant, as bug free as I can make it, that not only meets some artificial requirements, but actually creates delight in the end user is what gives me joy. A couple of jobs ago I was asked to create an employee directory, I was able to convince the manager to let me build a completely ajax application that not only showed more information than was requested but did it in a friendly and pleasant fashion. This was the first time the ordinary employees in the company had ever been given a piece of software written with them in mind. The positive vibes and thanks I got from even the lowest employees was great. This was written completely outside of the normal methodology and heavy-handed management. Sadly I wound up facing a lot of flack from the "system" for daring to do something different and wound up leaving my job. Since then the application (which had more upcoming features intended) has languished in the "proper" environment.

In the mid to late 80's I wrote an unusual spreadsheet application (Trapeze) with two of my friends which only survived for a couple years (with about 14,000 sales) but twenty years later I still get emails from customers who enjoyed using it and regret not having it today. It was a joy to work on and apparently (for a set of folks who understood its inventive nature) such a joy to use that it's worth mentioning two decades later.

Today I still get a kick out of building databases, writing frameworks, designing websites, and even delving into stuff I really don't have time to explore (opengl, search technology, new programming languages), and even writing blog posts about programming. It's hard to explain to people who don't program why it's so much fun. Like all creative endeavors (music, art, literature) it's the act of making something no one has ever done quite this way is an end to itself. Most of the population finds it hard to imagine that telling a computer what to do is actually fun (or should be). Many business entities refuse to admit that anyone would code without rigid structure in place to make them.

They just don't get it: programming is a hard, fun, joyful pastime.