人工智慧,尤其是由大型語言模型(LLM)驅動的生成式人工智慧,可能會顛覆整個程式設計行業。但一些專家認為,人工智慧不會取代人類程式設計師,至少不會立即取代。
加州大學大衛斯分校生物醫學工程博士、醫療人工智慧研究中心 MedARC 首席執行長塔尼什克·馬修·亞伯拉罕(Tanishq Mathew Abraham)說:「你將不得不擔心那些使用人工智慧取代自己的人。」
那麼,在 LLM編碼時代即將到來之際,軟體發展人員如何才能讓自己變得更有價值、更有用呢?以下是編碼員在生成式人工智慧時代生存和發展的一些提示和技巧。
堅持基本原則和最佳實踐
雖然眾多基於人工智慧的程式設計助手可以説明我們編寫程式和産生程式碼,但學會程式設計的基本能力依然要具備,即需要具備閱讀和分析程式碼的能力,以及理解所編寫的程式碼如何適用於大型系統。
哈佛大學約翰·A·保爾森(John a . Paulson)工程與應用科學學院從事人機互動與程式設計語言交叉研究的博士生普裡揚·維史林格姆(Priyan Vaithilingam)表示:「我相信人工智慧可以極大地提高軟體發展人員的生產力,但軟體工程不僅僅是產生程式碼,還包括從出使用者需求、調試及測試等更多內容。」
其中最不可或缺的程式設計技能之一仍然是人類編碼員的專長領域:問題解決。分析問題並為其找到合適的解決方案仍然是備受推崇的程式設計專長技能。
「程式設計有其創造性的一面,而解決問題的那些技能比實際的程式設計語言或工具更為重要。不要執著於與人工智慧做比較,AI或多或少只是一個大型語言模型的統計輸出。開發人員所做的與模型輸出的是有區別的,作為開發人員,除了編寫程式碼,還有更多其他的工作。」Python 軟體基金會研究員、Explosion 公司聯合創始人兼首席執行長 Ines Montani 說道。
此外,良好的軟體工程實踐比以往任何時候都更有價值。這些實踐包括規劃系統設計和軟體架構,程式設計師可以利用人工智慧工具更有效地預測接下來所需的程式碼。
麻省理工學院電腦科學與人工智慧實驗室副主任兼首席營運長阿曼多·索拉·萊薩馬(Armando Solar-Lezama)是該實驗室電腦輔助程式設計小組的負責人,他談道:「程式設計師必須弄清楚一段程式碼的資料結構、組織程式碼的正確抽象,以及不同介面的要求。所有這些都是軟體工程實踐的核心,而且未來很長一段時間內都不會消失。」
找到滿足你需求的工具
找到合適的人工智慧工具至關重要。每種工具都有自己的對話模式,並且可以以不同的方式將每個工具融入到開發工作流程中,無論是自動創建單元測試、生成測試資料,還是編寫文件。
例如,GitHub Copilot 和其他人工智慧編碼助手可以增強我們的程式設計能力,為我們提供編碼建議。另一方面,ChatGPT 和Google的 Bard 更像是會話式人工智慧程式設計師,可用於回答有關 API(應用程式介面)的問題或產生程式碼片段。
關鍵在於實驗。嘗試使用人工智慧工具,熟悉它的工作原理,考慮其輸出品質,同時也要對其他智慧工具保持開放的心態。亞伯拉罕說:「人工智慧領域發展瞬息萬變,你不可能永遠只使用某一種工具,所以你需要快速適應新的工具。」
此外,還要考慮適當的使用案例。生成式人工智慧工具可以幫助我們快速學習一門新的程式設計語言,也可以短時間內實現創建項目原型。
清晰和精確的對話至關重要
在使用人工智慧編碼助手時,需要詳細闡述你的需求,並將其視為一個更新反覆運算的過程。亞伯拉罕建議編寫一段用於解釋程式碼的注釋,這樣助手就能根據注釋產生符合你要求的程式碼。
對於會話式人工智慧程式設計師來說,你需要知道如何以最佳方式設定提示,這就是提示工程的作用所在。
亞伯拉罕建議採用思維鏈提示法。這種方法其實涉及到一種「分而治之」的策略,即把問題分解成多個步驟,然後逐一解決,最終解決整個問題。「要求模型在特定時間內做太多事情反而效果不佳。它要做的是能夠處理可管理的區塊,並產生可管理的程式碼塊。」他說。
例如,與其要求人工智慧程式設計師從頭開始編寫整個程式碼,不如認真考慮一下程式需要完成的所有任務。進一步劃分這些任務,要求模型為每項任務編寫特定的函數,這就需要與模型來回探討實現某項任務所需採取的步驟。
亞伯拉罕說:「將其視為一個瞭解某個主題知識但經驗不太豐富的聰明實習生。」
提示工程的精確性和清晰性非常重要。亞伯拉罕提到:「你需要非常清楚地告訴模型你想要什麼,非常準確地告訴它你要求它解決什麼問題,並確保你在一直跟進。」
學習人工智慧和機器學習的基本概念,以及瞭解大型語言模型的工作原理和優缺點也很有價值。你需要深入研究,但掌握一些常識對於判斷結果至關重要。
為了幫助你快速入門,Abraham 推薦 OpenAI Cookbook,其中包含有關提示庫和工具的章節內容、提示指南和視訊課程等,而維史林格姆則建議閱讀《圖解轉換器》(the Illustrated Transformer),以瞭解更多有關模型和機器學習的基礎知識。
保持批判態度,並關注風險
軟體工程師應對大型語言模型的輸出結果持批判態度,因為它們往往會產生幻覺,生成虛構、不準確甚至是錯誤的程式碼。維史林格姆說:「盲目使用人工智慧生成的程式碼很容易陷入死胡同,而且很難發現其中細微的錯誤。」
維史林格姆說道,「這就是為什麼檢查生成的程式碼至關重要,儘管這會增加一定的工作量,但對於提高工作效率可能弊大於利」。但亞伯拉罕認為,「在某些情況下,驗證程式碼比從頭開始編寫程式碼要容易得多,而且先產生程式碼,然後進行驗證,最後再整合至現有的程式碼庫中是一種更快的方法」。
我們不妨對這些模型的輸出結果進行分析,並提出以下問題: 這個模型是根據什麼資料訓練的?哪些資料被過濾掉了,哪些資料沒有包括在內?訓練資料的歷史有多長?模型是在什麼版本的程式設計語言、套裝軟體或庫上訓練的?這些問題的答案可能會影響結果並提供更多相關資訊。
開發人員還應該警惕在這些模型中輸入專有程式碼。一些公司,如 Tabnine,提供企業版的人工智慧編碼助手,在提供隱私的同時還能學習企業的編碼模式和風格。
版權是另一個需要考慮的因素,不過如果你使用這些工具來完成幾行程式碼或為普通瑣碎的任務產生程式碼,那麼與生成大段程式碼相比,版權問題就不那麼令人擔憂了。
「程式設計師應該對自己所要做的事情的獨創性有一定的認識,以及這種獨創性在多大程度上符合他們的環境,」萊薩馬說。「如果模型生成的程式碼具有一定的原創性,那麼在將其放入程式碼庫之前,一定要保持懷疑和猜忌的態度」。
一個更大的問題是程式碼的安全性,因為這些模型可能會生成包含漏洞的程式碼。維史林格姆認為,軟體發展的最佳實踐,比如程式碼審查和強大的測試流水線有助於防範這種風險。
萊薩馬說:「更有經驗的軟體工程師能夠帶來的一種意識是,程式碼中最常見的漏洞和程式碼容易受到攻擊的最常見方式。他們會建立一種直覺,知道哪些地方需要注意,哪些地方會引起警覺。今後,這類技術將成為軟體工程組合中更重要的組成部分。」
程式設計師要想在生成式人工智慧世界中生存下去,就需要將人工智慧視為一種工具,並將其融入到工作流程中,同時認識到這些工具的機遇和局限性,並且依靠人類的編碼能力來發展壯大。
加入電腦王Facebook粉絲團