AI 能否代替软件工程师?

7564cd6d6de7d45a9c0b8f84d92eef5b.gif

软件工程师的工作不仅仅是写代码。AI 面临着一系列的挑战,比如深入洞察人类以及开展协作。人类在面对复杂的非线性问题时能够深入思考,而 AI 这方面的能力很欠缺。AI 难以理解人类设计师考虑的情感共鸣和语境是否合适等问题。此外,准确地预测用户需求需要一定程度的直觉和适应能力,在没有人类协助的情况下,AI 尚未能掌握这些能力。

原文链接:https://www.htormey.org/can-you-replace-your-software-engineers-with-ai/

未经允许,禁止转载!

作者 | Harry Tormey     译者 | 弯月

责编 | 夏萌

出品 | CSDN(ID:CSDNnews)

答案是否定的。在可预见的未来,人工智能并不能取代软件工程团队。原因在于,当前用于评估大型语言模型和自主代理的基准并未完全捕捉到软件工程师每天处理的任务的复杂性。即使根据这些简化后的基准,大型语言模型和自主代理所表现出的性能也不尽如人意。

软件工程师的工作不仅仅是写代码。AI 面临着一系列的挑战,比如深入洞察人类以及开展协作。人类在面对复杂的非线性问题时能够深入思考,而 AI 这方面的能力很欠缺。AI 难以理解人类设计师考虑的情感共鸣和语境是否合适等问题。此外,准确地预测用户需求需要一定程度的直觉和适应能力,在没有人类协助的情况下,AI 尚未能掌握这些能力。

话虽如此,大型语言模型和自主代理的发展正在迅速推进,AI 承担的任务越来越多,越来越高效,而且能力越来越强。本文旨在深入探讨评估AI工程师发展的基准。

d5ce1b950ef35588fbd2bccfe308b5a6.png

AI 的发展前景:工程师Devin

最近,Cognition 实验室的在一篇博客文章中介绍了一名自主 AI 软件工程师 Devin,文章中有一则视频,介绍了 Devin 掌握的一些技能,例如开发和部署应用程序、修复错误、处理开源项目问题、为已建立的软件项目做贡献,以及完成Upwork上的真实任务。

这些视频展示了Devin在一个沙盒式计算环境中使用一系列的开发者工具(如shell、代码编辑器和浏览器)来完成这些任务。该实验室的网站还包含了一个链接,里面记载了希望“雇用”Devin的等候者名单。

在视频中,似乎 Devin 完成的任务都很厉害,但实际上,这些任务都非常简单,类似于初级开发者教程或编程面试题。举个例子,其中一段视频展示了Devin修复了一个编程竞赛算法代码库中的一个常见错误,但其实这是大型语言模型训练数据集和评估基准中的一个很常见的问题。

96bfbeb61b14c1ed3c9a82aad02574f4.png

Devin的任务与初级开发者责任的比较

尽管Devin完成的任务看起来很高端,但实际水平还不如软件团队中初级开发者面临的真实挑战。例如:

  • 开发面向用户的功能:与Devin的演示不同,初级开发者通常需要在应用程序中构建复杂的功能。这些任务需要与团队合作,遵循设计系统,并确保应用程序满足实际用户的需求。

  • 解决复杂的后端问题:初级开发者还要解决生产环境中的复杂问题,例如修复拥有多个数据库和服务器的系统中的错误。这些工作远比Devin展示的任务要复杂得多,需要更深入的分析和解决问题的能力。

951bc0641b5c574a8a64c0445b4fa116.png

基准和现实:评估AI的软件工程技术水平

有关Devin,让我印象深刻的是以下声明:

“我们在SWE-bench上对Devin进行了评估,这是一个具有挑战性的基准,要求 AI 代理解决GitHub开源项目中(如Django和scikit-learn)发现的真实问题。

Devin正确地解决了 13.86% 端到端的问题,远超之前1.96%的水平。以前即便指出具体需要修改哪个文件,成绩最好的模型也只能解决4.80%的问题。”

为了正确理解这一成就,关键是看看人们如何测试大型语言模型在编程挑战中的表现。有一个很有名的例子,OpenAI 的 HumanEval,他们通过164个Python问题测试了该模型的基本编程水平,每个问题都要编写一个函数,而且还要通过测试,比如统计字符串中的大写字符。虽然看着很厉害的样子,但实际上这些任务远不及日常软件工程师的工作水平,更像是面试题,不是真实世界会遇到的问题。

3d8be996ea7c1abc56ff3d8d2c0b766f.png

SWE-bench:为什么说这是更好的软件工程AI测试基准

相比之下,SWE-bench提供的测试大型语言模型能力的基准更现实。其中包括来自实际的GitHub议题以及拉取请求的2,294个任务,要求大型语言模型浏览和修改代码库,以解决真实问题。这个基准要求对代码有更深层次的理解和交互,更准确地反映了软件工程的复杂性,而不像HumanEval等测试基准那么简单。

我们来深入看看SWE-bench论文,更仔细地观察其中提到的Python代码库、他们的数据来源以及测量性能的方法。该论文中给出了如下饼图,显示了问题的分布及其来源:

970346b78a2232ecedfaef19a2c9d24a.png

熟悉Python开发的人可能对其中一些库并不陌生。下面,我们来看看他们选择和抓取这些问题时使用的标准:

63a6649d420ff8bbceceee3f35d5654e.png

在SWE-bench测试中,AI 需要解决提供的代码库中所描述的问题。AI 需要以补丁文件的形式提交修改后的代码,并在其中指定必要的代码改动。如果在应用补丁后,相关的代码通过测试,则认为 AI 的解决方案是成功的。该基准的有效性取决于AI成功解决的问题数量。

尽管这比HumanEval略好一些,但作为基准仍然不够理想。现实生活中的软件工程涉及复杂的系统和技术,例如Kubernetes、Docker和像AWS等这类的云服务,这些在简单的基准测试中很难复制。这说明了常见的大型语言模型测试场景与工程师实际面临的细致、多方面的任务之间的差距。

cf5d8df16a86189af80344b78fea7b2f.png

SWE-bench:检查测试数据

我们可以通过Huggingface访问SWE-Bench的训练数据,这些数据存储在一个“.parquet”文件格式中,这种格式不像HumanEval数据那样容易查看。我使用pandas库创建了一个Python脚本来加载和显示这些数据。通过脚本,我看到了其中包含的问题,与Django相关的问题一共有850个,下面是一个例子:

标题:在django-admin中添加一个选项,表示始终输出颜色。

描述:使用Django管理命令,当前可以使用--no-colors标志禁用颜色。

我想要的是一个相反的标志:一个--force-colors标志,指示Django在默认禁用颜色的情况下(通常是当输出通过管道传递到另一个命令时)输出ANSI颜色序列。

下面是一个真实的用例:我有一个自定义的Django命令来导入数据。我自己运行这个命令,而且我希望向数据管理员发送一个颜色的日志(使用HTML应该很合适)。我可以使用https://github.com/theZiz/aha 实用程序,但由于Django会在通过管道传递输出时禁用颜色,所以无法使用这个实用程序。

针对这个特定的用例,*nix命令有一个特殊的标志,例如 $ ls --color=always

创建时间:2018-07-22 17:15:08

补丁大小:71行

尽管这是一个六年前的问题,但它反映出了我会实际遇到的真实软件工程任务。

面对大型语言模型无法一次性处理的大型代码库的挑战,SWE-Bench通过使用两种关键技术来解决:

  • 稀疏检索:选择一组有限的相关文件供AI浏览,这有助于处理复杂的代码。

  • Oracle检索:这种方法使用已知可解决问题的文件,尽管这不太现实,因为一般情况下工程师不知道哪些文件需要编辑。

使用稀疏检索比较实际,Oracle检索有点不太公平,因为这等于是暗示大型语言模型修改哪些文件。就性能而言,Claude 2这类的模型在Oracle检索的提示下解决了约4.8%的问题,而没有提示时只解决了1.96%。

这就是为什么相比之下,Devin 在没有具体指导的情况下,成功率为 13.8%,在我看来已经很了不起了。

64da046f89fe83d1cb260bde59b1a15b.png

总结:AI与人类工程师是合作者的关系,而非竞争对手

由于工程人员数量不足,许多产品功能、更新和重要的错误修复都无法及时发布。大公司的季度规划中经常遇到这种情况。此外,我们对未来技术需求的预测能力经常被高估。由于例行任务都可以通过 AI 自动化,工程师的工作重点将转向更复杂和更富创造力的任务,从而为创新带来新的机会。

2024年,技术岗位市场陷入低谷,就业难的问题很普遍。然而,我认为这些问题的根源并不是AI造成的。相反,如果没有当前AI的增长,情况可能会更糟。AI的繁荣正在推动初创公司的投资和岗位增加,防止了可能更严重的就业市场衰退。

然而,这种发展前景提供了良好的机会。我们可以通过开发更好的基准和训练数据,训练 AI 自动完成例行任务,而我们则可以集中精力处理更具创造性和价值的工作。

推荐阅读:

▶毕业 5 年薪资最高的 16 大专业:计算机工程年薪中位数 57 万,文科专业“全军覆没”!

▶拥有 17 年经验的硕士码农,到了 43 岁连面试机会都没有……

▶19 年创业经验,知名程序员放话:“我教你三步创建一家‘Google’!”

9bdc3d23b16a64bb69b39ad1dc9ea922.gif

4 月 25 - 26 日,由 CSDN 和高端 IT 咨询和教育平台 Boolan 联合主办的「全球机器学习技术大会」将在上海环球港凯悦酒店举行,特邀近 50 位技术领袖和行业应用专家,与 1000+ 来自电商、金融、汽车、智能制造、通信、工业互联网、医疗、教育等众多行业的精英参会听众,共同探讨人工智能领域的前沿发展和行业最佳实践。

a571ca1d447773e7febdd4d527b633b0.png

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
要找到人工智能方面的软件工程师职位,你可以采取以下方法: 1. 学习和提升技能:确保你具备与人工智能相关的技术和知识。深入了解机器学习、深度学习、自然语言处理等人工智能领域的基本概念和算法。通过参加在线课程、自学或参加培训来提升自己的技能。 2. 创建相关项目:在你的简历中突出展示你在人工智能方面的项目经验。创建一些小型的人工智能项目,展示你在数据处理、模型训练和评估等方面的能力。 3. 关注招聘信息:浏览招聘网站、社交媒体平台和公司网站,关注人工智能领域的招聘信息。使用关键词搜索,如"人工智能软件工程师"、"机器学习工程师"等,以便找到相关职位。 4. 利用专业网络:加入人工智能相关的专业社群和论坛,与从业者建立联系。参加行业会议、研讨会和线上活动,与行业内的人交流和建立关系。 5. 网络推荐:请家人、朋友或同事帮助推荐你给他们所了解的人工智能公司或团队。内推通常能够增加你的机会。 6. 构建个人品牌:在个人网站或专业社交媒体上展示你的技能和项目经验。发布相关文章、项目演示或博客,展示你对人工智能领域的热情和专业知识。 7. 准备面试:研究公司和职位要求,了解他们在人工智能方面的需求和项目。准备回答与人工智能相关的面试问题,并展示你的技术能力和解决问题的能力。 记住,人工智能是一个快速发展的领域,竞争也很激烈。除了具备相关技能和知识外,持续学习和保持更新也非常重要。祝你找到一份满意的人工智能软件工程师职位!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值