I’m sitting on some cushion on the floor, headphones on, because I just listened to some #emacsconf talks. Time to take them off and start writing something.
I learned about the conference 15min before it started. Not great timing, I know. But I stumbled into three great talks that I want to summarise. I think writing is a way of learning, and Emacs is a tool for writing, and I’m writing this post in Emacs, so you know where this is going. It’s going to be meta! 😅
Yeah. I’m mostly interested in the social and philosophical aspects of Emacs.
The first talk I want to mention is by @acdw. He runs Breadpunk, “a shared Unix computer focused on bread”. I’ve mentioned them before because I like their manifesto:
Breadpunk rejects the commoditization of life by market capitalism. Breadpunk is an attitude that something our ancestors made largely for free is not something we should be spending money on. Breadpunk is the idea that we have time again, that industrialism gives us time to bake bread. – manifesto
Ah, perfect!
I wrote frowny.el to scratch someone else’s itch as a joke on IRC, but it has been called “pretty useful, for a joke package.” I feel like that encapsulates the spirit of Emacs and that’s why I want to present on this topic. – The True Frownies are the Friends We Made Along the Way: An Anecdote of Emacs's Malleability
The True Frownies are the Friends We Made Along the Way: An Anecdote of Emacs's Malleability
Case Duckworth’s talk was simple. He talked about the meandering journey that led him to Emacs, and specifically, the community around it: how he rewrote his init files a few times; how he watched the conference videos; how he started reading #/r/emacs](https://www.reddit.com/r/emacs) on Reddit; how he joined [\#emacs on IRC. And how one day he’s talking to this other person called alphapapa, and they talk about that tiny problem they have in chat: when they write a frownie – apparently a common occurrence in chat, the “electric parenthesis mode” they are using automatically adds a closing parenthesis. So every frownie :( turns into the world�� biggest gaping mouth, :(). So they write a tiny little minor mode for chat, which is called whenever they type the opening parenthesis, and if the previous character look like “eyes” then the “electric parenthesis” magic doesn’t happen. And then the code is shared. And improved. And shared again. And there you are: your first Emacs package.
It resonated with my own experience. When I was in my twenties, I was into Usenet. I just logged into Google Groups (yikes!) and searched for “Alex Schroeder” and “emacs” and got about 900 conversations. I remember doing a similar search many years ago and getting nearly 2000 messages. I participated a lot. I also knew a lot, even though I hadn’t done a lot of programming. I joined #emacs on IRC. I created Emacs Wiki! The first edit to the SiteMap page of Emacs Wiki was 2001-05-14. That was a long time ago. And soon after I stopped hanging out on Usenet. But I had joined the community, and I liked it. I liked answering questions. I liked writing stuff up. I still feel like I must have written the first 1000 pages of Emacs Wiki all by myself, basically by answering questions on IRC with a wiki page.
And eventually I did get some code into Emacs. A SQL mode I used for work. I worked on the Emacs IRC client (ERC) with Mario Lang and herded all the cats so we got add it to Emacs. Back then, I don’t remember anybody using git. Was it all CVS? Or did we have SVN and SourceForge already? I don’t remember. It was important to get packages added to Emacs itself because there was no Emacs package management. We all just downloaded files from gnu.emacs.sources back then, stuffed them into an “~/elisp” directory, added it to our load-path, and loaded it. It worked well enough, but back then, there was no ELPA, no MELPA, no GitHub. It was a different world.
And yet, we had communities, we had questions, we had answers, and we shared code. We helped each other use Emacs and make it our own.
The second talk I want to mention is @kheya’s talk about Emacs being a “prepared environment”. Last year, he had an interesting talk about the Lakota language and Emacs! 😍
This talk introduces the concept of Emacs as an educational environment and how it expresses elements of Montessori psychology regarding “Human Tendencies”. Human tendencies are innate drives present in everybody that allow us to explore and make sense of our world. – Emacs and Montessori Philosophy
Emacs and Montessori Philosophy
Grant Shangreaux went through human tendencies according to the Montessori understand of human tendencies. I have no idea about Montessori. All I know is that they run a bunch of kindergartens here in Switzerland and they seem to be well regarded even if they don’t belong to the mainstream. I have no children and haven’t talked to anybody about their Montessory kindergarten time, so all I was listening to are the human tendencies Grant mentioned, how he explained them, and how you can something within Emacs to satisfy them all: Orientation, Order, Exploration, Communication, Activity, Manipulation, Work, Repetition, Exactness, Abstraction, and Perfection.
Let’s go through them.
Orientation is the tendency to touch things, to know where you are, where you fit in, and where to go from here. Emacs is an apparently endless environment. Most people start with text editing, and I’m writing this post in Emacs right now, but in the back there’s IRC running, and a browser, and a mail client, and sometimes I play music from Emacs… So not only is there all the Emacs functionality it comes with, but there are megabytes of more functionality to load into your Emacs that are distributed with it, and there is more to loaded from packages distributed separately, many ways to connect it to the Internet, to your operating systems, to the programs you have installed. And thus, orientation is important. Orientation means that there are signposts that tell you what to do in order to find more. Manuals. Help about the current mode. Help about the key bindings. Help about these functions. Help about the options. Help setting those options. And so, slowly, it pulls you in.
Order is the tendency to follow rules, to obey conventions. We both impose it on each other, telling each other to follow naming conventions, or how loading our code should not change the behaviour of Emacs unless the user makes an explicit change, activates a mode, or something like that. And once we’ve adapted to it, we can take advantage of it. Knowing the community expectations makes it easier to explore new code. We expect documentation, manuals, comment, hooks, web sites, repositories. Order helps us get things done once we bend to it.
Exploration is the tendency to go where no human has gone before, or so it would seem to us once we start up Emacs. You hit “M-x” and are faced with a gazillion commands you can call, some of them auto-loading more code into your Emacs environment. It’s daunting, it’s intimidating, but it’s also … exciting! And if you join a community, the suggestions keep on coming. Have you tried swiper? Do you use occur? Have you tried moccur? What about all the other variants? There are so many ways to search for occurrences of text in your buffers.
Communication is the tendency to talk to anything: other humans, pets, animals, plants, chatting, posting, tooting, mailing, writing, printing… It’s an endless list. And that’s why Emacs is so much more than a text editor. It’s a platform with which we interact with other people. We make friends, inside Emacs. Some of us fall in love, inside Emacs. This communication enables the community that strengthens us. We have our backs.
Activity is the tendency to do things because we don’t like being bored. Boredom is what drives us. Perhaps these days it’s easy to be distracted. To lose yourself on social media, to let yourself be pulled this way or that way by the algorithms on Facebook, Instagram, or Twitter. You think you have picked the right people, but still the algorithm surfaces and emphasises, hides and reorders. After dinner, I just like to open Emacs, maximise the window, disconnect from IRC, and write. I write blog posts, programs, random tables for my games, and more besides. I sometimes need to focus on doing something, but on my own schedule.
Manipulation is the tendency to fiddle with your tools, to use them, to improve them. We use Emacs to improve Emacs, to examine how it does the things it does, to change them, to adapt them. I’m not even saying that it’s “better” in some way. But perhaps it’s “different” and for my monkey brain, that’s also a reward. When somebody else needs to use my computer to do something, it’s probably hard for them, and the groan and complain. But for me, it’s my self-made multi-tool. Who cares if it’s fast? I made it mine! I changed the colours, and then I changed everything else.
Repetition is the tendency to do what you have always done. When in doubt, do it again. Redo it, but different. Experiment. The doing provides you with the dexterity to do the things without sleeping. You reformat the paragraphs, you save the buffers, you switch, you search, you return to where you just were, and half the time you cannot remember how you did it. C-x b, C-s M-C-%, C-z, C-u SPC, whatever. Your fingers know the drill. All of that motor pattern learning is valuable. It means you get to wield your tool without thinking. It also means that the UI can’t change dramatically. That would invalidate all our drills. But you can change it at your own pace. And so your tool grows with you, at the speed you’re comfortable with.
Exactness is the tendency to have things exactly as you want them. And with Emacs, you can hone that. Everything you don’t like, you can fix and improve until it is exactly so. And if you need to be exact in your text editing, you can program it; you can use keyboard macros, Lisp code, shell commands, and more. It’s satisfying to be exact!
Abstraction is the tendency to learn about the principles governing a thing, and then taking advantage of your new understanding. Text buffers, echo area, text properties, overlays, processes, functions, hooks, variables, and on and on. Of course, programming is like that. But the world in between, when you’re a user and you’re not yet programming, that is important as well. A bit like the use of spreadsheets. Once people understand how they work, they can build their own applications using them. Programming, data storage, computation, it all happens “in there” somewhere. And the understanding of how that works, it’s powerful. You don’t need to learn how to write code in a programming language to benefit from these things.
Perfection is the tendency to improve ourselves, and the tools we use. I used to joke that we keep configuring our Emacs because we wouldn’t know what else to do with it. Of course we do. But working on our tools is a joy in itself. The other day somebody commented on the fediverse: “This is probably why I am a vim user: nobody ain’t got no time to tinker for years with an editor. Once you learn enough vim to work correctly, you are set.” Well… I guess you’re set for text editing. But hopefully you’ve seen that there’s more to life. On IRC we used to say that “Emacs is the editor that keeps on giving.” And it does.
OK. This is going to be my longest blog post ever. I fear that if I stop now, I’ll never finish. The third talk I want to mention is Greta Goetz’s talk about Emacs being the kind of tool and experience that embodies and teaches you the design patterns you need to make it your own.
By championing the opportunity for users to also be co-creators (cf. Beaty et al.), the free software design at the core and center of Emacs teaches us a way of “being” (Alexander, Gabriel) that can be extended to both the Emacs community and beyond, in a knowledge of how to live (Stiegler, Illich). – Emacs as Design Pattern Learning
Emacs as Design Pattern Learning
This last one was an eye opener. Wow! Greta Goetz manages to pull together Christopher Alexander’s thoughts patterns, Ivan Illich’s thoughts on conviviality, and more. While I was listening to the talk, I felt like I wanted to pull quotes from it every minute or two.
Before we continue, let me say this: if you haven’t read Christopher Alexander’s book, A Timeless Way of Building, I recommend it wholeheartedly. It’s about quality, and how to communicate it. The second book is essentially an example of the idea introduced in this first book: to collect specific solutions to specific problems in a kind of “library”, a collection of design patterns that captures good solutions and scales horizontally (you can always write more of them) and vertically (higher order solutions can build on more concrete solutions), that can be communicated effectively, partially, incrementally, that can be improved upon. It’s fantastic, and I loved the style it was written in, too.
The patterns are written for practitioners. They are concrete like that. The pattern language for an architect is different than for a programmer. In all cases, however, it is intended for the person that needs the information to learn from it. There is great vision, no master plan, no theoretical background. There is just the problem, and the solution.
Now you know why I love wikis. The first wiki was exactly that: a pattern language. Every page name a pattern, a problem, a solution, or a discussion. And you kept using the page names on other pages, with all the terms links to their pages. A “link language”, as Lion Kimbro said.
Goetz then starts talking about what makes Emacs an ideal learning environment. We’re back to the human tendencies that Grant Shangreaux described, and back the experience Case Duckworth described. You can use Emacs as text editor, but you can also learn about Emacs, extend it, for as far as you want. It keeps on giving. It grows with you.
Emacs can be used for a variety of things, and in each of them, we recursively find new “centres”. Emacs the text editor, but also Emacs the IRC client, the mail reader, the user-interface for git, for other version control software, for file management, and on and on. You can grow along these lines, and you can find the particular solutions to your individual problems, right here, right now. It’s situated, grounded in your reality.
It can turn non-programmers into programmers. First we fiddle with our init files, then we write our customisations, then write our packages, then we contribute them to MELPA, then we get them added to Emacs itself. There’s a spiral of involvement. You can go along, if you want to. You can partake in and contribute to the evolution of the tool you are using. You don’t need to be disintermediated. You are not a “user” separated from the secret world of “developers”. No, we are all users, and you can be as much part of it as you want to.
This is why interacting with Emacs is a rich experience. It’s not an app where you swipe left or right, or up and down, you don’t click on stars and thumbs up and move on. Emacs is life. It is complex. It supports our decision making, problem solving, it engages our interactions with other humans. We are asked to think about sharing, contributing, about our responsibility towards our fellow humans.
We learn from each other. We see how help is given on the social media of our choice, be it IRC, the fediverse, or some other site; we are socialised into a better society. We learn to help our fellow humans, we learn how to do it in a way that enables others to do the same, and we grow, together.
How different this is from a world where you are only interacting with the software. Or the help system of the software. How alienating that is, in comparison. Seeking help turns into a problem. If we do get help, it’s from some representative who is paid to do it, some help desk, controlled by tickets and service level agreements. But not us.
Now, I realise that much of what was said is not unique to Emacs. The only problem is, I don’t know those other communities, those other tools. I don’t know of another tool that I can use as an interface to nearly everything I do with my laptop. Emacs essentially is my laptop. I need a window manager because I need to switch to some terminal or to a web browser every now and then. But I hate the web browser and the exploitative relation I have with many websites, and I wish eshell were better so that I don’t need a real terminal anymore. I don’t know of another tech community that is so helpful as the Emacs community. I’m sure it exists, I just don’t know it. And I’m sure the bad apples exist in the Emacs community, too. After all, I do have a bunch of them on my IRC ignore list… But on the whole, I think the combination of an extensible, well-documented tool that can encompass all my computing needs, and a friendly and helpful community, have resulted in the development of a strange beast that comes very close to my dream computing. On my own terms.
I love it.
#Emacs
(Please contact me if you want to remove your comment.)
⁂
Today I read a good blog post by Greta Goetz about free software, Open source software, the limits, the financing, the lived experience… and it makes me think of writing a kind of end user manifesto that says we need software freedom, and end user enabling, conviviality. Helping our neighbor might need some extra words.
While there is a lot of responsibility on programmers of all kinds I want to stress that there is also responsibility on laypeople. I remain shocked at how educational institutions, for example, largely adopted just one form of proprietary software to deliver lectures when the pandemic hit – as opposed to holding an emergency debate over what the best approach would be. This is an example of terrible monologism – especially because it is terrible digital course design to rely solely on video conferences to deliver content. – FOSS as polyphonic, interrelational traces
FOSS as polyphonic, interrelational traces
– Alex 2021-11-28 18:19 UTC
---
Today I read a good blog post by Greta Goetz about free software, Open source software, the limits, the financing, the lived experience… and it makes me think of writing a kind of end user manifesto that says we need software freedom, and end user enabling, conviviality. Helping our neighbor might need some extra words.
While there is a lot of responsibility on programmers of all kinds I want to stress that there is also responsibility on laypeople. I remain shocked at how educational institutions, for example, largely adopted just one form of proprietary software to deliver lectures when the pandemic hit – as opposed to holding an emergency debate over what the best approach would be. This is an example of terrible monologism – especially because it is terrible digital course design to rely solely on video conferences to deliver content. – FOSS as polyphonic, interrelational traces
FOSS as polyphonic, interrelational traces
And I’m reading a paper by Greta Goetz.
Through a largely hermeneutic approach, the problem of the technoscientific and its history in cybernetics is remembered in such a way as to remind us of features of our shared creative odyssey towards ‘something of greater significance’ (Dewey) and to show that uncritically downloading the latest app or giving up on the question of taking professional care is for the lotus-eaters. – The Odyssey of techno-scientific literacies
The Odyssey of techno-scientific literacies
Heh. Lotus-eater! The original sheeple.
After they ate the lotus they would forget their home and loved ones, and only long to stay with their fellow lotus-eaters. Those who ate the plant never cared to report, nor return. – Lotus-eaters, on Wikipedia
– Alex 2021-11-28 18:33 UTC
---
emacs isn’t a way of life, but a sect, like jehovas witness or any micro communist party.
– dodona 2021-11-30 10:06 UTC
---
I wonder what sort of outcomes you imagine after leaving such a comment. I imagine you’re not interested in a conversation? Or you actually like Emacs, are a Jehova’s Witness, and a Communist at heart, and you wanted to share your enthusiasm? Welcome!
2021-07-01 How to make conversation
– Alex 2021-11-30 12:02 UTC
---
“I need a window manager”
That’s what exwm is for.
– Martin 2021-12-02 23:26 UTC
---
I think the main gist is that I don’t care about the window manager because all I ever do is switch between browser, terminal emulator, and Emacs, and all three run maximised anyway.
– Alex 2021-12-03 10:18 UTC