人工智能为我们开展业务、获取信息以及与系统交互的方式带来了重大的转型。那么,它如何改变我们的开发方式呢?今天我们将讨论随着人工智能及基于AI的开发工具的出现,代码审查是如何演变的。让我们从回顾历史开始。为此,我们先看看我们试图构建什么:我们正在构建系统和应用程序。这是我们长期以来一直在做的事情的基础部分,归根结底涉及代码、文档和架构这些构建系统和应用程序的基本要素。

起初在思考审查方式时,我们处于“法根时代”的代码审查阶段,也就是迈克尔·法根发起的法根检查。作为IBM工程师的法根希望找到一种方法来一致且高质量地审查应用程序和系统的生产过程,从而提出了一种非常结构化的团队评审方式。团队成员常在会议室聚集,逐行检查代码和文档,大家纷纷发表意见以发现错误或确认需求。

这种审查方式非常耗时费力,但在当时我们并不太关注速度,因此有时间进行详尽的审查。然而随着开发速度的加快,我们进入了敏捷时代。取代了结构化的团队评审的是结对编程,即由两个人协作生产代码和文档时实时互相审查。这种“飞行中”的审查方式极大地加快了进度,但本质上仍聚焦于实现细节和语法正确性。

随着团队规模扩大和应用复杂度增加,我们进入了“拉取请求时代”。开发者在仓库中提交更改并申请合并,这增加了版本控制和差异对比的复杂性。审查重点从单纯的语法检查演变为共识审查:多人查看代码版本和差异并决定是否批准,审批层级也日益升高。

随后为了解决人工审查的疏漏,我们引入了CI/CD流水线自动化时代。系统自动检查代码质量、合规性以及漏洞等安全问题,确保提交到仓库的内容符合内部或外部法规要求。这演变为系统辅助审查,不仅依靠人工判断差异和批准变更,还由系统进行监控以确保符合既定标准。

如今我们进入了人工智能时代,将大语言模型引入开发流程,带来了焦点的根本性转移。我们从关注如何实现代码和构建过程(实现层面),转向关注业务成果和需求满足度。这一范式转变标志着审查的核心目标从技术实现的细节验证,提升到了对业务价值和需求完成的最终确认。

现在我们看到了一种转变,一种相当显著的转变的开端。我们不再仅仅关注实现、各个部分以及它们如何组合在一起,而是开始审视结果是什么?我们要构建的究竟是什么?在这个过程中我们会得到一些协助,并且会发现来自人工智能(AI)的帮助越来越多。我们现在真正能够转变视角,让人们专注于我们要构建的事物及其背后的原因。因此,我们正看到一种平衡的形成:将来自AI的洞察——即我们从人工智能中引入的那些内容,与人类的判断力相结合。

你可以将这种关系视为一种协作。在这种协作中,人工智能负责进行广泛的分析。这意味着AI正在接管一些工作:它开始编写部分代码,起草文档,甚至开始为我们构建架构。它还开始审视我们如何将这些内容整合在一起:差异是如何进入代码仓库的?我们要如何控制合并和拉取请求等操作?同时,它也与自动化流程相集成,关注检查是如何进行的、代码质量如何把控。AI正在对这里发生的一切进行广泛的分析。

因此,人类——也就是我们——现在更多地专注于设定上下文和做出判断。所谓“设定上下文”,就是确认虽然各项技术细节都很出色,但我们究竟要达成什么目标?通过设定上下文,我们进行价值判断。例如,当要求AI构建某一部分时,我们会审视它并问:这与业务成果相比如何?这是否是我们想要的结果?我们可以开始迭代,通过提示词来调整开发方式。我们在此应用权衡和判断力,同时也做出取舍。

这些权衡涉及不同的方法选择。比如,在处理过程中遇到几种不同方案时,我会用一种替代另一种,这又回到了判断力的问题。这也关乎最终要做什么的上下文背景。如果我们思考这种转变带来的结果,我们会发现自己正成为一等工程师。人类做人类擅长的事:思考我们要构建什么以及为什么;而AI则发挥其优势,处理所有组件、移动部件和需要考虑的因素。

这一切都建立在测试的基础之上,通过自动化检查来验证——这些是我们仍在作为自动化时代一部分执行的工作。同时,还要关注运行时并寻找运行时的证据。因此,当我们思考这意味着什么以及如何执行审查时,我们的审查开始真正转变为基于证据的审查。

这种证据建立在我们以往的所有基础之上,但我们也审视业务需求和最终成果,并将这些纳入考量。因此,回顾这种审查类型的演变:我们从语法审查发展到共识审查和系统审查,而现在我们真正进入了结果导向的审查阶段。重点不再是“如何构建”,而是“是否构建了我们要构建的东西”。

正如你所见,基于AI的代码开发的兴起导致重心从代码实现转移。未来代码审查的重点不再是检查更多的代码,而是在日益由AI生成的系统中验证意图、成果和业务影响。感谢观看。