AI 之镜 —— 软件业的 50 年

正如著名计算机科学家李飞飞所言,AI 就像 100 多年前的电力会成为通用基础设施。但其进入“寻常百姓家”的路径,尤其进入企业工作场景中时,可能即不像 10 多年前的移动互联网,也不像 30 多年前的 PC 互联网,而更相似的可能是 50 多年前的软件。

1968 年,Margaret Hamilton 在为阿波罗设计软件时,她也无法想象“软件工程”会变成一个如此广泛的学科。而今天的“Prompt 工程师”、“Agent 工程师”等 AI 诞生以后才出现的新职业很有可能成为下一个“软件工程师”,因为他们才是 AI 进入社会的中流砥柱。

1300 多年前,唐太宗由于魏征的死而写下了“以铜为镜,可以正衣冠;以史为镜,可以知兴替;以人为镜,可以明得失”,重温这篇写在软件业发展 50 周年的文章,希望对当下的 AI 发展有所借鉴。

50 年前,“软件工程”被正式确立为一个独立的学科,成为科学技术的一部分,并跻身于工程学的行列。

如今,软件已经深深地渗透到我们的世界中。

我们的日常生活几乎完全依赖于程序员的代码。我们通过互联网来购物、挑选衣物和点餐。我们的汽车不仅依赖燃料,还依赖代码的运行。

而且,你现在正在使用一台由软件驱动的设备来阅读这篇文章。

在软件工程诞生 50 周年之际,软件领域的顶尖专家们 —— 包括“软件工程”概念的创始人 —— 齐聚一堂,共同回顾和展望这一革命性技术的过去与未来。他们的分析刊登在计算机协会的《IEEE Software》杂志上,深入阐述了软件发展的迅猛态势以及软件开发者所面临的重大挑战。

软件控制着“全球社交活动”

正如慕尼黑工业大学教授、数字化中心创始主席 Manfred Broy 所言:“软件的发展令人惊叹,从 1968 年只有少数专家的小型学科,成长为如今的一个大众产业。”

“即使是软件工程师,也会对我们这个领域在过去 50 年的发展感到惊叹。”Broy 在《软件工程 50 年:昨天、今天和明天》中说道。

2017 年 3 月,慕尼黑工业大学计算机科学教授兼巴伐利亚数字化中心创始主席 Manfred Broy 在哥德堡的查尔姆斯理工大学演讲中探讨了数字化转型如何成为信息学领域的颠覆性变革。

在上世纪 50 年代甚至 60 年代,在处理第一批程序、编写第一批软件时,没有人能预见到软件会在今天发挥如此重要的作用。网络系统无处不在,人人都在使用。

“软件已经融入物理世界,它改变并增强了物理世界。我们必须记住,在 1968 年,大部分软件在大型计算机上运行,而不是在网络上,也没有直接连接到现实世界的管道,因此与现实世界是相对独立的。而如今,软件与物理过程紧密结合,控制着大量的技术和社会活动,”他说。

硅谷每天都在押注软件开发领域的下一个重大突破,每天都在下注。

软件的发展如此迅猛,以至于 Broy 建议需要开发新的编程语言。

“令人惊讶的是,尽管技术和应用快速发展,但软件工程的某些关键领域仍未得到充分发展。例如,现有的编程语言未能满足当今网络物理系统编程的需求。我们的编程语言在处理实时交互和分布式系统方面表现不佳。编码过程容易出错,抽象程度不够,仍然过于接近底层机器或操作系统级别,导致应用逻辑与底层技术系统混淆。”他写道。

“软件工程 “发明者回忆起当年还没有软件工程学校的年代

在为阿波罗飞船工作时,计算机科学先驱 Margaret Hamilton 创造了“软件工程”一词。她表示,软件的早期时代让人联想到未开发的边疆地区。图片

该机器人探索系统由功能映射(FMap)RunRobot 和类型映射(TMap)Robot 所定义。FMap 捕捉功能、时间和优先级特征,代表动态的动作世界(执行);TMap 则捕捉类型、非时间和重要性特征,代表静态的对象世界(存在)。每个映射都基于通用的原始结构:Join(J)表示依赖关系,Include(I)表示独立关系,Or(O)表示替代关系。机器人在探索环境时利用 TMap 结构 dIset,将其经验记录在反应式传感器运动记忆地图中,该地图由分布式独立关系集表示。

“那时还不是 60 年代,”她写道,“当时还没有学校教授如何构建软件,你只能依靠自己。如果有课程,也只是让你熟悉一组指令,教你如何指导计算机运行(有时这些指令由计算机制造商提供)。

“很难理解为什么这些命令如此重要。仅仅知道一组英语单词并不意味着你能写出一部好小说。在特定项目中,熟悉所需的编程语言非常重要。当时,我们并不知道几年后我们的工作会被称为‘软件工程’。我们正身处一线,为阿波罗任务编写飞行软件,”Hamilton 在《错误告诉了我们什么》中写道。

Hamilton 详细描述了阿波罗 11 号任务中的一个关键时刻,当时软件发现了硬件问题并进行了补救。

故事的结局非常精彩。

“阿波罗 11 号的宇航员成为了首批登上月球的人,而我们的软件则成为首个在月球上运行的软件。设计和开发这款软件的过程,以及从中汲取经验用于未来系统,与任务本身一样令人兴奋。”Hamilton 说。

敏捷成为主流

早在瀑布式和敏捷式软件开发方法出现之前,软件开发领域犹如狂野的西部。“最初,计算机软件是以临时方式编写的,程序员通常没有受过正规培训,但拥有丰富的领域知识和技能。他们主要使用大型、非网络化的计算机,缺乏一套共同的原则和实践。”奥克兰大学的 Rashina Hoda、马来西亚国际伊斯兰大学的 Norsaremah Salleh,以及莫纳什大学的 John Grundy 写道:“这个过程实际上更像是一种家庭作坊,而不是一个工程学科。” 

作者记录了敏捷方法论如何成为“实践和研究中主要的软件工程学科”,并成为“全球首选的软件开发方法”。图片

敏捷软件开发趋势的兴起,可以追溯到 IEEE 和 ACM 数字图书馆中的首批相关出版物。SE 代表软件工程,RE 代表需求工程,AR/VR 代表增强现实或虚拟现实。

紧随敏捷之后的是 DevOps 和 DesignOps

ThoughtWorks 的 Erik Dörnenburg 在《通往 DevOps 的道路》中写道,随着软件在过去 50 年的发展,IT 部门也经历了相应的发展。在 1960 年代初期,IT 部门在企业中主要扮演着辅助角色,旨在降低成本并提高运营效率。

Dörnenburg 指出,如今 IT 已经演变为一项跨部门的活动,并由此产生了 DevOps 和 DesignOps 等术语。图片

几十年来 IT 角色的变化:技术角色的演变。对于许多公司来说,技术已经成为业务的核心。

敏捷软件开发引领了潮流,而如今,DevOps 和 DesignOps 运动正逐渐成为主流。我认为,在企业中,IT 已经完全成为一项团队活动。尽管我们仍需要拥有深厚技术知识的专家,但我们必须关注如何促进各个学科人员的有效协作。

敏捷软件工程是什么?

卡内基梅隆大学的 Nancy R. Mead、David Garlan 和 Mary Shaw 教授概述了教育工作者在教授软件工程时所面临的几个挑战。

作者给出了软件工程的定义:

“软件工程是计算机科学的一个分支,其主要目的是通过应用科学知识,以创造性和经济性的方式解决计算和信息处理问题,并开发服务于人类的软件系统。”图片

软件工程教育面临的挑战。

在《半个世纪的软件工程教育:卡内基梅隆大学的典范》中,作者指出,该行业需要基于持久原则的严格软件工程教育,同时也应重视开发者社区日益多样化以及开发者进入该行业的多样化途径。

例如,他们引用了 2016 年 Stack Overflow 的一项调查结果,发现只有 19.7% 的软件开发者拥有计算机科学或相关领域的硕士学位,而自学成才的开发者比例则超过了拥有计算机科学或相关领域学士学位的人数。

难以实现的目标:预防安全漏洞

在讨论软件工程时,避免不了提及广为人知的话题:黑客攻击,

这对用户和开发者都是一种威胁。

根据 Building Security In Maturity Model(BSIMM,读作”bee simm”)对过去十年调查的最新分析,当前比以往任何时候都更需要”通过持续增加预防和检测软件安全实践的使用,以更加积极主动的方式构建安全产品”。BSIMM 研究了全球 167 家公司的现有软件安全措施,并向这些公司通报了他们的安全措施与实际最佳实践的比较情况,同时提出了如何随着时间推移不断改进安全措施的建议。

三位专家进行了新的分析:Laurie Williams,北卡罗来纳州立大学计算机科学系临时系主任、教授,同时也是美国国家安全局资助的安全科学研究中心的联合主任;Gary McGraw,Synopsys 安全技术副总裁,同时也是计算机协会每月举办的 Silver Bullet Security Podcast的主持人和制作人,同时也是 BSIMM 的负责人;以及 Sammy Migues,Synopsys 的首席科学家,同时也是 BSIMM 的领导之一。

预防脆弱性的做法

他们的研究发现,企业可以更有效地利用软件安全组(SSG)来预防漏洞。研究人员制作了一张图表,显示了 109 家企业使用的 30 种软件安全实践对抗漏洞注入的比例。其中,有两种实践用于防止执行漏洞的注入,平均有 18% 的企业采用这些方法。另有28种实践用于防止设计缺陷的注入,平均使用率为 28%。总体而言,这 30 种实践的平均使用率为 27%,更多的企业倾向于采用设计缺陷预防实践,而不是实现错误预防实践。图片

漏洞检测实践

公司在处理漏洞时往往被动反应多于主动出击。

新的分析表明,平均有 42% 的企业采用了 10 种实现错误预防实践,而平均有30% 的企业使用了 11 种设计缺陷检测实践,表明更多资源集中在检测较小的实现错误上。总体而言,这 16 种检测实践的平均使用率为 36%,而预防实践的使用率为 26%。下图展示了研究结果:图片

脆弱性应对做法

如下表所示,平均有 48% 的公司采用了这六种软件安全措施来检测漏洞或在产品部署后对检测到的漏洞做出响应。

研究人员指出:“最常用的三种方法主要集中在紧急响应和漏洞修复方面。使用频率最低的方法主要涉及主动行动,例如修复所有已知漏洞。缺乏对应用程序行为监控的使用可能表明需要进一步研究和开发有效的行为监控工具。”图片

专家们敦促工程师进一步保护社会免受软件攻击,同时指出,仅仅提供工具是不够的,还需要在学生和从业者层面进行培训。这需要教育工作者发挥领导作用。

阻止攻击者不仅仅依赖于本文讨论的软件工程实践。事实上,BSIMM 还包括其他 58 种实践,涵盖了治理、组织、管理和评估软件安全计划,员工发展和培训,以及收集公司知识以在整个组织内开展软件安全活动。管理层和产品所有者必须评估并认识到开发安全产品的价值。

最后,他们总结道:”我们每个人都要为保护我们的世界发挥作用。”

*以上文章翻译自《50 Years of Software》,如需原文,请与我们联系。

WF Research 是以第一性原理为基础的专业顾问服务机构,欢迎关注和留言!

微信号:Alexqjl

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注