大多数技术领导者、架构师在做出技术决策时都会认为自己是理性的。这无可厚非,软件行业作为现代商业的先锋,基本上代表着先进、科学、理性,好像和宗教、愚昧、迷信毫无关系。

但是有意思的是,如果回头看软件行业充满了狂热、迷信和很多不理智的行为(有部分看似不理智是利益造成的)。从互联网产品兴起开始,几乎每年都会有热点词汇和技术(Buzz Word)。TDD、DDD、低代码、中台、VR、GraphQL 等新的模式和技术层出不穷,这些技术和模式有用,但是在布道者的推动下,大量狂热的追捧者不加选择的采信,因此有人戏称很多软件项目都是面向 Buzz Word 编程。

关于 TDD 有这样一段对话:

开发者:我们的项目质量不高,出现了很多的 Bug,这些 Bug 修复起来需要花费很多的时间。

TDD 布道者:你这是没有使用 TDD。

开发者:但是 XXX 的项目也在使用 TDD,但是并没有改善项目的质量问题呢,怎么看待这类问题呢?

TDD 布道者:这是 TDD 没用对,TDD 用好了不会这样。

如果熟悉哲学史的朋友可能会想到,在经院哲学时期,人们会像下面这样论述上帝是否有用:

信众:我过得很痛苦,生活经历了太多的不顺利,我该如何改变呢?

教主:信上帝,只要信上帝就能改变。

信众:我隔壁的约翰是一名虔诚的教徒,每周都会去教堂忏悔,但是他疾病缠身,上周去世了。

教主:这一定是信的方法不对,他被魔鬼诱导了,没有来我这里用正确的方法。

如果架构师用这种叙述方式讨论技术选择合理性的话,那么他们对事物的认知还停留在中世纪,还没有跨越文艺复兴的阶段。

不否定 TDD 在一些知名企业获得过成功,但是不应该是其他团队也以此作为采纳 TDD 的依据。由于知名企业的某种技术实践导致大量的狂热崇拜,在软件工程中,人们称之为货物崇拜编程(Cargo Cult Programming)。

货物崇拜编程是指开发者不明就里、仪式性的使用代码、架构和团队实践,通常是因为开发者被这些实践所带了的收益所诱惑,而没有看到背后的代价,并冷静地思考和权衡,以至于最后付出惨痛的教训。

货物崇拜来源于一个有趣的故事。在二战太平洋战争期间,美军在太平洋的美拉尼西亚岛建立了军事基地,当时岛上的土著文明还处于原始部落阶段。当时的土著看见美军从“大铁船”(军舰)出来感到很惊讶,同时也看到了美军用“大铁鸟”(飞机)运送物资。由于美军也给了土著人一些现代化的物品,这些物品对土著来说非常有用,于是把美军当做神。

美军离开美拉尼西亚岛后只留下一些军服、低价值的物品,土著遍认为这些物品具有神奇的力量,相信美军还会回来带给他们更多的物品。虽然美军一直没有再回来,但是这些土著发展出了一套宗教仪式,以木刻的飞机为图腾,以美军的军服为法器进行崇拜。

在软件行业,一些技术和实践变成了图腾,一些人将软件成功的因素归结到一个单一实践上。例如,认为使用 TDD 或者 DDD 就能让项目获得成功。

货物崇拜的原因是混淆了因果性和相关性。相关性不等于因果性是科学研究中非常重要的一个原则。举个简单的例子,很多父母信佛,然后小孩高考的时候天天去求神问佛。如果小孩考上了大学,那么就是拜佛的功劳,如果没有考上,那就是小孩不努力。同样的,星座也是一种典型的相关性和因果性混淆,一个人的生日和这个人的性格目前没有证据能说明它们之间的因果性,但是因为选择性认知偏差让人将性格和生日联系到一起。

同样的桥段在各种电视、电影中存在。某一伙人闯入了一个村子,然后这个村子发生了瘟疫,群众认为是这些人带来了不详。软件行业也会有类似的讨论,因为大公司都用的 Java 而不是 PHP,所以 PHP 是一个垃圾语言,我们要成为大公司,所以要把 PHP 换成 Java。所以很多公司明明可以苟一下,然后因为折腾死掉了。

另外一种破除货物崇拜的方法是使用逆向思维,当我们采纳一项技术或者实践时,不仅需要分析它所带来的收益,最为关键的是思考它同时带来的成本。

2020-2021 年间,软件行业最狂热的货物崇拜行为就是中台了。阿里巴巴在 2016 年提出了 “大中台,小前台” 的战略,传说中台的概念来源公司高层的一次外部访问(SuperCell 公司)。

热门游戏愤怒的小鸟就是 SuperCell 的产品。这家公司位于芬兰,2016 年以 86 亿美元的价格出售了 84.3% 的股份给腾讯,成为游戏行业史上价格最高的收购案。

这家公司独特之处还不止于此,SuperCell 被收购时还不到 300 人,并且由非常多的小团队组成。这些小团队独立完成游戏的设计、开发、运维,在这些小团队背后有一些支持团队,用来整合公司的资源,让小团队能在短时间内复用公司内部的基础设施快速地让游戏上线。

面向终端的小团队就是中台概念中的前台团队,在公司内服务终端小团队的支撑团队就是中台团队。如果了解过领域驱动设计(DDD)的朋友可能会联想到,这不就是架构中应用服务和领域服务的区别么。

应用服务用于提供具体业务场景下的应用,在阿里巴巴的产品生态下,闲鱼、飞猪就是类似的应用。

领域服务用于提供复用的能力,同样在阿里巴巴的技术生态下,订单服务、用户服务就是类似的服务。

这也是为什么我们可以在闲鱼上卖出去的东西可以在淘宝网的卖家后台看到的原因,因为他们复用了共同的能力(交易能力)。

因为中台建设给阿里带来了共享技术服务体系,让他们可以一个半月上线自己的团购平台,也就是聚划算。这种架构策略极其具有诱惑性,导致做互联网产品的企业前赴后继,甚至让传统企业在数字化转型的初期就直接进入中台建设。

随着越来越的企业发现中台战略并不适合他们后,开始放弃这个策略,并发现好像阿里巴巴在开始“拆除”中台。

实际上,大型企业在平台化建设和复用能力并非开始于阿里的中台战略之后。例如,网易的课程服务平台,可以将课程能力提供给不同的产品,和国家精品课程中心合作的中国大学 MOOC 就是一个非常好的例子。

另外一方面,阿里巴巴并非否定了中台战略,而是根据环境进行了多元化改造。中台建设的好处是提供了共享能力,但是这种能力过于强大,制约了阿里巴巴的灵活性,让阿里巴巴应对外部环境的变化变得非常困难。中台在阿里巴巴持续存在,只是中台变得更薄。通过牺牲部分复用能力,换取更强的机动性是一种妥协,或者说是一种取舍。我相信,他们甚至能构建动态中台策略,中台的厚薄能更加自如调整。

货物崇拜带来一个非常糟糕的效应:一开始绝对肯定的人,在后面绝对否定的也是他们。阿里巴巴董事长兼 CEO 张勇在湖畔大学分享时也说:如果一个企业奔着中台做中台,就是死。中台并非没有价值,它描述了一种构建了自己生态体系的企业,如何利用复用的能力去实现更大的价值。问题在于,往中台战略前进时,它早已暗中标好了价格。

Last Updated:
Contributors: lin