At the suggestion of a friend, I watched a TED talk called Mihaly Csikszentmihalyi: Flow, the secret to happiness | TED Talk …. I have read his book, Flow, and so the ideas presented in the talk weren’t new to me. What I was reminded of was the necessity of a high degree of challenge combined with a high degree of skill. As I pondered that it occurred to me that in so many of the cases of flow that I have read about or experienced myself, one of the key factors was a level of familiarity with ones tools that was so intuitive that you don’t consciously think about them.
Take writing for instance. I have developed my typing skills to the point where I don’t think about spelling words anymore. I just think the sentences that I intend to write and they appear on the page. It feels almost like magic.
Similarly, when I write a program, I build it a piece at a time. I prefer interpreted languages, like Lisp or Python, because I can experiment with them as I think about the problem. The IPython environment is especially good for that kind of development as it records every expression you enter and every response that it returns and labels it with an index number (see the screenshot below).
You can also step through the history by using the up-arrow and down-arrow keys. You can edit the expression and then execute it again. Typos are not nearly as frustrating when you don’t have to type in the entire expression again. Notice I refer to the previous output with the _ character. The line that starts with the prompt:
In : computes the square of 42 ( _**2) .
There are many other useful features of IPython. I am still exploring them. The nice thing about them is that they are optional. You can learn about them a little bit at a time and they don’t get in your way if you don’t know about them. This helps you stay in flow by not distracting you.
There are other nifty tools to help you write Python code. I have been using one called Spyder that is a multi-pane Integrated Development Environment similar to Xcode, Eclipse, or Visual Studio, depending on your preference as a programmer. Each of these other IDEs have add on software that helps you develop Python.
I’ve wandered a bit away from the topic but the point that I am making is that before you can experience flow while doing a task, you have to be comfortable doing it. Pick a tool, learn it until it disappears. When you are creating, the tool should become invisible to you. Your focus should be on the code that you’re writing, not the tool that you are writing it with. Furthermore, you should be thinking about solving the problem, not how you get the language to do what you want. That takes a good bit of practice to achieve as well.
To round out my examples by noting another activity where I experience flow. When I’m playing guitar, I experience flow. Especially when I am trying to play a piece that I’ve never tried before. Or when I try to learn a new song on the mandolin. It challenges me and demands skills that I often have to learn to get into the zone. It’s worth it though.
Sweet dreams, don’t forget to tell the ones you love that you love them, and most important of all, be kind.