AI 时代,许多开发者都已经上手了各式 AI 编程工具,至于评价则千差万别。但整体而言,AI 编程的代码正越来越多出现在当下的各种技术栈中,其口碑也在逐渐攀升。随着 GPT4 的出现,AI 编程正在迈入新的台阶,而软件工程 3.0 时代也正在进行中。
为了更好地了解当下 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 的一个常态。我们把需求文档塞进去,所有代码就都出来了,或者说是完全自动化生成代码,这样理想的情况,至少最近几年应该都不会发生。这还需要人和大模型、机器之间不断交互。
我们也希望有一个更好的交互机制,或者我们会提醒大模型,一个月之前的需求是不是可以重新思考,重新生成,或者把一个月之前的答案再做修改与调整。
同时这点放到今天的语境里来看相对更复杂的一点是,有时开发者不止一个人。以前简单的模式是每个开发人员会有一个助手,但现在可能是一个开发者拥有好几个机器人,甚至是机器人与机器人之间的协调。最近也有论文提到,去做一个类似管理人机交互过程,或者说是任务调度的平台。
GOTC 2023 将于 5 月 27 日至 28 日在上海张江科学会堂召开。大会将以行业展览、主题发言、特别论坛、分论坛的形式展现,与会者将一起探讨元宇宙、3D 与游戏、eBPF、Web3.0、区块链等热门技术主题,以及开源社区、AIGC、汽车软件、AI 编程、开源教育培训、云原生等热门话题,探讨开源未来,助力开源发展。
进入官网了解更多信息,请访问:https://gotc.oschina.net