推荐序3
在读到书中那些经典软件开发原则的那一刻,我不禁回忆起那尘封已久的学习编程和开发软件的岁月,看的内容越多,脑海中的影像就越清晰。1995 年,我开始攻读博士学位,论文方向是软件过程改进,就是研究如何从过程管理的角度来提升软件质量。关于软件质量,业界普遍认为有三个决定性要素:人、过程和工具。如何基于这些要素提升代码的质量和开发效率,是软件工程研究者和实践者一直在努力的方向。回顾这二十几年的软件工程演进历程,会发现其经历了很多有趣的变化和反转。
20世纪90年代中期是软件过程成熟度模型(CMM)兴起的年代,研究者们坚信,好的过程管理可以得到高质量的软件;反过来讲,糟糕的软件一定没有好的过程管理。同时,“软件工厂”的概念也大行其道,各种 CASE 工具层出不穷。我们还进一步提出了以过程为中心的软件工程环境(PSEE),试图将CMM和CASE工具整合到一起,以便固化工具和流程,从而把精力放到人身上。但正如 Alan 提到的那样:事情并没有按照研究者的预期方向发展。我认为,IT 技术的高速演进是最重要的原因,新技术和新架构在不断摧毁研究者费尽千辛万苦建立起来的各种过程改进标准、CASE工具和代码生成器。
2000 年前后,以人为本的“敏捷”运动成为软件工程领域的新势力。书中介绍的第131个和第141个原则揭示了背后的原因:好的软件工程师和差的软件工程师的研发效率可能差 25倍,质量可能差10倍。软件工程师并不是“新时代农民工”,而是高科技脑力工作者。人超越了过程和 CASE工具,重新回到软件工程的“C位”。但敏捷开发工程师并不等同于早期的软件英雄:敏捷运动的实践者们强调的是全能内聚团队,而非英雄个体。敏捷实践者们也非常关注流程和工具的作用:重视过程管理的 SCRUM 最终胜出,2001 年出现了第一种持续集成(CI)工具。作为整个过程的亲历者,我非常有幸获评为敏捷运动杰出贡献者。正当大家以SCRUM为中心重新构建整套软件工程体系的时候,宽带和3G悄然兴起,互联网开始席卷软件行业。
2005年前后,Web 2.0技术崛起,促使面向消费者的网上社区、电子商务、社交网络等开发逐渐成为主流。2009年,4G通信商用网络进一步推动了“互联网+App”的开发模式。激烈竞争使从持续集成(CI)演进而来的持续交付(CD)开始在2010年前后兴起。2017年,中国率先制定DevOps的评定标准并开展评定,研发和运维从此接轨。DevOps和敏捷开发的最大区别在于:工具链成为软件工程管理的核心,过程和工具链配套,软件工程师利用工具链提升开发效率和质量。与此同时,成熟的软件框架让内聚和耦合原则不再重要,复用成为主旋律。
从以过程为中心到以人为中心,再到以工具链为中心,这些年软件工程经历了令人眼花缭乱的变革。未来,软件新技术、新架构和新业务还会不断涌现,软件工程仍然会变革,但不变的是 Alan 这本书中介绍的201个原则。
钱岭
中国移动云能力中心首席科学家