文/一个迷恋极简表达的人
你有没有想过一个问题:那十来个字符组成的一句话,信息含量到底有多高?
我指的不是它在屏幕上显示出来的那十几个字母。我指的是这十几个字母背后承载的东西——五十年的历史、几千万人的共同记忆、一种职业的入门仪式、一个全球性的默契。这些都是被”压缩”在那短短的一行代码里的,你写它的时候未必想到,但它全都在里面。
就像一块小小的芯片能装下几十亿个晶体管,一行Hello World能装下的信息量,比它表面看起来的大得多。
看不见的”元信息”
让我们先看看这行字表面上说了什么:一个人在向一个叫”世界”的对象打招呼。没了,就这些。
但如果把它的”上下文”也算进来,它就在说更多的东西。
它在说:”这是一个初学者刚刚踏进了编程的门。”你在任何场景看到这行字,几乎都能推断出写它的人大概率是新手,正在做第一次环境验证。这行字是一个”状态标记”,标记着”某人刚刚完成了从零到一的跨越”。
它在说:”这门语言的基本语法是长这样的。”不同的语言写Hello World的方式不一样。你看到print("Hello, World!")就知道是Python,看到System.out.println("Hello, World!");就知道是Java。它能被用来”识别”一门语言的基本面貌。
它还在说:”这个环境配通了。”在一个项目里看到一个Hello World的输出,往往意味着某个新环境刚刚被成功配置。它是一个”签收单”,证明”所有必需的组件都已经就位了”。
一个只有十几个字符的句子,同时承载了身份标记、语法示例、状态签收三种信息。这比它字面的”打招呼”要多出几个维度的意义。所以它才能在这么多年的使用中保持活力——不是因为它被反复”使用”,而是因为它被反复”解读”,每次解读都有新的信息浮现出来。
那个最极致的”压缩包”
我有时候觉得,Hello World就像一个极端压缩的ZIP文件。表面上看是一句话,点开之后里面有一整个行业的历史、标准和约定。
比如那个逗号——它是怎么”约定俗成”的?没有人规定过,但大多数人写的时候都会加上。它成了一个”格式特征”,看见它就知道”哦,这是一个标准的Hello World”,而不是随便打印的一个句子。
比如那个感叹号——它是怎么成为”可选项”的?早期有些版本有,有些没有。最后大家的习惯是”大部分时候加,不加也可以”。这种”软性约定”只在特定的人群中存在,非程序员完全不知道这条不成文的规矩。
再比如”World”的首字母大写——为什么不是”world”?柯林汉最早写的是小写”world”,后来的版本大多成了大写”World”。这个”W”的大小写变迁,本身就是一个小型语言学案例——当一个词变成了专有名词,它就会被大写。”World”在这里已经从一个普通的英文单词,变成了一句固定短语的组成部分。
你看,就这么一行字,光是一个逗号、一个感叹号、一个大小写,都能引出这么多东西。但如果你只是”输出那行字”而不去深究,你永远不会看到这个”压缩包”里面还装了这么多东西。
为什么”大道至简”在这行代码上生效了
这行代码的另一个奇特之处是:它”极简”的属性,反而成了它能”承载更多信息”的条件。
你想想,如果Hello World是一个三百行的程序,它还能传达那么多信息吗?不能。因为太复杂的东西没有”锚点”——你没有办法用一个简单的标记去指向它。它太庞大了,没办法被集体记忆所捕获。
而一行代码是可以被”锚定”的。它短到所有人都能记住,短到任何教材都可以放在第一页,短到任何一个新手都可以在三秒之内敲完。所以它能成为一个”基准点”,后面所有的东西都可以用”它”来对比、来参照、来回忆。
“短”,让它可以被反复”引用”。被重复引用的东西,就会积累越来越多的”附带信息”。就像一个词被用得多了,它就有了词源、有了典故、有了不同的用法。Hello World就是编程世界里的那个”高频词”,它的使用次数越多,它附带的”信息厚度”就越厚。
那行字里的时代”指纹”
如果你拿不同年代的Hello World来看,你甚至能从中读出那个时代的”技术指纹”。
70年代的Hello World,往往是一个完整的程序文件,因为那时候操作系统简单,没有复杂的依赖和配置。90年代的Hello World,旁边往往跟着一堆环境变量的设置说明,因为那时候配环境是个大学问。2000年代的Hello World,经常出现在一个框架的项目模板里,因为那时候框架开始统治Web开发。现在的Hello World,你会在它的旁边看到Dockerfile、Makefile、package.json——因为现在”运行一个程序”已经不止是”运行程序本身”了,还包括它的整个运行环境。
这些”指纹”不需要额外说明,你一看Hello World出现的形式,大概就能猜出它是什么年代写的。它像一个数字化的”碳14检测”,可以从它的”上下文”里推算出它的”地层”。
所以在某种意义上,每一行Hello World都是一个”时代切片”。它既在说”你好世界”,也在说”你好,这个特定年份的编程环境”。
最少的字符,最长的回响
说到最后,其实我一直在试图解释一件事:为什么这么短的一句话,能产生这么长的回响?
从信息论的角度看,它是一段高度压缩的信息,解压之后有大量的历史、记忆、约定、情感在里面。从传播学的角度看,它是一个高效的”模因”,因为它足够短、足够简单、足够无歧义,所以传播成本极低,复制保真度极高。
但我觉得最根本的原因还是那个”打招呼”本身——任何一个人类群体,都需要一个”入群”的动作。进一个微信群要发个表情包,入一个社团要做个自我介绍,到一个新城市要找个地标拍张照。进编程这个”世界”,要写一行问候。
这行问候是所有”入群动作”里最短的一个。但它的”含义”,跟那些复杂仪式一样深。
所以一行代码里能装下多少东西?装下一个人对一整个世界的问候。装下他从此成为这个”世界”一员的那一瞬间。装下五十年来所有做过同样动作的人,隔着时间对他说的那句:
“你来了。欢迎。”
那句话很短,但它的回响很长。长到可能他自己都意识不到,他写下的那行字,正和所有前人写在同一条时间线上。