.. Kenneth Lee 版权所有 2018-2020
:Authors: Kenneth Lee :Version: 1.0
找到道法自然的“度”
这里初步挖了一下“道法自然”这个词的语义:
:doc:`道法自然`
本文进一步挖掘一下它的外延。
在上面这个讨论中,我们可以看到,“道法自然”这个概念被提出来,是因为“事实”的发生 ,是一个综合因素作用的共同结果,而我们只知道,或者只能考察部分要素,所以,一方 面我们不能把我们预设的逻辑链定义得太精细。依赖太多,我们就更容易失道。我们守稳 我们真的关心的东西就好了。“我要吃饭填饱肚子”,肯定比“我要吃鱼翅打底,锦州农场的 鸡蛋,李胜记的虾仁,泰国香米的做料的扬州炒饭来填饱肚子”要容易“合道”得多。
另一方面,它也说明了,我们要找到自然的度,目光看大一点,比看着事情本身,要容易 合道得多。
爸爸和儿子一起清洁卫生,爸爸负责搬沉重的家具,儿子负责擦洗,爸爸负责贴春联这种 精细的儿子弄不好的活,儿子负责钻到阁楼上整理杂物……这样就容易合道。反过来,儿子 负责搬家具,爸爸负责擦洗,儿子贴春联,爸爸钻阁楼,这个事情就做不成。或者更容易 陷入的误区是,儿子求礼:“爸爸,请你坐好了,好好享受生活,今天的事情儿子全包了” 。然后儿子摔断腿,擦伤了手……晚上爸爸在医院和别人聊天,老泪纵横:我儿子多么孝顺… …
又或者是,爸爸求仁:“儿子,你去打游戏,爸爸自己就可以完成清洁”,这事情也能成, 但如果对比效率,明显这个不如我们最前面的模型更合道。
所以,哪个比哪个更合道,是从“事”的效率上知道的,是从一个整体在各种方案上的可能 性比较出来的。只考虑个体怎么做,看不到“道”在哪里。所以,合道的表现是“万物芸芸, 各归其根”,每个个体在它最合适的位置上,才能展现真正的美,仅仅强化一个个体,无法 展现这个个体的美。
就好像我经常给女儿做比喻的:我爱你就像我爱我的大拇指,大拇指要长在它现在的位置 上,所以才比其他手指显得更有用的,如果因为它这么“好”,让它从手心上向上长出来, 它就不再有用了,也不再美了。所以,爱,是无法过度的。
好了,简单的比喻说完,我们还是回到设计的问题上。最近在评审一个硬件对软件的接口 ,软件提交数据的时候,给的是一个基于页的Scatter-Gather List。它的定义是这样的:
.. figure:: _static/sgl1.jpg
我一看这个接口,就猜到这肯定是存储背景的人定义出来的——只有做存储的人才会想着要 把Metadata和rawdata一样处理的。因为最终这些数据最终都会变成冷存储的数据,无论是 metadata还是rawdata,他们的地位是一样的。
问题是,这种行为对软件毫无意义。因为你在存储中用的指针,和你加载到内存中的内存 指针,不可能是一样的,那么,额外加入页大小造成对metadata的限制的意义在哪里呢?
如果我有一组rawdata大小的页面需要处理,我只要根据页面的数量,分配一个连续的 metadata管理结构,连续放置页指针,这个问题就解决了。为什么要分成多个metadata页 ?为了处理这个metadatae页的分段结构,软件要多处理多少种情况?(特别是考虑到你要 优化处理性能的时候)
所以,我问硬件设计师:为什么需要这样设计这个东西。
答曰:这是软件的需求。
所以我去问软件:为什么要做成这样。
答曰:这是参考最新的NVME的数据结构设计的
……
剩下的东西我就不解释了。这个设计明显就不合道。硬件设计师的目光没有越过硬件的边 界,看到软硬结合的性能要求是什么,软件是引入了多余的名,引入的名没有成为整体竞 争力(没有靠近目标,进寸而退尺)。而架构师的功能是同这里的尘,解这里的纷,不让 方案“绕了多余的路”,让事情最终合道。
从这里我们可以看到,度,其实就是你是不是把更多的实体放到整体去考虑所有可以提供 的方案,然后再做出决定。每个实体的“根”在哪里,取决于什么方案对整体是最有利的。 这决定了所有根的位置,也决定的最后“道”的“度”在什么地方。
逻辑链不能被自己的位置所左右,你不能认为“我是做硬件的,我为软件服务,所以他们提 的需求我必须满足”,因为这个系统是变化的,当整个方案不是最优的时候,所谓的“客户” 自然会收到他那个方面的压力,最终还是要走回到另一条道路上,但对你来说,浪费的资 源还是浪费了。
所以,做事要做好自己的位置,但思考逻辑链要越过自己的位置,你才有可能找到自然的 度,对自然的度有正确的认识,你才有可能建出可以合道的逻辑链,并最终真正合道。