Emacs: beginner, intermediate, advanced

In a recent Emacs Chat, Bozhidar Batsov mentioned the need for more intermediate to advanced resources, not just tutorials covering the same introductory ground. It got me thinking about different levels of Emacs use, and what kinds of things would help people move upwards.

I think of Emacs beginners as people who are getting the hang of using Emacs. They might even use Emacs regularly. They might have installed and configured a number of packages with lots of help from StackOverflow, coworkers, IRC, and so on. They are not yet comfortable with customization, so they find workflow descriptions and code snippets helpful.

Intermediate users are those who have figured out workflows that fit them well. They may have installed and configured a number of packages. They’re comfortable reading the documentation to figure out how to customize variables, and may even have written a few custom functions and keybindings. They’ve dived into the Emacs Lisp Reference Manual a few times, and know where to go to find examples and common idioms. Some have written tutorials to help beginners get started with useful packages or tips.

Advanced users are those who can imagine a new use for Emacs and make it happen. Here’s where you’ll find people with complex workflows built around combinations of packages, people who write custom modes and other tools, and people for whom hacking Emacs has become a recreational activity. They’re comfortable digging through the source and creating their own versions. They might even package the new code in order to share those features with others. Their code feels like Emacs code, following conventions and idioms.

What have I learned from Emacs Chats about how people move from one stage to the other?

Beginner to intermediate: “Oh, neat, Emacs can do that! I wonder how I can…”

Many people find it inspiring to see how other people have tweaked Emacs. Demos, examples, IRC conversations, and peeking over people’s shoulders are all great ways to find out that Emacs can do more than you think it does, which is an important motivator for moving from the beginner stage to the intermediate stage.

Useful resources could include:

  • Demos of interesting features that require some configuration, with notes on other things you might tweak along the way (exercises for the reader?)
  • Walkthroughs of advanced users’ workflows, since people pick up little tips that advanced users may forget to mention
  • Tips on how to read and modify code

Intermediate to advanced: “I’m in Emacs all the time anyway, so I might as well…”

Going from intermediate to advanced tends to involve a lot of practice in creating little tools, much rereading of the Emacs Lisp Reference and well-written package source code, and participation in the community (through mailing lists, IRC, StackOverflow, Github, etc). It can involve a commitment to use Emacs for way more than you might expect, possibly pushing it to be equivalent or superior to other tools.

People who maintain packages with active communities or who answer questions on mailing lists/newsgroups StackOverflow/Quora/IRC tend to grow a lot, too, since they actively learn from other people’s questions.

Useful resources could include:

  • Practical applications of concepts from the Emacs Lisp Reference
  • Tweaks using internal or obscure code
  • Posts that new features or “What if…” and walk through the code (and possibly the thought process as well)

Emacs is so big, so people probably have different levels of competence for different things. For example, one can be a beginner at Smartparens (memorized the keybindings for some common operations), while being an intermediate/advanced user of completions (have defined a custom completion backend).

What kinds of resources have helped you move from stage to stage? What would you like to see more of?

  • Phil

    I can certainly vouch for the comment about learning by actively answering other people’s questions (aka “The StackOverflow method”). I thoroughly recommend at least keeping an eye on the questions which are asked (many’s the time I’ve learned something useful which it had never even occurred to me to consider); but answering questions is unquestionably a step up in terms of learning.

    Most people agree that we learn and retain information better by “doing” than simply “observing”; so when you have the motivation to “do” something, you are in a great position to absorb new knowledge in the process. When you spot an interesting question and take the time to figure out the answer and then document it for other people, you are engaging in a small-scale exercise in motivated active learning, which is then reinforced by repetition in the process of writing it down.

    Even if you are providing information that you knew already, sometimes in the process of writing the answer you will find yourself questioning some detail, and managing to improve the answer — and your own knowledge — in the process.

    And of course there will be plenty of occasions where another user provides a better answer to the same question; which is great, because you then learn even more than you did by providing the answer in the first place (and I suspect the act of answering still puts you in a better position to absorb the information from the other answers).

  • BruceConnor

    Personally, I agree with Bozhidar that the community could use more intermediate/advanced blogs. There are a couple, but that’s little compared to the amount of fantastic tutorials and introductory guides to various packages and features, which is awesome.
    Perhaps some of these former-beginners who learned from these tutorials should now step up and help carry this torch.

    And now that I’ve written this I feel like I backed myself into a corner. Maybe it’s time I stop blaming others and start writing…

    • http://sachachua.com Sacha Chua

      I’m totally for more people writing! =)

      Hmm, maybe instead of writing yet another beginner-oriented blog series, I should just give in to the temptation to delve unapologetically into deep Emacs geekery. Mwahahaha! It might be esoteric, but it can help demonstrate the art of the possible.