为什么软件变得复杂

结论

  1. 客户的需求非常复杂。为了满足这些需求,大型软件不可避免变得复杂。
  2. 软件公司的管理者真正在意的不是系统的复杂性,而是利润。只要软件能赚钱,高层并不在意软件变得复杂。
  3. 软件复杂性都落到少数架构师和高级程序员的头上。每个人加上自己的解决方案(方框和箭头),让软件越来越复杂,然后不可避免地,他们就会在一段时间后离开公司。
  4. 复杂系统最终变得难以理解和维护,唯一的解决方法就是放弃旧系统,从头开始写一个新系统。

所以,怎么解决软件的复杂性?解决不了。最后就是你走人,公司把软件推倒重来。

这就是一个大厂高级程序员的真实想法。国内的情况其实差不多,上面的描述完全适用于 BAT 内部的复杂系统。

大家通常认为,复杂系统往往会在经济繁荣的时候崩溃,因为业务太多,支撑不过来,但他认为不是这样的,系统崩溃往往发生在经济收缩期。

经济繁荣时期,软件公司会大量雇佣新员工,投入更多的财力和人力,支撑复杂系统。等到经济收缩期,公司开始减少投入、冻结招聘或裁员,复杂系统可能就会在这个时候出问题,变得难以维护。

现在就是经济收缩期,那么接下来,会不会就是软件故障的高发期,我们将看到很多复杂系统的崩溃?

故事

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

在他的分析中,Tainter 发现这些社会的主要敌人是复杂性。随着文明的发展,它们增加了越来越多的复杂性:更多的等级制度、更多的官僚机构、更深层次的社会结构交织。在早期,这是有道理的:每一个新的复杂程度都会带来回报,比如增加经济产出、税收等。但在某个时刻,收益递减规律开始出现,每一个新的复杂程度都会带来更少和更少的回报。更少的净收益,减少到零甚至更多。

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

我觉得这很有趣(除了对现代文明的明显影响)是Tainter可能一直在写关于软件的文章。

任何在科技行业工作足够长的人,尤其是在大型组织中工作的人,都曾见过它。存在一个遗留系统:它很大,很复杂,没有人完全理解它是如何工作的。建筑师被请来“修复”系统。他们可能会推出一个大白板,显示许多指向其他框的框和箭头,并且不可避免地,他们的解决方案是……添加更多框和箭头。没有人可以从系统中减去;每个人都只是补充。

为什么软件变得复杂

这种情况可能会持续数年。然而,在某个时候,可能会发生组织重组——合并、重组、礼貌地释放一些高级管理人员,专注于他们的绘画爱好一段时间。引入了一个新的建筑师团队,他们对“方框和?箭头的大图”问题的解决方案要简单得多:在整个事物上画一个大的红色 X。旧系统已落伍或已弃用,从事该系统工作的憔悴老兵要么离开,要么被改组到其他项目,幸运的是,一个新面孔的团队被引入,幸运的是,从头开始设计一个新系统。

对于我们这些可能渴望编写一种永恒且经久不衰的软件的人来说,这可能令人失望,但你必须承认这个系统是有效的。尽管浪费、低效和纯粹的谎言(“旧代码工作得很好!”“别等,旧代码太糟糕了!”),但这是过去几十年来维持许多软件公司的模式。

然而,这个循环会永远持续下去吗?我不确定。目前,软件行业经历了近 20 年的经济繁荣(时断时续),但经济学中可以肯定的是,繁荣最终会转为萧条。在繁荣时期,软件公司可以继续雇佣新的员工来管理他们现有的软件(即更多的工程师来理解更多的方框和箭头),但如果他们的劳动力被迫收缩,那么同样的系统可能会变得无法维护。快速且永久地降低复杂性可能是唯一的长期解决方案。

不过,对复杂性有利的一件事是工程师喜欢复杂性。承认吧:尽管我们抱怨别人的复杂性,但我们爱自己。我们喜欢坐下来构想新的架构图,这些图可以舒适地放在我们自己的脑海中——只有当这些图离开我们的头脑,在现实世界中成形,并且超出任何人的脑袋大小时,问题才会开始。

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

设计的简单性在理论上听起来很棒,但它可能不会为你赢得同行的喝彩。复杂的设计意味着更多的团队来管理系统的更多部分,工程师要做的更多,更多的会议和计划会议,也许还有更多的专利要申请。一个简单的设计可能会让你看起来好像没有真正做好你的工作。“而已?我们完了?我们可以打卡吗?” 当促销季到来时,用令人眼花缭乱的新设计为自己创造一个案例可能比一个无聊的、易于理解的解决方案更容易。

归根结底,我认为软件是遵循繁荣与萧条的模式,还是更可持续的模式,将取决于生产软件的组织的经济压力。一家不惜一切代价重视增长的软件公司,就像罗马人急切地吞并越来越多的高卢地区一样,很可能会陷入“增加复杂性和崩溃”的循环。一个目标更温和、拥有稳定的客户群并且不会随着时间发生太大变化的软件公司(这样的事情是否存在?)将更像是一个跟随羚羊每年迁徙并专注于可持续发展的卑微部落,久经考验的技术。(这些公司是否会像倒霉的高卢人一样被凯撒和他的军队蹂躏,是另一个问题。)

就个人而言,我试图对这种情况保持良好的幽默感,并避免屈服于冷嘲热讽或绝望。软件写起来很有趣,但在当前行业中也很无常。如果您 10 年前编写的代码仍在使用中,那么您将有很多事情要做。如果不是,那么嘿,至少你和我们其他人相处得很好,他们可能构成了大多数软件开发人员。只要继续尽力而为,并尝试保持健康的怀疑态度,当一些野心勃勃的建筑师推出一个带有很多方框和箭头的大图表时。

来源:高效码农

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年5月12日
下一篇 2022年5月12日

相关推荐