Prompt不等于编程,“提示词工程师”淘汰程序员也是伪命题

Original 李建忠 李建忠研思


最近ChatGPT及基于大语言模型(Large Language Model,以下简写为LLM)的Github Copilot等工具出来之后,在软件开发领域也带来了非常大的震撼。著名的观点有Fixie创始人、前Google工程总监Matt Welsh在ACM通讯上发表的《The End of Programming:编程的终结》,以及OpenAI网红研究科学家Andrej Karpathy的“The hottest new programming language is English”,这些言论在海外也是非常有争议性的。比如我和C++之父Bjarne Stroustrup的交流,他老人家对LLM能替代程序员就相当不以为然。这些专家观点,很多时候不是简单的Yes or No的结论,因为LLM冲击的范围太大,而且很多时候大家谈的都不是同一件事情。

以Andrej Karpathy为代表谈的“The hottest new programming language is English”,是对其2017年发表的著名文章《Software 2.0》的延续。其主要观点是未来用“神经网络计算替代传统计算”,那么这时候对“神经网络”的编程就是自然语言。而传统程序员使用高级语言来编程的方式,会逐渐式微。这一观点足以颠覆整个自1944年冯诺伊曼以来的计算机体系架构、包括程序理论、编译原理、操作系统等等整个计算机科学体系。这个观点,虽然惊世骇俗,我觉得也足够深刻,但它的影响不是短时间能显现的,需要整个AGI产业相当的成熟和繁荣,同时需要解决巨大的能源和算力需求。因篇幅有限,这个我会放到下一篇文章中谈。

而以Matt Wels为代表的,谈的其实是使用LLM来生成代码、需求文档、设计文档、测试代码等一系列活动,它是对传统程序员工作方式的变革,仍然建立在冯诺伊曼体系架构上,遵从现有计算机科学体系。它也是目前正在我们眼前就发生的事情。

但这些专家观点,加上技术社区一些极端言论的鼓噪,在程序员群体造成了一种某名奇妙的“被提示工程师淘汰”的恐慌感,甚至最近在某些高考家长群体中也造成了一些误导——“听说程序员将来也要被ChatGPT给替代了,所以建议不要报计算机相关学科”。

作为一个还算资深的计算机专业人士,我深感有责任说点什么。先说我的观点,我认为在LLM生成代码的语境下,Prompt不等于编程,所谓的LLM“提示工程师”淘汰程序员也是一个伪命题。我分以下七个部分来阐述我的观点。

一、确定性计算 VS. 概率计算

在前面《AGI时代的产品版图和范式》的文章中,我曾提出【计算1.0 和 计算2.0】的范畴和重要特征。其中提到神经网络的概率计算特点,如果拿它和传统计算机的确定性计算来对比的话,可以看下图(该图来自于我今年4月份在上海的SDCon 2023全球软件研发技术大会上的演讲稿):

427859495b593bfc410c579dc6ca7954.jpeg

对于计算1.0时代的数字逻辑电路来讲,做的都是确定性计算(左图),即给定一个结构化输入X,那么结果Y则是确定的。但对于计算2.0时代的数字神经网络(也就是LLM的原理),做的都是概率性计算(右图),即给定一个自然语言输入u(也就是所谓的提示词Prompt),那么结果是一个概率分布:Y1, Y2, Y3, Y4, Y5……可以有很多。

概率计算是计算2.0时代,也就是LLM非常重要的基本特征。

二、LLM 生成代码的基础原理

不仅自然语言,计算机编程语言也是人类知识的载体,而且是逻辑性更强的语言载体。如果借用OpenAI 首席科学家Ilya Sutskever的话“LLM(大语言模型)是对人类知识的压缩”,那么我们可以说计算机编程语言是对人类逻辑的压缩

无论ChatGPT,还是Github Copilot等代码生成工具,其原理都是通过海量代码数据学习(主要来自Github开源代码),从而使模型掌握压缩后的编程知识和逻辑。实际上很多研究都表明,在训练了代码数据之后,LLM的泛化能力使得它的逻辑推理显著增强——这和一个人学习了编程语言后,逻辑能力大为提升是一个道理。

然后,通过Prompt的方式,就可以让LLM自动生成包含一定知识和逻辑的代码。这种代码生成,仍然具有LLM的“概率计算”特点。下面和“传统编程”做一个对比。

在传统编程下,高级语言(即program) 通过编译器(计算1.0时代的确定性逻辑)转换为汇编语言。而在LLM代码生成下,自然语言(即prompt) 通过LLM (计算2.0 时代的概率性逻辑) 转换为高级语言。

这里面有两阶段的概率性:第一层 自然语言prompt阶段,大家都知道自然语言表述有巨大的随意性,虽然当前各种 prompt技巧甚至prompt patterns发展的如火如荼,但它本质上还是自然语言,不可能再走回到结构化编程语言的老路上,所以只要是自然语言prompt,它的随机属性就永远存在;第二层 LLM经过神经网络推理生成代码,这个阶段前面谈过,LLM是个计算2.0时代的概率性逻辑,它的输出当然是概率性的。

这两阶段的概率性,使得LLM生成的高级语言代码,具有相当的不确定性。这也是为什么很多程序员朋友使用了Copilot等工具后,并不能得到预期稳定的代码输出。

三、只做提示词工程,LLM是否能完成软件编写?

有些朋友可能会说,程序员编写代码,也是生物神经网络计算,也有很大不确定性啊?同样一个任务,A程序员和B程序员编写的代码肯定不一样,即使A程序员放不同的时间,编写的代码也不同啊?

其实程序员“生成”代码之后,还有一个不断通过“逻辑校验”、“编译器校验”、“ 各种测试校验”的过程,这是一个从概率性逻辑向确定性逻辑的逐步收敛过程。这样一个收敛过程,通常伴随着语义正确性推演、内存和资源使用正确性确认、设计符合良好耦合原则确认、单元测试结果正确性确认等一系列过程。不是“生成完代码”就大功告成了。

用一个简单的公式表示:编码 = “代码生成”+“确定性收敛过程”

其实整个编码活动中,这个“确定性收敛过程”常常是比“生成代码”更为重要、耗时更长、也更有价值的活动。当然,这些也可以让LLM来辅助(比如LLM帮助debug、生成单元测试等)。但是注意我用的词是“辅助”,而不是“完成”,因为LLM本质是概率性计算,而这些“收敛活动”最后都要求“确定性计算”。最终的收敛点如果没有程序员“介入矫正”和“最终裁决”,是无法彻底完成的。

因此仅在“编码”这一环节,提示词工程师都是完全不够的。必须程序员不断介入。如果说一个“提示词工程师”完全不懂某一门编程语言和技术栈,所谓 Prompt就大概只是花拳绣腿,想独立完成该语言下的软件开发工作,就有点异想天开了,匡论“淘汰”程序员?

四、LLM的劣势,程序员的技能优势——“抽象”

很多软件项目实践都表明LLM在细颗粒度、抽象层次较低的任务上,表现非常好;但在大颗粒度、抽象层次较高的任务上,表现比较差。而大颗粒度、高抽象的设计才是软件开发中核心的核心——抵抗软件的复杂性。

正如面向对象大师Grady Booch在回复Andrej Karpathy的“The hottest new programming language is English”争论时,也鲜明地指出“整个软件工程的历史就是不断提升抽象层次”

而这一点和LLM将人类知识“不断压缩、进而抽象”的发展路径不谋而合。

所以在即将到来的AGI时代,软件开发中比较难被LLM替代的部分主要包括以下抽象层次较高的任务:需求分析、领域建模、架构设计、详细设计、模块耦合性设计、接口设计、开发者测试设计等。而具体的类型实现、函数实现、算法实现、单元测试实现等这些抽象层次较低的任务则是LLM特别胜任的。所以,AGI时代,程序员最重要的技能要聚焦在上述抽象层次较高的任务,才有号令LLM的资本。

同样用一个简单的公式表示:软件开发=抽象层次较高的任务 + 抽象层次较低的任务(编码)

如果套用上面的编码公式,可以推演如下:软件开发= 抽象层次较高的任务 + “代码生成”+“确定性收敛过程”

其中代码生成是目前LLM最为擅长的,而抽象层次较高的任务 和 “确定性收敛过程”都是离不开程序员的。

不过,对于抽象层次高的任务,LLM未来一定无能为力吗?理论上来讲,人类大脑的生物神经网络可以掌握的,基于LLM的数字神经网络一定也可以。能不能实现主要看LLM训练数据的质量、RLHF中的人类反馈、FineTune、Prompt等环节是否能将软件行业积累这么多年的各种“抽象”的优秀实践都学习掌握到?至少目前以GitHub开源代码为主要训练数据来源的LLM在这方面表现还有相当大的距离。

我相信这也将是软件领域今后长期活跃的研究方向。但这一定是一个渐进、漫长的过程。

五、LLM没有改变什么?

有些朋友因为媒体的各种鼓噪产生了对AGI(通用人工智能)强大的幻想症,觉得LLM无所不能,LLM会改变世界的一切规则。甚至觉得有一天LLM会不会发展到不需要生成高级语言、不需要编译器,给Prompt就能直接生成计算机程序?

这要看大家在什么前提下谈,如果不抛弃冯诺伊曼体系架构,那么这种设想就不可能。

因为LLM本质上是一个大语言模型,它接受的是语言输入,输出的也是语言。在冯诺伊曼体系架构下,它不会改变数字电路“与或非”的原理、不会改变计算机程序的基本逻辑、不会改变编译原理、不会改变操作系统的规则、也不会改变算法、数据结构、网络协议……等等自图灵、冯诺伊曼以来计算机科学近八十年所积累的所有的“Law”。

六、LLM将会改变什么?

那么LLM在软件开发领域到底会改变什么?它改变的是,以“语言”为载体,由人参与的“经验性活动”,大量需要“各种语言载体”进行沟通、协调、对接、传授的部分。比如:需求分析、软件设计、代码编写、开发者测试、代码评审、重构、整洁代码、缺陷调试等等。

说到“各种语言载体”,其实除了自然语言和编程语言外,软件活动中还有很多种“语言”,例如:各种 结构化文档、数据文件、图表(Diagram) 、XML、Schema、Table…… 这些都是LLM可以大力发挥“大语言模型”神力的地方。

这些“经验性活动”组成了我们通常所说的软件工程,都是LLM会引起剧烈变革的地方。比如我的朋友、来自同济大学的朱少民教授就提出软件工程3.0,对这方面有很多阐述。

七、LLM是程序员的效能倍增器

站在软件工程的角度,LLM会大幅提升原来软件开发过程中的每一个环节。因此学习掌握一定的Prompt技巧是有必要的,但前提是首先要掌握好“编程语言”和相关技术栈本身——这也是做好Prompt的前提。没有“编程语言”和技术栈本身的掌握,再多的Prompt技巧只是缘木求鱼。实际上有些朋友在软件项目中已经发现,花费在反复Prompt和调错上的时间代价有时候比手工编程还要高很多。

但我也反对一些老派程序员“致命的自负”,总是认为自己手搓代码比LLM生成代码快、质量好,面对LLM对软件开发的变革而无动于衷。就像有了社交网络之后,一个人能够管理朋友的数量,是没有社交网络之前的好多倍。同样,有了 LLM 之后,一个程序员的效能提升,也会成倍增长。

有些朋友可能会从“结果”的角度来推演,LLM既然让程序员效能提升了数倍之后,那原来需要30个程序员,现在是不是只需要5个程序员就可以了,其他程序员不会被淘汰吗?

这是站在“总需求量固定”的思维定势下的结论。实际上我认为,假如有了LLM对程序员的赋能之后,整个社会对软件的数量、复杂度、规模的需求都会出现井喷效应,从而会更大程度上创造出更多程序员岗位。比如飞行技术的发展,迎来了航空业的大发展,促进了更多飞行员的需求,而不是相反。

总结我的结论,在不抛弃冯诺伊曼体系架构前提下。

在AGI时代,掌握编程语言和其背后抽象层次较高的部分、以及相关技术栈,仍然是优秀程序员的基本功。“Prompt Engineering提示工程”对软件开发可以起到效率倍增的作用,但它不是软件开发的全部,“提示词工程师”也替代不了程序员的作用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/29223.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

请注意:chatgpt 国内用户想要免费使用可能是伪命题

目录 前言 了解chatGPT 客观分析是否可以免费使用chatGPT 警惕免费的陷阱 前言 现在的chatgpt已经是相当火爆,越来越多的人对chatgpt是耳熟能详了。于是就有很多国内的朋友都想知道如何可以免费的使用chatgpt,大家对这个话题似乎都非常感兴趣,今天我…

伪命题之MYSQL分库分表

看到使用分库分表来解决性能问题的时候心里总是不能太理解。 如果同事发生大量请求的时候,损害性能的是硬盘的随机读。那么分库分表也没有对性能的瓶颈进行“分治”啊。 应该的做法是使用一块新的硬盘来创建分库。但是基本的文章都没有提到这点。而且基本上也不会有…

论文阅读笔记:Rumor Detection on Social Media with Bi-Directional Graph Convolutional Networks

这篇论文好像是第一篇将图神经网络应用到社交媒体谣言检测的论文。 摘要 摘要中,有几个关键性的词,有助于我们从全局了解这篇paper的内容,以下: Bi-Directional:意思是“双向的”,分别指“top-down”&am…

论文报告-Linear Regression for face recognition

论文的英文题目、中文题目,作者; 英文题目 : Linear Regression for Face Recognition 中文题目 : 人脸识别的线性回归方法 作者 : Imran Naseem, Roberto Togneri, Mohammed Bennamoun 摘要翻译 本文提出了一种新的人脸识别方法,将模式识别…

论文笔记:Mind-the-Gap,Unsupervised Domain Adaptation for Text-Video Retrieval

小心空隙!文本视频检索中的无监督域自适应 摘要介绍方法总体框架Concept Preservation 结论 摘要 什么时候我们可以期望文本视频检索系统在不同于其训练域的数据集上有效地工作?在这项工作中,我们通过无监督的领域适应的视角来研究这个问题&…

“detail“: “Unsupported media type \“text/plain\“ in request.“

在使用 Postman 的过程中,使用 POST 请求传输数据时,Postman 反馈如下错误 "detail": "Unsupported media type \"text/plain\" in request." 这是由于在传输数据过程中格式选择错误的原因 只要将右下角的 Text 格式转换为…

Dual-stream Network for Visual Recognition论文记录

太长不看版:作者提出了一种DS-net,受resnet启发,设置了4个stage,分别下采样为原图的4,8,16,32倍小。每个stage中含有不同数量的block,作用是可以将输入的tensor按照channel划分为两部…

图像超分辨率论文笔记

持续更新 Progressive Multi-Scale Residual Network for Single Image Super-Resolution 论文链接:https://arxiv.org/pdf/2007.09552.pdf代码:PMRN (暂未公开)发表时间:2020.7网络结构: 1)包…

【论文笔记】Exploring Temporal Coherence for More General Video Face Forgery Detection

* Exploring Temporal Coherence for More General Video Face Forgery Detection 题目:探索更一般的视频人脸伪造检测的时间相干性 1.概述 时间相干性网络组成: 第一阶段是一个全时间卷积网络(FTCN)。FTCN的关键见解是 将空间卷…

视频超分辨率论文笔记

持续更新 Video Super-Resolution via Deep Draft-Ensemble Learning 论文链接:http://openaccess.thecvf.com/content_iccv_2015/papers/Liao_Video_Super-Resolution_via_ICCV_2015_paper.pdf代码:http://www.cse.cuhk.edu.hk/leojia/projects/DeepS…

【超分辨率】SRCNN论文笔记

论文名称:Image Super-Resolution Using Deep Convolutional Networks 论文下载地址:https://arxiv.org/pdf/1501.00092.pdf 翻译参考:https://blog.csdn.net/PPLLO_o/article/details/90040801 1.论文概述 1.SRCNN算是深度学习在图像超分辨…

版面分析:[ICCV2017] Fast CNN-based document layout analysis

论文链接:https://openaccess.thecvf.com/content_ICCV_2017_workshops/papers/w18/Oliveira_Fast_CNN-Based_Document_ICCV_2017_paper.pdf 自动文档布局分析是认知计算和从文档图像中提取信息的过程中的关键步骤,如特定领域知识数据库创建、图形和图像…

论文笔记之数据增广(1):mixup

mixup:BEYOND EMPIRICAL RISK MINIMIZATION 文章:https://arxiv.org/pdf/1710.09412.pdf 代码:github 作者:张宏毅 mixupBEYOND EMPIRICAL RISK MINIMIZATION 摘要背景 引入贡献 方法 公式理解 实验讨论 摘要 如今大规模深度…

【图像超分辨率重建】——EnhanceNet论文精读笔记

2017-EnhanceNet: Single Image Super-Resolution Through Automated Texture Synthesis(EnhanceNet) 基本信息 作者: Mehdi S. M. Sajjadi Bernhard Scholkopf Michael Hirsch 期刊: ICCV 引用: * 摘要: 单一图像超分辨率是指从…

旷视CVPR2019图卷积多标签图像识别Multi-Label Image Recognition with Graph Convolutional Networks论文详解

背景:GCN刚出来,很多很容易想到的idea会被运用起来,很容易产生一些paper。我们解析此篇论文,了解其中原理,一来看看如何将图卷积应用于目前技术上,二来看到底如何快速的把准确率刷到state of the art以便发…

Hierarchical Modular Network for Video Captioning【论文阅读】

Hierarchical Modular Network for Video Captioning 发表:CVPR 2022代码:HMNidea:现有方法在有监督学习的框架下比较生成句子与标注,没有对语义有详尽的探索。基于此,作者考虑从三个层面来连接视频特征和语义&#x…

CVPR2019超分辨率文章:Meta-SR,任意输入upsample factor的超分辨率网络

论文地址 CVPR2019的新文章,主要是针对以前超分辨率问题中需要固定上采样因子的问题作出的改进。 摘要 随着DNN的发展,超分辨率技术得到了巨大的改进。但是,超分辨率问题中的任意scale factor问题被忽视了很久。前面的很多工作都是把不同s…

GAIDC大会:飞桨邀你来大模型技术与应用论坛

深度学习大规模预训练模型的兴起,以其极强的通用能力和突破性的效果,正推动通用人工智能(AGI)快速发展,并带来了AI研发应用新范式,逐步改变AI生态格局。近期以大规模语言模型为基础的技术工作,展…

人工智能大模型多场景应用原理解析

​强烈推荐一个大神的人工智能的教程:http://www.captainai.net/zhanghan 前言 在上篇文章《人工智能大模型之ChatGPT原理解析》中分享了一些大模型之ChatGPT的核心原理后,收到大量读者的反馈,诸如:在了解了核心原理后想进一步了解未来的发展…

3日行程安排

22号 13:30出发到峡山码头坐船--横山岛景区 峡山码头 船费:来回70r 固定开船时间:9:30,12:00,14:00 或者🈵️12人自动开船,最晚4点有船返回 岛上风景 逛山海“小普陀”寺庙普南禅院,被誉为宁…