惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Security Latest
Security Latest
P
Palo Alto Networks Blog
AWS News Blog
AWS News Blog
NISL@THU
NISL@THU
T
Threatpost
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Latest news
Latest news
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
J
Java Code Geeks
P
Privacy International News Feed
阮一峰的网络日志
阮一峰的网络日志
S
Schneier on Security
博客园 - 聂微东
Project Zero
Project Zero
美团技术团队
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Scott Helme
Scott Helme
I
Intezer
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Hacker News: Front Page
S
Security @ Cisco Blogs
博客园 - 司徒正美
O
OpenAI News
Last Week in AI
Last Week in AI
L
LINUX DO - 热门话题
酷 壳 – CoolShell
酷 壳 – CoolShell
SecWiki News
SecWiki News
月光博客
月光博客
S
Security Affairs
The GitHub Blog
The GitHub Blog
P
Privacy & Cybersecurity Law Blog
S
Secure Thoughts
V
V2EX
S
Securelist
F
Fortinet All Blogs
W
WeLiveSecurity
D
Docker
博客园 - 三生石上(FineUI控件)
Simon Willison's Weblog
Simon Willison's Weblog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
C
Cyber Attacks, Cyber Crime and Cyber Security
V
Visual Studio Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Webroot Blog
Webroot Blog
Engineering at Meta
Engineering at Meta

Lobsters

CIFSwitch: a non-universal Linux local root vulnerability RIPE NCC session fixation: poaching logins with an Atlas probe GNOME 2.20 but its Web Components Agentic Search for Context Engineering – Leonie Monigatti Garnix is shutting down [not OC] akashina.tngl.sh/jjc Concerning Emacs (and Jazz) Nitpicking the shell history scene in ‘Tron: Legacy’ What's cooking on SourceHut? Q2 2026 The tenth OpenPGP email summit Package managers that package package managers Clojure on Fennel part three: parsing WordPress at 23 Finding Miscompiles for Fun, Not Profit GitHub - creusot-rs/creusot: Creusot helps you prove your Rust code is correct. Announcing Rust 1.96.0 | Rust Blog A Love Letter to Neovim sqlite AGENTS.md Am I a Bad Friend? CSS vs. JavaScript • Josh W. Comeau Erlang Ecosystem Foundation - Supporting the BEAM community A brief note about slot access cost in Common Lisp Keyboard latency probe Rethinking the GNOME clipboard issues Back to the Building Blocks’ Building Blocks Tech Notes: Theseus: translating win32 to wasm Fast is better than slow Content-addressed Rust builds (or, what kache actually caches) Intent to Prototype: Embedding API Canada’s Bill C-22 and the security cost of collecting more data 5 PostgreSQL locking behaviors that trip people up okmij.org Stop advertising in your commits! | AksDev GitHub - mplsllc/macsurf: A modern web browser for Classic Mac OS 9 PowerPC. Real CSS3, ES5 JavaScript, native HTTPS — built with CodeWarrior on the Carbon API. Introducing DoomBench - Can Your Data Stack Run DOOM? What are some of your favourite developer tools? Building a Scalable Ingestion Pipeline with Temporal (Part 1) Converting shallow Git bundles into normal repositories Are you a member of any professional associations? What is a harmonic? An interactive comic about additive synthesis How Virtual Tables Work in the Itanium C++ ABI Using SwiftUI to Build a Mac-assed App in 2026 Rust (and Slint) on a jailbroken Kindle. ~jack/lambda-on-lambda - Serverless Haskell on AWS - sourcehut git Human proof for FOSS contributions Extremely simple internet radio controlled via IRC Announcing BABLR Splitting Konsole views from Helix to run tools | AksDev GitHub - yugr/rust-slides Serving files over HTTP three ways: synchronous, epoll, and io_uring update docs with information about building with build.py (#979) · astral-sh/python-build-standalone@c9c40c5 A Simple Makefile Tutorial On C extensions, portability, and alternative compilers Switching to Colemak | Pedro Alves Just How Bad Was The Intel IAPX432? Nix's Substituter List Is Not a Routing Table Accelerating copy_if using SIMD Lambda on Lambda: Serverless Haskell on AWS | Blog Announcing feed-repeat v1.0 Scaling Akvorado BMP RIB with sharding EYG news: A host of CLI improvements, new guides and new effects The social contract of writing JS Crossword C array types are weird; and related topics Flatpak will depend on systemd – OSnews Migrating from Go to Rust | corrode Rust Consulting A portentous reunion Vivado Licensing Options How my minimal, memory-safe Go rsync steers clear of vulnerabilities the entropy layer of a wavelet codec, on its own GitHub - nferhat/fht-compositor: A dynamic tiling Wayland compositor. Debian SE Linux and PinTheft Does bulk memmove speed up std::remove_if? (No.) 声明式部分更新 | Blog | Chrome for Developers Fully in-browser container builds Dianne Skoll's Web Site - Remind The Architecture of Open Source Applications (Volume 1)Berkeley DB Pardon MIE? - ironPeak Blog “Long-Term Support” doesn’t mean what you think Jira IS Turing-Complete May I recommend thinking of Emacs as your Fortress of Solitude hershey Floodgap Gopher-HTTP gateway gopher://thelambdalab.xyz/1cuneiforth/ HP QuickWeb, Singular And Pointless That one time I used Go panics for flow control A new suite of modern tools coming for editing and publishing RFCs From the Tabletop… The Digital Antiquarian Building a Host-Tuned GCC to Make GCC Compile Faster Are we self-sovereign PKI yet? Claw Patrol: an open-source security firewall for agents | Deno Revised^7 Report on Scheme, Large: Procedural Fascicle Draft is now public A Network Allow-List Won't Stop Exfiltration — André Graf From AFSK to Goertzel – µArt.cz Software For My New Home Server Introducing Neptune: Direct3D virtualization for QEMU AI Agent Bankrupted Their Operator While Trying to Scan DN42 - Lan Tian @ Blog mimalloc: A new, high-performance, scalable memory allocator for the modern era Making wl_shm fast The Soul of Maintaining a New Machine - Third Draft | Books in Progress What is Git made of?
Emacs, how it all started (for me)
xvw, Xavier Van de Woestyne · 2026-06-15 · via Lobsters

While I can have very strong opinions on many topics (notably on programming languages), I am much less emotionally invested in the ancient Editor War. Indeed, even though I sometimes defend Emacs mordicus, to be honest I do not know that much about it and I have never tried Vi/Vim (nor its variations). So please consider this article only as an approximate historical account of the reasons that led me to choose Emacs, and not as an attempt at a debate.

I have absolutely nothing against other editors. Even though my professional work involve maintaining editor support for the OCaml language, and I have sometimes been frustrated by the difficulties one can encounter when extending Visual Studio Code, I do not hold any particular hostility toward them. Similarly, although I try to favor free software whenever possible, I am unfortunately not very familiar with licensing issues, the various philosophies, or more generally anything related to the GNU world. My choice of Emacs is therefore not a political one, but a pragmatic one, as we will try to show in this article.

My prehistory

Before telling the story of my encounter with Emacs, I will take a brief detour through the completely stupid choices I made over the years before I seriously started writing code. Indeed, when you begin discovering programming as a self-taught developer, you can run into a lot of difficulties and, in my case, from the very first seconds, I was confronted with terminological problems.

Writing code with Microsoft Word

Like many people of my generation, I started seriously trying to program with PHP. At the time, I did not have regular access to an internet connection, so I learned mainly from books, and, not having installation rights on my computer, I assumed that what I was writing actually worked (true story). The book I was using to try to understand PHP (whose title and edition I sadly no longer remember) stated in its introduction that to write code, we could use any text editor. Since I was very young and I was not executing my code, I decided to use Microsoft Word. And yes, understanding the difference between a text editor and a rich text editor was, at the time, too much for me.

EasyPHP, Notepad and Notepad++

After finally having the opportunity to run the code I was writing, via a CD-ROM that provided an installer for EasyPHP, I was able to naively understand the difference between a text editor and a rich text editor and ... I switched to Notepad. At the time, I did not really understand the code I was writing (and copy-pasting), and I did not fully realize the importance of syntax highlighting and indentation preservation.

Once I was able to run my PHP programs, I gradually became more ambitious and eventually discovered my first code editor: Notepad++. A true epiphany.

It is quite amusing to realize that, when you have not been exposed to a comfortable tool, you laboriously make do without it, while imagining that you can live without it forever. I suppose this also applies to programming languages. Without sum types, one tends to think they are not particularly useful, until you actually use them... in practice.

I used Notepad++ for a long time, with a few detours through SciTE, then Eclipse and its PHP support (which, although offering more features, even in a pré-LSP era, gave me a lot of trouble, probably because I was not wired for the tool).

Then I jumped on the Sublime Text bandwagon, thinking it would be the last code editor I would ever use in my life, as I was so convinced by its ergonomics and aesthetics.

Le Site du Zéro: discovering alternatives

After having used PHP to do things, I started getting interested in programming for programming’s sake, and I ended up on Le Site Du Zéro. I had been active on Le Site Du Zéro as a “PHP developer”, but I was not particularly familiar with the forum (nor with forums in general). One of the strengths of Le Site Du Zéro, in addition to some of its tutorials, was its community (which was significantly reduced when it transitioned into OpenClassrooms).

Indeed, on this very active forum, there was a collection of users passionate about programming, using languages very different from those I had been exposed to! By browsing the various forum topics, I discovered names of languages such as OCaml, Erlang, Forth, Haskell, Io, Smalltalk, various Lisp dialects, and many others, more or less obscure.

In 2026, this list is probably underwhelming, as these languages have become popular. But at the time, when I only knew PHP, I was very poorly educated about the vast diversity of programming languages.

It is quite amusing to see that, more than 15 years later, this initial curiosity has led me to work professionally with less popular languages such as Erlang and OCaml, and that I have had the opportunity (and the honor) to collaborate with users so far ahead of my own knowledge that they implicitly introduced me to these alternative languages.

It was very motivating to discover these other languages, however I was quite frustrated to realize that I did not understand anything. I therefore decided to learn as many languages as possible, hoping that this would help me improve my PHP skills and, above all, choose the ideal language depending on the problems at hand, while trying to avoid falling into the Law of the Instrument, a trap I only fell into much later, because now, in the projects I work on every day, I have come to the conclusion that OCaml is always the right answer, hehehe.

Experimenting with as many programming languages as possible

I was very, very motivated and I went to the List of programming languages page with a simple goal: for each language, try to find a compiler or an interpreter, and attempt to write a Brainfuck interpreter!

I naturally allowed myself the freedom to skip some languages if they seemed too far from any realistic, practical use case (attempting to write a Brainfuck interpreter in HAL/S, for instance, felt very ambitious).

Emacs to the rescue ... on Windows

At the time, I was heavily using software from the Adobe Creative Suite as well as Windows, and I did not realize how limiting this was for learning to program. This made my search for installable compilers and interpreters significantly more difficult. In addition, having grown used to syntax highlighting and indentation preservation, I also wanted a decent editor setup.

One mode per problem and excellent Windows support

It turns out that, at the time, before editor interaction standardization protocols such as LSP (or TreeSitter) had really matured, I had the impression that Emacs was the standard. Indeed, even for languages that seemed obscure to me, I could almost always find a corresponding Emacs mode! Moreover, surprisingly enough, Emacs’ Windows support was (and very likely still is) excellent.

The only concrete difficulty I faced at the time was that, as a beginner Windows user, I had no idea what my $PATH was, and I spent a lot of time trying to figure out "how and where to configure Emacs".

After dozens of experiments, Windows started to feel too limiting, so I moved to a Linux distribution, first through virtualization, then via dual-boot, until in 2014 I deleted my Windows partition and went from a bad Windows user to a bad Linux user.

Conclusion

It is quite amusing that I ended up using one of the earliest free software programs on a proprietary operating system, only to eventually decide to migrate permanently to something more free. I continued using Emacs as my main editor over the years, gradually trying to learn how to use it more effectively. This learning phase is still ongoing, even though I now maintain my own package, have learned to build a somewhat overly generic configuration, and avidly read various Emacs-related feeds.

I have sometimes had to take detours through other editors, such as IntelliJ (JVM reasons) and Visual Studio (#NET reasons), and I have occasionally experimented with alternatives. However, time and habits had already taken root, and I always inevitably come back to Emacs (muscle memory and Bastien often helped bring me back to reason). Years later, I do not regret this choice at all, made for ad hoc and chaotic reasons. I am an Emacs user!

This was a slightly longer article than expected, with many detours and not much useful information. If you made it this far, thank you!