- 软件研发行业创新实战案例解析
- 茹炳晟主编
- 964字
- 2023-11-17 17:09:56
1.4 软件研发的复杂度从何而来
软件系统很难一开始就做出完美的设计,只能通过功能模块的衍生迭代让软件系统逐步成型,然后随着需求的增加再让功能模块进行衍生迭代,因此本质上软件是一点点生长出来的,其间就伴随着复杂度的不断累积。
是的,你没有听错,软件是生长出来的,而不是设计出来的,如图1-3所示。
图1-3 软件生长示意图
无论看起来多么复杂的软件系统,都要从第一行代码开始,都要从几个核心模块开始,这时的架构只是一个少量程序员就可以维护的简单组成。
那么,你可能要问:软件架构师是做什么的?难道他们不是软件的设计者吗?其实,软件架构师只能搭建软件的骨架,至于最终的软件会长成什么样子,他们也很难知道。
软件架构师和建筑架构师有着巨大的差异。
只要建筑图纸设计好了,材料、人力、工期和进度基本就能确定,而且设计变更往往只发生在设计图纸阶段。也就是说,建筑架构的设计和生产活动是可以分开的。
软件的特殊性在于,“设计活动”与“制造活动”彼此交融,你中有我,我中有你,无法分开,软件架构只能在实现过程中不断迭代,因此复杂度一直在不断积累。
另外,建筑架构师不会轻易给一个盖好的高楼增加阳台,但是软件架构师却经常在做类似这样的事,并且总有人会对你说,“这个需求很简单,往外扩建一些就行了”。这确实不复杂,但我们面临的真实场景往往是:没人知道扩建阳台后原来的楼会不会开裂,甚至倒塌。
《从工业化到城市化》这本书中提出了一个很有洞见的观点:“工业是无机体,可以批量复制,而城市是有机体,只能慢慢生长”。
“工业化可以被看作一个‘复制’的过程。可以想象一下复印店里的复印机,只要有机器、有原件、有纸和墨,就能开始一张张地复印,速度是非常快的。工业化也是类似的,有了技术、资金、劳动力这几个条件,就可以进行大规模的工业生产。但是城市化就不是一个能快速‘复制’的过程,而是一个需要‘生长发育’的过程。城市不仅是钢筋水泥、道路桥梁,更是一套复杂的网络,城市中的生活设施、消费习惯、风土人情等,这些都需要一定的生长时间。”
笔者认为建筑架构更像是工业化的无机体,可以非常规整,而软件架构更像是发展中的城市,需要时间的洗礼,其复杂度和不确定性特别高。因此,维护大型软件的关键是控制复杂度。
注意,我们能做的只是延缓复杂度的聚集速度,无法完全杜绝复杂度的提升。为此,我们要深刻理解软件的复杂度。