近日,一篇题为《“软件工程”并非工程》的深度分析文章在科技界引发轩然大波。文章作者,一位资深软件架构师,以其十余年的行业经验为基础,对软件行业长期以来自称“工程学科”的合理性提出了尖锐质疑。

文章指出,与传统土木工程、机械工程等已发展数百年的学科相比,软件行业所谓的“工程”实践缺乏最核心的要素:可预测性、可重复性以及严格的物理约束验证。在硅谷一家知名科技公司工作的首席工程师李明向记者证实了这种缺失:“我们常说‘软件工程’,但事实上,我们连最基本的‘需求确定后才开始编码’这一工程原则都经常做不到。项目延期、预算超支在这个行业几乎成了常态。”

这种疑虑并非孤例。近年来,随着人工智能大模型的爆发式发展,软件系统的复杂性呈指数级增长。即便是行业领军企业,也频频遭遇系统故障、安全漏洞等问题。2024年7月,微软云服务的全球性宕机事件至今仍让人记忆犹新。更为讽刺的是,许多软件项目的失败原因并非技术难题,而是管理混乱、需求变更频繁等人为因素。

然而,这场争议的另一面,也有业界人士极力捍卫软件工程的学科地位。中国工程院院士王坚在最近的一次公开演讲中强调:“软件工程与传统工程确实存在差异,但正是这种差异体现了它的独特性。我们可以接受它与桥梁工程不同,但不能否认它作为一门实践科学的贡献。”

值得注意的是,争议的核心或许在于“工程”一词的定义。牛津词典对“工程”的定义强调“设计、建造和维护结构、机器、装置等工作”,而软件行业显然满足这一描述。但批评者认为,硬件工程中每个零部件都有明确的物理属性和失效模式,而软件系统中的代码逻辑却往往是抽象且不可见的。

行业观察者吴军在他的最新文章中表达了一种折中观点:“软件工程发展的历史还太短,它正处在从传统编程向真正工程化进化的过程中。敏捷开发、DevOps、测试驱动开发等方法的出现,正是行业自我完善的标志。”

尽管争议持续升温,但一个不争的事实是,软件已经渗透到现代社会运转的每一个毛细血管。从支付系统到医疗设备,从自动驾驶到航空航天,几乎每个关键基础设施都依赖软件运行。如果软件工程并非真正的工程,那么我们是否应该对这些依赖软件的系统感到担忧?

或许,这次争议的真正价值不在于下定义,而在于倒逼整个行业进行自我反思。我们需要什么样的软件工程教育?项目管理方法应该如何改进?质量保障体系如何更加严谨?这些问题的答案,可能比争论“软件工程是否是工程”更有意义。

可以预见,随着人工智能技术的进一步成熟,软件开发的范式正在经历前所未有的变革。当代码可以自动生成,测试可以智能完成,也许软件行业终将发展出自己的“工程”标准,那时,“软件工程”的定义将不再是一个问题,而是一个已经明确的事实。