复杂软件的崩溃 - nolanlawson


1988年,人类学家Joseph Tainter出版了一本名为《复杂社会的崩溃》的书。在书中,他描述了罗马人、玛雅人和查科人等伟大文明的兴衰。他的目标是回答几个世纪以来一直困扰着思想家的一个问题:为什么这些强大的社会会崩溃?

在他的分析中,泰恩特发现这些社会的主要敌人是复杂性。随着文明的发展,他们增加了越来越多的复杂性:更多的等级制度,更多的官僚机构,更深的社会结构交织在一起。在早期,这是有道理的:每一个新的复杂程度都会带来回报,如经济产出的增加、税收等。但到了一定程度,收益递减法则就会出现,每一个新的复杂程度都会带来越来越少的净收益,逐渐减少到零甚至更多。

但由于复杂性长期以来运作良好,社会无法适应。即使每一层新的复杂性开始带来零甚至是负的投资回报,人们还是继续尝试做过去的工作。在某些时候,他们所建立的泥潭变得如此功能紊乱和笨重,唯一的解决办法就是崩溃:即迅速降低复杂性,通常是废除旧系统,从头开始。

我觉得这一点很吸引人(除了对现代文明的明显影响)的是,泰恩特可能已经在写软件。

任何在科技行业工作了足够长的时间的人,尤其是在大型组织中,都见过这种情况。一个遗留系统的存在:它很大,很复杂,而且没有人完全理解它是如何工作的。架构师被请来 "修复 "这个系统。他们可能会拿出一块大白板,上面有很多方框和指向其他方框的箭头,不可避免地,他们的解决方案是......增加更多的方框和箭头。没有人可以从系统中减去;每个人都只是增加。

一个站在白板前的人的照片,白板上有很多方框和箭头,方框上有文字。
"EKS在本月底将被Omega Star淘汰,但Omega Star仍然不支持ISO时间戳。" 我们都经历过这种情况。(通过Krazam)

这可能会持续数年之久。不过,在某些时候,可能会发生组织结构的调整--合并、重组、礼貌地释放一些高级管理人员,让他们专注于自己的绘画爱好一段时间。一个新的架构师被带进来,他们对 "由盒子和箭头组成的大图 "问题的解决方案要简单得多:在整个事情上画一个大红叉。旧的系统已经日落或者被废弃,那些在上面工作的憔悴的老兵要么离开,要么被调整到其他项目,而一个新的团队被带进来,幸运的是,他们从头开始设计一个新系统。

尽管对于我们这些渴望写出永恒和持久的软件的人来说,这可能是令人失望的,但你不得不承认,这个系统是有效的。就其所有的浪费、低效和纯粹的欺骗("旧的代码工作得很好!""不,等等,旧的代码很糟糕!")而言,这就是在过去几十年里支撑了很多软件公司的模式。

不过,这种循环会一直持续下去吗?我不太确定。现在,软件业已经处于近二十年的经济繁荣期,但经济学中一个确定的事情是,繁荣最终会变成萧条。在繁荣时期,软件公司可以不断雇佣新的人员来管理他们现有的软件(即更多的工程师来理解更多的盒子和箭头),但如果他们的劳动力被迫收缩,那么同样的系统可能变得无法维护。迅速和永久地减少复杂性可能是唯一的长期解决方案。

不过,有一件事对复杂性有利,那就是工程师喜欢复杂性。承认吧:就像我们抱怨别人的复杂性一样,我们喜欢自己的复杂性。我们喜欢围坐在一起,梦想着新的架构图,可以舒适地坐在我们自己的脑袋里--只有当这些图离开我们的脑袋,在现实世界中成形,并且超出了任何一个人的脑袋大小时,问题才开始。

要抵制复杂性,对新的方框和箭头说 "不",这需要大量的纪律。说:"不,我们不会解决这个问题,因为这只会带来10个我们还没有想到的新问题"。或者说,"让我们用一个更简单的设计,即使它看起来很业余,因为至少我们可以理解它"。或者只是说,"让我们做得更少而不是更多"。

简单的设计在理论上听起来很好,但它可能不会为你赢得很多同行的赞誉。复杂的设计意味着有更多的团队来管理系统的更多部分,工程师要做更多的工作,更多的会议和计划会议,也许还要申请更多的专利。一个简单的设计可能会让人觉得你没有真正做好你的工作。"就这样了?我们完成了吗?我们可以打卡下班了?" 而当促销季节到来时,用一个令人眼花缭乱的新设计来为自己辩护可能比用一个无聊的、被人理解的解决方案更容易。

最终,我认为软件是遵循繁荣和萧条的模式,还是更可持续的模式,将取决于生产软件的机构的经济压力。一个不惜一切代价追求增长的软件公司,就像罗马人急切地吞噬越来越多的高卢地区一样,很可能会陷入 "增加-完成-崩溃 "的循环。一家目标更为适中的软件公司,拥有稳定的客户群,不会随着时间的推移而发生太大的变化(这种东西存在吗?(这样的公司是否会像无能的高卢人一样,被凯撒和他的军队所征服,是另一个问题)。

就我个人而言,我试图对这种情况保持良好的幽默感,并避免向愤世嫉俗或绝望屈服。编写软件很有趣,但在目前的行业中,它也是非常不稳定的。如果你10年前写的代码仍在使用,那么你就有很多值得称道的地方。如果不是,那么嘿,至少你和我们其他人在一起是个好伙伴,我们可能占了软件开发者的大多数。只要你继续尽力而为,当一些野心勃勃的架构师拿出一张有许多方框和箭头的大图时,你要尽量保持健康的怀疑态度。