软件行业有个流传几十年的段子:计算机科学里有两大难题,缓存失效、命名,以及差一错误。三个难题,两个跟名字有关。这个段子好笑,是因为它精确——所有程序员都知道,给变量起名字是日常工作中最频繁、也最能看出功力的动作。
但有一个人把「命名」从写代码的细枝末节,做成了一项行业级的基础设施。他叫马丁·福勒。
他给「整理代码」的动作起了名字
1999 年,福勒出版了《重构》。「重构」这个词他不是凭空造的——它九十年代初就在 Smalltalk 社区的小圈子里流传——但他做了一件关键的事:把「不改变外在行为、只改善内部结构」这件模糊的事,拆成一个个有名有姓的小动作。
比如提炼函数(Extract Method):把一段塞在大函数里的代码抽出来,做成一个独立的小函数,起个名字。这个动作本身平淡无奇,每个程序员都凭直觉做过。但福勒把它写进了目录:叫什么名字,什么情况下该做,什么情况下不该做,怎么做才安全。一整本书,几十个这样的动作,每个都有名字、有边界、有操作步骤。
这本书改变了行业的说话方式。以前你说「这段代码太乱了,我想收拾一下」,没人知道你要干什么、干到什么程度算完;现在你说「这里该提炼函数,那里该用搬移字段」,每一句都是可执行、可检验、可争论的具体动作。模糊的不适感,被翻译成了一张动词清单。
人话版:福勒给「收拾代码」写了本字典。从此程序员争论代码时,用的是同一套词条。
他接着给企业的架构套路起了名字
2002 年的《企业应用架构模式》做的是同一件事,只是对象更大。企业软件里那些反复出现的骨架——数据怎么存、事务怎么管、界面和逻辑怎么分层——被他一个个起了名字:仓储、工作单元、延迟加载、事务脚本、数据映射器……几十个模式,每个都配着「什么时候用、代价是什么」。
注意这里发生的连锁反应。这些模式在福勒命名之前当然存在——无数程序员独立写出过几乎一样的代码,就像第二章说的那些手写的点击回调。命名之后,它们从「各家私藏的土办法」变成了「行业共享的公共词汇」。一个新人入职,说「我们在这里加个仓储层」,他继承的是整个行业几十年攒下的经验,而不是他自己三个月的摸索。
然后他把「语言」本身变成了命名对象
福勒做的第三件事更有意思:他开始给「语言」这种通常不被当作对象的东西起名字。2010 年他出版了《领域特定语言》,把领域特定语言(DSL,Domain-Specific Language)这个概念推到了主流视野里。
DSL 是什么?就是为一类特定任务专门造的小语言。正则表达式是处理文本的 DSL,SQL 是查询数据的 DSL,Makefile 是描述构建步骤的 DSL。它们早都存在,但「给这类东西一个统称」这个动作,让一件本来散着发生的事突然可以被谈论、被比较、被有意地去设计了。一个团队可以说「我们给计费规则造个 DSL」,而不是「我们写了个奇怪的解析器」——前者是一个决策,后者只是一次事故。
命名的行业级操作手册
把福勒的几本书放在一起看,他的手法其实是一套可复制的流程:
- 扎根具体:每个名字背后都是几十上百个真实案例,不是书斋里的抽象。「提炼函数」这个名字之所以有力量,是因为它精确对应你明天早上就会遇到的那段代码。
- 给边界:他不只说「是什么」,更说「什么时候不该用」。一个模式的使用代价写得和使用方法一样认真——这才让名字不变成口号。
- 交给社群:名字写进书里、放进目录,就成了公共财产。别人引用它、反驳它、修订它,词汇表自己就长起来了。
值得说清的是:福勒不是第一个给软件模式起名的人——1994 年「四人帮」那本《设计模式》已经列出过 23 个经典模式。福勒的独特之处在于规模和自觉:他把命名这件事系统性地做了一遍又一遍,从代码动作做到企业架构再做到语言本身,等于向整个行业演示了命名作为一种方法论到底能做成多大。
他演示的结果你也看到了:程序员成了世界上命名密度最高的职业群体之一,而他们的协作效率,很大程度上就靠这套共享词汇撑着。问题是——名字对思考的改变,还能不能往更深处挖一层?下一章我们解剖名字的机制。