chatgpt教代碼 ChatGPT 如何改變編程教育?(下)
寫在前面的話:這篇文章是系列文章的下半部分,上半部分在這里:
三、與一起編程是一種怎樣的體驗?
在這一部分,我們來看一看是怎樣改變編程體驗的。最基本的,可以解答新手疑問。我們人在任何一個新領域開始學習的時候,都會有一個新手期。在學編程的時候,這個新手期尤為突出,很多人都停留在了這個階段。在讀代碼的時候,我們會被一些奇怪的語法(例如s -= i)卡住,這時候就可以去咨詢一下,對于這類常見的問題它會回答得很好:
在這段 代碼中,s -= i是一個簡寫的形式,等價于s = s - i。這行代碼的意思是將變量i的值從s中減去。
我們可以有這樣一個預期,越常見()的問題,你得到準確解答的概率就越高。這條經驗適用于搜索引擎,也同樣適用于。另外,大家有沒有發現這兩個問題的文字描述很隨意,還有?這是我直接從聊天框里復制出來的,是真的問題。問題描述里出現一些也沒影響,可以直接丟給,它“明白”你要問什么。
我們再來看另一個場景。如果讓去參加像藍橋杯這樣的編程競賽,它會有怎樣的表現?這兩個題目是藍橋杯的練習題chatgpt教代碼,我們可以把題目內容丟給,然后告訴它:“請用編寫一段程序,解決上述問題。”以“絕對素數”這個題目為例,以下是的解答:
以下是用 語言實現的程序,可以求出所有兩位數中的絕對素數:
def is_prime(n):
"""
判斷一個數是否為素數
"""
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
for i in range(10, 100):
if is_prime(i) and is_prime(int(str(i)[::-1])):
print(i)
程序的主要思路是:對于每個兩位數,先判斷它是否為素數,如果是,再將其數字位置對換后判斷是否為素數,如果兩個條件都滿足,則輸出該數。
其中(n)函數用來判斷一個數是否為素數,它采用了試除法的思想,從 2 到 sqrt(n) 枚舉每個數作為除數進行判斷。對于每個兩位數chatgpt教代碼,我們可以將其轉換為字符串,然后使用字符串切片的方式將其數字位置對換,最后再將其轉換為整數進行判斷。
不僅生成了代碼,還給出了程序的主要思路,還針對重點代碼做了解釋。可以看到,解決這種基礎的編程問題是完全沒問題的,至于它在這種編程競賽或者考級里最終能達到一個什么水平,各位老師可以自己去試試。
這里有另外一個參考案例。微軟的研究員讓GPT-4去參加的模擬面試,它滿分通過了。更有意思的是,原來面試分配的時間是兩小時,GPT-4用了4分鐘就完成了,這其中還包括人工操作復制粘貼所用的時間。
所以在我們驚訝于和GPT-4在編程競賽和面試中(可能)的表現時,我們可以反思的點是什么?我覺得這件事情的重點可能并不是AI和人類孰強孰弱這種問題,這種問題沒有太多意義。對我們現行的教育評價方式和標準的沖擊是破壞性的,這種破壞性有非常正向的影響,它迫使我們去更加認真地思考編程教育是為了什么?或者更具體一點,編程教育的出口應該是什么?有沒有可能這個出口已經快要被AI淹沒了?
對編程教育最根本的影響還不在于它特別擅長刷題和考試這個方面,而在于它改變了編程活動本身。編程可不僅僅是一個智力游戲,它更是一項越來越重要的社會生產活動。對于一項生產活動,生產工具就很關鍵。前面我們已經見識到了,不僅可以口吐文本,它還可以口吐代碼。這項能力已經被集成到了代碼編輯器里了,代表產品有與合作開發的,的,以及與合作開發的等等。其核心功能就是代碼補全,也就是根據注釋、函數/類定義、甚至是自然語言指令自動幫你寫代碼。如果把聊天功能也集成到代碼編輯器里,它還可以解釋代碼,也就是輔助你讀代碼。它還可以幫你優化代碼,輔助你。
在上面這個小demo里,我演示了 輔助寫代碼的過程。假設我要用寫一個打磚塊的小游戲,我已經把小球和擋板都加載到游戲窗口了,現在我想創建5排磚塊。我只需要用注釋描述清我想實現的功能,就會開始自動幫我補全代碼。灰色字體的文本都是生成的,如果我想采用它生成的代碼,我只需要按下Tab鍵。大家可以看到,在實現這個小功能的初版的時候我只寫了一行注釋,確切說我只寫了“#”和“5行”這幾個字符,其他的程序都是生成的,我只需要看一看它生成的結果,然后一路按Tab就可以了。生成的代碼并不都是完美的,有時候需要我們去調整,但是它已經可以幫程序員完成很多基礎程序的編寫了。
當前的版本還沒有集成GPT的聊天功能,新版本 X有,但是我還沒有體驗到。不過我們可以通過另外一個編程工具()體驗一下。背后調用的也是的GPT模型,而且還是免費開源的。
這個小demo里我用打開了另一個用寫的小游戲—— Bird(程序來自),有163行代碼。我在聊天框里問了GPT幾個問題。我先問:“這個程序是怎樣模擬小鳥在重力作用下的飛行的?”從GPT的回答可以看到,它從整段程序里定位到了關鍵的函數和語句,而且它還結合具體的變量解釋出了速度、加速度以及位置(位移)之間的關系。我又讓它解釋一段代碼,這段代碼是實現背景循環滾動效果的,它解釋的也很好。接著我又問它:“水管的運動過程是怎樣的?在程序中是怎樣實現的?”它解釋的整體邏輯挺好的,但是細節上有一點問題。按照這個程序目前的代碼實現,水管只會出現在固定的垂直位置上,但GPT解釋說“水管的垂直位置會被隨機生成”。這大概率是受到注釋的影響,因為注釋里寫的“隨機生成上方水管的垂直位置”。這個現象很有意思,說明當注釋跟代碼發生沖突的時候,目前GPT還不知道代碼的邏輯才是會被執行的邏輯,它受注釋影響很大。后面我又問它:“怎樣讓水管每次出現在隨機的高度上?”它定位到了需要修改的函數和語句,然后給了一個可行的修改方案,并且給出了解釋。
看完這兩個演示大家什么感受? 和調用的還只是GPT-3x系列的借口,這還不是GPT-4的水平。而且,這里只是演示了一部分的功能chatgpt教代碼,隨著這些編程工具的迭代,它們跟大語言模型的結合會更加緊密,編程體驗也會完全不同以往。
此外還有一個值得注意的點是,集成了大語言模型的代碼編輯器,已經不僅僅是一個生產工具了,它同時也是一個學習工具,生產和學習一體。
四、如何將的超能力引入到編程教育中?
最后這一部分,我只能提供一些想法。這類AI技術必然會為編程教育帶來改變,至于怎么用好這些技術,是一個慢慢摸索的過程。
最基本的,這類AI應用可以作為學生的創作工具,它們可以被應用在項目創作的各個環節。
免責聲明:本文系轉載,版權歸原作者所有;旨在傳遞信息,不代表本站的觀點和立場和對其真實性負責。如需轉載,請聯系原作者。如果來源標注有誤或侵犯了您的合法權益或者其他問題不想在本站發布,來信即刪。
聲明:本站所有文章資源內容,如無特殊說明或標注,均為采集網絡資源。如若本站內容侵犯了原著者的合法權益,可聯系本站刪除。