What's so Fun About Programming?

Thoughts on what makes us code

I wouldn't be the first to discuss this question but it's something I've often thought about, and having made great efforts in the past to cross over from a different field into software development, often asked myself. I'm worried that I'm about to come off as a bit of a pseud though.

I'm going to be biased, but it seems to me that programmers are on average relatively highly-motivated, and passionate about what they do. This is not unique to programming by any means, and I think this is mainly down to two things:

  1. Programming is a highly technical and specialised skill
  2. Programming is highly creative

When a field is highly technical, of course it takes a lot of motivation from the start to develop the knowledge and skills required to be productive in it. Therefore similarly, you find a high occurrence of motivated doctors and surgeons within their profession. You wouldn't expect to ever be seen by an unmotivated doctor or surgeon, and I've never met one. I actually enjoy going into hospitals partly for this reason.

Programming combines the technical with the artistic, in a similar way that architecture does in the hardware world. I think people thrive on creativity. Especially in an increasingly bureaucratic and corporate world, the chance to add your personal touch to something in a tangible way is perhaps correspondingly more desirable. I certainly feel like that myself, and over time I've been picking up more and more creative hobbies.

The difference between programming and something like architecture is that the programmers can not only design but actually build the end product themselves. A single programmer can complete the entire life cycle of the product from idea to release — and this is extremely compelling indeed. It gives you feelings of independence and great power at your fingertips — the power to be productive and expressive at the same time.

Not only is programming artistic but it's artistic in a very abstract, platonic sense — similar to music, in the sense that everything that defines each bit of work is pure information, as opposed to the physical placement of particles of matter, as for example painting would be. It can be reworked endlessly with no loss of fidelity of the result. The result is effectively timeless. So long as you're using Git and cloud I guess ...

This aspect of abstractness brings about another very important feature of programming — since you're working in the digital world with no cost to materials, and in environments that you can access from anywhere and take anywhere with you — you are completely free to program wherever and whatever you want in your own time, and therefore the personal project becomes possible.

With personal projects, programmers don't need any external validation before starting them. This is extremely liberating. Imagine if you could be an architect and physically create any building that comes to your mind, then play around with it and explore it, with no cost and with the chance of producing something actually useful and significant. All the while learning valuable lessons for use in your actual day job!

However, no matter how much you can enjoy programming as a hobby, you always have to come back down to Earth and get into the technical details of computer science and technology, in order to do it well. So to be a programmer you must also have some sort of engineering mindset to want to delve into the details and enjoy that process. Of the creative and technical dispositions, I'd say it's most valuable to start off with the first. The creative inspiration can then be the motivating force required to get you over the barrier and learn all of the technical details that you need.

The above factors are why when I started to learn programming, then play around with it, I felt a strong urge to keep doing it. Perhaps it explains some of the reasons why so many people seem to cross over into programming from other fields. At every TechMeetup event I go to I speak to at least one person who is a student of CodeClan, and it's great to be involved in a field where that happens and which is so welcoming to people joining.