仓库源文

诚其意


本文是一个评审意见的完整逻辑描述。

最近看了一个设计,其中“设计目标”一节有类似这样的描述:::

XXX支持每个模块分别独立演进和升级,使客户在升级软件或硬件时可以更高效……

我认为这是官样文章,不是“诚其意”。但简单这样说不容易看懂,我这里补充一个完整的 说明。

什么叫诚其意呢?诚其意是你说这句话是希望起到这句话的作用,而不是用来把一件事情 说得完美。你喜欢一个姑娘,她要离开你了,你追到机场,对着登机口高喊:“不要走,我 们结婚,我不回老家了,我们就在这里过,把我的车卖掉我们够钱租到房子的……”,这虽然 语无伦次,但很可能是诚其意,因为你说这句话唯一的目的,是她不要走,和你结婚。你 的判断,理解,道德都不一定对,但这是你心底的态度,你唯一的目的是要留住她,而且 你认为这确实是你的目的,你也自认为你的举措能达成这个目的。

如果是官样文章,你是要做给周围的观众看的,你说的可能会这样喊:“我这几年,帮你洗 了302次衣服,为你花了五万三千块钱,而你,就在这里离开我,让我一个人孤零零地留在 这个陌生的城市,每天在窗前看着露珠的凝结和等待时光的飞逝……”,这是表演你的深情和 姑娘的不义,这叫不诚其意。这时表演而已。

或者你这样说:“婚姻是人生最重大的事情,我认为我们应该进行足够的思考,并采取符合 现实和社会道德的妥协,最终我们一定能趟过雨季,看到彩虹……”。这你倒不是为了表演, 但你是为了语言组织得好听,完全没把要做的的打算确切地表达出来。什么你不用说出来 ,当你整理你的思路的时候,可能你就这样想,这是自己骗自己,同样是不诚其意。

所以,支持每个模块独立升级,这话好听,但绝对不是收益,说出来更像追求文章好看, 证明“我已经做了该做的那一份了,以后开发者没有做到就不是我的问题了”,而不是担心 执行者没有没有做特定的事情,导致产品失败。

深入一点去想这个问题:我们为什么要提出这个每个模块分别独立演进和升级的问题呢? 我会这样理解:向前兼容有很多的可能性:

新的软件可以跑旧的硬件旧的软件可以跑新的硬件旧的软件加驱动以后可以支持新的硬件

这些东西,做不到也可以,但做到了市场可以扩大,我们也不确定我们是不是全部都能做 到。但值得现在去控制一下,知道每个控制的成本是多少,所以我们进行了这个设计。

当我们这个设计完成了,我们可能会有一些公共的对软件部件和硬件部件的约束,但我们 不肯定,如果有,这些约束会成为我们设计的一部分,如果没有,那就没有了。

这才是我们做这件事的原因。它不那么清楚,但我们确实觉得有必要做一把。我们也没有 指望把它的地位放得高过现有的功能,也不肯定一定要做得多完美。

这些话,说出来磕磕巴巴的。不好说,不好听,但这才是我们的原始目的。你想把它简单 化,好跟下级工程师或者新员工讲,好跟领导讲,这些都合理,但你要知道你是为了给他 们讲放弃了什么,知道这些做法最终能否达成你的目的,你自己的建模先得是这个诚其意 的建模,然后才有如何行为的问题。否则你怎么可以达成你的目的呢?你为了思维的简单 而简化了你的语义空间,你就怎么都绕不过那些真正的困难。

还有,你做这些判断,会涉及到“不知”的问题。你的旧软件能不能跑新硬件,你没有分析 设计前你可能就不知道,但你知道部分的事实,所以,这个事情能不能做,在两可之间。 你决定做这件事,是站在“有可能,要试试,但不肯定”的位置上的,你简化为“不做”不对 ,“用尽全力,必须做成”也不对,“等我分析清楚了再决定做不做”这同样是不对的。诚其 意的意思,是搞清楚自己决定要做这件事了,真正的意图和动力是什么,而不是为了描述 的简单,表演,或者自尊心,改变了自己本来的意思。

写到这里,我突然有点明白为什么实行“心学”会有“此心光明”的感觉了,这不是因为你找 到了良知,而是你在找良知的过程中,分清楚了你每个私欲背后是被什么驱动的,你对自 己没有遗憾了。

我发现讨论区不少人把这个例子理解成这件事情本身的具象了。我强调的不是这个,我强 调的是:这个事情上,你真实的,驱动你去干这个事情的原因,不是你简单总结和高大上 说出来的那个原因。你想想你不是“要写成一个专业文档”,或者道貌岸然地给领导,或者 后辈讲你这些理由的时候,就纯粹很功利地,不用力地,不写出来说出来直接做的时候会 表现出来的那样地,你为什么要做这件事。这个才是这件事情的原始需求。这里重点不是 那个需求是对的,而是准确捕获我们为什么决定要做这件事。这才是诚其意。它是没有理 由的,就好比闻到臭的东西你觉得臭,看到漂亮的东西你觉得漂亮,它不是有什么理由的 ,它就是臭,就是漂亮。

这甚至和《中庸》里的诚其意都不完全一致。对于这个设计来说,我们在主动设计一些东 西,我们当然是希望我们彻底向前兼容和向后兼容,但我们也知道要完全做到是做不到的 ,但能做到哪里,我们其实不知道,但它也不是简单的不能做,如果把这个问题简单化, 我们可能就表达成彻底做这件事,或者彻底不做这件事。或者干脆不描述它。这样的结果 是这个设计意图就是落实不下去。

但我们希望这个设计意图可以落实下去,我们表述的时候就要准确描述我们这里的“意图” 。所以也许我就不应该把这叫诚其意。应该叫“通过复杂化,不追求好看,不追求简单的描 述,正确表述我们的设计意图”——但这样好像更难传递出去,所以诚其意这个提法我就不改 了,这一段算是补充,希望我以后能找到更好的表达吧。

但我还想补充一句:在设计中,这个理念其实是非常重要的,因为我看到很多设计在一开 始的设计目标上就会跑偏,最终做出来的设计都离开原来的目标很远。这个问题,和配合 的团队很有关系,很多团队是没有能力接受很精准的要求的,但架构师自己不能准确给自 己整理自己的目标,这个伤害是最大的,因为架构上的一点失误,执行就会离开很远。好 比本文的问题,很多产品向前兼容都是做得不好的,因为这很容易用力过度,最后根本兼 容不起来,或者兼容不了几代。

诚其意是自己的问题,不是为了说服别人而决定做什么,存了“说服别人”这个心,这已经 是私欲了。我们先搞清楚什么是“我想要的”或者“项目在这个场景下必须做的”,然后才有 具体操作考虑现实情况,考虑怎么说服,考虑怎么保护自己,考虑这,考虑那……这些私欲 。分出个人的诚意,其他所有的小私意才会被你掌控,否则你就无法响应变化了。