为什么软件变得复杂
本周话题:为什么软件变得复杂
我一直认为,软件开发的最大关注点,就是避免复杂性。软件设计越简单越好,太多的程序员以构建复杂的解决方案为荣。
但是,本周有一篇文章让我反思,我的想法是不现实的:软件肯定会越变越复杂。
(一)
这篇文章的作者是 Saleforce 公司的前端工程师诺拉·劳森(Nolan Lawson),题目就叫做《复杂软件的崩溃》(下图)。

大家可能知道,Salesforce 是一家世界级软件公司,专门开发企业软件,以产品复杂而闻名。

所以,这件事情很讽刺。一家出产复杂软件的公司,自家的著名程序员公开说,复杂软件会崩溃。
当然,他在文章里面没提 Salesforce 的名字,但是怎么读都像在写亲身经历。下面摘录一段他的原文和配图,大家品味一下。

"任何在科技行业工作足够长的人,尤其是在大公司工作的人,都曾见过下面的场景。
有一个遗留系统,很大很复杂,没有人完全理解它是如何工作的。
架构师被要求"修复"系统,他们找来一块大的白板,把这个大系统分解成很多方框和箭头。对于遇到的问题,他们的解决方案就是......添加更多方框和箭头。没有任何一个可以从系统中消去,每个人都只是加上自己的那部分。
这一段是不是写得很形象,就像是日常场景的描述。
根据他的文章,我整理了一下,Saleforce 内部的情况大概是这样的。
- 客户的需求非常复杂。为了满足这些需求,大型软件不可避免变得复杂。
- 软件公司的管理者真正在意的不是系统的复杂性,而是利润。只要软件能赚钱,高层并不在意软件变得复杂。
- 软件复杂性都落到少数架构师和高级程序员的头上。每个人加上自己的解决方案(方框和箭头),让软件越来越复杂,然后不可避免地,他们就会在一段时间后离开公司。
- 复杂系统最终变得难以理解和维护,唯一的解决方法就是放弃旧系统,从头开始写一个新系统。
所以,诺拉·劳森的结论很悲观:怎么解决软件的复杂性?解决不了。最后就是你走人,公司把软件推倒重来。
这就是一个大厂高级程序员的真实想法。国内的情况其实差不多,上面的描述完全适用于 BAT 内部的复杂系统。
(二)
诺拉·劳森还说了一个观点。大家通常认为,复杂系统往往会在经济繁荣的时候崩溃,因为业务太多,支撑不过来,但他认为不是这样的,系统崩溃往往发生在经济收缩期。
经济繁荣时期,软件公司会大量雇佣新员工,投入更多的财力和人力,支撑复杂系统。等到经济收缩期,公司开始减少投入、冻结招聘或裁员,复杂系统可能就会在这个时候出问题,变得难以维护。
现在就是经济收缩期,那么接下来,会不会就是软件故障的高发期,我们将看到很多复杂系统的崩溃?
参考:[科技爱好者周刊(第 210 期):为什么软件变得复杂 - 阮一峰的网络日志](http://www.ruanyifeng.com/blog/2022/06/weekly-issue-210.html )

浙公网安备 33010602011771号