​猜想生成式 AI 对软件工程的影响

2023年 10月 19日 42.7k 0

作者 | 冯英睿

随着AI技术的进步,尤其是OpenAI的GPT-4等大型语言模型的出现,生成式AI正不断改变我们对软件工程的认识。本文试图从多个角度分析生成式AI对软件工程可能带来的影响,包括我们对软件本身的理解、对软件卓越的定义、重新定义软件工程能力以及团队组成和文化等方面。

软件由代码和模型共同组成

Software = Codes + Models

我们发现大多数人在谈到AI辅助研发软件的时候,主要是指由代码编译的软件,但软件在今天早已不再仅由代码编译而成,而是由代码与AI模型共同组成的。当我们谈论研发提效的时候,也应该将AI工程提效加入进来一起考虑,而今天在基础模型之上通过微调的方式让开发AI模型的速度大幅提升。

同时由于AI涌现出来的能力,将在体验创新和系统集成上带来巨大的变化。从Microsoft365通过Copilot提升体验,以及ChatGPT与Walframe的集成这两个案例来看,随着AI能力的进一步增强,未来将由AI把系统或平台的各项能力进行整合,这也将进一步减少代码在软件中的比例。

所以在AI 2.0时代,我们需要更新对软件的理解。AI模型在软件中扮演越来越重要的角色,我们应该将软件视为由代码、数据和模型共同组成的系统。这意味着我们需要关注更大范围的变化:

  • 软件代码开发效率提升
  • AI模型开发效率提升
  • 代码在整个软件中的占比会下降

软件代码的可读性要求降低?

Codes = Human Codes + Generated Codes

在毫无疑问AI可以为软件生成正确代码的今天,很多人都在问:对卓越代码的要求,是否适用于所有的代码呢?我们对于软件卓越的认识也需要发生改变,如果软件卓越的追求是旨在降低成本、范围、时间并提高软件的价值和质量,那么有两个很有趣的观点:

  • 在满足质量和功能要求的前提下,是否由更多AI生成代码构建的软件因成本更低所以更卓越
  • 对于AI生成代码的质量要求明显和人类编写的代码不同

首先从成本角度来看,更多代码由AI生成不仅仅意味着研发成本的下降。同时也意味着问题的定义和分解都更加清晰,架构和设计更加简洁,否则AI很难自动生成可工作的代码。

而如果某些功能和组件的代码可以由AI重新生成,那么由AI生成代码的可读性也许不再值得特别关注。针对这一部分的代码,用于生成代码的注释和测试才是更重要的。而生成的代码可以在当模型升级时,通过生成的更好的代码来替代,让软件获得某种自我进化的能力。对于人类编写的代码而言,代码的可读性仍然非常重要。

重新定义软件工程能力

Generated Codes = Correct Codes + Wrong Codes

生成式AI也要求我们重新思考如何评估软件工程的能力。如果更卓越的软件需要更多生成的代码,那么是否可以认为:能够生成更多正确代码的人或团队比别人更有能力?因为生成的代码必然包括正确的代码和错误的代码。优秀的软件架构师能够找到更多生成正确代码的方法。而为了更多的生成正确的代码,通过降低AI学习的复杂性能有效提升生成内容的质量。这是因为:

  • 需要AI直接生成的代码越多越容易出错。这是因为需要生成越多的内容,就意味着中间关键节点没有打开,导致过程中有更高的概率使得AI不按照预期生成正确的结果
  • 需要AI学习更多知识和了解更多上下文就越容易出错。以自然语言数据分析为例,AI生成SQL和AI生成Pandas DataFrame操作代码的难度是完全不同的,因为Pandas操作数据集的时候,不需要了解数据库中如何去join数据,也不需要学会不同类型数据库的特有语法和指令

所以优秀架构师和团队在标准化设计、领域特定语言(DSL)设计和微服务拆分等工作将变得越来越重要,因为这些工作能显著降低AI学习的复杂性。

另外值得关注的是,因为生成式AI模型还可以通过知识库、模型微调等手段来提升能力,这使得知识工程或数据工程将成为软件工程的一部分,这也将是未来软件工程领域内一个非常有意思的领域。

非开发者也可以生产代码

Correct Codes can be generated by BA + QA or Dev

随着AI的代码生成能力不断提升的同时,如果团队的工程师开发出了优秀的架构和框架,使业务分析师(BA)和质量保证工程师(QA)能够直接交付许多功能,那团队的人员组成比例必然会发生变化。这也将会带来很多问题:

  • 这是否意味着BA和QA的比例将会增加?以软件工程师为主体的团队结构的变化是否会导致工程师文化的稀释?
  • 优秀软件工程师的成长路径是怎么样的?如果基本的工作都可以由其他角色完成,那初级开发人员的入门挑战是否会提升难度?
  • 因为QA和开发人员(Dev)之间工作内容的重叠,其差异将越来越模糊,QA与开发人员之间的区别又是什么?

很多问题都没有确定的答案,但值得大家关注。总之,生成式AI对软件工程产生了深远的影响。我们需要更新对软件本身的理解、重新定义软件卓越的范围、重新思考如何评估软件工程能力,并关注团队文化的影响。在这个过程中,软件架构和设计能力以及数据工程能力变得更为重要。我们应该积极应对这些变化,以更好地适应AI 2.0时代的软件工程发展。

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论