Jach's personal blog

(Largely containing a mind-dump to myselves: past, present, and future)
Current favorite quote: "Supposedly smart people are weirdly ignorant of Bayes' Rule." William B Vogt, 2010

Vim's learning curve is wrong

This image has been around for years:
learning curve

(I actually found this blog post while searching for the image, it's worth a quick read but touches on a different point.)

Here's my first complaint. The axes aren't labeled. Well, I guess that's better than being incorrectly labeled, since now you have a chance to interpret it correctly. The horizontal axis being time is usually a good guess, and in this case is correct. (Which is why emacs is funny.) Learning curves are fairly arbitrary anyway. I think that they're supposed to measure the rate at which one acquires knowledge or ability, the rate at which one learns. They're supposed to measure velocity. Typically, however, creators of graphs intend them to measure either difficulty, frustration, or total ability or amount learned, with perhaps specific pieces of knowledge along the way. They represent your position. Position where? On some path to total mastery. In the above graph, we have a lot of interpretations to work with. I'm going to present the Proper Interpretation of each editor, which is the interpretation I chose for this post, and then explain why vim's is wrong no matter how you look at it.

Notepad is graphed as both difficulty and an absolute amount of editing ability. At the start you gain some ability, you struggle a bit to remember to save as > all documents before saving as anything non-.txt, and then you're done with ability and that extra step doesn't get any harder (or easier). The program will offer you no more. If you interpret this as a velocity of learning, then you begin to learn and continue learning more at walking speed forever. This is absurd, so we won't use that interpretation.

Pico is the same as Notepad, there's just more to learn and more frustration.

Visual Studio is different. It's graphed as a velocity, but as VS fans will tell you it could also be difficulty. There is a potential joke if you interpret it as total amount learned: "you learn, become a master, then the next version comes out and you forget everything you once knew." But this doesn't really match against reality, and I don't think it was the intended joke, but who knows. If interpreted properly as a velocity, you initially start learning fairly quickly, eventually you've learned almost everything, and you start slowing down your rate of acquiring new knowledge until you've achieved total mastery and there's nothing left to learn. You stop moving. Similarly with difficulty/frustration, it's hard in the beginning, reaches its peak difficulty, and starts getting easier and easier as you succumb to the sweet folds of Microsoft and do everything their way, then you fall into a blissful coma as you shovel piles of C++ or C# code around all day.

Both vim and emacs are "nonsense" which makes them funny. Vim's is a step-function at time=0, which is impossible in reality but makes the point. Vim is legendary for its initial difficulty and frustration, even if that legend isn't true. The graph captures that anyway since it's funny. But it doesn't stay that way, which is where the graph fails. If interpreted as a total amount learned, it's even more wrong, because no one has to learn all of vim before they can do anything. If interpreted as a velocity of learning it's closer to the truth, but still wrong. It suggests forever sprinting to learn new things.

emacs is just for the laughs. There's no possible way to interpret it with actual meaning when you can go back in time. (Did you know emacs lets you go back in time? It's just ctrl+alt+shift+windowskey+backslash+b.)

I'll qualify my following statement after I make it. Vim is easy to get started with and low in frustration. Qualified, a decent out of the box vim is what I said. For Windows, that means gVim. For Linux, that means a complete vim installation and purging of the old vi. For Mac, pick your poison.

You start vim. You go donate to children in Uganda. You quickly type "test" to test. But only one 't' gets printed. You freak out and force-quit the program and never speak of it again.

Well, that's if you're a bad person. If you took the time to look and think, you'd see "Oh hey, in the lower left it says INSERT. I should Google about vim before going further." Or use the included vimtutor, I hear good things about it.

You learn vim has 2 modes: command mode and insert mode. (Depending on the tutorial they might tell you of the other modes. (There are more than 3!)) You type "i" to enter insert mode where you can type and (with a proper out-of-the-box vim) backspace what you type, and the Escape key to return to command mode where you can type the command ":w" to write (that is, save), ":q" to quit, or ":x" to save-and-exit. Sometimes the editor will yell at you and tell you to put a "!" at the end of what you just typed. If you're using gVim, you can set it so that it always starts in insert mode and do your saving and quitting with your mouse, like always. Now it's just as like having Notepad++.

That knowledge is only slightly more than required to operate Notepad, and only slightly more difficult. You learn it very quickly, just like with Notepad. Vim is easy.

If you want to learn vim, though, not just a better Notepad, your journey has just begun. But it's a casual journey. The pace is your own. If you're a curious person, you will learn a lot in a short time (weeks). Once you have more than a few entries in your .vimrc file and you're using hjkl for simple navigation instead of the arrow keys, vim has officially become an extension of whom you are. When you start spending most of your time in command mode and expand beyond just hjkl, when you start adding very useful plugins, you're just doing the equivalent of building muscle to make yourself more powerful.

At some point, if you stick with it, you'll reach the "Productive" point where you're at least as productive as you were before, on average. Maybe you get bitten the first time you try to copy/paste to the global copy/paste buffer, so you need to take time out of your editing to find out vim has multiple buffers and the global one is '+', so you can copy globally by pressing v to enter visual mode, and typing "+y to yank the selection. Pasting from what you copied ages ago in your browser with right click is similarly "+p.

But you're Productive. vim is a part of you, you know a lot. It's not so hard to get to be Productive. After this point, you will stop learning for periods of time, only to learn something new and useful here and there that you will remember. Maybe you even do a learning spree every so often.

If I had to graph vim's learning curve as a rate of learning, it would look something like a sine wave with random wavelengths (mostly short after the first initial learning phase). If I had to graph it as total amount learned over time, it would have some spiky climbs at the start and then increase more slowly with long plateaus. Eventually it would stop, it wouldn't increase without bound as there is a finite amount to learn. If I had to graph it as difficulty over time, it would be similar to Pico's graph but after it becomes an extension of your body it would go down to near 0 again, only to rise every so often when new things are being learned. (Such as the nerdtree plugin which I have yet to like enough to use it, but plenty of other people love it.)

I've only been using vim since around 2006-2007. 6 years may sound a lot, but every so often I still learn new things. Not every day or even every month, but every so often. Today I learned "*" searches for the word under the cursor, previously I'd manually type it out or just type ev/CTRL-R0, this saves so much time. What initially pushed me over the edge to learn it was installing Gentoo Linux the first time, and when I had to edit stuff with no GUI it was either vim or nano. Nano's more annoying than Notepad, so I learned vim. I've never gone to anything else.

Which isn't to say I haven't used other editors in the interim, even editors I thought were okay. My first editor was Notepad, that lasted all of a day because I had a friend giving me some initial tips and he told me to use EditPad Lite so I did, and it lasted me for at least 2 years. I've used VS and can't stand it, I've used Eclipse and tolerate it, I've used Notepad++ and Crimson Editor and they're just okay. The editor based on Eclipse for Adobe Flex was nice, but that's a side-effect in that IDEs are useful for being immediately "productive" with a new language/environment at the cost of actually remembering anything. I've used emacs, I'm just not awesome enough to like it.

If you're thinking about making the jump, go for it. Over 1300 hackers can't be wrong! (It's literally #1 there, that means it's the mainstream option.) It's not even close to as hard as the legends say, really. And if you don't like it, that's fine, at least you tried it.

Posted on 2012-07-27 by Jach

Tags: programming, vim


Trackback URL:

Back to the top

Back to the first comment

Comment using the form below

(Only if you want to be notified of further responses, never displayed.)

Your Comment:

LaTeX allowed in comments, use $$\$\$...\$\$$$ to wrap inline and $$[math]...[/math]$$ to wrap blocks.