Skip to content


Psychology of Programming: Programmer’s Flow

The nature and psychology of “things” have always attracted me. Aside programming, I like to learn “how” and “why” parts of phenomenons. Lately, I have been working on how to get more efficient and do more tasks in less time, especially in programming. Of course planning is the most important part of this goal, but, how do we implement our planning? Today’s most programming strategies involve breaking tasks into smaller ones and get feedback on the project along the way. This is one of the crucial steps of programming, but there is one more step: implementing these tasks efficiently.

Efficiency in programming can not be achieved with the strategies from other fields. Think about these: When you need efficiency in a restaurant, you may hire more waiters and cooks. When you need efficiency in your finance department, you can hire large groups of accountants, plan the work, split and get everything done. In any field, you can throw more “players” or “units” to achieve speed. (Warning: I’m not saying quality, I’m saying speed and/or efficiency). But, if you look at programming teams, they are usually small. Why can’t we throw more programmers and get everything done? There are some companies out there who tried this methodology and failed miserably. While looking for reasons of this problem, I came across this phenomenon: Programmer’s Flow (or Conscious Programming)

What is Programmer’s Flow?

Programmer’s Flow is a state of mind which some programmers have naturally. This is a higher and stronger level of attention. This is holding too much information and thinking constantly. If you are a programmer, or if you know a programmer, you might notice these “symptoms” :)

  • Not talking too much or not socializing(introverted). This is the first step as anything outside can break this flow. So the programmer stops thinking or dealing with other things outside (But this is not a continuous state like asocial people, this is not “mildly autism” either. Those are blindfoldedly sticked labels)
  • High level of creativity
  • High level of attention towards the project or tasks
  • High level of productivity, thus providing efficiency
  • Motivation to finish more tasks without stopping

In my opinion, this state of mind can be acquired by practice, and when used consciously, it can make life much easier. But, in some extreme conditions, this may lead to anxiety and nervousness. I once read somewhere that a programmer in Microsoft locked himself in his room until he finished the project (I believe it was an older version of Office, I can’t find the link to the article). This is a clear example of losing control, but of course most programmers do not get to that stage.

How can Programmer’s Flow be achieved?

There are some crucial steps to achieve this mental state. What I know for sure is, you require:

  • Worry-free lifestyle (If you have worries outside your job, you might lose your ability to focus as you unconsciously think about your problems)
  • Insulation: If your phone rings every ten minutes, or if you are called into a meeting when you are programming, you will obviously not get into this state as you will lose your ability to focus.
  • Environmental needs: Working in a small cubicle under flickering white fluorescent light may not help you at all. You will need spacious rooms or cubicles, comfortable chairs, keyboards and tables. Wearing comfortable clothes and shoes will help as well.
  • Physical needs: Getting enough rest and nutrition is also very important.

Once you have these requirements, you may turn your close your messengers/pagers and start working on your tasks. Once it gets dark and you still don’t want to leave the office and you still think about your accomplished tasks or next tasks, you will know that you entered that state (and it feels good :) )

Problems in today’s programming styles

Today, most developers are treated as monkeys. You may receive a 300 page of design on your desk and be asked to implement those in short time. Or, your boss may often call your tasks “easy and simple” and ask you why the project have bugs or breaks down. The problem is, with the latest developments in technologies, it became “easier” to implement the tasks. For example; most tools are automated and have “wizards” to “generate” code for you. If you can write programs without these tools, it won’t hurt to use these tools to gain speed. But, the problem happens here: New programmers are not used to writing code without these tools. They are trained with these tools, they know where to click on the GUI to create an object, but they can’t do the same task with pen on paper. In my opinion, a rapid application developer is not a real programmer, s/he may only be the “user” of that tool s/he is using, unless s/he can accomplish a similar task on different environments with different languages or tools. This automation is clearly giving speed and efficiency to development teams, but also taking away creativeness from the new programmers. This creativeness leads to interest and attention, and it leads to programmer’s flow, that’s why most programmers can’t achieve this state.

Links

If you are interested in this subject, you may find the following links interesting as well:

An article on DevX

An article on CodingHorror

An article on Wikipedia

With love and code :)

Bora Bilgin

Posted in General Stuff, Programming.

Tagged with , , , .


0 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.



Some HTML is OK

or, reply to this post via trackback.



Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported
This work by Bora Bilgin is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported.