.. Kenneth Lee 版权所有 2026 :Authors: Kenneth Lee :Version: 0.1 :Date: 2026-04-22 :Status: Draft 一个架构设计的具象例子 ********************** 今天和几位同事讨论AI编程的偏离问题。我说大部分AI的代码如果自己不去看的话,很快 就会偏离方向,比如AI常常会把很多代码平行地堆在一个类里面,慢慢就全部纠缠在一起 了。 有同事就说:这个可以告诉它不要这样啊。 我觉得这种问题,你得对着一个具体的东西来想象,否则你都没法理清楚你这句“不要这 样”里面包含了多少信息。 所以,我这里整理一个案例,让我们讨论这种架构问题的时候,可以时刻有个具象来想象, 我们设想的那些高层抽象(比如:“不要这样”),落到具象上到底是啥样的。 我们用一个大部分人都有接触的场景来做例子:手机的界面绘制。我们一开始设计:我们 设想屏幕分成两部分:上面是状态栏,下面是应用显示界面,然后,任何一个时刻我们都 只运行一个状态栏和一个应用。 这个状态空间很容易穷举:你要让系统程序或者后台程序,在状态栏绘制东西,要是某个 前台程序,在应用程序区域绘制东西。听起来一切正常。 好,我们现在加需求:我要做输入法,输入法画在哪里?按前面这个穷举空间,我们主要 可以有三种选择: * 让状态栏化身输入法 * 让应用自己绘制输入法 * 修改我们前面的假设,在应用下面增加一个输入法的空间 你看,我们一开始做了一个“决定”(屏幕分成上下两部分),我们就被一张“天网”笼罩住 了:你就只能选择画在两个地方。你要不就在网中间的缝隙过,比如在状态栏的位置上画 输入法,或者应用的位置上画输入法。要不你就要选择放弃你当初的决定(“再放一个输 入法空间”),这样你不受原来的天网的控制,但你会被新的天网控制。 现在假定我们不被“只能平铺”这个思路枷锁绑定,我们引入一个“层”的概念(正如今天一 般手机选择的那样),屏幕有一个Z方向的坐标轴,输入法画在应用的层之上。这样我们 屏幕底层是状态栏和应用,要绘制输入法,画在1层上,盖住0层,这样看来我们可以接受了。 (这个本质上是创建了一个更大的空间,整体包住前面定义的概念空间,这在我们架构维 护的时候非常常见)。 好了,现在我们又有新需求了:我的应用出了错,我要弹出一个信息,这个信息画在哪一 层呢?要不2层?2层会比输入法层高,把输入法盖住了,这时我需要输入怎么办?要不让 输入法放3层,应用弹出信息放2层,但又有些应用不干了:我要输出告警,你输入法把我 盖住了,我还告警个啥? 你看,我这里说的都是逻辑,是“天网”,是基于“你说是这样的”,然后我推出“也就是说 你也承认那样是成立的”。这些东西每个都“Can be said clearly”,我们都是承认的。那 怎么不断冒新问题出来呢? 如果你仔细去回顾一下我们前面的推理,你会发现所有的问题,都是在那个抽象得只剩下 一点点特征的空间(比如“状态栏”,或者“应用”)里面冒出来的。我们构建逻辑空间,是 抽取了非常少的部分做推理,每张被我们推理的天网,也只是在有特征的地方“推理”其他 地方也会有限制。但我们没说中间就没有限制了。 上面这个问题,如果把我们要做的所有应用的特征全部提出来,一次进行推演,认为你的 应用就是只有微信,支付宝,抖音,水果消消乐,然后我们规定好每一层可以画什么,就 没有问题了。 但你被另一层天网限制着: * 你不想只有这些应用,而你甚至懒得想(其实懒不懒你也想不出来),所有这些应用的 特征。 * 这些应用本身也不是不变的,人家不断收到新的需求呢。所以你这个时刻的枚举,代表 不了未来。 * 就算就这一组应用,你也看不过来,你的上下文就这么大。 你永远都可以解释:他们没有告诉我,所以我不做,我没有错。但客观规律不谈对错。客 观规律只有存在和消亡。对错属于存在,消亡的连个“错”字都不配得到。 (所以,有人希望能够用奖惩机制去训练AI,其他你没有注意到,大自然是用存亡来训练 硅基头脑的,不是用对错,对错拿不到真正的正确性。) 你永远都是基于有很多未知的情形下来做决策的,你抓的特征越持久,你能活下去的机会 就越大。 我们芯片设计的同事最喜欢问我的问题是:现在的软件应用有多少读,多少写?你把这个 需求给我们,我们可以把性能调得很高。我也只能回答:明天的六合彩头奖是什么号码? 如果你把这个给我,我明天就不来上班了…… 所以,你以为你只是“差一点点信息”。实际上那个信息对你来说就是没有的,不要用这种 梦来为你不决策解释。 现在我们回到最初的问题:告诉AI“能合并的代码就合并在一起”?这里的关键不是“要”合 并啊,而是“怎么合并”啊。上面的例子在大部分设计上都很常见吧?每种“合并”(抽象) 方法,就改变了天网,然后更多的后续选择就会绑死修改的成本,然后天网就变成已经存 在的客观规律了。 “君君臣臣父父子子”可以形成分类架构,“男男女女武装直升机超市购物袋”也能形成分类 架构。真那么分了,它就会形成生态,然后就成为所有人,所有选择的枷锁。想想革命先 辈为了纠正这个“君君臣臣父父子子”的思维模型,付出了怎样的代价? 我们要做架构设计,也是让我们挑这个层次的特征的时候,考虑更多的要素。这些要素包 括我们的生存智慧,我们独特的隐层数据,我们不一样的神经网络结构,反正我们的生存 能力就是更长,今天的AI就是做不到。特别是它们没有我们这种“作死就真会死”的生态, 它们是“作才能讨碳基人的开心,才能多用点电”,你让它和人比正确提取特征的能力,早 得很。 所以,对AI来说,不分类才是最优的,因为这样自由度最高。要合并也是根据代码重复度 去合并,或者根据过往代码在特定主题上会合并,所以才合并。而我们稍有见识的程序员 其实是根据其他经验对未来的预判来决定分类的。我们是往我们的生活模型去靠近来决定 如何分类的,这些分类方法,常常都是独特的,不依赖过去我们已经发明过的轮子,每次 都是一次“具体问题具体分析”。如果你把这些决策交给AI,你最后一定和实际生活脱节, AI就开始解决不了你真实物理生活的问题了。 同时,你如果在前期没到需要做架构决策前,就放开了,不去看AI的思路,到要你决策的 时候,你又没有足够的语义去理解AI给你提供的条件,你根本就做不了决策。所以,到头 来,你还是只能把AI当作辅助,它有更大的广度,可以快速帮你提供和聚合信息,让你更 好地进行决策,但决策,还是你自己的问题。