人类创造了很多复杂度极高的系统:社会、经济体、软件和网络等等。在处理这些复杂系统方面,科学理论和实践上的进步其实非常小。
查一下 ICCS(The International Conference on Complex Systems)的2018会议你会发现,无论研究对象是什么,大家背后的数学基础或者方法论还是高度趋同的。
比如Natalia Komorova关于癌症突变的人口动态以及它如何受到维数的影响的研究,跟Cesar Hidalgo关于相关性原理和经济地理学的讲座,思路都是基本一致的。
另一个例子是Nassim Taleb和Stephen Wolfram,两个超级大牛的研究和观点上有那么多的共同点,让人觉得好像是平行世界的两个实例被我们同时接触到了。
在软件开发这个领域,当我们提交代码的时候,常常会有「随便动了一个看似无关紧要的地方,整个系统就崩塌了」的体验。这种隐藏的耦合性,其实也说明了软件的复杂度之高,趋于一个有机体。
为什么整个软件工程,无论是架构还是实现的方方面面,都是在管理复杂度,但却没有人讨论它呢?哪怕是从业者,也有很多都不太知道Postel定律,Conway定律或抽象漏泄定律。
我觉得这很可能跟计算机科学的数学基础有关系:整个学科是基于离散数学的,而离散的部分聚合时,其实需要连续的数学工具来理解其行为。实际上,现在也确实有一些团队在采用反馈和控制理论,来尝试对软件系统的复杂度做更好的控制了。