Why do people become programmers? Really?

In a previous post I noted that an inordinate amount of energy has been put into developing computing technology and especially software.

The question of “Why?” has always fascinated me.

For the doomsayers among us, certainly we can see that the current computer has come directly out of warfare. Just go back to Los Alamos, von Neumann, the atom bomb and so on, let alone the very early technology to allow rapid ballistics calculations. But here I want to deal with the more personal side to it.

So just what is happening here with the people who become programmers? Let me give a quick overview of some of the reasons that make programming enjoyable. Then I will expand on the reasons individually in subsequent posts.

Flow: The Puzzle hook…
Perhaps this is the easiest reason to understand for a non-programmer. The drive that causes people to do crosswords, sudoku, chess, rubik’s cube, etc etc, is one of the main reasons that programmers spend hours upon hours working at a computer without noticing the amount of time that passes. The psychology professor, Mihaly Csikszentmihalyi, calls this experience “Flow”. It provides us with an intimate experience of order, which can be really absorbing, especially if we experience the world as chaotic. And as if you couldn’t guess, there are links between this and culture, and even religion. No wonder good programmers are known as “gurus”!

The Creation hook…
When you start to develop your first programs, they are small and you can very quickly create a little application that is a calculator, a calendar or some such thing. The feedback between having the thought and making it concrete in a computer in some way is pretty immediate. It is at this point that you either get bored at the pedantry of programming, because the comma must go here and the semi-colon here. If so, then in exasperation you move on to other pastimes. But if you get it (a favourite term being “grok” it), then you’re hooked and will probably move on to more and more ambitious projects, possibly culminating in a career in software. Good Luck!

The Control hook…
This is related to the first mentioned hook of Flow. By writing an application you are creating your own miniature world over which you have total control. Sure, you have to learn the language, but you are solving a problem, thinking of the solution, and then putting the results of this thinking into the machine. As long as you follow the strict rules, it wont answer back or argue you with you. The perfect slave. You then become the master. At its best this is not all bad, developing mastery requires discipline and attention to detail, not necessarily bad qualities.

The Elegance hook…
This one usually gets you a bit later on in your involvement with computing. Really good software development requires the minimal amount of code to perform the required operation. However, it is very very easy to write a sprawling program that is 10 or even 100 times as big as it needs to be, and alas, usually due to time constraints, bad specifications, and of course bad programmers, a lot of professional software is like that. To trim it down requires time. But when you do this you find yourself getting a huge amount of satisfaction from producing an ‘elegant’ solution. The minimum amount of typing for the maximum function. I have coined the term “Japanese Garden Software” for this type of code and it is a major drive for any self-respecting professional programmer. (When is a Japanese garden not a Japanese garden? When removing one more rock or plant would stop it being a garden)

So. That should do for now. In the next post I will elaborate more on the “Flow” hook. But first I need to dig out my notes I made from reading Mihaly Csikszentmihalyi’s book.

Be with you soon…

Reference
“Flow: The Psychology of Optimal Experience” by Mihaly Csikszentmihalyi.

Comments welcome. Let me know what you think...

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s