从软件工程的角度看社会
最近读到一篇博客文章:Legacy Code, Legacy Country,主要描述了作者通过程序员的视角,从软件工程的角度分析了软件项目与国家兴衰之间相似的联系。视角十分奇特,我觉得这种类比、对比的思维方式对于我们认识世界很有帮助。
作者认为,一个国家跟一个软件项目有三点相似之处:
- 都有“生命”,且生命周期较长
- 都在不断变化
- 参与其中的人带来变化,变化也反过来影响每个人
这是作者论述的前提。
作者从国家的“架构”和软件的“系统架构”做了一个对比分析,将国家的体制比作软件的“系统架构”,他认为一个软件的底层架构一旦确定,后期极难更改,会影响所有上层功能的开发。同理,一个国家的核心体制和理念一旦确立,也会成为其社会运行的基石,影响深远且难以撼动。架构是系统根本,这点倒是没错,初始选择至关重要,一旦走上某条路,后续的改变成本会急剧增加。
接下来重点来了,软件系统要不断演进,国家也要不断发展,那么他们的发展路径会有何异同?作者给出了他的观点:一个软件项目在初期总是简洁高效,但随着功能增加、人员变动,代码会变得臃肿、难以维护。国家也是如此,在发展初期往往充满活力,但随着时间推移,各种社会问题、制度僵化会不断累积。他提到一个例子:当项目代码量增加、项目成员也大量增加的时候,工程师们发现自己读不懂之前写的代码了,改动一小处,要补很多处,甚至还可能引发一连串的错误,如果有人来重构,大概率也会不了了之,最后形成共识:别搞了,能跑就行。这与国家治理后期中“牵一发而动全身”的困境如出一辙。古代封建王朝的统治者们,在王朝末期之后,都成了在一辆终将撞上大山的火车上躺平的“工程师”。无论是代码库还是社会系统,随着体量和复杂度的增加,管理的难度会呈指数级上升。
那么,当一个系统出现问题时,就没有办法了?作者的观点是:在大型软件项目中,“推翻重来”几乎是不可能的。理性的做法是在现有基础上不断修补。同样,一个国家也很难彻底抛弃历史,进行完全的重构。文中举了一个非常精妙的的例子:美国可以看成是从英国这个repo里fork出来的全新版本,因为是新项目,所以前期维护简单,迭代非常快,功能很全很好用,但是经过200多年的开发,技术债也是不断累积,已经无法进行重构,到了积重难返的地步。所以,作者认为:完美的制度是不存在的,就像软件工程里没有银弹,所有系统都是在特定历史条件下为解决当时的问题而设计的,必然会带有时代的“技术债”。
不过,作者也说了,这不是严谨的学术论文,只是通过另一个视角来观察国家发展。将复杂的社会问题简化为软件工程问题,虽然有助于理解,但也可能过度简化。例如,社会变革的动力远比代码重构要复杂,涉及到利益集团、意识形态、文化传统等多重因素。所以,不能简单的认为,这就是“治大国如烹小鲜”。
这篇文章的价值不在于提供答案,而在于提供了一个独特的思考框架。它让我们看到,那些看似遥远宏大的国家兴衰、社会变迁,其背后的演化逻辑,与我们在日常工作中面对的代码库、技术债、系统重构,竟有着惊人的相似性。这也告诉我们,用不同的角色或者思维模式思考同一个事物,可能更容易找到事物发展的规律。