代码大全

翻开《代码大全》第28章,代码大全麦克康奈尔用整整四十页讨论变量命名。代码大全这书1993年首版,代码大全比Python还老两岁。代码大全可今天你在GitHub随便拉个仓库,代码大全里面照样躺着data2、代码大全tempList这种名字。代码大全

我第一份工作维护遗留系统,代码大全有个函数叫processData,代码大全八百行。代码大全里面有个变量flag,代码大全布尔型,代码大全但没人知道它控制什么。代码大全我花了三天跟踪调用链,代码大全最后发现它控制一个支付接口是代码大全否跳过风控校验。那天下午我盯着屏幕,后背发凉。如果这个变量被某个实习生改成true,公司可能直接损失几百万。

麦克康奈尔管这叫“防御性编程”。不是指写一堆try-catch,而是从源头让错误难以发生。书里有个例子我记到现在:一个团队把状态码从1/2/3改成STATE_OPEN/STATE_CLOSED/STATE_PENDING,缺陷率直接降了42%。数字我记不准,但道理是真的——人的短期记忆只能装五到九个独立概念,你非要让同事记住3代表待处理,这就是在跟大脑构造对着干。

不过说实话,这书最狠的地方在于它不教你写“聪明代码”。第18章讲“魔法数”,要求把所有裸数字抽成常量。有人嫌啰嗦。可你想想,凌晨三点被电话叫醒,说线上订单金额全变成了0.07。你查日志,发现有人把0.1写成了0.01,而那个数字藏在第三层循环里,没有任何注释。这时候你会明白,所谓“代码大全”,其实就是“后悔药大全”。

当然,书里有些建议已经过时了。比如它强调函数要短,最好一屏能显示完。现在4K显示器竖起来能放两百行,但人的注意力不会因此变长。我觉得核心思想没变:代码是写给人看的,顺便给机器执行。这个排序永远不能反。

有次代码评审,一个新同事问我:“为什么这个变量叫invoiceTotal而不叫sum?”我说你下个月要改这段逻辑,到时候你就知道为什么了。结果第三周他就来改,因为税务规则变了。他花了十分钟找到那个变量,然后说:“操,幸好当时叫了这个名。”

麦克康奈尔在序言里写了句话,大意是“这本书的目标是帮你在软件开发中做出更好的判断”。判断这东西没法自动化。你用的框架会过时,语言特性会更新,但“把意图说清楚”这件事,永远值得多敲几个字符。

现在我写代码,命名时习惯先问自己:如果一年后的我来看这行,能不能一眼懂?如果答案是“得跑一遍才知道”,那我就停下来改名。这不是洁癖,是省钱——省的是未来那个熬夜排查的自己。

《代码大全》不是让你成为高手,它让你少当几次冤大头。这两者区别很大。