整理 | 苏宓
出品 | CSDN(ID:CSDNnews)
自 2021 年 6 月,微软发布 AI 代码建议工具 GitHub Copilot 以来,业界关于它的争议就没有断过。
这不,继 Copilot 相继宣布收费、代码版权引发软件自由保护协会怒批之后,来自美国马萨诸塞大学阿默斯特分校计算机科学教授 Emery Berger 发表了一篇《Coping with Copilot》的文章,警告教育工作者,基于人工智能的开发工具正在向你的作业“开炮”,抵抗是徒劳的。同时,他还比喻道,「携带(Copilot)的学生正在把 Uzis(冲锋枪)带到一场刀战中」,而 Copilot 本身也将变成作弊的有利工具。
为了验证自己的观点,Emery Berger 还举了几个例子加以说明,我们不妨一起来看看。
写一下函数名,就能生成所有的代码
在 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 中。
假装所有的代码都是学生自己写的?
Emery Berger 教授担心 Copilot 将使传统的编程练习变得毫无意义,因为只要通过 Copilot,学生就知道所有的答案,但并不能记住编程的方式。他说道,“编程在很多计算机科学课程中起着作用,特别是在计算机科学入门课程中”。
因此,编程对于锻炼学生技能而言,尤为重要。但是身为老师,虽然不希望学生使用 Copilot,但是往往防不胜防。因为 Copilot 与在 Stack Overflow 和其他互联网编程资源上搜索答案不同。
“有些编程问题,你已经可以在网上找到代码的例子”,Emery Berger 说道,“但是你知道,老师也可以在谷歌上找到它们,然后用抄袭检测器将这些代码与学生提交的代码进行比较。”
然而,现如今 Copilot 是不同的。Copilot 实际上生成的解决方案。虽然谈不上是天才、复杂级别的方案,但是它带来的代码与网络上提供的还是有很大不同的,表面看起来,极有可能出自学生之手,老师根本无从分辨。
因此,Emery Berger 教授认为,与编程有关的教学方法需要调整。他在文章中调侃道,「用手堵住我们的耳朵,然后假装 Copilot 不存在的同时,老师不断做心理暗示,称剽窃的情况不存在、互联网不存在,一切都是学生真实做的」。
对于开发者有利的 Copilot,弊端会在下一代编程初学者身上体现
事实上,所有事情都有两面性,这并不意味着 Copilot 完全不能用。
对于 Copilot 本身,它由 OpenAI 研发的新 AI 系统 Codex 提供支持,Codex 是 GPT-3 的延伸版本,该模型接受过公开源代码和自然语言的训练,因此它理解编程和人类语言。同时,它已经接受过数十亿行公共代码的训练,在其内部建立了很多安全机制来保证开发者能够生成安全、高质量的代码。
对于开发者而言,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/
— 推荐阅读 —