I am, by trade, a computer programmer, and flow is a common part of my day. Programming is an inherently rational activity as a computer is as strictly rational a beast as you can imagine, and does only and exactly what you tell it to. I thought it might be interesting to relate my experiences of flow to these 8 criteria:
Clear goals and expectations about the task at hand.
While this is not actually as characteristic of programming in general as one might expect, I certainly find that the periods of flow are when I have a concrete concept of what the next part of a program to implement is, and how it should tie in to what already exists.
Direct and immediate feedback.
Of all the points above, this one is the one I’m least sure of. Certainly the dictum of “Compile early and compile often” is a good one, and a computer delivers brutally honest feedback, but still its quite possible for one to be in a flow state for three or four hours before one reaches a point at which the code might arguably be capable of compiling. Certainly its not feedback from the computer that sustains the flow during these intervals. On the other hand, there is a certain amount of internal simulation of what one has just written than one does, where you run through the code in your head and imagine what a computer would do with it, and there is a definite satisfaction to getting to the end with a result consistent with what you are trying for.
A high degree of concentration.
This is definitely the case. I believe the book “The Psychology of Computer Programming” by Gerald Weinberg ( http://en.wikipedia.org/wiki/Gerald_Weinberg ) makes a good case for programming to be as difficult a mental task as brain surgery or rocket science.
Loss of self-consciousness.
Altered perception of time.
These two, I think, go hand in hand. When there is nothing but the code in your head, then there is no other perception, either of self or of time.
Challenge proportionate to your skill level.
I’m not completely convinced of this. I have gone into flow when writing yet another instance of some piece of code I’ve written a thousand times, where the challenge is practically non-existent. This might be because one gets into the habit of flow as part of programming and one gets an almost Pavlovian response set up.
I am reminded of a research study I read about where they were studying the conditions under which human beings switch from sugar burning (which is the default and provides short-term energy) to fat burning (which is how the body sustains extended efforts). They put typical folks on a treadmill and saw how much exercise it took to have them switch metabolic modes. When they tried a professional athlete, they were surprised to discover that the switchover occurred the moment they pointed him at the treadmill. Merely anticipating exertion was enough to trigger the switchover.
But, on the third hand, I do know that I use moments where I am doing rote work to reexamine how I’ve always done things, to see if there is some reformulation of the assumptions inherent in what I am doing both in the small “Is this really the most efficient way to write this loop?” and in the large “Is iterating twice over this array really the best way of calculating this result?” This bears fruit often enough that it continues to be worth doing.
Feeling of control over the situation.
When one is programming, one is in total control, for good or for ill. When it works, you are the one that made it work, and when it fails, there is no one to blame but yourself.
Activity is intrinsically rewarding.
Again, I’m not sure how rewarding the act of coding actually is. There is a huge reward in having coded something and seeing it work and express your thoughts in the way you imagined. If it wasn’t for that bit though, I’m not sure how rewarding the work would be. Its true that part of it (the problem solving) has the fun nature of puzzles, but I don’t go into flow while problem solving, but when implementing the solutions I come up with.
EDIT: I had to remove the numbers in front of the items since they kept getting auto-changed to the same number “1”.
I am, by trade, a computer programmer, and flow is a common part of my day. Programming is an inherently rational activity as a computer is as strictly rational a beast as you can imagine, and does only and exactly what you tell it to. I thought it might be interesting to relate my experiences of flow to these 8 criteria:
Clear goals and expectations about the task at hand.
While this is not actually as characteristic of programming in general as one might expect, I certainly find that the periods of flow are when I have a concrete concept of what the next part of a program to implement is, and how it should tie in to what already exists.
Direct and immediate feedback.
Of all the points above, this one is the one I’m least sure of. Certainly the dictum of “Compile early and compile often” is a good one, and a computer delivers brutally honest feedback, but still its quite possible for one to be in a flow state for three or four hours before one reaches a point at which the code might arguably be capable of compiling. Certainly its not feedback from the computer that sustains the flow during these intervals. On the other hand, there is a certain amount of internal simulation of what one has just written than one does, where you run through the code in your head and imagine what a computer would do with it, and there is a definite satisfaction to getting to the end with a result consistent with what you are trying for.
A high degree of concentration.
This is definitely the case. I believe the book “The Psychology of Computer Programming” by Gerald Weinberg ( http://en.wikipedia.org/wiki/Gerald_Weinberg ) makes a good case for programming to be as difficult a mental task as brain surgery or rocket science.
Loss of self-consciousness.
Altered perception of time.
These two, I think, go hand in hand. When there is nothing but the code in your head, then there is no other perception, either of self or of time.
Challenge proportionate to your skill level.
I’m not completely convinced of this. I have gone into flow when writing yet another instance of some piece of code I’ve written a thousand times, where the challenge is practically non-existent. This might be because one gets into the habit of flow as part of programming and one gets an almost Pavlovian response set up.
I am reminded of a research study I read about where they were studying the conditions under which human beings switch from sugar burning (which is the default and provides short-term energy) to fat burning (which is how the body sustains extended efforts). They put typical folks on a treadmill and saw how much exercise it took to have them switch metabolic modes. When they tried a professional athlete, they were surprised to discover that the switchover occurred the moment they pointed him at the treadmill. Merely anticipating exertion was enough to trigger the switchover.
But, on the third hand, I do know that I use moments where I am doing rote work to reexamine how I’ve always done things, to see if there is some reformulation of the assumptions inherent in what I am doing both in the small “Is this really the most efficient way to write this loop?” and in the large “Is iterating twice over this array really the best way of calculating this result?” This bears fruit often enough that it continues to be worth doing.
Feeling of control over the situation.
When one is programming, one is in total control, for good or for ill. When it works, you are the one that made it work, and when it fails, there is no one to blame but yourself.
Activity is intrinsically rewarding.
Again, I’m not sure how rewarding the act of coding actually is. There is a huge reward in having coded something and seeing it work and express your thoughts in the way you imagined. If it wasn’t for that bit though, I’m not sure how rewarding the work would be. Its true that part of it (the problem solving) has the fun nature of puzzles, but I don’t go into flow while problem solving, but when implementing the solutions I come up with.
EDIT: I had to remove the numbers in front of the items since they kept getting auto-changed to the same number “1”.