文/一个在想一件事的人
我有一个习惯,每次去一个新的城市,都会买一张当地的明信片。不寄给任何人,就留着。后来搬家的时候翻出来一看,居然有厚厚一叠。有些城市我已经不太记得当时去干什么了,但看到那张明信片上的邮戳和画面,当时的天气、住的酒店、见过的人,又会慢慢浮上来。
明信片本身没写什么内容,它只是一个标记——记录着某年某月某日,你在那里。
我后来觉得,Hello World对程序员来说,就像那张明信片。它上面没有写太多字,就一句普通的问候,但它标记了你在某个时间、某个环境、某种状态下的“在场”。你不一定记得当时学了什么框架、写了什么功能,但你会记得那个Hello World跑通的瞬间,以及当时坐在电脑前面的人是什么样的。
它像一张明信片,寄给自己
很多人写Hello World的时候,并不觉得自己在做什么特别的事。只是按照教程照抄,看到输出,然后继续下一步。那个文件通常不会被保存,被关掉之后可能就永远消失了。
但总有一些人,会把这个文件存下来。不为什么,就是存了。后来换了电脑又存了一次,换了文件夹又存了一次。慢慢积累,就成了一串按时间排列的Hello World文件。
我在一个论坛里看到有人分享过他的文件夹截图,里面按年份分了十几个文件夹,从2001年到2026年。每个文件夹里都有一个“hello”文件,语言不同、环境不同,但输出内容完全相同。那个人说:“我从没想过要留它们,就是每次写完觉得’嗯,留一下吧’,然后就这样留了二十几年。”
那些文件对他自己来说,就是明信片。每一张都记录着那个时间点他在用什么语言、在什么环境下工作、在做什么项目。他不一定要经常打开它们,但知道它们在那里,就像知道那些年份曾经发生过一样。
它像一张明信片,寄给后来的人
还有一种情况是,Hello World被当作“留给后来的人”的东西。
有一个项目在代码库的根目录放了一个叫“README.first”的文件,里面只有一段话:“如果你是这个项目的新人,先编译这个文件。它不会帮你解决任何业务问题,但它会告诉你‘环境是通的’。这个程序从项目第一天就在,现在还在。如果它跑不通了,别改它,先修环境。”
那个文件的内容,就是一行的Hello World,旁边带了一行注释,写着创建日期和创建者的名字。
后来那个创建者离职了,那个文件还在。新的人来,还是先看它。它没有被归到任何文档里,不在任何工作流程里,只是一个“老朋友”留下的便签。它没有在说什么有用的东西,它只是在说:“我曾经在这里开始,你可以从这里开始。”
这种“留给后来的人”的Hello World,比起技术上的意义,更像是一个人在离开前,在墙上画了一个箭头——“往这边走,这是入口”。那个箭头不指示任何复杂的方向,它只是标记了一个最基础的起点。
它像一张明信片,寄给不在的人
还有一个故事来自一个做开源维护的人。他说他每次发布一个新版本,都会在测试用例里写一个Hello World,单独放在一个目录下。他后来越来越忙,版本发布的任务交给了团队里的年轻人,但那个Hello World测试用例一直没人动过。
他说:“我后来很少直接写代码了,大多数时候在看文档、审PR、回邮件。但那个Hello World还在。每次新版本发布,它都会跑一遍。它像是在替我说:‘我还在看这个项目,我还没有完全离开。’”
后来他真的完全离开了那个项目的维护,把权限交给了别人。但他发现那个Hello World测试用例仍然在每个版本里跑着。有人接手了他的习惯,每次发版还是会把那个用例带上。
那行字已经跟“版本发布”这件事绑在了一起,像一个作者在每一版书的扉页上都写上同样的一句话。不一定有人注意到,但它一直在那里。
它像一张明信片,寄给从未见过的人
还有一些Hello World是写给从未见过的人的。
一个程序员曾在论坛上发过一件事——他在一个几十年的开源项目里,找到了一段注释。注释是在一个Hello World测试文件里的,写于2003年,内容大意是:“这个程序是我在这个项目里提交的第一段代码。不知道后来的人会是谁,但如果有人看到这个注释,希望你还记得,所有的代码都是从一行输出开始的。”
写那段注释的人,在2005年就不在这个项目里了。后来那个项目换了好几拨人,代码重写过很多次,但这个Hello World文件一直被保留着,每一任维护者都同意“别删它”。
如果那个人知道他的那句话后来被很多从未见过面的人读到过,他大概会觉得当初写那个注释花的一分钟挺值的。他没想过要得到什么回应,就是留了一句话。那句话被传了下去,传到了他不认识的人那里。
它像一张明信片,寄给时间
我后来想明白了一件事:Hello World在本质上,是一种“给人留话”的方式。你自己不一定知道你要留给谁,你不一定知道谁会看到它,你不一定知道它会在那里待多久。但你留下它了。
这个“留下”的行为,跟你在一个旧的代码库里翻到一个2003年的注释,看到上面写着“你好,后来的程序员”,是同一件事。都是一个人在某个时间点,对未来的某个人说:“我在这里,我做过这件事,我希望你知道。”
那些文件后来不被打开的概率很大。很多遗留代码库里的Hello World可能从来没人翻开过,它们只是一堆文件中的一个小成员,安静地待在角落里。但这不妨碍“留下”这个行为本身有它的意义。
每一个写下Hello World的人,不管他是否意识到,都是在说同一句话:“我现在在这里。我不知道以后谁会在同样的位置上,但我先打个招呼。”
那个人可能已经走了,可能已经转行了,可能已经忘记自己写过这个文件了。但那个文件还在,那句话还在,那个人的名字还在创建者字段里。
那张明信片,不寄出也完整
Hello World不是写给特定的人看的。它不像书信,有明确的收信人。它更像是一张明信片,你写了地址,贴了邮票,但没有寄出去,就放在抽屉里。你不知道谁会看到它,甚至不确定会不会有人看到它。但那张明信片已经完整了——它上面的字已经写了,你想说的已经说了,不需要对方收到,它自己就是完整的。
这大概就是为什么程序员会写下这么多遍Hello World。他们不是在重复,他们是在用一种自己最熟悉的方式,对“可能看到的任何人”说:“我在。”
那个“我在”,不需要回应,不需要记录,不需要被任何人记住。它在那里,它就是完整的。