【编者按】软件最终会变得复杂?是的,人们从不满足于当下的功能,常常因为业务或者探索的需要,软件开发者不得不给软件添加新的模块,进而使得代码量变得越来越庞大。

英文::Why Software ends up complex?

原文链接:https://alexgaynor.net/2020/nov/30/why-software-ends-up-complex/

 

译者 | 弯月  责编 | 丁恩华

头图 | CSDN 下载自东方 IC

出品 | CSDN(ID:CSDNnews)

简单or复杂?

通常,我们认为软件过于复杂并非好事,无论这种复杂性是来自编程语言、API还是 UI。人们都希望构建易于使用的软件,并且越简单越好,但最后还是不可避免地走向复杂。追根溯源,究竟为何会这样?

实现功能需求的最自然方式便是累加。在设计中,其他元素保持不变,只需加入一个新组件:UI 中的一个新按钮或函数的一个新参数。随着这个过程不断重复,系统就会丧失简单性,取而代之的是复杂性。这种模式通常在企业软件中尤为常见,因为每个新功能都是为某个大客户编写的,而复杂性却累加到了所有其他客户上。

 

人人都希望增加新功能

每个功能都会有一大批支持者,因为他们能从中受益。然而,这种方式无法维持简单性,因为我们需要秉持经济学家所谓的“非排他性”,即每个人都能从中受益。这意味着,支持者总是可以指出能为他们的实际情况带来的实际好处,而反对者只能提出一些更为抽象的缺点。结果是,反对添加某个功能的人往往是少数,更容易被忽略。最后导致系统不断增加新功能,而简单性则在一点点减少。

摆脱这种循环并不容易。虽然可以直接“拒绝所有功能请求”,但如此一来便会发现,项目根本无法满足用户需求!此外,在添加一项新功能之前,我们应该思考如何设计新功能才能维持 Fred Brooks 提出的系统“概念完整性”。

评论1:

我认为,为保持软件的“概念完整性”,最重要是拥有一个强大的架构师来决定接受还是拒绝某个功能,而这个决定源于一个强大的架构师对问题的深刻思考和正确地创建抽象。

然而,在实际工作中,软件组织都不会授权架构师来做这项决策。在大多数情况下,这个问题都会交由管理层从业务的角度考量具体的风险。

评论2:

每个人都想要新功能,但没人愿意冒险在稳定的产品中引入bug,因此,我们希望通过最少的代码变更来添加新功能。然而,这种做法没有从整体考虑系统,因此在添加新功能的时候,难保不会导致其他功能受到影响

另外,就是我们会强加某些规则以达到某些目标,最终结果却往往适得其反。比如,我们应该实现 100% 的测试覆盖率,这样才能确保代码变更是安全的。然而,在一个高度面向 UI 的大型可配置产品中,与外界的交互非常多,因此100% 的测试覆盖率需要比编写代码本身更大的精力。因此,测试本身就会变成一项庞大的技术债务。

 

一句话总结

因此,一些强加的规则便会导致系统逐步走向复杂。然而,在商业模式下,我们并没有完美的解决方法。

问题来了,你认为让软件越来越复杂的因素有哪些?

原文:https://alexgaynor.net/2020/nov/30/why-software-ends-up-complex/

本文为 CSDN 翻译,转载请注明来源出处。

Logo

20年前,《新程序员》创刊时,我们的心愿是全面关注程序员成长,中国将拥有新一代世界级的程序员。20年后的今天,我们有了新的使命:助力中国IT技术人成长,成就一亿技术人!

更多推荐