仓库源文

.. Kenneth Lee 版权所有 2016-2020

:Authors: Kenneth Lee :Version: 1.0

架构设计的0层逻辑


编程的本质是创建名称空间。所谓名称空间,包括三个东西:

  1. 一组字符串,作为名(Identity)

  2. 定义名(字)是什么

  3. 定义名怎么样

很明显,名称空间完全是精神世界的产物。在精神世界里,我们有很高的自由度,唯一的 限制是我们的想象力和脑容量。我强调这点,要说明的的是,精神世界左右你的核心问题 肯定不是Pattern,甚至不是逻辑(逻辑一致,或者说概念一致性,是一个简化逻辑空间的 方法,却不是程序的前提),我们不见得需要用这些东西来左右自己的名称空间。

但如果你要用程序去解决问题,你的限制就来了。“名”为了描述“道”(现实)而产生,但“ 道”很大程度上不被“名”所左右,甚至名本身就是“道”的一部分。优秀的程序的每个名字定 义,都为了对道进行逼近,而不是为了“名”本身简洁和好看。“名”的简洁和好看是个人的 精神需要,我们都希望事情简单优美,但最终我们希望逼近道。

我们在这个专栏的前面花了12个博客来讨论性能优化,最终都是为了用具体实例来说明这 一点:我们以为我们受的限制仅仅在名称空间的外围,在物理世界和精神世界的边界处, 在我们的设计(精神世界定义)内部可以有很多选择,但其实在“性能”的压力下,你在精 神世界也是几乎没有几个选择的。性能是现实绷进逻辑空间的弦,让看起来有很大自由度 的精神世界,也变得和现实一样冷冰冰,没有选择。

在这一篇中:生成优秀的架构,我们讨论过这个问题:我们维护一个大型的软件,在每个 维护开发周期能修改的部分有限,这些修改必须都用于取得竞争力,否则这个软件就会被 淘汰,被取代,它几乎是没有选择的。这特别像一颗自然的植物,它生生不息地生长,每 个生长都必须伸向阳光,水份和肥料(而不是摆出一个“道”字的形状:))。所以你看起 来每颗植物形态各异。但对植物个体来说,它长成今天这个样子,几乎就是一种“必然”。 只有温室中的花朵可以在强大的人力营造的环境中被随心所欲打扮,但温室的花朵是无法 在大自然中存活的。

综合起来说,一个软件能变成什么样子,和所选择的需求,投入的资源息息相关,在大的 层面,最终就是个必然,和架构师的期望,乃至“老板的目的”、“程序员的情怀”都没有非 常大的关系。

所以,第一层架构逻辑,也许你不会写下来,但它既不是这个软件的需求,也不是在这个 软件的“名称定义”,而是定义清楚软件的需求和养分是什么。软件的需求和养分,看起来 归根结底是“投资”的问题,事实上不是,你这样理解一下:有一个千亿万富翁,闲着没事 ,找了一千人,花了十年,开发了一个可以在天上打印一个“爱”字的软件,这个软件有一 亿行代码,这个软件能“活”下去吗?

“活”不下去的,它的生命周期就是这个富翁的投资周期。没有人靠这个软件过活,这个软 件就会死亡。

软件真正的养分,是用户量。如果能想让一个软件可以不断活下去,你真正要做的是让它 拥有最大量的用户。这个逻辑,甚至不受你的老板的左右。专门支持某运营商的X信死了( 或者说不死不活吧),支持所有平台的微信能活。这你也许说是有投资的原因,但但凡这 种还没打就把自己限制在一个平台上的,就已经属于绑着自己的手和别人竞争了。

当然,不是每个人都希望一个软件能活下去,只是想解决一个临时的问题。但大部分时候 我们不是这样,所以,一件事只要开始做了,每个人都只是这件事上的其中一只蚂蚱,无 论是上司还是下属,都很难离开这个漩涡了。这个事情会被整件事情的名称空间所控制, 决定你下一步可以做什么。这是架构设计的0层逻辑。 要研究一个软件如何发展,首先不 是研究直接给出来的需求,而是研究这个软件如何在整个生态链上浮着,成为整个生态链 生存的需要,在那之后,你才能谈你的个人情怀。

我们看一个开源软件是否成功,到头来,也不是你看到的花团锦簇,而是用户量的变化, 这个用户量,也不是“使用”这个软件的用户量,而是“靠”这个软件过活的用户量。当我们 把目光盯在这个问题上,我们就能看懂一个软件真正的竞争力了。

我想起要写这个文档,是因为常常在讨论软件构架策略的时候,别人会跟我谈到开源和闭 源的战略问题,谈“公开宣讲”和“私下目的”的问题。他们总认为这两者是可以割裂的,他 们以为他们可以口上说一套,私下做另一套,或者开源做一套,私下做另一套。我认为他 们都没有想明白一个道理:暴露出来的策略,和私有的策略,只有可能互相顺从,否则吃 亏的一定那个所谓的私有策略,这就是“守中之道”。表象和内在,在性能(竞争力)的压 力下,是必然必须互相对齐的。所以才有“圣人无私,所以成其私”。所以,做开源方案, 或者做行业标准,或者建立一个新市场,唯一的办法是全力投进去帮助整个生态,你以为 你可以简单搅起一点风雨,然后坐在后面看别人表演,终究是为他人做嫁衣裳的。国内很 多软件企业都缺乏这个认识,所以他们的行业解决方案都毫无价值可言。

附录1:关于公开方案和私有方案的进一步解释。

这段补充回答有人私信问的问题:“为什么暴露出来的策略,和私有的策略,只有可能顺从 ,否则吃亏的一定是私有策略”。

这个原理就是前面的推导,一个解决方案,他可以如何设计,受需求和性能压力的拉紧:

当你派人去参与这个方案的演进的时候,你有几个选择:

  1. 如果你的开放方案和私有方案各怀鬼胎,这个方案没有“拉颈”,这个解决方案在竞争中 就会落败。

  2. 如果开放方案是完全受控的(受你控制),它给你带来的收益肯定不如你全力去做一个 私有方案,这是自己给自己找麻烦

  3. 如果你使用一个很小的私有方案,而这个方案在整个解决方案中很重要,如果其他人做 不了,没有多少人会投进来,如果别人觉得在这个体系中还能活下去。这个体系一定有 你想不到的路子让体系在没有你的情况下活下去,到时受控的是你,不是别人。

所以,我素来说伪君子比真小人好。伪君子自己的那点小九九,在他自己建立的体系面前 ,只会让他死无全尸。而真小人是把规则一起改变了。