众说纷纭:大模型要颠覆软件开发了吗?

背景介绍

从ChatGPT到GPT4,大模型近期的迭代速度很快,不断刷新我们的认知。从一些业界专家初步的尝试看,大模型在很多软件开发任务甚至从需求到代码的端到端的小规模程序自动生成上已经具备了很强的能力。看起来大模型似乎是要颠覆软件开发了。真实情况确实如此吗?软件开发真的除了产品经理和代码评审人员之外不再需要其他人了吗?为了在迷雾中看清一点未来的道路,我在智能化软件工程学术沙龙群中临时发起了一个线上会议,听听工业界和学术界专家们是怎么说的。会议吸引了80多人上线参与,听到了一些真知灼见,特此记录。

——彭鑫(复旦大学)

访谈主题

大模型对软件开发的影响

访谈发言记录

彭鑫:

今天我们希望讨论的是大模型是否要颠覆软件开发了。想象一下,企业的软件开发项目通常需要花费很多精力把需求搞清楚,为此会编写很多需求文档,在此基础上架构师做设计并把任务分解到各个小组,在此基础上大量开发人员基于Git这样的版本库进行协同开发并不断进行测试和集成。大模型的到来会在多大程度上改变这种开发模式并让各种开发角色消失,是很多人都很关心的问题。所以今天邀请各位专家来闲聊一下大模型对软件开发的影响。下面我们让各位老师们讲一讲自己的想法和感受。张刚博士这两天刚刚分享了自己利用大模型实现完整的俄罗斯方块游戏开发的经历,请张刚博士先谈谈自己的感受。

张刚

我尝试用ChatGPT开发俄罗斯方块的游戏。我发现大模型写代码的结构非常好,由外而内,先写整体框架,再一点一点补充程序内容。在交互的过程中,基本感觉不出是在和机器交流,大模型应该是通过了图灵测试,是一个不错的老师。

彭鑫:

那你觉得在这个过程中,大模型有设计思想吗,还是只是功能的实现?

张刚:

基本是有设计的,大模型会由外而内地做,先写顶层的东西,然后逐步实现。

彭鑫:

那你觉得,你提问的过程中,是不是带有自己的思考或一些设计,相当于给了大模型一些提示。

张刚:

这个是有的,所以我发现只要有了设计思路,编码基本就可以让大模型解决了。

彭鑫:

陈治近期也有一些尝试和探索,请谈谈自己的感受。

陈治:

我比较认同的一个观点是,要善于提问题,拆解问题,一步一步引导大模型去解决问题。AI在执行很特定的步骤时,具有很好的能力。我对大模型还是比较乐观的,因为大模型展现出的基本能力,对企业的生产力是有价值的。一般企业使用的API范围比较小,把这种特定领域知识喂给大模型后,模型可以很快适应并生成代码,进而提高企业的生产力,所以我认为大模型的表现是很好的。虽然大模型的输出也会有一些错误,但是这些错误人很容易识别,只需要关注它正确的输出就可以了。

彭鑫:

大模型如何在少样本的情况下很快地学会一个特定领域的知识?大模型通常很擅长回答一些通用知识问题,就像纸上谈兵。但在实际开发实践中,需要根据实际问题和模式进行设计,并且项目规模大起来的时候,模型真的具有掌握很长的上下文关系,进行高层抽象并应用的能力吗?

陈治:

在小样本能不能提高模型能力的问题上,我们用openai基于GPT3的“达芬奇”模型做了尝试,可以让模型学会新的模式。但是如果是chatGPT和GPT4这类大模型,参数量太多,可能就不好用小样本进行微调,所以我们还是要学会和机器进行交互,更好地激发出大模型的能力。

彭鑫:

大模型能力的边界和天花板在哪里?请邱锡鹏老师谈谈观点。

邱锡鹏:

大模型看了很多GitHub代码之后,它的语言理解能力已经非常好了。一般我们人类的需求可能就是几种已有需求的组合,所以大模型可以帮助完成很多代码编写的任务。限制大模型能力的可能就是长度,比如缺乏跨文档的生成能力如何,如何设计几个文档的关系之间的编排,比如模块的分解,模块之间的关系。对于大模型来讲,一个非常强的能力是思维链,它会把一个复杂的问题分解成多个简单的问题来做。不知道在代码编写上是否展示出这样的能力?

彭鑫:

大模型的问题分解能力还是很好的。我比较关心的是,大模型真的会很多顶层的设计吗?请楼建光老师谈谈观点。

楼建光:

我是属于极端乐观派。软件工程的设计其实是有很多套路的,可以通过某种方式教会模型学会这些套路,一旦大模型掌握了这些套路,或许是可以比很多一般的工程师做得更好的。我觉得这些套路是可以总结和固化到模型里的,比如通过Prompt方式或者finetuning的方式来将知识注入到大模型里,从而提高自动化的水平。

彭鑫:

请谢涛老师谈谈感受。

谢涛:

我还是比较中立的。很多不涉及设计的码农可能会被大模型替代,但是很多一些知识不公开的场景,有很多限制的场景,有特定上下文的场景,这些场景大模型还是不太好颠覆,因为这些私有的知识不在大模型的知识库里。所以,大模型只能颠覆一些通用的简单设计,比如前后端设计等,对一些高层的设计,可能还是不能完全颠覆的。

彭鑫:

李戈老师怎么看?

李戈:

我也是乐观派。未来很多场景中可能真的不再需要手工编写程序了,条件是能够把需求说清楚。软件开发实际是实现从自然世界的解决方案到计算机程序的映射,在现有的软件开发中,这个映射是依赖编程语言来实现的,那以后在开发者能够清晰描述自己的解决方案的前提下,的确计算机可以自已完成这个映射。说到软件设计,我觉得还涉及一个数据问题:高层设计的可学习数据比较少,因此大模型无法学习,如果有这种关于设计的数据和知识,我相信有些经验大模型就可以学会。软件设计是用来描述解空间的结构的,软件开发人员需要在解空间做交流和表达,因此才需要借助各种图,AI如果能从需求直接映射到代码,那可能对设计的依赖就小了,需求变更的问题也缓解了,包括后续维护的问题。当然,AI也有自己的局限,在个性化的场景中,再强的能力如果没有个性化的环境和背景信息也不行,所以,未来的软件企业的核心东西是领域知识和领域know-how,自己知道而别人不知道,这些信息可能是大模型不容易学到的。

彭鑫:

请王戟老师谈谈自己的观点。

王戟:

大模型作为一个基础设施,可以一部分提高软件开发的生产力,也会给人们提供更多的创造空间,给软件工程带来更多的想象力和更有创造性的工作。在大模型的基础上,怎么用好提示工程等去激发它,这是大模型开启的一个大的研究领域和研究空间。

彭鑫:

请张成志老师讲讲感受。

张成志:

我是中立态度的。实际开发中,需求可能一次不能表达得很清楚,需要一边开发一边逐步写清楚需求。一些通用的,不需要领域知识的,这一类的问题,大模型表现的比较好。一些不是通用的,比如操作系统等,大模型可能不是很擅长。

自由探讨记录

张刚:

当资源足够多的时候,那记住项目已有的内容应该是不难的,基于已有上下文的需求变更应该是没有什么问题。

楼建光:

如果一个软件项目,很容易外包出去,那它很容易被机器完成。如果只能自己做的,那可能大模型也干不了。

彭鑫:

需求本身也有可能是创新,如果一个需求没有人做过,那大模型也可能帮不了太多忙。此外,软件设计相关的很多知识是缺失的,经常没有进行完整的描述,因此大模型可能无处学习软件设计相关的知识。说起软件设计可能一种规范化描述是使用各种UML图,但即使UML图画的比较全但关于设计的描述可能也是不完整的,有很多设计信息可能还是需要当面沟通并口口相传,是很难在代码中直接体现的。软件设计特别是高层设计可能是很难被大模型学习到的,想把设计细节面面俱到描述完整经常也是很难的。

沈嘉思:

人如果对需求描述得不准确,用大模型可能会生成质量低的软件,且生成的速度比以前更快。以后会不会有更多的机会,需要探索如何改善这些质量低的软件?

朱少民:

十年前,IBM公司借助UML生成的代码,其质量还不够好,不易维护。但是,现在通过GPT-4生成的代码已经非常好了,张刚老师的实验也证实了这点。如果GPT-4使用泛滥,产生比较多的劣质代码或程序,那是人为造成的,不能归结于大模型本身。大模型还不够完美,需要人机交互智能,相互借力,相互弥补不足。

楼建光:

可以把ChatGPT看成人,人也是经常犯错的。在实践中,我们一般是用流程控制来防范人犯错的,比如,做一些checklist,一些自动化的测试,来降低出错概率。同样的,这些保障措施也可以保留着,用来完善大模型的生成代码。大模型可以在软件开发的流程中同时扮演不同角色,而且这些不同的角色之间可以交互协作,组成一个虚拟的团队。

彭鑫:

假设在使用大模型的同时我们还是需要加上各种开发流程,那么这个过程大体还是要遵循DevOps等已有的开发流程,而大模型会在开发流程的各种环节上提供局部的协助,同时需要人不断去确认。目前大模型可能还是没有反问和决策能力,所以我怀疑大模型是不是会在开发过程中自以为是地跳过一些问题(即在一些需要开发人员确认的地方自作主张地形成解决方案)。

张莉:

现实世界中很多人是谈不清需求的,但是大模型有领域知识是可以帮助进行需求分析和分解的。

陈治:

大模型要转化为生产力,目前还需要赋予它更多的能力。例如,大模型目前确实没办法同时改多个文件,我们可以将这种修改或分解成多个问题让它处理,使用规则性、算法性的过程做些应用层功能,取长补短,让大模型可以和具体场景结合起来。

李戈:

描述需求的时候不排除可以用别的形式,比如用图、语音等,到那个时候设计还存在吗?或者说设计如何定义呢,毕竟把需求描述为图也可以是一种设计。

魏昭:

在软件开发的其它阶段,可能很多情况不需要人工编程了,但在需求、设计这块我偏向于保守一点。在企业里,需求的表达包括产品经理有时候表述得不是很好,特别是对一些复杂的业务场景理解不够深刻时会产生模糊的表述;另外还有一些设计类的架构图在讨论时很多时候是画在白板上的,但这些设计图有可能最终并没有被电子化。所以实际环境中,高层的需求和设计类数据较少,或者缺少高质量的需求、设计类数据的情况下,大模型是很难学习并达到理想的需求和设计能力的。

郭健美:

首先一个问题,ChatGPT是否代表了强人工智能时代的到来?如果是,那么我想软件开发工作被人工智能代替只是时间问题。我目前对ChatGPT的认知还很有限,感觉上还处于弱人工智能阶段,而且其学习能力主要基于数据和基于模型。对于软件开发来说,一方面,有些数据是不公开的,而大模型缺少这些数据又不能自我学习,自然也无法生成高质量结果;从这个角度看,数据价值和重要性再次被突显,数据隐私保护将更加重要。另一方面,如果软件开发过程本身可以用一个完备模型表达,我想ChatGPT可以最终学出来,但目前很多复杂软件开发过程可能还不存在这样的完整模型,也就是我们自己都还没搞清楚,那么ChatGPT自己没法学得出;不过,ChatGPT会生成各种不完备的候选模型,帮助我们思考如何构建完备模型,这可能催生一类专业研究,即把复杂软件开发“模型化”。总之,我目前认为ChatGPT还无法完全替代人类软件开发工程师,但可能引发一轮社会分工,使得人类更加偏向专业化和创造性的工作。

访谈结束

997036c87e5b686f1771d7677dca7fac.png

695569de9bea6454b01d515950fc9263.png

c766ce44ad5cb1eeafb50b9ba6646552.png

CodeWisdom

一个有知识的软工公众号

发现智能化编程之道

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
后台采用apache服务器下的cgi处理c语言做微信小程序后台逻辑的脚本映射。PC端的服务器和客户端都是基于c语言写的。采用mysql数据库进行用户数据和聊天记录的存储。.zip C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值