子不语

你的代码不干净

Consulting

“你这个代码写的不 clean 呀, 你看这里的 order 是个 double 类型的, 为什么不用整型的呢?”。在一次讨论中,对方给出这么个结论。

关于设计的讨论基本是程序员的日常。在讨论中,各种“大帽子”会飞过来,飞过去, Clean、SOLID、扩展性、可测试性、复杂度等等。如果对“帽子”本身的内涵不理解,被扣帽子的人就么办法做出合理的为自己的代码辩护。扣帽子的人则是在调皮捣蛋。 比如上面的场景,clean 是指什么?当对方说代码不 clean 的时候,他又在指什么?

按照需求,页面上需要显示出一系列表单控件,order 则标记着各个控件的显示顺序。实际实现中,每个控件实例有个 order 属性,按照 order 排序后,逐个显示即满足需求。上面的实现是能完全满足 Kent Beck 在简单设计(Simple design)中提高的 4 个要求的:

额外的好处,就是简单,易理解, 维护也方便。当有更多的组件需要插入到现有列表中时,也总是可以找到一个位置。另外,即使如对方所言换成整型,也没有本质的区别。

按照我们对整洁代码的理解,这个实现是满足要求的。但对方指的不 clean, 具体是什么呢?是不满足需求?还是有其他隐情?真相是作为非技术人员,对方只是纯粹觉得整数比带小数点的浮点数更“干净”!

这就是典型的讨论双方对 clean 没有共识,也就是所谓的鸡同鸭讲。这时,就需要理解内涵的一方开始耐心的科普:首先我们定义一下什么是 X, 然后再讨论为什么 Y 不 X。

好的程序员,不仅要有一双巧手写出优雅的代码,还要缜密理论知识织就的铁布衫,随时抵御飞来的大帽子。