世上本无我,谈自底向上的架构设计

“世上本无我,庸人自设之”,这是豆瓣上某位网友读完《失控》之后的简短书评,看完之后深以为然。最近重读《失控》,多年过去仍然有新的发现,作者在上世纪九十年代就能有如此的见地,不得不服(不过老子早在《道德经》中也有类似论述,这又是另外一回事儿了)。

《失控》虽整体在论述人工智能与生物的最终归宿,但每一章都有一定的独立性,所以看似在讲解人工智能,其实作者为了讲明白要论述的最终观点(生物与人工智能必将合为一体)前面章节做了大量铺垫,普及了很多颠覆性的思想,有些观点是我们这些从小接受灌输性教育、思维存在束缚的人很难一下子接受的(课本里学不到的)。

书中提到对于机器人的控制不应该存在中央大脑的设定,因为如果所有事情都由机器人的中央大脑控制,必然使得这个“大脑”十分复杂,而且存在通信、供电等问题,很多以这种设定进行的机器人项目造出的机器人往往连路都走不好,而且体积庞大(因为所有部件都要与大脑直接连接,大脑又做的比较大)。

反过来说,应该从低层级入手,每一个部件都有自己的控制中枢,这些部件本身对于外部环境做出简单反射,这种“反射”虽然谈不上智能但是更接近自然现象,就像有些昆虫的腿被扯下来仍然可以对外部形成反射一样,但是它们一旦形成组合就会发生奇妙的事情,每一条腿通过简单的对外部环境“反射”反应,在不知道还有另外一条腿存在的情况下竟然可以使得组合体具有“爬行”的功能,越来越多的这种“低级”组件组合在一起后自动形成更高层级的智能。作者为这种通过大量低层级组件组合在一起产生更高层级“智能”的现象取了一个比较传神的名字叫“涌现”,这种现象在自然界中也大量存在无论是天生的(比如蜜蜂群体、蚂蚁群体)还是人造的(互联网、经济体)等。

最近考虑软件系统架构比较多,所以干什么事儿总能联想到软件架构,在看书的时候也不例外。于是联想到,我们以前所推崇的“自顶向下”的架构设计,可能存在问题。为什么看似“完美”的架构设计在实际构建的时候存在各种困难?为什么各种分层、模块划分在细化设计时很难做到具体到内部细节控制?通过反思,我意识到,或许我们的方法有待商榷。

在架构设计时比较传统的手段是,先进行顶层设计,然后一步一步的细化。这样做看似很合理,但是这样做有一个假设,就是你在最初对一切都了如指掌,你能预知每一个变化,所以能对每一个细节都能掌控,而且在执行构建的时候还要有极高的执行力,每一个组件和模块都按照最初的设计实现。这样的做法对于建筑类(如桥梁、大楼)的工程是比较适用的,但是对于需求多变存在大量未知因素的大型软件系统无疑是不现实的。

或许我们也可以借鉴自然界中的规律,让我们的软件系统也“涌现”出来,而不是“设计”出来。

举例来说,我们从最底层入手,给每一个组件赋予最简单的职责,比如传输的组件只负责将数据从一个地方搬运到另一个地方,本身并不知道有其他组件的存在,通过设定一个外部规则环境让更多的组件加入进来,去掉中心控制,充分发挥每个组件的自主性,各司其职,随着规则的成熟和组件数量的增加,慢慢就能“涌现”为一个复杂而庞大的系统。其实这种“只把简单的事情做好”思想很早就有了(比如大名鼎鼎的 UNIX 操作系统),而且现实中已经有大量的这样的例子了比如 Linux 开源社区,Github 社区等等。

所以,回到最开始的话题,所提及的“无我”其实也是一个意思,作为更高层级智能的“我”是不存在的,仅仅是由若干个只能低级反射的细胞组成的虚幻而已。

Licensed under CC BY-NC-SA 4.0
使用 Hugo 构建
主题 StackJimmy 设计