Hacker News new | ask | show | jobs
by rollcat 1326 days ago
> [...] can you elaborate a bit on what you mean by "discoverability"?

Sure. Mind you I started on this journey when I was 15 years old, my memory of the initial experience is quite hazy on the details.

The problem is: how do you even discover that things like describe-function or describe-variable exist? The tutorial barely explains how M-x actually works, but also doesn't mention the describe-* functions at any point.

Say you accidentally discover it - type M-x describe-function, press <tab>, and are now presented with a daunting list of potential things to learn about. None of the names make sense out of their context, most will be irrelevant for the problem you're trying to solve. Even if you're not solving a problem, but just exploring - how do you find out what's interesting to look at? You look up a couple random functions, figure you don't know why they would be useful - do you even come back to use this system again?

The Emacs nomenclature is often different from what you're used to from literally every other system (paste is yank, window is frame, cursor is point, close OR cut is kill, etc). When you're looking to solve a specific problem (what is the name of the function that I want to bind to Ctrl-v, so I can use it to paste text?), it's very difficult to deduce that the keyword to look for is "yank". How do you even find out you can customize something, if you can't name it?

Meanwhile most of the things that keep me hooked to Emacs nowadays, are hidden gems (both tiny and big) that you'd never learn about, unless someone else hinted you in that direction: magit, tramp, server, align-regexp, fill-paragraph, sort-lines, describe-* - in some cases, it literally took me _years_ to find some of these exist.

The main reason I stuck with Emacs, was that a lot of people kept hyping it as powerful and customizable. But none of the power and customization was easy enough to unlock - not even for a 15 year old, with an overabundance of free time, enthusiasm, and curiosity. The older I get, the simpler my config - I no longer have the time or will to keep tweaking or fixing things. I'd probably switch to VSCode if it had anything half as good as magit.

> To use a simplistic analogy: if you need to travel to the next town and you don't know how to drive, it's probably faster and definitely safer for you to walk or take the bus. Learning how to drive will take time and effort but it will pay off in the long run.

Excellent analogy, and it just happens that I have an excellent counter-argument! I moved to Vienna, a city with public transport system that is so cheap, reliable, and well-connected, that many people don't even care to get a car. The building I live in has 40 apartments, and an underground garage with... 6 cars in it? But when you do need a car, the road system is still there and is pretty efficient.

3 comments

The problem is: how do you even discover that things like describe-function or describe-variable exist?

I would click on "Help" and it gives a lot of help, including Describe>Describe Key or Mouse Operation.

I just looked at the help menu, and with the amount of options presented... I think it serves to prove my point.
> The tutorial barely explains how M-x actually works, but also doesn't mention the describe-* functions at any point.

It actually does, but not by name. It points you to the help system. In particular:

- C-h a - help apropos, search for commands by part of the name getting a list

- C-h k - describe-key

- C-h c - describe-key-briefly

- C-h f - describe-function

- C-h v - describe-variable

All of those are in the tutorial.

I see.I think we're in partial agreement regarding "discoverability" then, although I wouldn't call it "discoverability": I'd say the problem is more simply due to the fact that the tutorial is out-of-date and not very user-friendly. When I started using Emacs I barely looked at the tutorial: its first focus is on how to navigate paragraphs of text using Emacs key-bindings, but as soon as I realized the "normal" bindings (using arrows) worked, I ditched the manual and opened the file I had to work on.

I learned Emacs slowly and piece by piece. But the quality of "third-party" tutorials I've been seeing (like Mastering Emacs and System Crafters, or DistroTube) is quite high. And the forums (reddit or emacs.stackexchange) are quite welcoming.

> it's very difficult to deduce that the keyword to look for is "yank". How do you even find out you can customize something, if you can't name it?

The nomenclature is kind of annoying, though there's good arguments for keeping it that way (mostly around legacy reasons, but also because the names have specific Emacs meanings, eg "point" is not exactly the same as "cursor", "kill/yank" is not exactly the same as "copy/paste" etc). But getting used to these things and figuring out how to use them is really just a web-search away in my experience. You just type "how to copy/paste in Emacs" and you'll come across tons of useful information. Obviously this isn't thanks to Emacs itself, it's thanks to the internet, but my point is that it seems a reasonable assumption that modern users will mostly use this approach to get acquainted with a new system.

In my experience, relying on a search engine/web forums/other expert users is the typical way to learn new software tools. Isn't this how people learn how to use git, or the Unix-style command-line? Commands like "rm", "mkdir" or "rebase" are unfamiliar and even confusing until you take the time to figure them out.

I've done the same when using different IDEs: I don't even know if Eclipse has an official manual/tutorial. But Emacs still beats most other IDEs in terms of discoverability because, after figuring out that "paste" is done by "yank", I can easily look at the internal documentation for the function (which is, granted, quite verbose, but detailed and exhaustive) and even its source code.

> a city with public transport system that is so cheap, reliable, and well-connected, that many people don't even care to get a car.

I agree with your point here; I wouldn't call it a counterargument as much as an extension of the analogy. Public transport works perfectly for people traveling around the same routes. Most IDEs offer less customization but are optimized for specific (common) uses. But if you're going to want or need to use your IDE and system in specialized way, or if you just like to tinker and customize a cool program, you'd benefit from learning how to use Emacs.