In short, my question for you hardcore Emacs users is this: have you achieved this "self-reinforcing performance" Steve Yegge talks about?

Emacs is self-hosting: writing things in it makes the environment itself more powerful. It's a feedback loop: a recursive, self-reinforcing, multiplicative effect that happens because you're enhancing the environment you're using to create enhancements.

Do you really feel that enhancing your Emacs eventually made you 10X times more productive, and your productivity continues increasing exponentially, and so on and so forth?
Do you have some examples / experience to share?

As for me, I was using both Emacs and Vim for development (currently stick with Vim), my .emacs and .vimrc are both quite configured to suite my needs and I appreciate power of both of these editors. But I didn't experience this Emacs' "self-reinforcing loop", neither met someone who did (of course, this could be because I'm not truly hardcore Emacser, and haven't met that many Emacsers yet).

For example, at Facebook, the guy next to me was using Vim, and the guy next to him was using Emacs. Both of them were quick and productive as hell, and I attribute this not to the editor they were using, but to their own intelligence and attitude.

But anyway, I'd be glad to see astounding examples from Emacs proponents that would turn me back to the Church of Emacs.


10 X more productive? Not likely. I tend to think the multiplicative factors are more like 1.1, which does add up after a while.

What Steve Yegge is talking about is really a reflection on being an expert in Emacs, and those are very rare. People who are achieving this multiplicative effect are actively customizing their Emacs experience by writing elisp to tailor Emacs to suit their specific needs. For example, Yegge wrote ejacs. Interpreting the Yegge quote strictly implies you're customizing Emacs to make it easier to customize/extend Emacs.

Here's how I'd break down the various levels of expertise as they apply to Emacs:

  • A novice knows how to run Emacs, move the cursor around, make some edits, exit Emacs.
  • An advanced beginner knows how to put some basic customizations in their .emacs, or has completely copied chunks of other people's .emacs into theirs. They know how to make global key bindings, require built-in packages, enable minor modes.
  • Competent Emacs users have large .emacs files, possibly split into multiple files. They download and use non-standard packages, know how to find documentation for commands, modes, view the existing key-bindings, are comfortable with the differences between minor-modes and major-modes. Competent users generally keep a single instance of Emacs running for days/weeks, writing, compiling, running and debugging programs from their Emacs.
  • Proficient users are comfortable writing emacs lisp, creating their own interactive commands, and are comfortable writing minor modes. Proficient users look at the emacs lisp code to gain better understanding of the modes they're using, use the elisp debugger, and commonly use inferior processes (shells, lisp processes, ...).
  • Expert Emacs users write new major modes from scratch, look and modify the C code for Emacs, know what recursive editing is and use it, use inter-process communication to integrate Emacs with external tools. They also read the emacs-devel mailing list.

And since you're asking for personal experience, here are examples of what I've personally done that make it feel like I'm more productive. Note: I happen to work in a company where we're nowhere near the bleeding edge of development environments, for example, we still use CVS.

  • I integrated Emacs with the bug tracking tool: when I make commits, it logs the filename and version in the fields for the bug, and from Emacs I can view my bugs, assign them, resolve them, etc.
  • I wrote a bridge connecting my product (day job) and Emacs, effectively making my product an inferior process - enabling me to make changes to source code on the fly.
  • I extended TAGS handling with find-file-in-tags which provides a number of shortcuts that suit my development environment.
  • I wrote a mode which takes regression results and enables me to jump to failures, examine log files, re-run one or more tests, or enter a debug run, with minimal keystrokes.
  • My weekly status report (yes, I use Emacs for email) is auto-generated using the commits I've made throughout the week.

Those are changes I've made to specifically tailor Emacs to my environment and my workflow.

Am I 10X more productive than others around me? No.

However, for my daily work, there are many tasks that I can do with a couple of keystrokes that others spend much longer doing in their non-customized environment, and which generally requires them to switch between their editor and a web browser or a shell.

Are they astounding examples? No. I'm sure that much of what I've done is already available in Visual Studio. Will my article turn you back to the Church of Emacs? Probably not.

However, if you see a pattern of behavior in your development environment, and you have that itch that's telling you, "I really shouldn't have to do X/Y/Z over and over, if I could only..." then I recommend trying to use Emacs to scratch that itch. That scratch could be the first step down that "self-reinforcing" path that Steve Yegge is talking about.

Minor note: I don't know that many (any?) truly expert Emacs users are actively using the stack overflow sites, or, at least, they're not answering Emacs related questions. I say that based on the top users for the emacs and elisp tags on stack overflow.

  • +1, Nice application of the Dreyfus skill model to Emacs-fu. For readers unfamiliar with Dreyfus: en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition – limist Jan 19 '11 at 19:35
  • Note: I personally consider myself to be a quite adept Emacs user, but I don't customize my Emacs'en simply because I encounter so many systems that customizing the default setup would be counterproductive as opposed to just get the job done. – user1249 Jan 21 '11 at 7:15

This evidence is anecdotal, of course, but your question explicitly calls for anecdotal evidence.

I'm a student doing research in an academic lab which involves scads of scientific computation as well as writing. In such an environment (think: python, SQL, academic special-purpose command line utils, text files, LaTeX/BibTeX), learning emacs made roughly the difference between a hand-trowel and a backhoe. After a year of emacs (at which I would rate myself a solid Competent with a toe dipping into Proficient), I find myself eager to handle problems that my labmates dread. Not because they're lazy and I am diligent, but because it's fun to tear down mountains with a backhoe and onerous to scratch at a mountain with a trowel. One at least two occasions, my team had started arguing about making some complicated change to the format of the report, only to find that task had already been completed before they had even finished arguing about who had to do it. Regexp replace + embedded elisp.

So in the first-order sense, yes, emacs has made me much more productive.

It seems you're asking about gains from productivity in the second-order sense: do my returns from emacs compound? Although I wouldn't rate myself totally Proficient, let alone Yegge, I do think I'm beginning to see the foot of the exponential curve, and that my use of emacs makes further emacsing even more productive. Some brief, anecdotal statistics from the repo to quantify this:

  • In a team of 7, I was responsible for more than half the commits. Adjusting for seniority, I still commit almost twice as often. Not because I'm almost twice as awesome, but because emacs all but handles version control for me. Because I can commit, update and merge painlessly, I check in with smaller discrete chunks, like we all should do. But that means I feel freer to take "bigger risks" (I should mention that we're writing experimental code for scientific research, not for production), which means that I learn more about programming and my subject.

  • In the last report we wrote, svn blame tells me I was responsible for more lines than three times the other two authors combined. (This isn't just because I had the last commit. I was curious about this for a while, so I started tracking it and the results were pretty stable throughout the version history.) Because I'm 6 times a faster writer? No: because emacs is a chainsaw for text. This means I can do the kinds of LaTeX surgery that I never would have bothered trying before. Which means I end up understanding more about LaTeX, which makes me even more productive in the future.

  • 100% of the documentation (both for the code and internal research notes) is mine. Because my labmates don't care about documentation? Well, I didn't really care about it either before I found org-mode. While I am typically uber-type-B about these things, org-mode turned outlining into a mild addiction. Org-mode's instant export to pleasant-looking html and LaTeX removed all of the barriers to responsible documentation and turned it into a kind of game. So now I do it. If it didn't then I wouldn't, or at least I would dread it and put it off and let it leech mental energy.

Other commenters suggest that the causal connection may be precisely backwards: perhaps emacs rewards the highly productive, which would rob confidence from the hypothesis that the median user is likely to enjoy any gains. I might suggest a sort of self-fulfilling placebo effect as well: whether or not emacs has made me any more productive (and of course we'll never know, since I have no identical twin who didn't learn emacs), I have certainly experienced an epiphany in my relationship to structured text. I am excited to use emacs, which means that I use it more, which means that I learn more about it, get more excited, &c. When I discovered BibTeX mode, I remember feeling as though I had just asked a girl out on my first date.

In case you missed that: emacs made me giddy at the thought of editing bibliographical databases. In my work that is worth something, I think.


For example, at Facebook, the guy next to me was using Vim, and the guy next to him was using Emacs. Both of them were quick and productive as hell, and I attribute this not to the editor they were using, but to their own intelliigence and attitude.

This remark rings very true, and is somewhat applicable to every kind of productivity tips.

People who are interested in increasing/optimizing their productivity tend to be more productive because of their focus or behaviour in life, regardless of the efficiency of the productivity tip itself.

It could be sum up as : "You are not a better developer because you are using Emacs or Vim, but the kind of people who are dedicated enough to master these tools tend to be good developer"[1].

  1. This is an horrible generalization so it is not an absolute truth and does not mean much anyway (what is a good/bad developer ? etc )

I've been an Emacs user for about 20 years now, and I have to say that no, I have not reached that point.

To get to the "emacsvana" he's talking about, you really have to make yourself an elisp expert. I've done a bit, but really my skills pretty much end at the level of being able to configure a new mode that someone else wrote. Trying to debug (or God forbid fix) someone else's elisp is a bit beyond me, and writing my own from scratch not even a thought.

This is from someone who actually has used lisp before, and has 20+ years of professional software development experience.

Perhaps I'm just being a wuus or something, but I suspect that very few Emacs users ever get to the point he's talking about.

There's nothing wrong with that really. I know how to make macros, which alone makes me loads more productive with Emacs than I can be with any other text editor. On occasion, far more than 10x as productive. However, it doesn't make me better than someone who knows vi equally well (since it can also do macros).

  • Re: your text in bold, I would be much more surprised if the majority of 20 yr veteran Emacs users, just knew how to do the odd macro. It seems anathema to all things Emacs to be so blissfully unaware of it's potential. – ocodo Jan 21 '11 at 6:50

No, I haven't, and I've never heard of anyone who has. I don't think it happens. I think Steve Yegge is doing what popular bloggers do: he's making a controversial, over-the-top statement to get his point across and to be more visible. I don't think he means it as such. What he probably intends to communicate is this: "Emacs is really efficient to start with, and if you customize it a lot, you learn how to be even more efficient with it, which is great, mmm-kay?"

If he'd just said that, you wouldn't be confused, and he wouldn't have half as many readers.


Look at it this way: Emacs and Vim excel at text surgery and automatization of repetitive keystrokes, not to mention navigation of large chunks of text. This is what Yegge is talking about, although in a more preachy kind of way.

If you have a 10000 line file where you must add a line number to beginning of every line, you might as well spend half a day doing it manually in Notepad.

Or, fire up a macro or use a built in Emacs function for this kind of thing. Then you save half a day of work and you're more than 10x productive.

It's about detecting repetition and eliminating it. That requires intelligence, experience, practise and skill, so not everybody that uses Emacs will see productivity benefits.

  • Or you could do some simple text processing with sed and give yourself the rest of the day off. – Josh K Jan 19 '11 at 16:26
  • @Josh K: Or Perl or awk or shell with paste. Whichever tool you know best, really. – Zan Lynx Jan 19 '11 at 18:02
  • even writing a C program to do that wouldn't take more than 5 minutes – user281377 Jan 20 '11 at 9:46
  • 2
    Emacs is not well-suited for dealing with VERY large files. Gets too sluggish. – user1249 Jan 21 '11 at 7:19

I don't know about "N times faster", but some careful addition of utility functions can make Emacs pretty good at filling out templates. Combine that with a bit of target language awareness and you can do things like "tell emacs you want a function created, tell it the input arguments (types, if the language requires type information) and return value, have emacs create a skeleton for further filling-in".

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.