AI 时代,许多开发者都已经上手了各式 AI 编程工具,至于评价则千差万别。但整体而言,AI 编程的代码正越来越多出现在当下的各种技术栈中,其口碑也在逐渐攀升。随着 GPT4 的出现,AI 编程正在迈入新的台阶,而软件工程 3.0 时代也正在进行中。
为了更好地了解当下 AI 编程能力的发展,我们邀请到同济大学特聘教授,“软件工程 3.0” 定义者朱少民,请谈谈他 AI 编程的过去与未来。
为了更好地了解当下 AI 编程能力的发展,我们邀请到同济大学特聘教授,“软件工程 3.0” 定义者朱少民,请谈谈他 AI 编程的过去与未来。
朱少民
同济大学特聘教授,“软件工程 3.0” 定义者
CCF 软件质量工程 SIG 主席,拥有个人公众号《软件质量报道》。近三十年来一直从事软件测试、质量管理等工作,先后获得多项省、部级科技进步奖,已出版了二十多部著作和 4 本译作,并经常在国内外学术会议或技术大会上发表演讲,曾任思科(中国)软件有限公司 QA 高级总监、IEEE ICST 2019 工业论坛主席、多个 IEEE 学术会议的程序委员、《软件学报》审稿人等。
5 月 28 日,朱少民将担任 GOTC 2023 “AI 编程” 分论坛讲师,并发表《软件工程 3.0 之下 软件开发新范式》主题演讲,敬请期待!
参会报名,请访问: https://www.bagevent.com/event/8387611
OSCHINA:AI 编程这个概念是什么时候开始兴起的?现在处于什么样的发展阶段?
上世纪 70 年代左右就有了计算机辅助编程,但和今天的 AI 编程还是有区别的。辅助编程是想通过一些规则或者是专家系统来完成编程,基于规则引擎来做推理,相当于模拟人的思维,知名工具软件 MATLAB 可以看做是辅助编程的成果。但是效果不够好,所以后面也就停了一段时间。
这波人工智能的热潮可以看作是 AI 第三次浪潮的延续,而第一次和第二次的浪潮,实际上没有达到我们预期的效果。
今天我们讲 AI 编程,更多的是最近几年,基于深度学习、机器学习,基于深度神经网络和强化学习这些新技术来完成代码的编写。
那么现在所处的阶段,不能说是成熟阶段,但可以认为是接近成熟的阶段。比如 Copilot X,华为的盘古模型也能生成函数级的代码了。这些技术已经可以在工程实践中应用了。
OSCHINA:现在市面上有很多宣称能写代码的 AI 工具,开发者要怎么区分与选择?
一方面要看你使用的编程语言。目前如果用的是 C 语言,AI 方面的能力就弱一些。如果是 Java 或者 Paython、Go 语言,那开源的代码数据比较多,效果就会比较好。如果用到特殊的语言,也许会更困难。
另一方面就是要看功能,比如可不可以做代码补全、代码评审。还有代码生成的可靠性和准确性,决策是否可靠等等。比如生成代码的问题比较多,重构的工作量非常大,那么就没有意义。开发者常说的一句话:代码写得烂,要我改还不如我自己重写。最后,还要看工具好不好用,例如是否通过插件实现的(可以保留过去编程的习惯)等等。
OSCHINA:AI 编程如果要进一步发展,需要在哪些方面有所突破?
一个是规模挑战,即生成代码的量。
比如华为的盘古模型生产代码是函数级的,已经算是比较厉害的了。以前我们讲代码补全,相当于写一行代码给你补两行,或者写两行补一行,那么这在一个函数里可能只是完成了二分之一或者三分之一,你可以理解为代码块或者说代码行补全。从这种到函数级生成代码已经算是一大进步了,函数级至少完成了一个类的方法。
那么在此之上,再提升量级,比如完成一个完整类或模块、Package 等。
二是准确性、可靠性。早期代码生成的准确率大概是 40%、50%,根本不能用。工业界一般在达到 80%、90% 之后才会用。如果达到 95%,甚至是 98%,那就更好了。
三是代码理解能力是不是更强,像逻辑关系、上下文联系等等,相当于 AI 还可以联想到过去的代码。这方面,在今天也是对 AI 编程的一个主要限制。比如上下文理解,因为我们写代码或者整个代码的演化时间还是很长的,我经常和学生讲,你开发产品的第一个版本也许一两个月就结束了,但如果你的产品开发得比较好、有生命力,整个演化过程也许是几年甚至十几年。
那么我们今天的机器学习或者说大模型还没有这方面的能力,无法记住几天前的上下文,无法回忆几年前自己生成的代码,并依此不断生成新的代码、或做代码的重构与优化。
这相当于讲,目前的 AI 是通用的大数据学习,它不能学习产品线代码,然后来生成符合这个产品线业务逻辑的代码。GPT-4 能不能做这样事情,至少是要打一个问号的。
四是人机交互智能。这也要提到软件工程 3.0,GPT-4 发布标志着软件工程 3.0 时代的到来,其中人机交互智能将是软件工程 3.0 的一个常态。我们把需求文档塞进去,所有代码就都出来了,或者说是完全自动化生成代码,这样理想的情况,至少最近几年应该都不会发生。这还需要人和大模型、机器之间不断交互。
我们也希望有一个更好的交互机制,或者我们会提醒大模型,一个月之前的需求是不是可以重新思考,重新生成,或者把一个月之前的答案再做修改与调整。
同时这点放到今天的语境里来看相对更复杂的一点是,有时开发者不止一个人。以前简单的模式是每个开发人员会有一个助手,但现在可能是一个开发者拥有好几个机器人,甚至是机器人与机器人之间的协调。最近也有论文提到,去做一个类似管理人机交互过程,或者说是任务调度的平台。
全球开源技术峰会(Global Open-source Technology Conference,简称 GOTC)是由开放原子开源基金会、 Linux 基金会亚太区、上海浦东软件园和开源中国联合发起的,面向全球开发者的一场盛大开源技术盛宴。
GOTC 2023 将于 5 月 27 日至 28 日在上海张江科学会堂召开。大会将以行业展览、主题发言、特别论坛、分论坛的形式展现,与会者将一起探讨元宇宙、3D 与游戏、eBPF、Web3.0、区块链等热门技术主题,以及开源社区、AIGC、汽车软件、AI 编程、开源教育培训、云原生等热门话题,探讨开源未来,助力开源发展。
进入官网了解更多信息。