編譯丨諾亞
出品 | 51CTO技術棧(微信號:blog51cto)
隨著AI技術的發展,如今學習編程或許比以往任何時候都更加容易。但最新研究揭示了AI輔助編程工具對代碼質量的影響并不盡如人意。
一、代碼攪動上升至7.1%
該研究由開發者分析公司GitClear基于對1.5億行代碼變更數據的深入分析得出,其中三分之二的數據來源于同意匿名共享數據的私營企業,三分之一則主要來自谷歌、臉書和微軟等公司的開源項目。
值得注意的是,GitHub的Copilot自2021年6月進入測試階段以來,迅速引領了AI編碼潮流,目前已有超過百萬名付費訂閱用戶,并且據其CEO托馬斯·多姆克透露,在啟用Copilot功能的文件中,開發者完成任務的速度提升了55%,并且46%的代碼內容是由Copilot協助完成的。
然而,GitClear的研究重點并非單純關注代碼的數量,而是更加關注代碼質量本身。研究發現,AI助手傾向于提供“新增代碼的建議,但從未給出更新、移動或刪除代碼的建議”。研究人員還推測,“代碼建議算法傾向于提出最有可能被采納的建議”,而忽視了編寫簡潔易讀代碼的重要性。
圖片
由GitClear分析的代碼變更趨勢(如上圖)表明,新增、刪除、更新和復制粘貼的代碼數量達到了前所未有的高度,而代碼被移動的情況卻在減少。他們還注意到“代碼攪動”(指一定時間范圍內對同一段代碼的改動,是“異?!钡拇a改動,體現代碼的返工程度)上升到了7.1%,相較于2020年的3.3%有顯著增長。
這些趨勢背后的原因尚未明確,但研究人員認為這可能與日益普遍采用AI編碼技術有關。對于更多復制粘貼代碼的現象,他們嚴厲批評稱“對長期代碼可維護性而言,沒有比這更大的禍患了”。
過度使用復制粘貼并不是一個新問題。開發人員這樣做可能是因為當時覺得這種方式比找出如何重用現有代碼更快更容易,或是因為項目中多位開發者之間溝通不暢,或者從示例或編程問答網站上復制了過多代碼。
GitClear的研究人員并未就如何解決識別出的問題提供太多解決方案,而是將這些問題留作后續研究的課題,盡管他們建議工程負責人應“監測輸入數據并考慮其對未來產品維護的影響”。
二、不要簡單地復制和粘貼
AI編碼助手并不會消失,反而可能會不斷改進,如同所有新興工具一樣,開發者要學習如何優化它們的使用方法。但對于一部分開發人員包括初學編程的新手來說,如何理性使用這種工具并防止養成依賴性屬實是一個難題。
正如一個開發人員所說:“我在某個問題上卡住時,很容易就會想求助于ChatGPT這樣的工具,它能輕易幫我找到正確答案。這類輔助工具擅長生成簡單的代碼,其中一些甚至能在你描述問題后直接給出完整的解決方案?!辈贿^,他很快意識到,這種習慣一旦養成,實際上弊大于利。
如前文所述,機器生成的代碼并不總是有用,并且可能會降低代碼庫的質量。如果只是簡單復制并粘貼AI助手生成的代碼到源代碼中,往往會導致新的錯誤出現,因為這段代碼可能與程序其余部分不協調。嘗試修復這些錯誤可能會相當棘手,特別是當你不清楚生成的代碼具體含義時。很多人有時很難分辨錯誤是因為代碼本身有問題,還是因為在錯誤的上下文中使用了它。
《笨辦法學Python》的作者Zed Shaw建議:“如果有人想要利用當前這一批AI工具學習編程,他們應該帶著兩個目標來著手:首先,花時間學習足夠多的編程知識,以便了解工具生成的是什么內容;其次,承擔起‘代碼審查員’的角色,學會如何識別并改進低質量代碼?!?/p>
程序員應當具備發現機器生成代碼中的錯誤的能力,而不應完全依賴于這些智能助手。他們尤其需要注意防止明顯的版權代碼未經許可混入模型輸出的結果中。
密歇根大學信息學院計算機科學教授Charles Severance指出:“ChatGPT給出解決方案的速度非常快,并且其回答通常包裝在諸如‘我認為這應該能解決你的問題……’這樣令人安心的措辭中,這使我們容易關閉批判性思考模式,不再像應該的那樣仔細審視其提供的解決方案。”
Severance補充說:“始終假設ChatGPT是一個比你技能較低的程序員。使用AI工具的唯一安全方法是當你確信它產生的解決方案是正確的時候?!边@意味著作為開發者,我們要保持警覺和獨立判斷,確保AI提出的方案既符合需求也無潛在風險,同時通過自身的專業知識進行驗證和完善。
三、明確問題并進行準確的表述
GitHub的首席產品官Inbal Shani強調,要有效地使用AI編程工具,用戶首先必須明確自己的問題,并在輸入提示中清晰地表述出來。GitHub Copilot等工具返回代碼的質量直接取決于提問的方式和問題的描述準確性。
她建議,用戶應當像與同事交談那樣與Copilot互動,提供盡可能詳盡的上下文信息,包括解決問題的目標、意圖以及所處階段,這樣就能獲得更好的反饋,因為AI能夠基于更多背景信息進行更深入的搜索,從而找到合適的代碼片段或推薦相應的測試架構。
卡內基梅隆大學的助理教授Phillip Compeau對此觀點表示贊同。他認為現今使用的編程語言越來越趨向于人類自然語言的表達方式,而聊天工具正是這一演變過程中的下一步。在教學過程中,Compeau會引導初學編程的學生先不依賴AI技術,但對已掌握基礎編程知識的高級學生,則教導他們如何有效利用這類工具提高工作效率。
Compeau表示:“我向學生們展示的一點是,從AI工具生成代碼中獲取簡潔、正確答案的最佳方法是你能夠準確無誤地闡述計算機需要執行的具體任務。這恰恰是對編程的定義,隨著時代的發展,我們所使用的編程語言已經愈發貼近人類語言;聊天工具則是這種演進道路上的一個新階段?!?/p>
在編程中,確定程序應完成什么功能、如何運作及出現問題時的排查至關重要。這些核心技能只能通過長期堅持實踐逐漸培養起來。如果想成為一名合格的軟件開發者,單純依賴AI是無法繞過這個學習過程的。然而,若能明智地運用AI工具,的確可以加速提升編程能力,并有望成為一個優秀的程序員——甚至可能在這個過程中享受到樂趣。
參考鏈接:
https://www.theregister.com/2024/01/27/ai_coding_automatic/
https://devclass.com/2024/01/24/ai-assistance-is-leading-to-lower-code-quality-claim-researchers/