The Tao of Acme
benghancock.github.io
benghancock.github.io
Like a lot of people, I went through an EMacs/Vim phase. Then went SublimeText, and now I live happily in VSCode. I feel very uncool to say it, but I just work really quickly with VSCode and I think it’s more because of a thousand micro-optimized UX choices by Microsoft rather than a particularly elegant core design, which is how I’d characterize Acme based on those demo videos. This is sadly how I feel about a lot of software these days.
I’d be happy to be wrong.
Acme integrates well with external programs. This is really nice, but I don't want to spend the time writing all of my own integrations. Maybe I can justify that effort if I work in one codebase for a long time, but I've bounced around and haven't thought the investment would be worthwhile.
Compare with vscode: actively developed and you just click some buttons to get all the integrations. Just so much less friction.
If acme had an active community around it the situation may be different. But that's just not the case.
There are so many editors to choose from. I get that not everyone wants invest in Vim/Emacs, even though you should and it will pay off, and the vast majority of the programmers that are doing great things are using Vim/Emacs (seriously, I have a list of big names and except for some rare exceptions like James Gosling who apparently uses Netbeans, EVERYONE noteworthy uses Vim/Emacs), and it's OSS, and in Vim's case it's also helping a charity. But if you are the person who just can't get there with Vim/Emacs, at least don't give yourself over to Microsoft. Use Sublime, Nova, BB, etc. They're all great editors by small companies making cool stuff and they'll get way more out of your support than Microsoft.
Torvalds uses MicroEmacs, but I don't know what Poettering, Taymans, Realthunder, Bellard(I assume he knows a CLI editor though) are up to. No clue what the devs of Obsidian use. Lots of LibreOffice devs seem to use VS Code.
And of course, in the JS ecosystem IDEs seem pretty common.
Van Rossum uses Vim it seems. But mostly all the devs I respect most don't seem to talk a lot about editor choice. I guess most of them are probably on a CLI editor but ALL? There's gotta be a few that are on IDEs, right?
What do the Red Hat people use?
Also Sublime/Nova/BB seem to be for Mac and not free.
VSCode being free as in beer is a pretty big draw. There isn't all that many alternatives to VS Code that have that level of features unless you want to do some real setup work, and have another customized suite in your life to maintain.
Note that there is also VSCodium [1], an OSS fork of VSCode with the M$ telemetry removed. I'm a heavy vim user but for cross-platform development with .NET SDK or Node.js VSCodium has pretty good support with the huge number of available extensions. If I want to tweak the editor's behavior, it's not harder, or even easier, than with vim. I find writing an extension for VSCodium in JS more approachable than doing the equivalent with vimscript.
As for the appeal to true hackerdom, I guess I’ll just hope I’m in the minority of great-thing-doers.
I want to make a big stand about Microsoft and free software and tracking and whatnot, but I can't here. I break those rules at work all the time during time crunches.
It's kinda petty, but the bits of screen real estate it steals around the sides of the screen are too distracting for me after having gone full vim for a while. You can hide most of it, but the activity bar keeps showing back up after doing something like opening the git/file explorer/etc panes.
The IntelliJ line is a bit better, you can hide everything pretty easy, but I don't always have a corporate license for those, so I tend to avoid depending on them.
Microsoft really understood, and still does, understand the value of the other kind of design, based on common task patterns and human factors rather than naturally flowing from some core philosophy.
Elegant software always requires you to learn to adapt not only the task but your thinking to the tools, and you're pretty much on your own to design a workflow, Microsoft style design tries to give you an obvious way to do the common stuff, even if it's inelegant and hackish and has no basis in any logic, it's reliable and widely known and easy.
Elegance is a pretty heavy constraint.
If you tend to think in terms of first principles, you're more likely to have boarded the FOSS bandwagon in the first place. If you think in terms of tasks and practicality, you're more likely to have chosen to work for Microsoft. Each ecosystem reflects the principles of those who join them.
Since we have to type to code anyway, my pick is keyboard only, and since I don’t want RSI, I switched from emacs to vim 20 years ago or so, and I’ve been mostly happy ever since.
I do really love the idea of super simple bindings out to shell scripts in acme, that’s not … super simple in vim, but other than that this post filled me with a mix of consternation and revulsion; I guess like he mentions upfront, acme isn’t for everyone :)
On the other hand sometimes people are just holding things wrong.
Simplicity as a design goal means that there are trade-offs. YAGNI is one of those trade-offs: "yes we could probably add that feature, but it would make things complicated and we don't think the additional complexity is worth it for this feature".
I'm a huge fan of this approach. Mostly because in a majority of cases, YAGNI was true: by thinking more about the problem I needed less language features (as the article says).
I'm curious about ACME. I'm annoyed with VSCode (getting too slow), and IntelliJ/Goland feels too Java-y. Vim is fantastic but corrupts my muscle memory, and I can't get past the tutorial for Emacs.
ACME is modern respect of Tioga (Xerox) or Emacs, but it's still a classic editor, or the human-computer interface. Plan 9 while address many unix shortcoming it's still the successors of unix so it's still shell-centered and ACME was/is it's tentative to came back to classic OSes, so editors, models, while retaining unix "cheapness" and "raw simplicity".
I think at Bell Labs someone have thought that "perhaps we still find a way to a non crappy and archaic OS, while satisfy big business needs against the users" so something that was a desktop but still networked in a way that push toward modern data centers/cloud model. That's because re-reading IT history since original Xerox desktops almost all the industry seems to have do it's best do deprive end users of control on their own systems to shift it toward some vendors. All we have today was essentially designed back then, and changed to be proprietary and centralized from emails (now essentially webmails and proprietary chat platforms) to modern "recommendations engines" vs classic user-local scoring tools.
Editors was the biggest and more evident change: from desktop UIs to mere text-writing tools. After a certain amount of time big and narcissist IDEs arrive, explode and then people tired by their bloat want again "classic editors" without even really knowing them, so arrive the era of Sublime, VS Code etc, notebook UIs (like Jupyter) etc perhaps in another decade or two we will unveil the new shiny and powerful editor, witch happen to be a copycat of old Tioga and co...
I think this assumes you do have an idea of the program you're building already, which means you already have idea of it's shape and featureset. I agree with the premise but I think you can't realistically start at "What don't we do". You still need to know what roughly you're building so you know what to take away.
Most often a simple shell script would suffice.
In most other editors writing a plug-in is a more cumbersome endeavour.
I agree about tabs and proportional fonts, but I think those are lost causes.
I asked Russ why he didn’t use syntax highlighting and he was like:
“Do you color code all your English by part of speech?”
That stuck with me.
I would if its function was to express strict logic that will be interpreted by a merciless computer.
But I also use "light mode" (white background, black text) in my terminal, editor, etc, so... take all this however you will :)
(In reference to the topic at hand, I've tried seriously using acme, and although its "elegance" is attractive, I wasn't able to make it stick. I'll still open it or sam up every once in a while, and vis (https://git.sr.ht/~martanne/vis) is an editor I always have in the back of my mind to try to use more.)
[1]: The reasons against syntax highlighting in the article seem to be 1. it hides ugly code, 2. it's possible to waste a lot of time on configuring your colorscheme, 3. (not in the article, but) the old "do you syntax highlight prose? I didn't think so". I don't find 1 or 3 to be convincing, and wasting time on a colorscheme... whether it's a "waste" or not depends on your own preferences and circumstances.
The way ACME UI works, it is how the whole Oberon OS works, selecting text elements with mouse chords and executing commands if they happen to match Module.Command pattern.
That said, the real takeaway from ACME is you don't need an IDE to be a noteworthy programmer. In fact my list of noteworthy programmers (currently has a little over 100 devs on it), which includes Linux kernel devs, GNU devs, Bell Lab devs, programming language author devs, compiler devs, other people who wrote famous software, etc. contains 99% Vim/Emacs users. And no, it's not just people from an older generation, the list contains plenty of up and comers and even teenagers and college students who are already doing great things.
Clearly more features, smarter IDEs, etc. isn't the deciding factor in doing great things. I think what ACME really teaches us is that by taking a less is more approach, we can train ourselves to understand code at a deeper level by paying more attention and taking our time, and giving us the creative freedom to compose code in any way we choose.
Also on my list is Dan Ingalls, who implemented much of what could be considered the primordial IDE -- Xerox PARC's Smalltalk system.
You're right in that IDEs are not what enable great code. But they do make writing great code (or terrible code) faster and easier.
Like emacs it is more then just an editor, it is a full programming environment. If it was extended to support more then just text it could be a full desktop environment.
I see posts complaining about having to write your own integrations....well thats exactly the point of Acme. Its a programmers editor. Your write tools to make your programs, to create better tools to create better programs, to ....
Acme creates an environment, like the unix shell, for all those programs to be integrated. Acme is the modern shell!
It's sad that nothing better has been created since (~30 years)
I never used Acme because I don't have a middle mouse button. (I never used Emacs because I don't have a META key on keyboard.)
Your keyboard has no Alt?
I prefer to use the C-[ prefix, but I've never had a keyboard that was missing the key.