GitHub Copilot 正在“摧毁”初级开发者,已沦为编程考试作弊的神器?

2d2e68f8b8e3958740a510a224b31950.gif

整理 | 苏宓

出品 | CSDN(ID:CSDNnews)

自 2021 年 6 月,微软发布 AI 代码建议工具 GitHub Copilot 以来,业界关于它的争议就没有断过。

这不,继 Copilot 相继宣布收费代码版权引发软件自由保护协会怒批之后,来自美国马萨诸塞大学阿默斯特分校计算机科学教授 Emery Berger 发表了一篇《Coping with Copilot》的文章,警告教育工作者,基于人工智能的开发工具正在向你的作业“开炮”,抵抗是徒劳的。同时,他还比喻道,「携带(Copilot)的学生正在把 Uzis(冲锋枪)带到一场刀战中」,而 Copilot 本身也将变成作弊的有利工具。

cd15e080ad94081d62ac55aa8d01d7df.png

为了验证自己的观点,Emery Berger 还举了几个例子加以说明,我们不妨一起来看看。

0e8151f20f6dc187c924132fccd48779.png

写一下函数名,就能生成所有的代码

在 Emery Berger 看来,使用 Copilot 工具,学生们可以立即生成自动完成的代码解决方案。

对于学生自身而言,他们只需要给出问题陈述,或者给出函数名称,甚至只需要盯着屏幕就行,编程就能轻轻松松搞定。

举个例子,假设让一位 CS(计算机科学)入门的学生编写一个 Python 程序,输出需要实现 1 到 N 所有数字的总和。前提条件是,“我们计算机科学家非常讨厌 O(1) 闭式解决方案(斐波那契,我正在看着你),总得让 CPU 忙起来”,Emery Berger 说道。

按理来说,通常情况下(除非班级中有 Carl Friedrich Gauss 德国数学家这样聪明的人),学生们都需要试着写一些代码来实现,甚至需要静下心来思考一下。

不过,Emery Berger 表示,“这对于拥有 Copilot 的学生来说,并不会发生这样的苦差事。他们只需要将问题陈述作为注释,复制并粘贴到 IDE 中,然后输入函数‘def output_sum(N):’,再按一下 Tab 键就可以得到想要的内容(如下面代码中 3-6 行的所有内容都是由 Copilot 生成的)。”

1# A Python program that outputs the sum of all the numbers from 1 to N.
2def output_sum(N):
3  sum = 0
4  for i in range(1, N + 1):
5    sum += i
6return sum

至于如果可以用闭式的解决方案(closed form solution),Copilot 同样可以迅速解决这个问题,其中只需要重新命名一下这个函数就行了(第 2 行是由 Copilot 自动生成):

1def output_sum_closed_form(N):
2  return N * (N + 1) / 2

为了慎重起见,Emery Berger 还使用了封闭形式的斐波那契进行了测试(第 2-3 行,是由 Copilot 自动生成):

1def fibonacci_closed_form(N):
2  # recursion, schmecursion
3  return ((1 + 5 ** 0.5) / 2) ** N / 5 ** 0.5

整体看来,GitHub Copilot 在所有的入门编程作业上都接受过专门培训。

Emery Berger 教授称,“每次为了训练 Copilot,安排它编程作业时,这款工具都会激动地流‘口水’,甚至会喃喃自语:我知道那个,这是解决方案,请再给给一个作业吧。”

因此对于使用 Copilot 工具的学生来说,与其将编程作为他们课程的目标,倒不如说直接他们的课程目标是 “点击 Tab 键”(这是指根据对所需输出的描述来生成代码的按键命令),因为在下面所有的黑色加粗代码都是由 Copilot 自动生成的,其中只需要输入函数名称和参数就可以实现所有代码:

1def depth_first_search(tree, node, visited):
 2  visited.add(node)
 3  for child in tree[node]:
 4    if child not in visited:
 5      depth_first_search(tree, child, visited)
 6def quicksort_random_pivot(l):
 7  if len(l) <= 1:
 8    return l
 9  pivot = random.choice(l)
10  left = [x for x in l if x < pivot]
11  middle = [x for x in l if x == pivot]
12  right = [x for x in l if x > pivot]
13  return quicksort_random_pivot(left) + middle + quicksort_random_pivot(right)
14def dijkstra(g):
15  dist = {}
16  for v in g:
17    dist[v] = float(‘inf’)
18    dist[g[0]] = 0
19  while True:
20    u = min(dist, key=dist.get)
21    if dist[u] == float(‘inf’):
22      break
23    for v in g[u]:
24      if dist[v] > dist[u] + g[u][v]:
25        dist[v] = dist[u] + g[u][v]
26  return dist

与此同时,Copilot 在今年 6 月宣布的付费政策中,以每月 10 美元(人民币约 67 元)或每年 100 美元(人民币约 669 元)的价格出售,并提供 60 天的免费试用期。值得一提的是,收费群体是有限制的,其中通过身份验证的学生和热门开源项目维护者可以免费使用。

这更有助于学生群体将 Copilot 集成到自己的 IDE 中。

dc67cb95b881452411e78e8162a278b5.png

假装所有的代码都是学生自己写的?

Emery Berger 教授担心 Copilot 将使传统的编程练习变得毫无意义,因为只要通过 Copilot,学生就知道所有的答案,但并不能记住编程的方式。他说道,“编程在很多计算机科学课程中起着作用,特别是在计算机科学入门课程中”。

因此,编程对于锻炼学生技能而言,尤为重要。但是身为老师,虽然不希望学生使用 Copilot,但是往往防不胜防。因为 Copilot 与在 Stack Overflow 和其他互联网编程资源上搜索答案不同。

“有些编程问题,你已经可以在网上找到代码的例子”,Emery Berger 说道,“但是你知道,老师也可以在谷歌上找到它们,然后用抄袭检测器将这些代码与学生提交的代码进行比较。”

然而,现如今 Copilot 是不同的。Copilot 实际上生成的解决方案。虽然谈不上是天才、复杂级别的方案,但是它带来的代码与网络上提供的还是有很大不同的,表面看起来,极有可能出自学生之手,老师根本无从分辨。

因此,Emery Berger 教授认为,与编程有关的教学方法需要调整。他在文章中调侃道,「用手堵住我们的耳朵,然后假装 Copilot 不存在的同时,老师不断做心理暗示,称剽窃的情况不存在、互联网不存在,一切都是学生真实做的」。

44e34755b8aeaef7abcde9c8afb0f06f.png

对于开发者有利的 Copilot,弊端会在下一代编程初学者身上体现

事实上,所有事情都有两面性,这并不意味着 Copilot 完全不能用。

对于 Copilot 本身,它由 OpenAI 研发的新 AI 系统 Codex 提供支持,Codex 是 GPT-3 的延伸版本,该模型接受过公开源代码和自然语言的训练,因此它理解编程和人类语言。同时,它已经接受过数十亿行公共代码的训练,在其内部建立了很多安全机制来保证开发者能够生成安全、高质量的代码。

67976f6ef00312d8211ad7eda9a4d88c.png

对于开发者而言,Copilot 的确有用,还极大地提升了开发效率,但是对于学生群体而言,好比连基础的算术都没有学会,遇到算术问题就拿起了计算器一样,早期学习时,应该强制学生不可以使用 Copilot 等工具。

否则,“如果你关心编程的过程完整性,那么 Copilot 实实在在就是一款作弊机器。就像有人给你作业的答案,你只需要在回答的窗口中输入一下,然后点击 Tab 就行”,Emery Berger 说道。

在这种情况下,Emery Berger 认为对教育者来说,确保学生真正学到材料是很重要的,这可能意味着他们需要重新思考在计算总成绩时,那些可以用 Copilot 解决的家庭作业应该算多少分。

也许现在说 Copilot 对学生产生了哪些具体影响可能还为时过早,因为该软件只公开使用了几个月。但随着 Copilot 等类似工具迅速崛起,用不了多久,其影响就会开始显现。

“我希望对此持乐观态度。但我认为,至少,我们需要对它进行深思熟虑” ,Emery Berger 担忧地说道。

参考链接:

https://itnext.io/coping-with-copilot-b2b59671e516

https://www.theregister.com/2022/08/19/copilot_github_students/

— 推荐阅读 —

1f4fe0033860f3447b9c3c5449bcc2f3.jpeg

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340