研发挑战的本原
概要
《研发管理的挑战》总结了研发管理者、开发者和知识建设面临的挑战。本文探究研发挑战的本原,提出复杂性、不可见性和社会性是导致研发管理存在艰巨挑战的根本原因。
一、没有银弹
1987 年,图灵奖获得者 Frederick Brooks 博士在其经典论文《没有银弹:软件工程的本质性与附属性工作》中预言:
没有任何技术或管理上的进展,能够独立地许诺十年内使生产率、可靠性或简洁性获得数量级上的进步。
在西方恐怖民间传说的妖怪中,最可怕的是人狼,因为它们可以完全出乎意料地从熟悉的面孔变成可怕的怪物,只有银弹方能将之消灭。
软件项目具有人狼的特性,常常看似简单明了的东西,却有可能变成一个落后进度、超出预算、存在大量缺陷的怪物。软件项目的问题,却没有简单的答案能对其进行有效解决,即没有银弹!
Frederick Brooks 提出软件工程的根本困难是构想由抽象软件实体组成的复杂概念结构,次要问题是使用编程语言表达这些抽象实体。现在软件生产率的进步来自对次要问题的突破,而软件工程中无法规避的问题根本问题则难有突破,包括:复杂性、不可见性、可变性、一致性。
30 余年过去了,纵使在当今 AIGC 的加持之下,Brooks 博士没有银弹的预言仍存在有效!
Brooks 提出的软件工程四个根本内在特性,我们认为:复杂性和不可见性是更为根本,因为正是它们的存在,而让软件的变化和一致变得异常困难。
二、研发的复杂性
John Ousterhout 教授在《A Philosophy of Software Design》指出:复杂性就是任何使得软件难于理解和修改的因素。
不同于计算机、建筑或者汽车等往往存在着大量重复的部件,软件在规模上可能比任何由人类创造的其他实体都要复杂,因为没有任何两个软件部分是相同的,否则就将被合并成供调用的子函数。
软件系统的各组成元素存在复杂状态、 且众多状态组合爆炸,构成错综复杂的逻辑。软件系统的各组成元素存在大量交互,且伴随不同元素软件实体的添加,其交互呈非线性递增,构成静态与动态的复杂交互网络,导致整个软件的复杂度以更大的非线性级数增长。
Linux 内核核心 630 个函数,1814 个函数调用网络
在软件系统层面上,针对大型软件,“when things work, nobody knows why”俨然已经是一种常态。随着时间的推移,现在已经没有人清楚系统到底是如何工作的,将来也不会有人清楚。
三、研发的不可见性
软件是不可见的和无法可视化的。
软件是逻辑实体,软件开发是逻辑加工,看不见、摸不着。
面对大量文档、代码、数据,难以理解,代码的运行更不可见。
几何抽象是人类大脑数千年来沉淀养成的强大的工具,人类利用几何建模捕获和表达机械、地理、分子芯片等物理实体的几何特性与根本属性。而软件不是物理实体,不具有空间形体特征,难以利用人类大脑熟悉的几何模型和已有的表达方式反映其本质特性,其阻碍了构造具有强大功能的概念设计工具,限制了个人的设计过程,也严重地阻碍了相互之间的交流。
软件开发人员很多时候就像“皇帝的新装”故事中的裁缝,面对检查时回答:我们正在编织带有魔法的织物,只要等一会儿就能看到及其的美丽。但却什么也看不到、摸不到。
研发的不可见性和难理解性
四、研发的社会性
软件研发的“个人英雄主义”的石器时代虽已经结束,目前人们处于群体协作时代,但软件研发本质上依然没有摆脱“手工业”的基本属性,研发存在大量手工劳动,难以自动化生产。
软件研发在很大程度上还是依赖于人,以人为本,人是 IT 系统的决定性因素。但人性是复杂的。众多人组成的群体更具有奇怪的的化学反应,而产生复杂的社会性。
"人件 '' 、硬件、 软件是 IT 系统三个组成部分
软件管理领域的经典著作《人件》指出:软件系统的主要问题不在于技术,而在于社会性因素。
1924—1932 年美国哈佛大学教授梅奥主持了管理心理学领域的著名实验:霍桑实验,指出工人不是只受金钱刺激的 “经济人”,而是“社会人”,早已揭示了人的态度和人群关系对生产的重要作用。
总结
软件研发没有银弹。探究研发挑战的本原,提出软件研发的复杂性、不可见性和社会性是软件研发挑战的根本原因。
版权声明: 本文为 InfoQ 作者【iSoftBook】的原创文章。
原文链接:【http://xie.infoq.cn/article/869e44f55ccd1be879026aa1f】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论