自動寫程式碼?

良許發表於2023-03-16

大家好,我是良許。

這幾天,GitHub 上有個很火的外掛在抖音刷屏了——Copilot。

這個神器有啥用呢?簡單來講,它就是一款由人工智慧打造的程式設計輔助工具。

我們來看看它有啥用。

首先就是程式碼補全功能,你只要給出函式名和引數,Copilot 就會自動幫你補全程式碼。

第二個功能,就是它可以根據註釋來寫程式碼。也就是說,你只要把註釋寫好,它就會自動幫你生成對應的程式碼,嚇人吧~

除此之外,它還可以自動生成重複性程式碼、自動生成測試程式碼,同時也可以生成多套程式碼方案供你選擇。

目前支援多種開發語言,包括 Python, JavaScript, TypeScript, Ruby, Java, Go等等,支援VS Code,Neovim,JetBrains 等 IDE。

目前還沒有完全開放,處於邀請制狀態。前幾天我看到了這個外掛並申請了,但是目前還沒透過,所以想看演示的話大家可以上 B 站,很多大佬做了測評。

看到這個外掛這麼強大的功能,很多程式設計師已經嚇傻了,這麼強大,AI 都已經可以幫你寫程式碼了,程式設計師是不是要下崗了?

但在我看來,這個外掛目前還只是個高階的玩具而已。

1. 只是幫你百度一下

這個外掛的本質是利用人工智慧,透過開源社群裡的大量程式碼進行訓練,從而實現自動寫程式碼的效果。

所以,對於通用性的程式碼,它的生成準確性還是比較高的。

比如,我們在寫兩個日期之間的天數,你寫來寫去,無非就是這樣寫(以 Python 為例):

def days(str1,str2):
    date1=datetime.datetime.strptime(str1[0:10],"%Y-%m-%d")
    date2=datetime.datetime.strptime(str2[0:10],"%Y-%m-%d")
    num=(date1-date2).days
    return num

這種程式碼說白了其實沒有多少創造性,寫熟練了可能根本都不需要經過大腦,都形成肌肉記憶了,無非就是函式名、變數不太一樣,其餘的幾乎都一樣。

類似的,我們還有一些演算法(比如氣泡排序)、工具(比如雜湊校驗),其實也都是重複性非常高的程式碼,它也可以幫你完成得很好。

重複性的工作,都有可能被替代的。

在這種情況下,Copilot 的作用就相當於幫你百度一下,然後再幫你 CV 一下。如果沒有這個外掛,我們一樣也能做,只是花點時間而已。

2. 業務程式碼質量不高

Copilot 自己也承認,他們會嘗試瞭解程式設計師的意圖,並「儘可能」生成最好的程式碼,但生成的程式碼並不總是有效,有時甚至還沒有意義。

畢竟訓練集來自公共程式碼,良莠不齊,甚至完全沒有意義。

這點在 B 站大神的測試下也得到了印證,有時候確實也生成了一堆不知所云的程式碼。

畢竟,我們的業務需求一直都是複雜多變的,有時我們自己都不太能實現一些功能需求,還指望機器幫你寫?別太幻想了!

而且,它自動補全業務程式碼的前提是,你已經需要有一定的程式碼量供它參考,它才可以去猜測你接下來準備寫什麼。

也就是說,你還是需要寫一些程式碼,有這些程式碼了它才會寫得更準確一些。而且你提供的程式碼量越少,它的推薦就越不準確。

也有人說了,它會根據註釋寫程式碼啊。但是,實際上,註釋你都寫好了,你自己其實也已經差不多把程式碼都寫好了。

再說了,程式設計師都知道,讀別人的程式碼是一件很痛苦的事情,Copilot 幫你寫好了程式碼,你敢直接就用嗎?你閱讀並理解它的程式碼的時間,也許自己早就寫完了。

所以,你說它會完全幫你寫程式碼嗎?肯定不行,至少目前不會。就算能幫你寫部分業務程式碼,也不一定寫得好。

3. 有一定的安全問題

Copilot 它的原理就是利用大量的程式碼進行訓練,樣本越多自然就越準確。

那麼問題來了,他們自己宣稱這些樣本是來自開源的社群,但你使用了它們的外掛,你敢保證你寫的程式碼不會成為他們的樣本?

而且,如果它們生成的程式碼不合你的要求,你手動修改了,它更加理解了你的意圖,這對 Copilot 的訓練簡直是神助啊,他們難道真的不會考慮利用一下使用者的免費勞動力?

凡是使用第三方外掛,而且還是不開源的,誰都無法保證你的資料是否真的沒有被洩漏出去。

自己練習的程式碼肯定是無所謂了,但是如果涉及到公司的商業機密,那就可能會有法律問題了。

而且,更可怕的是,Copilot 生成的程式碼,有 0.1% 的機率會原封不動複製訓練集的樣本。如果這些樣本沒版權也沒事,但要是有版權,有可能也會吃官司。

之前已有新聞報導過,Copilot 原樣複製了經典射擊遊戲《雷神之錘》裡的程式碼,而這些程式碼是受法律保護的,使用者也因此受到了一些麻煩。

所以,現在不少公司已經明確規定,禁止使用 Copilot 外掛!

4. 照相機的出現不會讓畫家下崗

照相機被發明出來的時候,曾經一度也有人開始唱衰畫家這樣的崗位。但時過境遷,這麼多年過去了,畫家的崗位消失了嗎?不僅沒消失,反而現在技術精湛的畫家身價一漲再漲。

相機,只是把畫家的一部分重複性工作取代了,比如畫肖像、風景,等等。它只會機械地,一比一還原現實。而現在的畫家,更多是作為藝術創作,這部分相機短時間內是無法取代的。

(現在也有 AI 藝術創作,但還很難說取代)

Copilot 何其不是這樣的存在呢?我大膽預測,Copilot 只會取代部分基礎的、重複性的程式設計工作,說它會讓程式設計師下崗,我覺得這肯定是天大的笑話。

相機再智慧,你也需要具備一定的美術、審美基礎,才能拍出好看的照片。

同樣的,Copilot 幫你寫了一堆程式碼,你如果沒有一定的程式設計基礎的話,你連改都不會改。

5. 展望

我還是那句話,Copilot 的出現不會讓程式設計師下崗,只會取代部分工作而已。

工具的出現只是會讓我們從重複性的勞動中解放出來,從而讓我們的大腦有更多時間思考。但思考和創作本身,很難被取代。

我個人是非常歡迎 Copilot 這樣的工具出現,可以讓我們減少很多不必要的工作。

作為程式設計師都知道,我們每天都需要花費很多時間在百度/谷歌上面,並且各種搬運輪子。這種工作就是機械的重複性工作,如果能有工具讓我們從這樣的工作中解放出來,肯定會為我們節約很多時間。

而且,Copilot 這個單詞本身也明確了自己的定位,那就是「副駕駛」,人家已經很明確自己的位置,根本就沒想著成為主駕駛。

所以,Copilot的出現,大家不要如臨大敵,而是要合理利用工具,善於利用工具,讓工具真正為我們所服務。

相關文章