单一来源
当前只有一个可用来源,尚未完成多源交叉核验魔法时代的Emacs:十分钟建城
Emacs In the Age Of Magic
Rome Wasn't Built In A Day, More Like 10 Minutes
That's the rule. That's the goal now. What are we doing? What's going on?"
-- Jeremy Culhane impersonating Tucker Carlson
Look, we want you to express yourself, okay?
-- Chotchkie's Manager, Office Space (1999)
I began using Claude Code about a year ago in September 2025. For a good week, I woke each morning pinching myself to make sure what I'd witnessed the day previous actually happened. Its handling of all aspects of the coding process blew my socks off then, and it's an order of magnitude more capable now.
On the time scale of our species, the digital age has barely just begun. When I graduated with a computer science degree, the field was largely at a stage Churchill might call the "end of the beginning." And yet, just a quarter-century later, no matter where you turn online you can't escape the faint but persistent chime of the death knell. It seems a longstanding problem in maths or theoretical computer science falls to a toaster on the daily. In what Scott Aaronson is calling The Mathocalypse, OpenAI's latest model took all of three hours to carpet bomb 8,000 research problems, resulting in 372 likely hits, some of them career-makers had they been solved by a human.
When we say "digital age" we mean a state of the art in which sealed up transistors can reproduce the same outputs given the same inputs with unerring precision. The power to unambiguously differentiate an on- versus an off-signal -- the binary "digital" -- might seem trivial, but is 100% the reason why we're so comfortable handing over the reins to computers.
直到随机AI出现之前,这种对指令的僵化遵循一直是我们的技术世界观的基础。所以,当第一批AI科学家吹嘘他们的“专家系统”时,我们这些卑微的程序员在内心暗自发笑。我们那种经过净化、按顺序构建的软件观念,绝不可能承认有一套规则集如此全面,能够涵盖现实世界系统中的任意、无界行为,比如人类对话就是一例。
RMS最近在一个视频中回顾了他在CSAIL关于电路分析器的工作,他在其中,恕我转述,“并没有将电路建模为待求解的方程组,而是像人类那样,通过应用一系列诊断方法来处理它”。我知道——他听起来简直愚蠢至极,即使是在十五年前也是如此。
但在当时,基于规则的编程仍然新颖到足以被视为一种可行的AI方法。特别是,编程的反馈回路和物理人体工程学相比那些仅从穿孔卡片迁移过来的工作流程有了巨大的改进。当单台计算机仍占据整个房间时,运行你的程序往往意味着把它搬下一层楼,然后在队列中等待一个位置,这种野蛮行为就像把你的照片卷轴送到自动冲洗店一样。
当RMS在CSAIL混迹时,仅仅让你的文本编辑器回显你刚刚输入的内容就被认为是一个重大的成就!考虑到编程过程变得多么令人愉快,人们认为基于规则的范式可以用比ENIAC所需少得多的工时,编码足够多的世界内容,从而伪装成一种有感知的智能。
由于原因不完全清楚,自然语言理解被认为是一个AI完备问题,并且拥有一个巨大的优势,即拥有一个可测试的评估指标,比如早期CMU人员最初研究的鸟鸣。AI的正确编程语言肯定必须与人类语法的内在递归相平行。
因此,在乔姆斯基时代的语言研究的大部分时间里,LISP/Scheme是首选的指令集(而在较小程度上,同样递归的Prolog也是如此)。理查德·加布里埃尔写过一些关于东海岸计算两大堡垒——剑桥和穆雷山——之间哲学分歧的有趣文章。
一个迎合了学术界模糊的“按我意思做”的语义,而另一个则恪守工业界严谨的严格规定。毫不奇怪,LISP比C慢得多,但在执行经济性上有所欠缺,它却在表达经济性上得到了弥补。LISP显然是在没有经理监督的情况下拼凑而成的,并选择了那些看起来“目前可用”的符号。
虽然C包含像“creat”和“strpbrk”这样的怪异之处,但至少它们基于真实的单词。LISP神秘的“car”和“cdr”则让任何外行都难以理解。
这就把我们带到了 emacs 这个话题上,经过一千字的冗长铺垫之后。现在,我们要问——既然我们甚至让我这双看惯了世面的眼睛都感到惊讶,我们拥有了一台能轻松搞定所有我们 emacs 爱好者自以为比使用劣质工具的人更快完成的工作的神级机器,那么接下来该何去何从呢?
编辑速度、定制化、LISP 的表现力:我们声称的每一个优势,都在我们停止打字、开始告诉 AI 我们想要什么的那一刻烟消云散了。我们可能觉得自己带着枪去参加刀剑格斗很安全,但现在大家都在发无人机。
以通过 magit 进行 git commit 为例。我们自以为用 C-x g(magit 界面)、S(暂存所有更改)、c c(提交)、用不合语法的英语草草敲出一个毫无意义的提交信息,最后再按 C-c C-c 就能大获全胜,这招真是溜得不行。
现在,Claude Code 知道在完成一个离散的代码块更改后,会提示一个灰色的“commit”,所以只需要快速按一下 Tab 和回车。你赢了,Claude 赢了,Anthropic 还能在你的 git 历史中获得合著者署名。唯一的问题是,你是否也应该获得合著者署名。
在我们弄清楚这一点之前,我们可以从以下两个案例研究中找到乐趣,在这些案例中,一个新手将一个看似可行(尽管未必合理)的结论推向了荒谬的极限。
案例研究 1,excali-mode.el ----------------------------
你:我在墙上装了个挂画钩。Gaude:不错,我知道该挂什么。[离开,十分钟后带着一幅画回来。] 你:那是蒙娜丽莎吗?Gaude:我是 Gaude。我尽力而为。
我可以很容易地想象 excali-mode 背后的思路。emacs 的人宣布了一个画布小部件的新 API,一个高中生琢磨道:“嗯,什么画图应用比较流行?” Qwen 的对话可能如下:
学生:emacs 里有个新的画布小部件。让 excalidraw 用上它。
Qwen:恐怕 Excalidraw 是作为 React 组件实现的。它目前集成在 Electron 应用中,底层有一个对 React 感知的浏览器。你可能想考虑 xwidget-webkit,但那不会利用新的画布 API。
学生:我想用新的画布 API。
Qwen:没问题。
Qwen 随后 proceeded to *reimplement* Excalidraw 的整个技术栈,通过逐层替换相关组件来实现。
+-------------------------------------+--------------------------------+ | Excalidraw (web) | excali-mode | +-------------------------------------+--------------------------------+ | browser | Emacs | +-------------------------------------+--------------------------------+ | JavaScript (compiled from | Elisp | | TypeScript) | | +-------------------------------------+--------------------------------+ | rough.js and Excalidraw's render | the C module (excali-rough.c, | | code (JS) | excali-render.c, ... | +-------------------------------------+--------------------------------+ | Canvas 2D API (ctx.stroke(), | Cairo, with Pango for text | | ctx.fillText()), backed by Skia in | | | Chrome | | +-------------------------------------+--------------------------------+ | the page's
Evidence
来源与证据
当前仅有一个可用来源,尚未完成多源交叉核验。
- 发布时间
- 内容处理
- AI 翻译 / 摘要,需结合原文核对
相关资讯
AI 翻译、摘要和解读仅用于辅助判断;涉及重要决策时,请回到上方来源核实。