GitHub Copilot 已淪為程式設計考試作弊的神器?

自 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):3sum = 04  for i in range(1, N + 1):5    sum += i6return 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, schmecursion3  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):7if len(l) <= 1:8    return l9  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):15dist = {}16  for v in g:17    dist[v] = float(‘inf’)18    dist[g[0]] = 019  while True:20    u = min(dist, key=dist.get)21    if dist[u] == float(‘inf’):22      break23    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/

相關文章

CNNVD通報Oracle多個安全漏洞

CNNVD通報Oracle多個安全漏洞

近日,CNNVD通報Oracle多個安全漏洞,其中Oracle產品本身漏洞60個,影響到Oracle產品的其他廠商漏洞247個。包括Orac...

八個不容錯過的 GitHub Copilot 功能!

八個不容錯過的 GitHub Copilot 功能!

GitHub Copilot是一款AI結對程式設計工具,可以幫助開發人員更快地編寫程式碼。這款工具採用了AI技術,能夠根據項目的上下文和風格...