3

复杂软件的崩溃 - nolanlawson

 1 year ago
source link: https://www.jdon.com/61006
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

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

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

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

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

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

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

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

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

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

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

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

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK