开发手记 · 第 1 / 5 篇 合集目录 下一篇 ›

有回我打开一个算法相关的文件夹,里面整整齐齐排着几个策略文件,名字都规规矩矩。唯独其中一个,名字里夹了一句不该说的话,不是技术词,是那种平时不会当着同事面说出口的词,被原样写进了文件名,还提交进了仓库。

Strategy/
├─ AbstractAlgorithmStrategy.cs
├─ AlgorithmMode.cs
├─ InterpolateAlgorithmStrategy.cs
└─ ▓▓▓▓▓AlgorithmStrategy.cs        ← 这一行的名字,我没法原样敲进文章

我盯着那个文件名愣了几秒。它就这样挂在目录里,谁能看见谁尴尬,但没人撕掉它。

我没法确定当时是谁、因为什么写下的。比较可能的情况是,他写代码写到烦躁,顺手吐了个槽,存成了文件名,当时觉得好玩,或者单纯没多想。类似的随手我在别处也见过,注释里骂一句、变量名叫 temp2、提交说明写「又是这破玩意儿」。

那时候我对这类事的态度是,只要不影响运行,就别上纲上线。代码能跑,名字难听点算什么。现在回想,这个态度本身就挺危险。

真正让我改观的是把这个项目交给别人接手那次。新人 clone 下来,打开目录,第一眼就看见那个词。他没说什么,但我看得出来,那一瞬间他对这个团队的专业度打了个折扣。

而且这种东西特别难收。它进了文件名,就被引用、被搜索、被记进历史。你想悄悄删,得先确认没有别处依赖它,还要改提交记录,比当初随手写它麻烦一百倍。我顺着引用去找了一下,它不只躺在文件名里,调度的地方也写着它(等价改写,名字用掩码代替):

if (mode == AlgorithmMode.Interpolate)
{
    strategies.Add(new InterpolateAlgorithmStrategy(input));
}
else
{
    strategies.Add(new ▓▓▓▓▓AlgorithmStrategy(input));   // 名字再难看,也得照着写
}

也就是说,任何一个读这段代码的人,都会在那个 else 分支上正面撞见它一次。文件名可以装作没看见,调用点是躲不开的。

代码是会说话的。它不只跟机器说怎么运行,也跟每一个后来者说写它的人是什么样。一个不雅的名字传出去的不是幽默,是不专业,和一种「这里没人认真看」的信号。

还有一点我后来越想越在意。那个词一定是某次评审里大家都没吱声、放过去的,如果当时有人说了句「这名字咱换个吧」,它就不会挂到现在。命名是协作的门面,不是私人的发泄口。别把随意当个性,真正专业的随意,是连随意都收拾得干干净净。