Selling vim (or emacs) to kids

There is this strange vibe around beginner programmers or even older programmers that pick up Linux and the Linux environment in general, to think that restricting themselves to VT100 terminals is pure gold, and they should stick to that for as long as they should live. This sort of elitism is the usual driver behind people dropping Linux and jump back to using Macs and Windows desktops.

There is no real reason to resort to this sort of painful penitence, but people will occasionally convert a gifted young adult to this sort of crap, in the name of all that’s good and pure (their egos, that is). But there’s really no point in restricting yourself to learning programming with vim, console tricks and gdb. So please, kids, stay in school, off dope and vim.

There is absolutely no reason to learn vim in this day and age. The most you should need to learn is how to quit and how to start editing for the occasional remote SSH connection. But very few people need to do that: only those that do heart surgery on servers need to really master this, because nowadays, with the internet connection we usually have, doing a remote desktop connection works just fine, as well as running X applications through SSH (as long as you’re running under an X server).

So why should people learn the complicated way of editing multiple files in a 80×25 grid? Why do some programmers insist on driving people nuts and recommend stone age tools? There is this growing elitism in people that is satisfied by doing something overly complicated without any real reason to do so. It’s like eating with a one-meter fork instead of the usual fork, just because you’re cool, with no real gain in food consumption or digestion. Sure, it helps you keep your diet, but you might as well throw that meter-long fork and go for an overly expensive one thinking that’s the only sane thing you can have (ie. Mac).

UNIX used to be the pinnacle of innovation for the users. Linux nowadays has the amazing possibility (amazing give its heritage) of not requiring a single second of console; and indeed, most main stream distributions try to do that for you. Ubuntu, Fedora, OpenSuSE, they all try their best so that you don’t need to fight with the black lacing of the scary terminal. In fact, if your work would ever require starting a terminal, the distributions already failed; unless, of course, your point is using the terminal, for running scripts that make your job faster than it would otherwise.

But to recommend nowadays vim as a programming environment is stupid elitism and megalomania. Yes, maybe you use it and yes, maybe you’re proficient in it, but why should anyone else suffer? Why learn a number of skills that offer no value? Why learn the intricate ways of vim, if you can do just fine with a normal editor, and you can do better than vim by using Microsoft’s Notepad, a program that was written by a programmer in his first morning of the year 1993, while trying to sober up after promising himself to learn Windows programming in the year to come.

Seriously, Notepad is way better than vim, and if you can use Notepad instead of vim you already have a gain in productivity. I’d recommend Notepad over vim anytime.

That’s why QtCreator is what I recommend when people ask “What tool/IDE/Compiler would you recommend for practicing programming (C++ as of now) for a beginner?“. QtCreator is cross-platform, but does well the job of an IDE, without the hassle of elitism being thrown in your face. You can always do things by hand, but if the IDE helps, why not take that? Why punish yourself?

Seriously, everyone, stop selling vim to kids. Emacs too. In the holy war between vi and emacs, Notepad++ won big time.

168 Replies to “Selling vim (or emacs) to kids”

  1. Posting in this epic thread to say that Vim is still better than most of IDEs in 2015. You get things done more quickly in Vim.

  2. «How many chicks in the first year of college would pick up vim and be happy about it?»

    I don’t know about vim, but three weeks ago we hired part time a first year IT student. In that time she has learned enough to use emacs to do pretty much everything. Including edit multiple file names in a directory using dired, managing git repositories using magit, managing a task list in org mode, and exporting it to html and she can work from home and ask me questions when she gets stuck via IRC using rcirc mode. Finally she is using eshell to run a local copy of jekyll that automatically rebuilds the web site when a file is saved. And then ssh into the server pull changes and rebuild the site.

    Is there a learning curve? Yes, that’s what being a professional is all about, mastering the most powerful tools to do the job. And it’s better to be introduced to these tools early, and get that learning curve out of the way so you can leverage the power of these tools to do professional work. NotePad++ is simply not in the same league as Vim and Emacs.

    And yes she’s happy. And I’m not talking about a middle class white kid in California. This is a khmer girl from a modest background working in our office in Phnom Penh for whom English is definately a second language. She had never even heard of any of these tools before working with us….

  3. Hey, look, someone that doesn’t know what they’re talking about. On the Web! What are the chances?

    Notepad++? I’d laugh if I wasn’t puking.

  4. Let me say my story too, can I?

    Sure you can. But your story reminds me a little bit of my story, even though the outcome is different.

    At the end of the 90’s when I started with Linux I used to write Turbo Pascal under DOS with Borland’s Turbo Vision IDE. So I was very accustomed to its key bindings and other goodies like integrated compiling, linking and debugging.

    So when I tried out different editors in Linux I immediately missed some bindings. I could accept to relearn a few bindings, but I was particular fond of Ctrl-y to delete a line and it seems no editor got the issue of deleting a whole line with a single binding right. Under Emacs it was C-a C-k C-k which is ridiculous* (whereas ‘C’ is Emacs speak for Ctrl). I couldn’t understand why no editor got such a basic thing right which seemed like a no-brainer for me.

    So I rejected Emacs and vi (which I found even more ridiculous with its mode based editing) and I was happy to finally find ‘Freepascal’ which is basically an open source copy of Borland’s IDE.

    But as it turns out I did much less Pascal over time and did more web development with PHP (where also an integrated “compile” step doesn’t matter) and I was somewhat curious about Emacs, because of the buzz around it. So I started to use it more despite my complaints.

    Over time I found more possible customizations, often just by accident because I didn’t really tried to learn my editor or study the documentation. So I found an option to kill a line with just C-a C-k (one keystroke less, yeah!) and other goodies, but it took a while.

    But when I got more serious into development around 2005 and also started with Ruby on Rails I got more serious about my editor and tried to learn more about it. That is not to say that I read a book cover to cover or something like that. I just tried to learn a little bit each day and improve something.

    The effect was enormous. I started to appreciate Emacs more and more and found things impossible in any IDE (so we don’t even need to consider the old Borland IDE here…). I can now say that Emacs was a lifesaver in several critical occasions for me and it’s my main tool in my day to day work.

    And what’s more: because I tried to apply that habit of improving a little thing every day to other tools as well, I also became more fond of vim even though it’s not my main editor. I can appreciate it today as an amazing tool.

    In retrospect it was pitiful of me to reject an editor just because of a single key binding (or an missing “compile” button). Things which seem important at one point in time can turn out completely irrelevant later. But on the other hand it’s understandable: the human is a “Gewohnheitstier”, which probably can only be incompletely translated from German to English as “Creature of habit”. Habits help us to survive and don’t go crazy in this world but at some points they can become a hindrance. Learning new things and relearning old ways can lead to a completely new perspective were old views can turn out hilarious.

    I surely wouldn’t try to force “beginner programmers” (or even the experienced ones) into vim or Emacs, but I don’t mind to show my appreciation for these tools. And I’m happy that knowledge sharing in the programming community improved so vastly compared to the 90’s. It surely would have helped me back then and would have avoided some long deturs.

    As a side note: it’s impressive to see how the the fastes submissions to Adventofcode are done with the most conservative but powerful tools of vim and Perl: Even though I’m not fond of Perl I accept that it’s a proven tool, which went through the time of hardening.

    But then again, as others already wrote in this thread: it’s not about speed. It’s not not about doing the same thing but faster. It’s about being able to work differently and ultimately having to think less about the tool and more about the problem at hand.

    Only much later I learned that there is a default binding to delete a line in Emacs: C-S-DEL, this fact is just not particularly well documented… But that fact has no particular bearing on my point made

  5. If you’re a professional you don’t bother yourself with vim unless you really really want to be annoying. I know, it’s fun to go out with roller blades, but they can take you so far, and you need proper tools (like a car) to drive for more than a few kilometers.

  6. David, did you write this in emacs?

    I could since I have the wonderful ‘Edit with Emacs’ browser extension installed ( That allows one to edit a textbox in emacs with the press of the button without the need to copy and paste around. So one isn’t forced to type text in a tiny textbox with constrained editing capabilities. (Even though one of the nice goodies of Mac OS X is that it uses some Emacs keybindings by default.)

    I probably should have used it considering that it took longer than needed with more mistakes left…

Comments are closed.