'Flow' and the Paradox of the Complex Tool

The psychologist Mihály Csíkszentmihályi has become famous for articulating the concept of "flow," which Wikipedia defines as "the mental state of operation in which a person performing an activity is fully immersed in a feeling of energized focus, full involvement, and enjoyment in the process of the activity. In essence, flow is characterized by complete absorption in what one does." It's also sometimes called "the zone." The expectations of modern connected life are kind of antithetical to flow with its constant stream of interruptions, but that's a rant for another day.

I'm a computer geek. 75% of my work day is spent writing or editing code. A huge chunk of my waking life is spent working in a text editor. This means that the editor I use is incredibly important to me: I want something that allows me to forget about the tool I'm using and just concentrate on my work. Talk to almost any coder about the editor they use, and you'll hear something similar - sometimes what you hear will verge on religious zealotry. Twenty years ago there were only two choices for the serious coder: Vim and Emacs. We had a couple decades of ludicrous flame wars, which have now happily faded away. And both of these editors have become less well known as others like Atom, Sublime and various IDEs (Integrated Development Environments) have gained prominence.

But 20 years ago, vi was the obvious choice to me: it was on every version of Unix in existence. I hated it, but I struggled through learning it because knowing vi was essential to being a System Administrator - which is what I was at the time. Becoming comfortable in vi/Vim doesn't take a day or two: it takes a month or two. It demands you learn the bizarre dichotomy of the insert-mode/normal-mode split and remember a fantastic number of arcane commands. Not just remember them, but commit them to muscle memory, so when your mind thinks "I need to move down 10 lines" your fingers simply type '10j' without your ever stopping to do that mental translation (I'm at that point: I had to stop and think "what DO my fingers do to make that happen?"). But here's the payoff: your fingers never, ever leave the keyboard - everything just ... flows. Reaching for that mouse, clicking on pull-down menus - they're distractions, they break the flow.

Once you know Vim (and I acknowledge that it'll take a long and painful time to learn it), you can enter a distractionless state where you don't think about the tool at all, you just think about the text - whether it's a blog entry or a Python script or an HTML page. Is it a perfect solution? Of course not. When you realize that you want inline syntax checking in Vim, it's not there and you're going to spend an hour installing first Vundle (or some other package manager for Vim), then Syntastic, and finally one (or possibly several) syntax checkers. That kind of broke the flow: I'm updating my tool instead of actually working on the script I wanted to work on. But this is the paradox of the complex tool: it's an incredible enabler of flow when it's set up correctly, but every once in a while (less and less often as you get it better tuned) you find yourself dropping out of flow to tweak your editor. Tools need maintenance and cannot be completely ignored, as much as we'd like that.

Is Vim the right answer for everyone? I think the answer is yes if you have the commitment to really learn it, but I never fought in those flame wars because I think people should use what works best for them. And if that's Atom or Emacs for you, more power to you. Learn your tool well and then let it fade into the background as you work.