Being Linux Torvalds

Salvatore Sanfilippo

成为林纳斯·托瓦兹

原文由 Salvatore Sanfilippo 发布,订阅该博客

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

当年林纳斯·托瓦兹开发最初的 Linux 内核时,他已经研究过 Minix 的源码,学过计算机体系结构,具备了必要的基础知识,而且显然是一位极其出色的程序员。但为 386 编写一个极简却可用的 Unix 内核(早期的 Linux 可以说是单架构的)这件事,其实也是许多其他程序员和学生能够做到的。所谓许多,是指我也不知道,大概 0.1%、千分之一、万分之一这个量级。显然大多数人做不到这样的事,但能做到的人并不少。如果你看看近几年 Hacker News 上的情况,就会发现有多少用 C 写的内核、从零开始实现的微内核、用 Rust 写的内核,各式各样、各种做法的内核,为树莓派量身定制的小型 Unix 系统、面向 ESP32 的操作系统,等等。写内核不是人人都能做的事,但只要投入足够的精力,不少人是能够完成的。当然,并非人人都能做得好。他毫无疑问是一位天才程序员,所以他做得更好。

然而,林纳斯只有一个。他这种实现能力本身,其实并不能说明太多关于他的本质;我们真正应该关注的,反而是之后发生的事。

他不再写代码

在那些著名开源项目的维护者中,他是极少数在 Linux 开发历史很早期就几乎完全不再写代码、转而专注于领导项目的人。去做领导者、协调者,成为那个对项目的目标应该是什么保持清醒认知的人,诸如此类。这是很罕见的。许多维护者(很长一段时间里也包括我自己)反而会继续直接动手实现,不怎么委派工作,诸如此类。

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

于是他成了项目的领导者,那个掌握想法、把握方向的人。那么,林纳斯到底在做什么呢?他并不是每次都逐行审视每一个补丁。当然,他有时也会深入到某个具体实现中,去弄清楚到底发生了什么。多年来,他也曾写过一些新的子系统,甚至重写过一些:我想他很多年前就曾重写过 USB 层,也重写过虚拟文件系统——我记得他在某个时刻重新实现了它,改变了 inode 及其缓存的结构,还出于其他各种原因做过类似的事。他也会不时继续编程,比如创造 Git 的时候,等等。但总体而言,他并不会逐个、逐行地去细看每一个补丁:他与各个子系统的维护者沟通,去判断某个功能或某个方向,究竟是不是一条该走的路。

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

现在,我认为这才是林纳斯真正的过人之处。他不仅仅是一位极其出色的程序员——那样的人还有其他人。他还是一位出色的维护者、卓越的设计者,是一个能够以连贯的方式掌控一个庞大项目的理念与结构、并与众多人有效对话的人。这件事不是人人都能做到的。

现在,我们就是林纳斯

如今,当我们借助人工智能编程时,我们所处的正是同样的位置。我们就是林纳斯·托瓦兹,未必总有他那样的天赋,但在那些我们不会逐行审查代码的项目里,我们应当承担的角色,正是他那种角色。完全就是他所扮演的那个角色。

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

所以,如果我们认为这个角色很重要,就不应把自动编程理解为“我输入提示词,然后它就把东西写出来了”。氛围编程是对自动编程是什么、以及对大多数人而言自动编程将会是什么的一种错误理解。氛围编程对于那些不具备技术能力、却仍想对自己工具的构建产生影响的人来说,是一件非常有意思的事,诸如此类:所以,欢迎它的出现,因为它让更多人拥有了可能性。但它指的不是这件事。

相反,在那些资深技术人员、资深程序员、资深设计师、资深软件架构师手中,自动编程就是去扮演林纳斯的角色,而让智能体和大语言模型去扮演不同子系统的不同维护者的角色。正因为不是人人都能把这件事做得很好,自动编程同样需要那些能与智能体对话、能把关想法、能清楚知道哪些实现该做、哪些不该做、懂得如何与智能体沟通以让它们做出最好工作、能在其中注入伟大的程序员、优秀的程序员所能直觉感知并预先构想的设计提示的人才。

所以,做得好的自动编程,就意味着去承担林纳斯的角色。而这件事可以做得好,也可以做得糟,可以被理解,也可以被贬低。这同样是一件需要训练、需要学习的事,正如林纳斯当年也必须学习一样:他固然在这方面有与生俱来的天赋,但他也是从“我什么都自己实现”走到了那种能够驾驭一部交响乐、成为乐团指挥的能力。

在我看来,这就是林纳斯的启示,也是一个应该立刻被拿来反驳那些说“有了大语言模型,编程对谁来说都很容易了”的人的论据。

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

评论