文/一个用Hello World标记过很多个起点的人
最近整理电脑文件的时候,我翻到了一个叫”old_works”的文件夹。点进去一看,里面按照年份分了很多子文件夹,从2010年到2026年,零零散散有大概四十多个。每一个里面都有一个叫”hello”的文件,有的是hello.c,有的是hello.py,有的是hello.go,有的是hello.js。
我一个个打开看,发现每一个都只是输出”Hello, World!”的示例程序,没有任何额外功能。但它们的时间戳,对应着我这十几年来每一份工作、每一次转岗、每一个新项目的起点。
四十多个Hello World,四十多个”开始”的瞬间。我看着那些日期,每一个都能想起那天发生了什么——第一次入职时的紧张,第一次用Go时的笨拙,第一次接手遗留系统时的茫然,第一次带团队时的忐忑。所有的这些情绪,都被一个简单的文件记录了下来。
那个”每换一次工作就写一个Hello World”的习惯
这个习惯是2011年养成的,当时我刚从学校毕业,入职第一家公司。第一天领完电脑,配好环境,我下意识地打开了一个文本文件,敲了一个Hello World来验证编译器。
后来我换工作了,在新公司的电脑上又做了一遍同样的事情。再后来换到第三个工作,也做了。再后来换技术栈、换团队、换项目,每次进入一个”新的环境”,我都会先写一个Hello World来”确认路是通的”。
慢慢地,这个动作就不再只是”验证环境”了,它变成了一个标记点。每次写完之后,我都会把那个文件存到本地一个固定的目录里,按时间命名。刚开始只是顺手存一下,后来存多了,就成了一个刻意的动作。每一次写它,我都在说同一句话:”从现在开始,我在这个新环境里了。”
去年我在整理这些文件的时候,把那些时间戳连在一起看,发现它们拼出了我这十几年的职业轨迹。2011年的那个文件是在Turbo C里写的,2013年在Eclipse里,2015年在Sublime里,2017年在VS Code里。工具在变,语言在变,只有那行输出没变。它像一条线,把那些散落的点串在了一起。
那些”不是第一次”的第一次
我后来发现,我的每一个”第一次”都不是真正的第一次。第一次用Go写项目之前,我已经用Go写过很多次Hello World了。第一次用React做前端之前,我已经用React写过很多次Hello World页面了。第一次在Kubernetes上部署之前,我已经在本地用minikube跑过很多次Hello World Pod了。
每个”正式的开始”之前,都有一个”非正式的Hello World”在探路。那个Hello World不参与任何正式的项目,不会被提交到任何代码仓库,不会被任何人review。它就是一个私人的、测试性质的、只为了”确认我能做这件事”而存在的东西。
我后来把这个模式叫”Hello World先行的策略”。想学一个新东西,别上来就做正经项目——先写一个Hello World级别的示例,确认环境能通、语法能跑、基础路径是顺的,然后再开始。这个策略帮我节省了大量的时间,因为很多问题其实是在”基础路径”这一层就出了问题,而如果你直接跳进正经项目,你会以为是你业务逻辑写错了。
那个私人的Hello World,就像是在修一条大路之前,先修一个很小很短的测试段,确认地基是稳的,然后才铺剩下的部分。
那个”每次调试卡住就写一个”的习惯
还有另一个习惯:每当我调试一个bug卡住很久、脑子里乱七八糟的时候,我就关掉那个复杂项目,打开一个新文件,写一个Hello World。跑通,看到输出,然后再回去继续调试。
这个习惯跟”换工作写Hello World”是同一件事的两种表现。一个是在大的”环境切换”时用,一个是在小的”状态切换”时用。但本质都一样——回到那个最简单的状态,确认”我还行”,然后再出发。
我发现很多长期写代码的人都有类似的小习惯。有人是卡住的时候去刷一会儿杯子,有人是去窗边站两分钟,有人是打开一个空文件把脑子里的想法逐行打出来再删掉。Hello World对我来说,就是那个”整理思绪”的工具。它太简单了,简单到我在写它的时候可以完全放空脑子,只让手指做机械动作。而那个”放空”的过程,恰恰是让脑子恢复清晰的方式。
那些”不同的时间,同样的话”
我有时候会想,四十多个Hello World,它们之间有什么区别?
从内容上看,完全没有区别。从代码上看,只有语言和语法的差异。但从”写它们的人”来看,每一个都完全不同。
第一个Hello World,写它的人连编译是什么都搞不清楚。第十个Hello World,写它的人已经能在十分钟内搭好一个完整项目了。第二十个Hello World,写它的人已经开始思考”这段代码以后会不会被别人看到”。第三十个Hello World,写它的人已经开始在帮别人解答”为什么我的Hello World跑不起来”的问题了。第四十个Hello World,写它的人已经不再需要”思考”怎么写了,手指自动完成。
同一个程序,被同一个人,在不同的年份、不同的心态、不同的能力下,写了四十多遍。它记录的不是代码本身的变化,是写代码那个人的变化。而那些变化,如果不靠这些文件来提醒,我自己可能都不会意识到——因为你每天面对的都是当下的问题,你不会去对比”三年前的我跟现在的我有什么区别”。
但那些Hello World帮我做了这个对比。它们整齐地排在那里,每一个都印着日期。你一眼扫过去,就能看到一个人的成长轨迹——从最开始的生疏,到后来的熟练,再到后来的不需要思考。
那个”以后可能不会再写的”文件
去年我用了一个新语言,写了一个新项目的Hello World,存到了那个文件夹里,编号是47。我看着那个数字,忽然想到一个可能性:也许有一天我不会再写新项目的Hello World了。
不是因为我退休了,也不是因为我转行了,而是因为未来可能会有一种完全不同的工作方式——AI生成代码、云端环境直接可用、不再需要本地配置。到那时候,那个”验证环境”的动作可能会变得不再必要。
到那时候,那个文件夹可能就不会再增加了。它会停在某个数字上,成为一份完整的、不再更新的档案。记录着一个人从什么时候开始,到什么时候结束,中间经历了什么。
我那天把那个文件夹关掉之前,想了想这件事。如果那个数字真的停了下来,它停在哪里,大概就是我的职业轨迹的终点。而那个终点附近,有一个数字是1,有一个数字是47,中间隔着的,是我用”Hello, World!”标记过的所有起点。
我开始和结束的方式,可能都是同一行字。
写在最后
前天我又写了一个Hello World。不是因为换工作,不是因为学新语言,就是突然想写一个。打开新文件,敲完,运行,看到输出,然后关掉。整个过程不到一分钟。
我把它存到了那个文件夹里,编号48。然后我关掉了那个文件夹,没有多看。
它在那里,像一个刻度。将来某一天我可能会再打开它,看到一行行按时间排列的、内容一模一样的代码,然后想起每一个日期背后的那个人。那个人一直在变,从二十出头到三十多岁,从只会C到用过十几种语言,从一个人写到自己带人写。但他每次进入一个新环境的时候,做的第一件事,始终没有变过。
那句话也没有变过。它一直在那里,等着被写下来,等着被看到,等着被存到一个不会被太多人知道的地方。然后等到下一个需要的时候,再被写一次。