给无名之物起名字 书架

第 03 章 / 共 9 章

第三章 · 名字是一种压缩

程序员对「压缩」这个词应该很亲切:一个 zip 文件,把几百兆的东西压成几兆,要用的时候再展开。这本书要请你换一个角度看名字——一个好名字,就是一段经验的压缩包。

名字是经验的指针

说「命令模式」这四个字的时候,你的声带只振动了不到一秒。但听到的人脑子里展开的是什么?一整套结构:把「请求」封装成对象,于是可以排队、可以撤销、可以记录日志,以及十几种具体的写法,外加「什么时候别用它」的教训。

四个音节,换来一大坨东西。这笔账怎么算都划算——而之所以能这么划算,是因为「命令模式」这四个字在程序员社群里,像一个指针一样,指向一份大家共享的经验。说话的人不用搬运,听的人自己展开。

人话版:名字不是标签,是超链接。点一下就下载一整包经验。

为什么非得压缩不可:脑子的带宽就这么多

这套「指针」机制不是修辞,它有硬的理由:人的工作记忆小得可怜。心理学里反复验证过,你同一时间能摆弄的东西,大约只有四个组块(chunk,工作记忆里一个可独立操控的信息单元)左右——四个,不是四十个。

这意味着什么?意味着你没法直接思考「我们团队所有的质量问题」。那是几百个具体事件,脑子装不下。你只能思考四个组块。问题的唯一出路是:把几百个事件压缩成少数几个组块——「主要是交接丢东西」「主要是需求没说清」。压完之后,四个组块正好装下,你的思考终于可以运转了。

所以第一章那个方法之所以有效,一半靠排序,另一半恰恰靠的是归类——而归类就是压缩,给每个堆起一个临时的名字。压缩不是命名的副产品,压缩就是命名的本职工作。

压缩的代价:有损

凡是压缩都有损。zip 解压出来的文件和原文件一模一样,因为那是无损压缩;而名字对经验的压缩是有损的——「命令模式」三个字展开不出每一行代码,它只留下骨架,扔掉了血肉。

有损不是缺陷,是设计。扔掉血肉,正是为了腾出带宽去摆弄骨架。但也正因为有损,名字天生带着风险:你手里的压缩包和别人的原文件可能对不上。一个人说「这是敏捷」,他想的可能是「两周迭代」,另一个人想的可能是「别写文档」——同一段压缩码,解压出两套完全不同的东西,后面所有的争吵都由此而来。

这就埋下了一个伏笔:名字既能搬运经验,也能偷换经验。它是全书最有力的工具,也是最常见的陷阱。第七章我们会专门审问它。

好压缩的两个指标

既然名字是压缩,好坏就有标准。软件工程师判断一个压缩算法看两条,挪到命名上惊人地合身:

顺便说一句,这两个指标之间存在张力:压缩率越狠,保真度越容易掉。「内卷」原本是个精确的学术术语——没有发展的增长,被压进日常语言后就糊了。命名的手艺,很大程度上就是在两者之间找那个甜点。

现在工具备齐了。我们知道了名字是有损压缩、是共享经验的指针,知道了它的带宽理由和好坏指标。可以回到那个悬而未决的问题了:那个「归类排序、逐个击破」的方法,它到底叫什么?

给无名之物起名字 · 竹小竹8167
费曼式写法 · 由多个 AI 代理撰写与互相审校