序 1:周爱民的道到底有多大多易
【一】
您现在读到的这本书,出自初版于 2012 年的《大道至易》。后者还有个前传,叫《大道至简》,作者自然也是周爱民,写于 2003 到 2004 年期间。那个时候,“架构师”这个角色在国内 IT 圈还不是特别为人所了解。而当《大道至易》问世的时候,架构师红极一时、满大街都是架构师的盛况已经开始走下坡路了,产品经理取而代之成为行业宠儿,而紧随其后的是那一轮移动互联网创业狂飙,再往后是数据科学家、人工智能专家集齐万千宠爱的 AI 热。长江后浪推前浪,一浪更比一浪浪,架构师这个职业,正如其他“先前浪”的职业一样,早就卧倒在沙滩上。只有周爱民这样的人,还在傻不拉几的搞他的架构师“大道”,从沙土中昂起头颅辩白说,我们架构师没有趴下,只是在做俯卧撑。不单如此,他还逼着我看他的辩词,还要写读后感。
我多年前确实花了一点时间了解架构模式,但离开技术社群日久,早已生疏和淡忘,Doug Schmidt 的多卷本 POSA 是我对于软件架构模式的最后印象。坦率地说,阅读这本不大但也不易的作品,超过我目前对于软件架构的理解水平。所幸我近来一直关注系统方法论及相关的认识论话题,于这本书通读之后,倒觉得有些关联。而周爱民本人又是一个哲味十足的技术人,因此对于我从这个高空且虚泛的角度来谈他的这本书,他倒也能接受。
首先要指出,这本书并不好懂。所谓大道至易,这个易字,要让我来说,并非“容易的易(easy)”,毋宁理解为“变化之易(change)”。大道至易,就是大道的变化至多。变化多就难把握嘛,怎么会容易?中国古代文字,将 easy 与 change 用同一个易字表达,其中玄机我难以参透。不过我于本书中感到作者的自信,若是你能理解这本书中的大道,或许架构设计相对来说就会简单一些,而读懂这本书就变成了主要的挑战。
这本书确实较难读,作者所用的很多词汇,与我们生活中甚至一般专业技术讨论中使用的词汇形同而意异。此现象在本书的前半部分尤其突出,所以读书中的文字时,要格外认真,必须搞清楚一个词、一句话的确切所指。作者虽然在很多地方也强调了这个问题,但是这仍然使读此书变得颇具挑战。这也就意味着,读这本书需要耗费较大的心力,绝非枕边消遣之读物。
【二】
那么为什么这本书值得耗费心力来读懂呢?因为这是一本架构思维的认知升级之作。为了说明这一点,请容我用一点篇幅来谈谈认知升级这件事。
何谓认知升级?近来坊间围绕这个概念有一些讨论,不过主要是在成功学的意义上进行的,不够严谨。事实上,关于认知的层次,学术界也有过相对严谨的研究。比如心理学大师布鲁姆将人类认知按照复杂程度排列为记忆、理解、应用、分析、评价、创造六个层次,而钱学森在上世纪八十年代将现代科学技术总体系放在一个统一框架下,提出著名的“三个层次一座桥”的自然科学体系一般框架,也就是将科学技术分解成工程技术、技术科学和基础科学三个层次,并通过自然辩证法这座桥梁对接辩证唯物主义的哲学。可以表达为下图:
(序)图 1 钱学森提出的学科体系一般框架
我们将认知升级放在这个框架里来讨论,显然比用“知之为知之,不知为不知,是知也”这样的诸子箴言的方式来讨论,更加清晰、更加精确。不过,今天互联网人群所面对的主要问题,无论是本书关注的软件和业务系统架构,还是企业经营、产品创新、市场战略、产业生态构建等等,其实都并非纯粹的自然科学和工程技术问题,而是要求我们在复杂的系统之内进行综合性的思考和实践,其中既包含经验的部分,又包含科学技术的部分,还包含哲学思辨的部分。为此,我们谈论认知升级,需要一个不同的框架。我略作归纳,将这个新框架中的认知层次以 L0 至 L3 表示,其意义如下表所述:
(序)表 1 本序文中提出的认知的四个层次
【三】
然而,认知升级对我们具体有什么意义呢?在这里我用时下火热的机器学习认知升级过程来介绍一下。
机器学习的兴起,最直接的原因是大数据的出现。在大数据出现之前,大量的业务决策过程是所谓“拍脑袋”式的,也就是依靠经验和直觉。虽然数据很早就进入了商业管理的领域,但是时至今日,即使在全球领先的五百强企业当中,很多关键的决策,也只是把数据统计出来,变成图表,然后由“有经验”的管理人员根据数据来“拍脑袋”。根据上面的框架,这种认知水平,无论如何也只是停留在 L0 层次上。
相比之下,当前正在兴起的机器学习方法,无疑是一个巨大的进步。当前的机器学习工程师,未必需要深入理解机器学习的数学原理,只要根据一套完善的“套路”,配合类似 R 语言或者 Python 的 scikit-learn、TensorFlow 等工具,就可以开发出一个回归或者分类模型,帮助商业人士决策。这个就属于 L1 级的认知,对应到钱学森“三个层次一座桥梁”框架当中的工程技术层次。
而 L1 认知层次的局限性在于,一旦这个“套路”失效,只停留在这个认知层次的工程师,会束手无策,因为他们并不知道自己使用的方法和套路是怎么来的,自然也无法变通和调试。因此一般来说,我会建议学习机器学习的人,要有雄心达到 L2 层次,也就是通过理解“套路”和模型背后的原理,特别是数学原理,进入到方法论的层次。到了这个层次,你才能够在实践中知其然且知其所以然,恢恢乎游刃有余,才能称得上是“高手”,才算是一名数据科学家。
就解决具体问题来说,认知达到 L2 层次的数据科学家已经非常强悍。如果说他们的局限性,就在于他们对于自己的这一套做法,还缺乏“反躬自省”的审视。机器学习为何竟然是有效的?其有效性的边界在哪里?对什么样的问题可能会失效?这样的问题当然不需要每一个机器学习专家都去考虑,但是在整个机器学习社区,一定要存在一些思考这些问题的“哲学家”,他们能站在上帝视角来审视自己的学科本身,考虑这门学问的根本问题和长远命运。这种人就站到了 L3 层次,也有机会成为整个学科的领军人物。
【四】
当然,本书的中心话题是架构,并不是如上所讨论的数据科学。不过触类旁通,在架构的认知上,同样存在从 L0 向 L3 升级的问题。
在“内容简介”当中,本书开宗明义地说“本书以系统的认识论作为出发点”,正是提示读者,这是一本触及了 L3 级认知层次的书。虽然书中并没有明确的引用系统论、控制论、信息论等经典理论,但是从内容来看,作者所强调的正是系统论的认知思维模式。例如,系统论和控制论所基于的认识论是黑箱认识论,也就是通过客体输入与输出的关系,推测客体的内部的结构和联系,并且将这种推测假说表达为模型。而本书作者在第 1.1 节中描述的那个光线射进黑屋子的场景,对于“知得”与“识得”的辨析,对于“建立知识”过程的思考,以及对于这一过程在架构设计中的不足之处的论断,正是在 L3 层次去讨论架构。我们且不论书中的观点正确与否,站在这个认知层次上谈论业务和软件系统架构的书,这本书就算不是唯一,也肯定是稀罕的。硬币的另一面是对读者的要求。如果读者不能站在这个高度去读这本书,肯定也难以理解作者用词的考究。
当然本书并非仅仅 L3 层次上的作品。作者花了这本书的主要篇幅来介绍方法论,也就是 L2 层次的内容。毕竟大多数架构师无意成为架构师中的哲学家,而是希望提升自己解决问题的能力。这本书的第 5 章到第 7 章,构成方法论内容的主体,自然也是作者多年思考的萃集,值得读者花精力去琢磨。
比如说,在第七章列举的第三原则中,将架构表达为范围和连接件之合集。这里的妙处在于“范围”这一概念的把握。一般来说,我们将系统表述为子系统以及子系统之间的连接,但什么是子系统?在一个完整的大系统中,你凭什么将这一部分拎出来单独命名为一个子系统?系统论指出,系统以及子系统并不是一个客观的实体,而是人为规定的。在系统的边界之内的各部分,耦合关系比较紧密,而系统与其边界之外的部分,耦合比较松散。我们再思考一下这个说法,这不正是作者所说的“范围”吗?
同样的,第四原则说“过程之于结果,并没有必然性”,这也是控制论中讨论的主题之一。控制论告诉我们,一个控制过程能够达到预期的目标,是有条件的,例如需要有充足的信息,需要高效的负反馈结构,等等。细读本书在这一部分的论述,你会发现其思想与控制论是暗合的。这样的例子在全书中不胜枚举。
【五】
我必须指出,兼顾 L2 和 L3 层次的技术著作,在我目力所及,不但在架构类书籍当中绝无仅有,在整个技术类图书当中也是凤毛麟角。设计模式可以被认为是系统的局部架构。在 1995 年《设计模式》一书出版之前,实际上有一些面向对象的技术著作在 L2 的层次上分析过产生优秀设计的方法学。我印象最深的是 Andrew Koenig 和 Robert C. Martin 在九十年代初中期的一系列 C++和面向对象著作,提出诸如 handle 和 pimpl 等设计原则。基于这些原则,你可以很自然地在面对问题时设计出漂亮的“模式”。但是《设计模式》出版后,很遗憾的,整个社区将注意力转向罗列设计模式套路并且期望在实践中套用之。这应该说背离了设计模式提出的初衷,也导致设计模式盛极而衰。这是只关注 L1 而 L2 缺位导致的典型后果。
本书作者显然有意识地强调架构认知升级的重要性。在这本以架构为题的书中,作者完全没有罗列“流行架构二十一个”、“你可以套用的架构模式十八掌”之类 L1 的内容,而是几乎将全部篇幅放在 L2 层次上,试图以定义、拟合、类比等方式教授“产生优秀架构”的方法学。这一尝试,无论结果如何,其本身就是雄心勃勃、令人赞赏的。
因此我对于读者阅读此书的建议,一是站在认识论、方法论的层面上与作者对话,二是适当了解一些系统论、控制论的基本思想,这将有助于理解本书的内容。
我想,毕竟不是每一位读者都像我一样着迷于这些理论的东西,但无论如何,我没有见到过一本介绍系统和软件架构的作品具有如此的认知高度,为此我愿意向有兴趣的读者推荐。
智百科技(AI100)合伙人
孟岩
2017.05.01
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论