自动驾驶和软件(SW)开发之间有何共同点?乍一看,并没有什么共同点。但仔细观察一下,就能发现两者之间存在一些相似之处,尤其是在实现基本目标的演进路径上。开发团队本身不会成为 “乘客”,但设计、创建、保护、分发和维护等方面相关人员的传统角色和职责会发生转变。为了更好地理解这一点,可以先深入了解一下自动驾驶的概念,然后再将其与软件开发联系起来。
自动驾驶的概念出现已有多年,曾经看似未来派的概念如今已成为现实。从本质上来说,自动驾驶汽车(AV)旨在最大限度地减少交通出行中的人为失误(目前约 90% 的交通事故都是由人为失误造成的)。自动驾驶汽车的基本前提是其性能应优于普通人类驾驶员。自动驾驶技术可以节约时间,这至关重要。这样,人们就可以把精力投入到更令人愉悦的娱乐活动中,而不是耗费在交通路途中。
边缘计算和AI是实现自动驾驶的两大关键要素:它们使车辆能够在车内处理物联网传感器的数据,从而实现实时操作。这种能力对于任何任务关键型应用都至关重要。试图对机器进行手动编程,以处理各种可能的驾驶场景的做法已不切实际。相反,车辆必须从环境中动态学习。自动驾驶汽车的智能程度取决于各种物联网传感器数据的可用性,基于数据就能创建物理世界的数字孪生表示。数据越多样化,就能部署越复杂的AI系统。
观察自动驾驶的发展路径,我们可以发现,在每个阶段,人类的参与都在逐渐减少。自动驾驶汽车框架包括 6 个自动化级别,从 0(完全手动)到 5(完全自主)不等。
无自动化:驾驶员完全控制所有驾驶任务。
驾驶员辅助:车辆采用单一自动化系统,允许驾驶员将脚从踏板上移开。
部分自动化:车辆具备转向和加速能力,驾驶员可以将手从方向盘上移开。
有条件的自动化:车辆能够控制大部分驾驶任务,使驾驶员能够将视线从道路上移开,同时仍能保持监控。
高度自动化:车辆在特定条件下能够执行所有驾驶任务,让驾驶员有机会在保持警惕的同时,将注意力从路面上移开。
完全自动化:车辆可在任何条件下独立完成所有驾驶任务。这样,驾驶员就变成了乘客,完全不用担心任何驾驶责任。
AI在软件开发中的优势与其在自动驾驶领域中的优势如出一辙,即最大限度地减少人为失误,使人能够腾出时间,从事创造性更强的工作。由于人力资源往往是软件开发中成本最高的环节,因此企业就有动力去采用AI系统,事半功倍。
仔细研究软件开发的演进路径,会发现其与自动驾驶技术的进步有着惊人的相似之处:在每个演进阶段,人类的参与都在逐渐减少:
本世纪初,软件开发几乎不涉及自动化。在软件开发生命周期(SDLC)的每个阶段都需要人工控制,因此整个过程基本上都需要手动操作。问题往往是由客户而非内部团队发现的。
2010 年代中期,容器化、云计算和 DevOps 的兴起提高了软件开发生命周期的整体自动化程度和效率。在测试、代码审查和 CI/CD 等领域,基于预定义(硬编码)策略和“if-then”规则的常规任务和程序性决策实现了自动化。这样,研发团队就能专注于创造性工作,提高生产力,进而实现“引导和加速”。根据敏捷原则缩短开发周期,在开发和运维之间架起桥梁。问题的管理和解决开始从被动反应转变为自适应,各团队之间的协调更加顺畅。大多数问题甚至可以在客户意识到之前就被发现并解决。
如今,生成式AI正在推动软件开发的效率和创新水平至新高。基于生成式AI的解决方案可通过无缝的人机对话来创建新内容,自动化的应用远不止常规任务。AI在整个软件开发生命周期过程中,是不折不扣的助手(智能副驾),它能够提供建议、解释问题、生成代码、监控流程、扫描资源库、提供预测并辅助快速决策,效率也开始得以提升。这将进一步加快和提高整体代码生成速度,意味着能够实现更多的软件构建、更多需要保护的软件以及更频繁的运行时更新。当我们将嵌入式AI模型(MLOps)添加到现代软件开发的等式中时,上述领域将进一步扩大。“流式软件”的概念正逐渐成为现实,小规模的增量改进(基于二进制文件的更新)会自动从开发阶段流向运行阶段,而服务停机时间则会降至最低。
在应用安全方面,AI能够通过预测,大幅缩短发现和修复问题的时间,从源头防止恶意软件包进入企业。首先是利用基于AI的严重性和上下文分析来进行自动化漏洞扫描和检测,然后是自动修复。尽管取得了上述进步,但在基于AI的解决方案展现出更高的可信度和可靠性之前,人工干预和审批仍然是必要的。
近年来,我们开始向全自动范式过渡,即从“智能副驾”(AI助手)转变为“自动驾驶”(人工智能决策者)。机器可以通过自然语言用户界面(如英语)来解决高度复杂的问题,而这需要程序员掌握新型技能,引导对话达到预期状态。从根本上说,AI系统的性能应优于普通人类开发者或参与上述流程的其他人员。AI将进一步增强决策流程并使之自动化,使企业能够选择最佳的(数据驱动型)方法和工具来解决任何问题。对AI系统的信任将是最重要的,而这就要求做到对广范围语境的理解和合乎道德的决策制定,类似于当今自动驾驶所面临的挑战。自学习和自修复能力将成为检测、分析、隔离和修补问题并保持服务正常运行的关键。这意味着:软件将能够自我重写和更新,并增加新的功能以处理新的输入。同样,对于自动驾驶汽车,AI系统也必须从自身运行环境中学习并做出相应调整。
总之,虽然自动驾驶与软件开发之间的相似之处可能不会立即显现出来,但这两个领域都有一个共同的目标,即利用AI来强化自身的运作,并让个体能够腾出时间来专注于更想追求的目标。在软件开发方面,AI将持续加速并改进新功能和数据的创建,提升各研发职能的用户体验,逐步从可信赖的顾问发展到更高的决策自主权。从智能编码和安全,到覆盖整体 DevOps 堆栈,基于AI的“智能副驾”将慢慢成为整个软件开发生命周期的主流。企业对于AI必须坚持负责任且安全的原则和实践,以确保业务成果的可持续性。这涵盖AI生成软件的多方面,包括保护知识产权,避免潜在的安全和许可证合规问题等。AI系统的逐步自主化将允许并确保与现有基础设施和监管环境的兼容性。
随着AI技术的不断进步,我们可以预见软件开发将迎来更深入的整合和创新。随着AI不断改变各行各业,我们也步入了一个激动人心的时代。软件开发的未来大有可为,想象力有多大,我们对机器能够赋予的开发责任就可以有多大。