VIM Pays Excellent Dividends

Learn it early, if you can.

John Bjorn Nelson
Artifex Deus

--

VIM is stunningly unsexy.

Sometimes, it grants you geek cred. A passerby looks over your shoulder and thinks, “oh, she’s using VIM and the Greybeard’s do as well, so she must know what she’s doing!” But, credibility does not compensate for the much-lamented (and exaggerated) steep learning curve. So, people don’t learn VIM. Or, at least, when I was younger, I didn’t learn it. It seemed like a waste of time.

Instead, I learned programming languages. Lots of them. There were so many novel paradigms and patterns to learn — so many dopamine hits! “Whoa, Forth is so weird!” “My god, LISP is mind-blowing!” “With Erlang, I can scale perfectly!” “Hrm, monads in Haskell must be magic, look at all these tutorials!” “Oh em gee, I can use any pattern I want in Scala!” Basically, any time I came across a cool Slashdot or HN post on some language or framework that only existed in some language, I had to learn it.

Now, it’s not like exposure to lots of different languages and patterns is a waste of time. Learning to program well is similar to learning chess: you need to see lots and lots of board configurations while reasoning through moves that let you accomplish your goals.[1] A commitment to learning grants you a reservoir of prior bitsweat to draw on in the future.[2] That’s valuable.

But, mundane work dominates the practice of programming. Most of the time, you shouldn’t use the Best Paradigm (TM) that exists. You should use the one that is good enough and works well in the language you are using.[3] Clever only gets you geek cred; conventions let you communicate well, both to others and to yourself six months later. That really cool pattern you learned that one time? You may never use it, and even if you do, the marginal gain probably won’t be that impressive.

Meanwhile, you could have learned VIM.[4] Being conservative, let’s say it makes you 5% more productive. More specifically — once your brain maps the keystrokes to muscle memory — it makes you 5% faster at completing the mundane tasks…the ones which dominate programming. That added productivity snowballs. It’s an extra twenty minutes a day to build or explore (or learn), that used to go to copy/paste-like operations.

And, the ironic thing, at least for me?

Ignoring the pure pleasure of play, I learned languages semi-consciously hoping that I would find The One that would let me translate my thoughts into digital reality, immediately. Even today, I feel bottlenecked by this brutish interface — banging on keys trying to render my imagination concrete. But, for now, it’s the best we can do. And, I can translate my thoughts more rapidly…

…with smart editors, like VIM.

[1] Says the guy who never properly learned to play chess…

[2] I’ve said this before — I’m wildly envious of Jeremy Daer’s handle.

[3] I think this explains Scala well. Initially, Scala feels like a language without limitations. You expect magic. Then, you use it for a while. Eventually, it feels like quicksand. Meanwhile, a language like Python — to those exposed to lots of languages — initially feels too restrained. Then, you use it for a while. Eventually, it feels like your closest and most reliable friend. Constraints are liberating.

[4] Or, emacs. Or, really, any other tool that you 1) use constantly; 2) is almost universally applicable; and, 3) makes you more productive.

--

--

Computational Social Scientist Ph.D. Candidate. Wannabe cultural hacker. Expert Bikeshedder.