程序员的最后一句话,很可能还是Hello World

2天前

文/一个在告别和开始之间来回切换的人

我在一个技术社区看到一个帖子,标题是:“你们离职前写的最后一个程序是什么?”

回复五花八门,有人说是修复了一个遗留了两年没人敢碰的bug,有人说是把文档补全了,有人说是把服务器的某个配置调了一下。但有一条回复让我停住了。那个人说:“我离职那天,在本地建了一个新文件,写了一个Hello World,编译运行,看到输出,然后删掉了整个项目文件夹。那个Hello World,是我在这个公司的最后一句话。”

底下有人问他为什么。他说:“不知道怎么解释。就是觉得,我是以Hello World开始这段旅程的,也想以它结束。中间写的所有代码都属于公司,只有第一个和最后一个,属于我自己。”

那个帖子我反复看了好几遍,不是因为技术含量高,是因为那个人用一个Hello World,给一段职业生涯画了一个很安静的句号。

那个”以Hello World开始,以Hello World结束”的人

后来我在那个帖子的评论区又看到了一个更长的故事。一个工作了二十多年的老程序员,说自己退休前做的最后一件事,是在公司的代码仓库里翻出了他入职第一周写的第一个提交——一个Hello World测试文件。他把那个文件复制到本地,用现在的环境重新编译、运行,看到那行字出来,然后默默关掉了IDE。

他说那两行代码之间隔了二十三年。二十三年前他写那个Hello World的时候,刚学会怎么在Linux下编译C程序,连makefile都不会写。二十三年后他再跑那个文件的时候,已经带过十几个项目、搭过好几个系统架构、写过几百万行代码。但那个Hello World本身没有变过,一行都没变过。变的是站在它面前的那个人。

他说他关掉IDE之后,去吃了一碗面,然后就正式退休了。那个Hello World文件他没有提交,也没有删,就那么留在本地。他说:“那个文件就待在我的电脑里,像一张老照片。我哪天想起来了可能还会翻出来跑一下,看看它还在不在。它大概会在那里,一直等到那台电脑报废。”

我觉得那是我见过的最温柔的、对待一行代码的方式。他不把它当工具、当示例、当教学材料,他把它当成了一个刻度——二十三年前他站在一端,二十三年后他站在另一端。中间的一切都变了,只有那行字,把两端连在了一起。

那个”写了四十年代码,最后只留下一个文件”的人

还有一个故事来自一个已经去世的程序员。他的家人在整理遗物的时候,在他的旧电脑里找到了一个文件夹,叫“我的代码”。里面只有一个文件,是hello.c。创建日期是1987年,最后修改日期是2024年。

家人把这个文件的内容贴到了网上,内容是:

c

#include <stdio.h>
int main() {
    printf("Hello, World!\n");
    return 0;
}

就是最标准的那个版本,一行都没多。家人在帖子里说,他生前在好几家公司工作过,写过很多程序,但没有留下任何其他代码。他的电脑里除了这个文件,几乎没有任何私人代码。问过他为什么不存别的,他说:“那些都是公司的,这个是我自己的。”

这个帖子后来被转了很多次,底下的评论有一条我记得特别清楚:“他写了一个最简单的程序,存了四十年。他可能不是在保存代码,他是在保存自己作为程序员的那个身份。”

我觉得这个说法挺准的。你的工作成果属于公司,属于项目,属于团队。但你的第一个程序,属于你自己。它不是什么重要的作品,没有什么技术含量,但它是一个标记——标记着你什么时候、以什么身份、走入了这个行业。那个标记,不需要别人认可,也不需要别人理解。你自己知道它在就行了。

那个”在告别时写Hello World”的习惯

我后来发现,用Hello World来“结束”一段经历,并不是个例。有人在辞职当天,在公司的wiki上留下了一行print("Goodbye, World!")作为最后的更新。有人在项目结项的时候,在代码根目录留了一个hello.txt,里面只写了一句话:“这个项目的第一行代码是Hello World,最后一行也是。”有人在转岗之前,把他负责的所有服务的健康检查接口都改成了返回Hello from [他的名字],然后才交出去。

这些行为在技术层面毫无意义,但在人的层面有意义。它是一个人在对一段经历说“我在这里待过,我来过,我现在要走了”。而Hello World恰好是一个可以同时承载“开始”和“结束”两种含义的符号——它本来就代表“开始”,但当你在结束的时候再写它一遍,它就被赋予了新的意思。

这跟现实生活里的很多仪式很像。开学典礼和毕业典礼都穿学士服,婚礼和葬礼都献花。同样的东西,在不同的时间出现,代表不同的阶段。Hello World在程序员的生命里,就扮演了类似角色——它既出现在你刚入行的时候,也可能出现在你离开的时候。同一个问候,在入口和出口分别站岗。

那个”没有说出口的告别”

我后来在想,为什么人们会用Hello World来结束一段经历,而不是别的什么东西。

可能是因为,它太简单了。简单到不需要任何解释。你不需要跟任何人说你为什么写它,不需要写注释,不需要做任何附加说明。你就是写了,看了,关掉了。整个过程不需要跟第二个人沟通。它是一个完全私人的动作。

在复杂的工作环境里,你的大部分动作都需要“解释”——解释给同事、解释给上级、解释给文档、解释给代码审查。但Hello World不需要。你写它,不需要解释给任何人看。它是一个完全不带“社会责任”的动作。

这种“不带社会责任的表达”,在成年人的生活里其实是很少见的。你大部分的表达都需要考虑别人的感受、需要考虑后果、需要考虑合不合适。只有那个你一个人在角落里写的Hello World,什么都不需要考虑。它就是给你自己看的。别人看见了也不懂,懂了也不在意。所以它成了一个安全的、私人的、安静的表达方式。

所以那个用Hello World告别的人,其实是在用一种只有他自己能完全理解的方式,对自己说:“这一段结束了。”

那个永远在开始和结束之间来回的东西

我现在想明白了一件事:Hello World这个程序,跟我们的职业生命是同步的。

你第一次写它的时候,你在开始。你后来每一次重新写它,你可能在开始学一门新语言、开始用一个新工具、开始进入一个新环境。它一直在提醒你“这是一个新的开始”。而如果你在离开的时候也写它,它就在告诉你“这也是一个结束”。

开始和结束,在它身上是同一句话。你用它开始的时候,它在说“我来了”。你用它结束的时候,它在说“我走了”。但不管是来还是走,说的都是同一行字。

这可能就是这个程序最特别的地方——它不问你是来还是走,它只说那一句话。你把那句话放在入口,它就是欢迎词。你把那句话放在出口,它就是告别语。同一个东西,看你站在哪一边看它。

我后来也开始在每一次比较大的变动——换工作、转岗、项目结项——的时候,写一个Hello World。不发给任何人,不存到任何公共仓库,就存到本地一个叫“my_hello”的文件夹里,按年份命名。那些文件的内容都一样,但我知道每个都不一样。因为写每个的时候,坐在屏幕前面的那个人不一样了。

我不打算把这些文件传给任何人,也不打算让人知道它们的存在。它们只是我自己的刻度。如果有一天我不能再写代码了,我会打开最后一个,跑一遍,看到那行字,然后关掉。

那句话一直都在,同一个版本,永远不变。而我绕着它,走了一整个圈。