程序员的最后一行代码,很可能也是Hello World

4小时前

文/一个偶尔思考终局的人

前阵子跟一个做了三十多年编程的老前辈聊天,他说他正在做退休前的最后准备——把他的代码仓库整理一遍,把该留的留好,该删的删干净。

我问他:“你准备给你的代码生涯留一句什么话?”

他想了想说:“我会在最后一个项目里,放一个只有三行的测试程序,输出’Hello, World!’。然后不再改它。”

他说这话的时候语气很平静,像是在说一件很平常的事。但我听着心里动了一下。一个写了三十年代码的人,在最后没有选择写一句“我走了”或者“再见”,而是回到他最开始写的那一行上,重写了一遍。

这大概不是偶然。我后来发现,很多人——无论写了多少年代码——在告别一个阶段的时候,都倾向于回到那个起点,把那行字再写一遍。

那个藏在项目角落里几十年的文件

我以前接手的某个老系统,代码最早的一部分写于1995年。那个项目经历了十几任开发人员、几十次架构升级、好几次技术栈迁移。所有的模块都被重写过、重构过、重命名过。

但有一个文件从来没有被改动过。它叫hello.c,放在代码库根目录的test文件夹里,只有三行——就是最标准的那个C语言Hello World。它被创建于1995年,最后一次修改日期也是1995年。

三十年来,一百多个人在这个项目里写过代码,上千次提交,几十万行的增删。但那个文件,像一块被遗忘在工地角落的奠基石,没有人碰过它。它不在构建流程里,不影响任何功能,不属于任何模块。它只是在那里。

我后来去查了一下提交记录,发现最早创建这个文件的人,在1997年就离职了。那个项目里已经没有一个人认识他,也没有一个人记得他做过什么。但那个文件还留着,上面有他的名字缩写,有他当年敲下的那三行代码。

那个程序员大概不会想到,他入职第一天用来测试编译器的Hello World,会在三十年后,还在他曾经工作过的项目的代码库里。比他写的任何业务代码都活得久。比他负责的任何模块都活得久。比他自己的任职时间都活得久。

那个拒绝被删掉的Hello World

我后来问过那个项目的当前负责人,为什么这个文件一直没被删掉。他说:“以前有人提过删,说它没用。但后来大家商量了一下,觉得还是留着吧。”

“它就像一个老邮戳,盖在这个项目的封面上,告诉你这个项目什么时候开始的。你把它删了,项目还能跑,但你就不知道它从哪里来的了。”

后来那个项目迁移到新平台的时候,所有模块都被重写了,但那个hello.c文件被原样复制了过去,路径没变,文件名没变,内容也没变。它跟着那个项目搬了一次家,从老仓库迁到了新仓库,像一件祖传的家具,搬家的时候不管多沉都要带上。

我后来想,那个文件之所以能被保留三十年,不是因为它有多重要。恰恰相反,是因为它一点都不重要——它不影响任何东西,不造成任何负担,不占用任何资源。它小到可以被忽略,所以没人费心去删它。

那些重要的文件被改过无数次,被重构、被优化、被重写。只有不重要的东西,才能保持原样。三十年前那个程序员留下的痕迹,其实是以“不重要”的方式保留至今的。

那个三十年后还能编译的程序

我试过把那个hello.c文件在现在的环境里编译——用2026年的编译器、2026年的操作系统。编译通过,没有任何警告,运行之后输出了那行字。

三十年前的代码,在三十年后的环境里,不需要任何修改就能正常运行。这在软件世界里几乎是一个奇迹。你知道有多少三年前的代码现在已经跑不起来了吗?依赖升级了,API变了,语法被废弃了,环境不兼容了。但那个1995年的Hello World,没有依赖任何外部库,没有调用任何可能被废弃的API,没有使用任何会被改变的特性。

它用最简单、最稳定的方式,做了一件最简单、最稳定的事情。稳定到三十年后的环境依然认得它,依然能执行它。

那个写它的程序员在1995年的某一天敲下了这几行字,然后在1997年离开了。他不知道这个文件会在这里待多久,不知道三十年后还会有人编译它。他大概也没有想那么多,就只是写了它。然后它的寿命比他自己在这个项目里的时间长了三十倍。

那个在离职时留下Hello World的人

我还听说另一个故事。一个程序员在离职那天,往代码库里提交了一个文件叫goodbye.txt,里面写的是“Goodbye, World!”。然后他走了。

后来那个项目的人看到这个文件,会心一笑,然后把它也留着了。跟hello.c放在同一个目录下面,一个入口、一个出口,隔着一个几十年的项目。他在的时候没人注意过这个文件,他走了以后反而成了一个被记住的印记。

后来那个项目里还多了一个不成文的规定:新人入职的时候,在hello.c里写下自己的名字缩写,作为一种“签到”。虽然从来没有人正式定过这个规矩,但一代一代新人,都默认了这件事。那个1995年的文件下面,慢慢多了一行一行的注释,每行一个名字,按年份排列,像是程序员版本的“同学录”。

写那个文件的人大概永远不会知道,他三十年前敲下的三行代码,后来成了一个传统。他本来只是验了一下编译器,后来那三行代码成了那个项目里活得最久的东西,比项目本身还老,比所有参与过这个项目的人都老。

那个所有人都会回到的地方

我后来在想一件事:为什么代码库里那些“有用的文件”被改来改去、拆了重写、删了重建,而那个“没用的Hello World”反而能一直留下来?

大概是因为它承载的功能不是“执行某个任务”,而是“标记某个时间”。项目是在一个程序员写下这行代码的时候开始的。只要这行代码还在,项目的“根”就在。你可以重构所有的业务逻辑,你可以重写所有的功能模块,你可以把整个项目拆散再重组,但只要那个Hello World还在,你就知道“这还是一个项目”,而不是“一个新的东西”。

它像一根钉在墙上的钉子。上面挂满了东西——需求文档、设计图、用户反馈、bug列表。东西换了一茬又一茬,但那根钉子一直在那里。你知道它在那里,你知道它是第一个被钉进去的。

那个1995年的程序员,在三十年前钉下了这根钉子。他大概不会想到,后来有一百多个人,在这根钉子上挂了几十年的东西。他也不会想到,这根钉子在他走了之后,还会被后来的人看到、摸到、记住它的位置。

那行字,可能是你留在这个世界上最长的一句话

我后来在整理自己的代码仓库时,发现最早的一个文件是2009年的。我打开它,里面是一个三行的C++ Hello World。我看了它很久——十六年前我写的东西,居然还在。我换了不知道多少台电脑,搬了不知道多少次家,换了不知道多少份工作,但那个文件竟然一直跟着我,从一台电脑到另一台电脑,从一个文件夹到另一个文件夹。

我可能不会记得我十六年前写的任何其他代码,但我记得这个文件。因为它是第一个。第一个后面,才有了后来的所有东西。

如果真的有一种方式可以留一句话给后来的世界,我觉得Hello World可能是最合适的那一句。它不说什么大事,不表什么态度,不表达任何复杂的情绪。它就是说了一句“我在”。而那个“我在”,是所有后续事情的起点。

如果你在某个旧硬盘的角落里,翻出一个hello.c或者hello.py或者hello.java——那可能是某个你认识或者不认识的人,在很久以前的一个下午,第一次让计算机听了他/她的话。那个人后来可能走得很远,写过很多复杂的代码,做过很多厉害的项目。但那个最早的文件,是他/她留下来的、最干净的一句话。

那句话没有变过,五十年前是那行字,今天还是那行字。一百年后,大概也还是那行字。

只要还有人打开一个新文件,敲下那几个字符,然后按回车,看到它出现在屏幕上,那句话就会一直活着。比任何一个项目都久,比任何一个人都久,比我们自己都久。