Being Linux Torvalds

Salvatore Sanfilippo

成为 Linux Torvalds(林纳斯·托瓦兹)

(本文改编自我的 YouTube 视频文字稿,视频地址:https://www.youtube.com/watch?v=l6lxgYeVZqs

当林纳斯·托瓦兹开发第一个 Linux 内核时,他已经研究过 Minix 的源代码,学过计算机体系结构,具备了所需的基础知识,而且显然是一位非常出色的程序员。但最初编写一个能在 386 上运行的、最小化却可用的 Unix 内核(最初的 Linux 可以说是单架构的)这件事,是许多其他程序员和学生力所能及的。所谓许多,是指比如 0.1%,千分之一、万分之一吧。显然大多数人都做不到这样的壮举,但有不少人可以做到。如果你看看近几年 Hacker News 上的项目,就会发现有多少用 C 写的内核、从零开始实现的微内核、用 Rust 写的内核、各种形态的内核、小型 Unix 系统、为 Raspberry Pi 垂直打造的小系统、为 ESP32 做的操作系统等等。写一个内核不是人人都能做到的,但只要投入足够的努力,不少人是能够完成的。当然,不是每个人都能做得好。他毫无疑问是一位天才程序员,所以他做得更好。

然而,林纳斯·托瓦兹只有一个。事实上,他的这种实现能力并不能说明太多关于他的问题:我们真正应该关注的,反而是之后发生的事情。

他不再写代码了

在著名开源项目的维护者中,他是极少数很早就几乎完全停止写代码、转而专注于项目领导工作的人之一。专注于做领导者、协调者,成为那个对项目目标应该是什么保持清晰认知的单一大脑,等等。这是很罕见的。许多维护者(很长一段时间里也包括我自己)反而会继续亲手实现功能,不太愿意委派,等等。

这也源于对软件的不同理解。Linux 必然要变得无比庞大:这恰恰是一个想要兼容众多设备、平台、子系统,并不断适应时代、适应新软件需求、适应陆续出现的新硬件的内核的本质要求。所以这并不是一个错误。相比之下,Redis 则可以保持自包含。前几天我收到了 Dr. Richard Hipp(理查德·希普)博士在 linenoise 上提交的一个 pull request,他是 SQLite 的作者:他同样追求稳定、极简和高性能,但始终把代码库保持得很小,并且在很长一段时间里持续亲自写代码。而林纳斯·托瓦兹则不然。他立刻就明白,自己必须把时间投入到更重要的事情上,因为这个项目注定会变得远比单个人所能实现的规模要大得多。

于是他成为了项目的领导者,掌握着理念与方向。那么,林纳斯·托瓦兹具体做什么呢?他并不是每次都逐行审查每一个补丁。当然,他有时也会深入查看某个具体实现,以了解发生了什么。多年来,他也曾编写过一些新的子系统,甚至重写过一些:我想他很多年前曾重写过 USB 层,也重写过虚拟文件系统,我记得他在某个时刻重新实现了它,改变了 inode 及其缓存的结构,还因为其他一些原因做过类似的事。他也会不时继续编程,比如创建 Git 的时候等等。但大多数时候,他并不是逐个、逐行、逐细节地审查补丁:他与各个子系统的维护者沟通,判断某个功能或某个方向是否值得去走。

所以,用 Brooks(布鲁克斯)的话来说,用 Mythical Man Month(《人月神话》)的话来说,林纳斯·托瓦兹掌握着内核的设计理念,并持续与内核层级结构中他之下的所有人对话,以确保内核朝着某个确定的方向发展。确保各项开发朝着某个方向推进,无论是从实现的角度(这些开发是如何实现的,质量如何,代码编写方式本身所体现的实现思路),还是从设计的角度:我们想要做什么,不想要做什么,对于模块、调度器、硬件支持、是否集成 Rust 等等,什么是最好的策略。就是这些东西。

现在,我认为这才是林纳斯·托瓦兹真正的天才之处。他不仅仅是一位非常出色的程序员:那样的人还有其他人。他还是一位令人难以置信的维护者、设计者,能够以连贯的方式掌控一个庞大项目的理念与结构,并与许多人进行对话。这件事不是人人都能做到的。

现在,我们就是林纳斯·托瓦兹

现在,当我们与人工智能一起编程时,我们恰恰就处在同样的位置上。我们就是林纳斯·托瓦兹,未必总有他那样的天赋,但在那些我们不逐行审查代码的项目中,我们应该承担的角色,正是那种类型。正是他所担任的那种角色。

只是,这件事更容易掌控:除非我们并行使用大量 agents(智能体),否则它本质上比应对来自四面八方的无数补丁要简单得多。但它要快得多。就好像我们不是以人类的速度与由许多人组成的团队互动,而是与一支由一两个人、三个人组成的团队互动,具体人数取决于我们此刻正在并行开发多少个分支,但他们的速度要快得多,所以会立刻给我们快得多的反馈。这稍微改变了工作方式,但在我看来是向好的改变:更容易,上下文切换更少,需要打交道的人更少,因性格、态度等带来的问题也少得多。

所以,如果我们认为这个角色很重要,就不应认为自动编程就是“我输入提示词,东西就写出来了”。vibe coding(氛围编程)是对自动编程是什么、以及对大多数人而言自动编程将是什么的错误理解。vibe coding 对于那些没有技术能力却仍想对自己工具的构建产生影响的人来说,是一件非常有趣的事情,等等:所以,欢迎它的出现,因为它让更多人获得了可能性。但它不是那回事。

相反,在专家、技术人员、编程专家、设计专家、软件架构专家手中,自动编程是去承担林纳斯·托瓦兹的角色,而让 agents 和 LLMs 去承担不同子系统不同维护者的角色。而且由于不是每个人都能把这件事做得那么好,自动编程同样也需要能够与 agents 对话、检验想法、知道哪些实现该做哪些不该做、知道如何与 agents 沟通以让它们做出最好工作、并在其中加入伟大程序员、优秀程序员所能直觉到并能预先构思的设计提示的人才。

所以,当自动编程做得好时,就意味着承担起林纳斯·托瓦兹的角色。这件事可以做得好,也可以做得很糟,可以被理解,也可以被贬低。而且它同样是需要训练、需要学习的东西,正如林纳斯·托瓦兹当初必须学习一样:他在这方面肯定有与生俱来的天赋,但他经历了从“我什么都自己实现”到那种能够驾驭一部交响乐、成为乐队指挥的能力的转变。

对我来说,这就是林纳斯·托瓦兹的教训,它应该立刻被用来反驳那些说有了 LLMs 人人都能轻松编程的人。

原文由 Salvatore Sanfilippo 发布

本文章由 muse-spark-1.2-contributor 进行翻译