這陣子接連看過 VS2022 的 IntelliCode 與 VSCode 外掛 Tabnine,都是靠 AI 幫忙你寫程式的好幫手。而這個領域名聲最響亮的,非 Github Copilot 莫屬。而 Github Copilot 3/29 剛發佈 VS2022 擴充套件,Github Copilot 目前在 Technical Preview 階段,要使用需提申請排隊等核准,現在幾乎是隨申請秒核准,談不上超級期待,我還是小試了一下。

Github Copilot 與 IntelliCode 與 Tabnine 不同,需依賴雲端服務運行,程式碼會送到雲端分析產生建議,對一些企業機構來說,可能會有產生資訊外流的疑慮。為此,在跳出同意授權時,這次我沒有「同意啦,哪次不同意」,特別讀了聲明:(大家有認真看過 Github Copilot 聲明嗎?)

歸納以下結論:

  • Github Copilot 會蒐集哪些資料? 目標在蒐集 Copilot 效能、使用功能、建議接受/拒絕/修改的狀況 ,作為日後改良優化的參考。蒐集內容將包含「程式檔片段」(source code snippets)、程式建議內容、開發者對建議的修改、Repository URL、檔案路徑,並會分享給 Github、微軟及 OpenAI 相關人員。所蒐集的資訊會視為機密資料,並限定相關人員才能存取,若要撤銷授權 Github 使用你的個人資訊可連絡 Github。
  • 蒐集的資料如何被保護以及使用? 加密後安全地儲放在 Github 系統裡,存取將被嚴格管控,以記名方式限定下列人員存取 1) Github Copilot 團隊及 Github 平台健康團隊的 Github 員工及僱員、2) Azure/Github Copliot 團隊的員工及僱員、3) 參與 Github Copliot 的 OpenAI 員工。

我覺得可以用 Gmail/Dropbox/Google Drive/One Drive/LINE 的角度看待。其中難免會有較機密內容,但我們仍視它們為安全的私密空間。如果是 Side Project 或開源專案,應該沒什麼好擔心;但對企業組織這又另當別論,大家就自行斟酌吧。

回到神奇海螺 Github Copilot 上,我在 VS2022 安裝並啟用了 Github Copilot,開啟專案簡單小試。

Copilot 跟 IntelliCode/Tabnine 最大的不同在於,它不需太多前後文程式碼,單憑註解就能猜出你想做什麼:

或是靠著 MVC Action 中有個 IFormFile 猜你是不是要讀取檔案:

提供建議時,一次一行,若修改為不同的寫法,後面能調整因應提供不同建議:

不過,偶爾會有出鎚的時侯,像是提示無法編譯的程式碼:

簡單試用後的感想,跟事前預期差不多,並沒有太興奮,不至跪著讚嘆「爽,以後動嘴就能寫程式了」或是憂心「慘了,飯碗要被 AI 搶走了」。

別誤會,Github Copilot 聰慧過人,大部分時間能依情境提供有效建議(從註解或函數宣告猜到你想寫的功能很神),遇到原來不會寫的程式可省下可觀 Google 爬文時間,能很快協助你生出可執行且結果正確的程式;即便心中已有定見,它的精準提示也能省掉打字時間。

但這跟我個人的習慣不一樣,遇到未知問題我喜歡花點時間找資料,找到可能解法,比較優劣及適用情境再決定用哪一種,過程還會接觸額外相關知識,增廣見識。寫程式全靠 AI 直接講答案,問題固然很快解掉,但也喪失了主動蒐集資料、廣泛了解議題、比較優劣、識別應用情境的練習機會,開發經驗與知識難以成長,不就活生生是被戲稱「不懂原理,只會從 Stackoverlow 複製貼上的軟體工程師」。若 AI 有一天真的會取代程式設計師的工作,最先失業的肯定是靠 AI 提詞才會寫 Code 的那一群。

因此我對 AI 輔助寫程式的期待,只要省去沒營養打字工夫就好,至於該用什麼 API、什麼方式實現,還是回歸人腦來主導,以系統化學習的知識為基礎,依專案環境條件琢磨拍板,才稱得上最佳化。無腦地讓 AI 抓著手一句一句寫完,不查資料,不看文件,感覺很不踏實。

如果要說善用 Gituhb Copilot,我不期待不動腦放手讓它幫忙寫完程式,但它跳出的程式建議代表「Github 上大家慣用的主流做法」,有滿滿關鍵字可用來尋找參考資料,深入探索議題,順便搞清楚易犯錯誤及適用情境,讓你加快知識累積。像是有個身經百戰但不如你了解專案環境的老司機,跟你一起 Pair Programming,他的建議字字珠璣,卻未必完全適合當下情境,但他身上絕對有你學不完的好東西。

My thoughts about hwo to use Github wisely.


Comments

Be the first to post a comment

Post a comment


25 - 9 =