“Any fool can tell the truth, but it requires a man of some sense to know how to lie well.”
“任何傻瓜都能讲真话,但一个人需要一些能力才知道如何更好地说谎。”
~ Samuel Butler (1835 - 1902)
“Incorrect documentation is often worse than no documentation.”
“不正确的文档常常比没有文档更糟糕。”
~ Bertrand Meyer
既然计算机忽略注释和文档,那么你就可以肆无忌惮地撒谎。做一切在权力范围能做的事让可怜的维护程序员迷糊。
事实上,设计文档应该把算法分解成结构化步骤的分层结构,在文档中以自动编号的独立段落来描述每一步。 标题至少要 5 层。完成的时候,要确定把整个结构分解得非常彻底,有超过 500 个这样自动编号的段落。 例如,其中一段可能是:(这是一个真实的例子)
1.2.4.6.3.13-显示出对活动的影响,选出的缓和做法能够应用在这些活动中。(省略一些伪码)
然后…,(这就是害群之马)当你编写代码的时候,给每一个这样的段落写一个相对应的全局函数, 叫做:
Act1_2_4_6_3_13()不要给这些函数写文档,要知道,这可是设计文档的作用!
既然设计文档是自动编号的,让它跟上代码的更新是极端困难的(因为这些函数的名字当然是静态的, 而不是自动编号的)。这对不是个问题,因为不需要保持文档一直最新。实际上, 要尽你所能来销毁文档的痕迹。
之后的那些人只能找到一份或者两份早期设计文档的草稿,相互矛盾,布满灰尘, 扔在那些破烂 286 机器旁边的房间里。
/** The optimised inner loop. * This stuff is too clever for the dullard at Software Services Inc., who would * probably use 50 times as memory & time using the dumb routines in <math.h>. */ class clever_SSInc { ... }如果可能,把这些诋毁的东西放在代码中语法比较重要的地方,以及注释中, 这样如果他们要在外包维护之前消除这些,就可能会破坏代码。