你写的Hello World,可能比全人类说的”你好”还多

2026年7月25日 上午11:04

文/一个数过自己写过多少行代码的强迫症患者

前两天清理GitHub账号,发现自己公开的仓库有四十多个,私人的还有三十来个。每个仓库里几乎都有一个叫hello或者test或者playground的文件夹,里面躺着一个Hello World程序。

我闲着无聊数了一下,光GitHub上能统计到的,我写过六十七次Hello World。加上本地测试的、写博客用的、面试时候手写的、教别人时候演示的,保守估计超过两百次。

两百次是什么概念?按照平均每说一次”你好”耗费两秒钟算,我说”Hello World”花掉的总时间比我过去三年跟人当面打招呼的时间加起来还多。

这大概就是程序员的宿命。我们对计算机说的”你好”,比对人类说的还频繁。

一个程序的全球方言图鉴

很多人以为Hello World只有一种写法,就是直接输出那句话。但你如果去翻各个国家的编程教材和论坛,会发现这个简单的程序被翻译成了无数种”方言”。

日本人喜欢在开头加一句”こんにちは世界”,然后下面用日语注释写满注意事项。韩国人的教材里经常把World换成”세계”,而且喜欢在前面加上一个笑脸符号。俄罗斯的程序员继承了苏联时代的严谨风格,他们的Hello World示例里永远包含完整的错误处理代码,哪怕只是输出一行字,也要用try-catch包起来。

最有趣的是印度。印度有很多种官方语言,你会在网上看到用印地语、泰米尔语、孟加拉语写的Hello World教程。但不管用什么语言写注释,代码里的那行输出永远是英文的”Hello, World!”——这一点全世界倒是出奇地统一。

我在Stack Overflow上见过一个帖子,有人问”为什么大家都不用自己的母语写Hello World”。最高赞的回答说:因为代码就是代码的国际语,Hello World是这段国际语的第一句会话。你用你的母语写注释没问题,但那一行输出,最好还是让全世界的人都能看懂。

这个回答我记了很多年。后来想想,Hello World其实是程序员世界的”世界语”。不管你在东京、柏林、圣保罗还是拉各斯,你写下的第一行代码输出的都是同样两个单词。这种全球性的默契,在人类历史上大概找不出第二个例子。

那个年代,Hello World是昂贵的

现在的年轻人可能很难想象,四十年前写一个Hello World有多”贵”。

我认识一个退休的老教授,八十年代在中科院某研究所工作。他说那时候整个所只有一台计算机,大家排队上机。每个人分到的机时是按分钟计算的,用完了就得等下一周。

他第一次上机的那个下午,只有十五分钟。他提前在纸上把代码抄好,反复检查了二十遍,确认没有拼写错误、没有漏分号、括号全部配对。上机的时候,手指发抖地敲完代码,编译,链接,运行——屏幕显示了”Hello, World!”。

他说那一刻整个机房的人都围过来看。不是因为那行字有多稀奇,而是因为他是那一届学生里第一个一次就成功的人。没有语法错误,没有链接错误,一次过。

我问他当时什么感觉。他说:”我不敢高兴太久,因为机时只剩两分钟了,我得赶紧把结果抄下来。”他至今还留着那张打印纸,泛黄了,折痕很深,但上面的字迹依然清晰。

每次想到这个故事,再看看我现在写Hello World的流程——打开VS Code,敲几个字,一秒运行,看到结果,然后随手关掉——我就觉得我们这代人幸福得有些奢侈。

有人把Hello World写成了艺术

如果你觉得Hello World只能是黑底白字的终端输出,那你一定没见过那些”代码艺术家”的作品。

国际C语言混乱代码大赛(IOCCC)上,有一年的获奖作品是一个用C语言写的Hello World。整段代码看起来像一幅蒙娜丽莎的画像,密密麻麻的字符排列成画布的形状,但编译运行之后确实能打印出”Hello, World!”。

还有人在Twitter上发起过”用最少的字符写Hello World”的挑战。Python选手用一行print(“Hello, World!”)稳居榜首,但有人用Perl写出了一个只有四十几个字符的版本,看起来完全像乱码,运行起来居然也能输出。

更离谱的是有人用Brainfuck这门极简语言写Hello World。这门语言只有八个指令,代码写出来就是++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.——.——–.这种鬼样子。我当初试着运行过一次,完全不知道它怎么工作的,但输出确实正确。

你看,同一个任务,有人写得像诗,有人写得像密码,有人写得像画。Hello World成了程序员表达个性和创造力的画布。反正逻辑够简单,剩下的空间全留给想象力了。

它也是一个时代的体温计

技术史研究者有时候会用Hello World来”测量”一个时代的编程特征。

七十年代的Hello World,代码里充满了内存地址和寄存器操作,因为那时候程序员离硬件很近。九十年代的Hello World,开始出现类和对象,面向对象编程统治了世界。二十一世纪初的Hello World,大量出现在网页里,JavaScript的console.log成了新一代程序员的起点。最近几年的Hello World,你会发现大量关于环境配置、包管理、容器化的内容——因为软件已经不只是一堆代码了,它是一个运行时的生态系统。

如果你把不同年代的Hello World示例排在一起看,几乎就是一部简写的编程史。每个时代的Hello World都在用自己独特的”口音”说话——七十年代的口音是汇编,九十年代的口音是C++,两千年代的口音是Java,现在的口音是Dockerfile加YAML。

而且这种变化还在加速。我五年前写的Hello World,现在翻出来可能已经没法直接运行了——依赖的库版本变了,语法不兼容了,构建工具换了好几茬。Hello World本身没变,但围绕它的那个世界一直在变。

写给自己的那句Hello

写到这里我想到了一个问题:我们写了这么多次Hello World,有多少次是真正写给”世界”的?

最初的那一次是。你第一次让一个陌生的程序出现在屏幕上,你确实在跟整个数字世界打招呼,告诉它你来了。

但后面的一百多次,其实都是写给你自己的。

换新工作的时候写一个Hello World,是告诉自己”新环境我搞定了,我能行”。学新技术的时候写一个Hello World,是告诉自己”路走通了,放心往下走”。调试到崩溃的时候写一个Hello World,是告诉自己”我还能写代码,我没废,是那个bug太变态”。

甚至有时候没有别的原因,就是心情不太好,想找点确定性的东西——你敲下那行字,计算机永远会给同样的回应。在充满不确定性的生活里,这种确定本身就像一种安慰。

所以Hello World可能真的不是写给世界的。它是写给我们自己的一个暗号。

每当我们在代码的迷宫里走累了,就找一个干净的地方,重新写一遍Hello World。它像一个不会说话的陪练,一遍遍地回应:”我在。你也在。一切正常。”

这大概就是我们一直需要它的真正原因。

世界那么大,需要被问候的事情那么多,而我们的第一个问候,永远留给这个最简单的程序。然后才从这里出发,去写那些复杂的、真实的、改变世界的东西。

可你心里清楚,不管写出多厉害的程序,它都长在Hello World那行代码的根上。