AIGC 生成代码正流行,对程序员是好还是坏?

作者 | 褚杏娟
AIGC 最大的价值将表现为重塑生产力、重塑开发者工作流程 。现在,AIGC 生成的代码是否可以同于生产?AIGC 会给开发领域带来什么变化?程序员该拒绝还是适应辅助编程工具?
6 月 16 日,WasmEdge 创始人和核心开发者、 Second State 联合创始人 Michael Yuan 博士,品览联合创始人 &CTO、极客时间《AI 大模型应用开发实战营》讲师彭靖田,亚马逊云科技大中华区首席架构师邓明轩做客《极客有约》,一起聊了聊 AIGC 与程序员的那些事儿 。本文根据直播内容整理,大家可以点击查看完整视频(https://www.infoq.cn/video/D8fRLD8POS4Nq0PGHVrH) 。
AIGC 生成的代码如何?
吴少杰:我提前给三位老师准备了一个问题 。作为管理者,我们可能会遇到一些与大语言模型生成代码相关的考虑 。现在我将展示一段设置好的代码,邀请三位老师进行点评 。
我给大模型的描述是:

你是一个 Python/ target=_blank class=infotextkey>Python 工程师,写一个自动检查公司 git 代码库代码合规的脚本程序,功能包括:代码里是否包含数据库密码、调用 pylint 工具检查代码是否符合规范等,把不规范的代码文件信息发邮件给提交代码的程序员,并抄送他的直属领导 。生成的结果如下:
importos importre importsubprocess importsmtplib fromemail.mime.multipart importMIMEMultipart fromemail.mime.text importMIMEText# 邮件相关配置SMTP_SERVER = 'smtp.example.com'SMTP_PORT = 587SMTP_USERNAME = 'your_username'SMTP_PASSword = 'your_password'SENDER_EMAIL = 'your_email@example.com'SUBJECT = '不规范的代码文件信息'
# 检查数据库密码defcheck_database_password(file_path):withopen(file_path, 'r') asfile:content = file.read()ifre.search(r'bpasswordb', content, re.IGNORECASE):returnTruereturnFalse
# 使用 PyLint 检查代码是否符合规范defcheck_code_conformance(file_path):command = f"pylint {file_path}"result = subprocess.run(command, shell=True, capture_output=True, text=True)output = result.stdoutreturnoutput
# 发送邮件通知defsend_email(file_path, recipient, cc):msg = MIMEMultipart()msg['From'] = SENDER_EMAILmsg['To'] = recipientmsg['Cc'] = ccmsg['Subject'] = SUBJECT
body = f"不规范的代码文件:{file_path}"msg.attach(MIMEText(body, 'plain'))
try:smtp_server = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)smtp_server.starttls()smtp_server.login(SMTP_USERNAME, SMTP_PASSWORD)smtp_server.sendmail(SENDER_EMAIL, [recipient, cc], msg.as_string())smtp_server.quit()print("邮件通知已发送")exceptException ase:print(f"发送邮件时发生错误:{str(e)}")
# 主函数defmain():repo_path = '/path/to/your/git/repository'
forroot, dirs, files inos.walk(repo_path):forfile infiles:file_path = os.path.join(root, file)
【AIGC 生成代码正流行,对程序员是好还是坏?】# 检查数据库密码ifcheck_database_password(file_path):send_email(file_path, RECIPIENT_EMAIL, CC_EMAIL)
# 使用 PyLint 检查代码是否符合规范pylint_output = check_code_conformance(file_path)if"Your code has been rated at"notinpylint_output:send_email(file_path, RECIPIENT_EMAIL, CC_EMAIL)
if__name__ == '__main__':main()
邓明轩:这个问题实际上是对大型语言模型的 Prompt 描述,我认为这也是当前程序员需要学习的一项技能,你必须学会如何与大型语言模型进行交互,你可以告诉它代码块是什么样的,请它简化或转化为一个类或打包到一个类中完成任务 。因此,Prompt 是一项非常重要的技能,我提醒大家要去学习,并在实际工作中不断提升,这将决定了后续使用这种基于大型语言模型生成代码工具的效率 。Prompt 写得越好,效率就会越高 。
关于 Prompt,吴老师使用的是中文,我个人认为,在当前的环境中,如果你的英文水平能够达到一定程度,最好开始使用一些英文的 Prompt 。我们必须面对这个现实,即大型语言模型目前无论是国内还是国外训练的,它从各种资源中获取的数据更多是英文的,因此大型语言模型对于理解英文的偏好和能力要强得多 。当然,我们希望中文的表现越来越好,但这之前,我们应尽量适应这种工具的发展 。
可能有人问:有了大语言模型,我们是否还需要学习英语?根据我的个人使用体验,虽然目前大型语言模型在翻译等方面的表现已经相当出色,但用英语直接与它进行交互会有获取更多信息的能力 。因此,从短期来看,我仍然认为学习英语会有所助益,尽管对许多程序员来说英语一直是个难题 。


推荐阅读