代码与代码之外

Code and Beyond

清晰度是检验程序质量的第一标准

男人大多都知道:如果你无法判断你爱的女人和爱你的女人哪个对你更合适,你可以选择胸大的那个!

同行们也可能遇到过无法向别人证明你的程序有多好的情况,此时多数同行会选择亮出性能指标来证明我们的程序是多么的发烧!

然而我认为,清晰简洁是更重要的质量指标。

来公司面试的时候,我跟面试官 CTO 同学唱了一回反调。他给我出 C++ 构造函数的面试题是这样:

class::constructor(a)
: m_a(a)
{}
class::constructor(a)
{
m_a = a;
}

不同写法之间两者有什么区别?

我回答:第一种方式比第二种方式节省了一次复制构造函数。而后我说:但是我仍然会用第二种写法。

他惊讶于我明知道第一种方式更高效还要用第二种写法。我解释:C++ 的后辈们都没有这种写法,只有 C++ 独有。CPU 多跑几个周期无关我痛痒,我更希望程序清晰点!

虽然这只是一个无关痛痒的细节,但体现出对我而言:清晰是我对程序质量的最高追求。

我猜同行们喜欢比性能的原因,大概是因为代码写清晰太难,性能指标更简单粗暴一目了然。比胸围的机会多么稀少咱同行们心里都有数,比比代码性能也算是苦中榨出点乐趣。半个多世纪以来我们的同行圈子越来越大的同时国内男女比例也越来越高,巧得是性能狗也越来越多(尤其是 C++ 圈)!但现实情况是机器很便宜用户却很难找,对多数公司和同行来说,性能真不是问题!

那些问题更重要呢?个人认为,不管架构设计还是功能划分还是代码实现,最重要的特征都是清晰!

黑“性能”是因为“性能”是代码写不清晰时最常见的莫须有的借口,而多数情况下代码满足清晰的标准时才有能力提供更好的性能。

不清晰的代码会有更高的维护和升级成本,体现出更多无价值的细节和更高的耦合度,无法满足职责分离和正交性原则,直接违反各种面向对象的设计原则。

保持清晰度需要同行们具备良好的构建素养,初入门时多感悟一下《代码大全》、《Unix编程艺术》这些经典,有一定经验需要去执行设计、架构、工程原则。整个过程要执行好多年,多年的时间里我们会养成一些好习惯和坏习惯,好习惯会让我们知行合一。而知行不一这种情况往往是习惯不好和能力不达标的反映,没有快速的解决方法,只有自身不断学习、实践和优化。

清晰度决定了代码未来的优化空间和升级空间,是战略性需要!任何以战略失败为代价换取的战术上的蝇头小利都是非常不明智的,如常见的为了用户用不着的性能牺牲代码清晰度,亦如为了短平快引入的“临时方案”过了不久就会成为满目疮痍的无底洞,还如为了莫须有的业务扩展能力导致的各种过度的设计模式滥用。一旦养成了战略牺牲的习惯,往往意味着后续就会有更多的战略和战术的双重损失。即使明知道这样是错的,也会继续保持现状,因为决定人行为的往往是习惯而不是知识,而一个开发者群体的习惯更是强大到无可逆转的路径依赖的力量。

清晰的代码会让我们感到朴素平淡简洁优雅如饮甘泉,而那些任何无意义的牺牲就像一场场莫名其妙的胸口碎大石而已。


2016-09-29 深圳

我对老婆的追求是能三观一致能轻松相处,我们已经幸福了十年。