仓库源文

.. Kenneth Lee 版权所有 2019-2020

:Authors: Kenneth Lee :Version: 1.0

无名概念的深入探讨


《道德经》最基础的概念是“道”(:doc:../道德经直译/道具体是指什么 )和名,简单 理解就是这么一句话:“我说‘我不说话’的时候做的是‘我说话’这件事”。所以道和名不同 。

这个概念就可以解决很多问题了。基于这个概念《道德经》延伸了很多其他有用的概念。 比如,“无名”(:doc:../道德经直译/无名 )。如果经常做战略或者做架构,对无名这 个概念机会有很多直观的感觉。比如,你和另一个架构师去说服投资人投资你们其中之一 的项目,投资人为什么给你钱?而不是给另一方钱?投资人不可能根据你们做这个项目的 过程来决定把钱给谁。他只能听你们说,或者考察你们过去的表现。但这些都是“名”,不 是道。那这可怎么办?听谁说得头头是道?但头头是道是名,不是道。作为架构师或者其 他专业人士,你没有办法用一两句话给外行解释清楚你实现一个项目的全部细节。也就是 说,你的这些细节没有简单的Pattern,缺乏简单的规律,不能被抽象,你不能用一个总结 性的名称或者简短的描述来说清楚它。你心中有一个逻辑,但你无法说出来给投资人听, 甚至你没法给自己用几句话抽象,每个专业认识给外行精确说明一个问题的时候都面对这 个困难,这样的东西,就叫“无名”,你无法描述它。

这里的投资人也可以替换为任何其他引导目标的对象,比如项目经理选择程序员或者程序 员的方案,程序员面对多个可选的第三方软件,病人面对医生的方案和亲戚的偏方,只要 你要做复杂的选择,你都面对这个困难。外行希望有名去支持他的决策,内行面对的困难 是“真正的问题都是无名的”,所以,从外行的角度,复杂的问题,如果“有名”,这个名反 而是错的。

一个方法,如果能说得头头是道,说明它有Pattern,可以被“总结”,它就“有名”,因为命 名本来就是“总结”。能给出这个总结表示这个概念沟通的多方都能掌握,它就不会是解决 问题的关键问题。要头头是道,大学教授争不过质问“转了几个基因”的普通人,因为大学 教授知道这里没法一两句话可以说清楚,但对于不具备这个知识的投资者,无从从这个概 念来分辨谁对谁错。

“我都挂了蚊帐了,蚊子怎么飞到我的蚊帐中的?”它是:“沿着抛物线进来的”,“直线飞进 来的”,“沿着正弦曲线飞进来的”……这些都是有名,听起来很专业,但如果你知道事实,这 些都是胡扯。“蚊子是沿着一条玄奥的路线混进来的”,这句话倒是没有错,但这句话说了 等于没说,你用这种类型的回答去回答投资人,基本上不会被接受。这种东西,就是“无名 ”,但这个无名,反而是对的,只是对了看起来也没用而已。

“无名”是解决复杂问题中面对的“天然的情况”,因为如果“有名”,我们也不需要拿来讨论 了,它会成为我们讨论“无名”那个问题的基础概念空间。

这样一来,无名就是投资者面对的一个巨大的问题了——我如何进行取信?“无名”概念的提 出,仅仅解决了“头头是道不表示就说对了(其实通常真的头头是道就不对了)”,但并不 是说“不头头是道就说对了”呀。

其实,“无名”是有用的,只是不能像“有名”那样用而已。“无名”只在战略上有用,因为“知 ‘不知’上”,虽然我不能基于“玄奥路线”来堵蚊子,但至少我肯定不会选择“在抛物线上阻 挡蚊子”这样的方案。正如这里这个例子: :doc:弟子规:美国军方禁止在C语言程序中使用malloc , 我不一定知道,一个学生怎么才能教好,一个程序可以怎么“一定”能写好。但我可以肯定 的是,靠类似《弟子规》和《编程铁律》这样的手段是肯定解决不了问题的。这个结论对 战术没有多少价值,但对于战略和架构很有价值,因为战略和架构需要选择方案,每选择 一个方案都构成一个重大的资源投入,避开“无名”,选择基于细节解决问题,不提前引入 不能赢得利益的“原则”,是架构和战略最终得以成功的最重要因素。

《道德经》使用了一个非常技巧性的策略来解决“无名”的问题,称为“不见可欲”。请注意 了,不是“不见欲”,而是“不见可欲”。不是不呈现我的期望,是不呈现可以被你附和的期 望(注1)。我们每个人都掌握整个讨论中的一部分道,作为投资者,如果我放出我的名( 根据前面提到的道和名的特点,我的名如果逻辑合理,必然包含符合道的部分,和偏离道 的部分),别人为了取得我的信任,必然会附和我的判断模型,这样的的结果是这个方案 向下落地的时候,这个方案就不是基于“道”的限制来修正的,而是基于我的“名”来修正的 ,这个方案的可靠性就低。

所以优秀的方案必然“无名”,有大片的规律隐藏在所定义的概念空间之外,每个逻辑链都 是粗线条的,具有容纳性的。每个参与者,包括投资者本人,都有一套自己认可的道去对 提供信息的各方进行逻辑校验,最后在这个粗线条的逻辑链上取得互信和妥协,然后这个 集体去面对现实(道)的挑战,运气好的,这个集体的逻辑链可以挺过所有这些挑战,这 个项目就会成功,否则大部分人所认知的真正的道没有被提前加入逻辑链,最初的逻辑链 就会在挑战下体无完肤,从而陷入失败。

所以,有朋友跟我讨论“《道德经》能否被重写,被翻译”,他认为可以写一整本书来建立 基础的名称空间,然后再解释这些概念,从而成为一门“科学”。而我认为这是不能做到的 。重新命名就意味着重新建立共识,建立共识的过程本身就是被曲解的过程。而道德经是 从“道”的角度来考虑建模的:既然你已经认同了你们这群人认为的道,德,仁,义,礼, 这部分的概念反而是最稳的(已经是道了,因为现实是大家认),我就给你看这些名和“现 实”的差距在哪里,让你自己理解这里的道和名的关系。这些已经被认同的概念是最坚实的 (所谓“德”高),因为它已经具有相当高的认可度了,重建一次,除了建立的过程成本很 高以外,完成以后,该被曲解还是被曲解,并没有更精确,这有什么用?

这里你能很明确发现,道德经用的逻辑链无法精确,他是抓主体,10000个参与者中,只有 8000个认可这个定义,其他1000个人一半,其他1000个根本就反对,但道德经不在乎这个 ,对它来说,这个地方,只要8000个是其中的主体就行了。道德经的逻辑链追求的是更高 概率,不是严格精确,你非要质疑它,它确实不是“必然”的,不是精确的,但你即使没有 精确的答案,该选择你还是得选择啊。

更大的问题是,精确就意味着“有名”,你就强行确定你的Pattern了,如果这个Pattern完 全合道,那么这个东西就不会成为解决问题的一部分,它本身就会陷入到“无名”的空间中 ,不会拿出来讨论。如果它不是,那么它的方法本身肯定是有破绽的,能被捉到破绽,这 个方法就会失败,竞争者会从你的精确中找到你的缝隙,到你失败的时候,这个所谓“精确 的道”就不是“道”了。

“人饿了就会去吃饭”,这个描述不精确吧?——总有不吃的情况。你要把这句话说精确,这 句话至少要加上1000个条件,问题是,加上1000个条件后,新的那个结论在战略上还不如 这句话有用呢!“精确”本身改变战略定义!

(更多例子可有参考这个文档::doc:气和深度学习 。我们讨论问题总是希望讨论得越 来越细,这是人的直觉,但越来越细本身会丢失信息——这个事情是不是让你很痛苦啊?喔 哈哈哈哈……)

所以《道德经》具有科学的精神(用现实说话),但它和“科学”的思考模式是完全不同的 。科学追求精确,道德经追求合道。这两者都需要逻辑链,科学的逻辑链追求精确性,3个 小球取一个,取中其中特定的一个的可能性是1/3,这是科学。科学强行定义范围,收缩了 需要判断的模型,放弃了一个实际的问题:那我到底是否应该拿这个小球?

而道德经不是这样想这个问题的,求道者首先考虑的问题是“为什么我需要要解决这个问题 ?”,然后决定出手拿这个球还是不拿这个球,他不划定范围,他是决定要从无穷的条件空 间中决定选择谁进入判断模型(被选中的成为了“名”,但求道者必须面对这个问题,“道” 体无名,我选择什么作为名,还有,如何避免不指向“道”的名进来污染我的名称空间)。 科学可以为这种决策模型提供“工具”,“Helper”,但精确的科学最终无法决定把哪个条件 纳入模型。

我这个文档其实不是想讨论道德经,而是想讨论构架设计。构架设计面对的是和道德经一 样的困难。架构设计其实关心的也不是“如果这样就可以那样”,架构设计关心的是“我到底 这样还是那样?”。所以,程序员的逻辑链可以是“用户进程向内核申请n个页从而获得内存 ”,架构师的逻辑链必须是“用户进程向内核发起包含大小信息的请求从而获得内存”,甚至 他会说程序员的那句话,但表达的是后面的意思。架构师的逻辑链比程序员“粗”很多,程 序员保证的是“这个版本立即可以工作”,架构师保证的是“后面10个版本,在实验室中,在 客户现场,高温80度,太阳黑子运动强烈的时节都可以工作”,他的工作是要在这么粗的情 况下,逻辑依然是成立的。这些逻辑,只有部分表达在他的逻辑中,其实他还准备好在遇 到困难的时候,放弃部分范围,挺过这个限制,但一旦限制被放松,他又要突出去,获得 那部分好处,为后面的风险处理赢得空间。执行者很不愿意看到这样的逻辑,因为执行者 都希望逻辑简单,这样可以聚焦输出,但这个恰恰和架构师的思考模式是相反的,这背后 ,都是“无名”这个现实在左右着。

讨论架构问题,你必须能认识到,我们不是在讨论“这样是不是可行”,而是讨论“这样的风 险高,还是那样的风险高”,你永远都是要权衡“挺过眼前这一波”,以及“为未来赢得空间” 的矛盾,要想办法把所有人真正的“道”容纳到同一个逻辑链中,摸到每个“专家”和“投资人 ”在这个逻辑链中的真正底线(不是他们的欲望底线,而是他们认识到的‘道’),而不是为 了方便而强行加入的名。“这个地方很危险,我们要严格一点,我叫你,你就要回答,否则 我无法保证你的安全”,这个不能代理为“父母呼,应勿缓”。后者太粗,把收益掩盖了。“ 我们的硬件可以运行RISCV的用户态程序,不能代理为“我们的指令集是RISCV的超集”。解 决这个问题的方法是,我要去质疑:“‘是它的超集’能为你带来什么收益?”,这样的质疑 ,是架构工作本身的工作量,是逻辑从简单到复杂的过程,是逻辑链越来越脏的过程。“简 单”确实是“美”,那是我们的追求,所以我们不为天下先,但架构工作,本身就是越来越脏 的过程,我们不能为名损道,为了“名”的“美”,放弃了事实本身。

注1:(本逻辑和主逻辑毫无关系,只是给对道德经名称空间完全没有人认识的读者一个提 示,注意到本文的概念不是表面那么简单而已)请读者注意不见可欲中的“名”和“道”的关 系。我用一个例子说明区别是什么:

“我去学雷锋好吗”

“你喜欢就好”(这是附和,但不表示现可欲了)

“那我学了雷锋下个月可以升职吗?”

“不能”(这就不是“可欲”了,因为你用一个Pattern不能讨好我)

“那我不学雷锋,我独立思考,不被洗脑行吗?”

“你喜欢就好”

“那我独立思考了,下个月可以升职吗?”(很明显,他又想引入一个“名”,但这个“名”不 能得到我要的结果)

“不能”

“靠,我怎么才能升职?”

“给组织带来进步啊”(这是目标,不是可欲,因为还是没有Pattern)

“我给组织带来进步下个月可以升职吗?”

“可以”(这个也不是现可欲)

“我怎么才能给组织带来进步?”

“提高输出,降低成本,扩大销售……都行”(请注意了,这里是举例,给了这么多种“可能方 法,其实要说的就是:“没有Pattern”,“无名”。要求你在这个没有规律的地方陷入细节, 动脑!)

“那我写一个扩大销售的方案出来好吗?”

“好啊”

“写完下个月可以升职吗?”

“不能”

“……”

你看,这才叫不见可欲,不见可欲体现在道上,不是体现在名上。