[ root | ruminations | remote ]

Programming isn't fun—it's much more than that


We as programmers, coders, and hackers should be more in tune with the colloquial usage of the word "fun"—specifically how it's used to describe programming. Why? As the movement to educate more people about the craft of writing software continues to gain momentum, we serve as the ambassadors to those that want to learn more about programming. With Codecademy, Coursera, and Khan Academy becoming more mainstream we can't take the easy way out and say we do it just because it's fun. A cursory conversation with a coder will tell you that "fun" isn't the word that comes to mind when describing why it is they do what they do. Popping off the stack of reasons we code leads us through all of the complex and intertwined motivators behind the craft.

Fulfillment from creating

At the top of the stack we have the reason that keeps us coming back and which tends to resonate the most. Practicing the art of computer programming is deeply fulfilling. The gratification in being able to create something and see it through to completion is never diminished. There is a sense of security in knowing that we can perpetually and arbitrarily create: create utility; create value; and, create technology. We can create for the sake of creating. We can create for the sake of elegance. We can create for the sake of finesse. From this creation comes a sense of validation in having that which is created be used by others. Delighting users is another one of those traits of programming that keeps us coming back for more. The end result wasn't created because it was easy. It was created because of every facet that led to the end. Pushing oneself to learn something new and hard that makes its way into the hands of others leads to a sense of satisfaction.

Sense of purpose from our toils

Delving deeper into the stack we start touching characteristics common to the human experience. The completed product and its eventual use masks the path by which we arrive at the end result. Hacking away on a project for weeks, months, and years touches on the deep human quality of being industrious. Having toiled away a day with something to show for it at the end reassures us that the means by which we arrive at the end is well worth it all. It gives us a sense of purpose. It gives us a notion of importance. It gives us a glimpse of some deeper meaning: having started from nothing, we gradually reduce the unknown into the deterministic known. Puzzling through impediments and moving toward a stronger grasp of the known comforts us during the journey of programming. When things do go awry—in the form of bugs, improvements, or other changes—there's a deep compulsion to rectify things. This, in turn, is related to the sense of pride associated with the craft of creation. Which is then further related to the drive to continually improve ones own abilities as well as the things we create.


Pre-dawn coding session at the Firebase office

Reward of overcoming frustrations

Finally, toward the bottom of the stack we encounter some of the general but common unpleasantness related with programming. They exist because of and in spite of everything above them on the stack. You'll commonly see programmers deeply frustrated while practicing their craft. This can be because of their own code not working the way they expect or because of some external interfaces not conforming to some given contract. It might be because there's an unexpected bug. Or because of some bug that should be there but isn't. There's a multitude of reasons that can get hackers completely consumed while programming without much to show for it. It's times like these that are not at all enjoyable and are the complete opposite of fun. However, overcoming all of this aggravation is part of the reward. The sense of relief that we were able to fix it, figure it out, or hack around it just furthers our resolve to continue moving forward. More of the known and less of the unknown in our belt of tricks.

Programming is...

We revel in and endure this stack of reasons when it comes to programming. They're all interrelated, difficult to articulate, and faceted in such a way that makes them hard to compare with anything else. Programming is rewarding, satisfying, frustrating, gratifying, enjoyable, excruciating, fascinating, delightful and aggravating all at the same time. The next time you're explaining to an Estonian first grader the reason you're spending all weekend programming at a hackathon: don't tell them it's fun. It isn't. It's much more than that.

If you enjoyed reading this, catch me on Twitter