讓程序員保持領(lǐng)先于生成式人工智能的4個技巧。
神譯局是36氪旗下編譯團(tuán)隊,關(guān)注科技、商業(yè)、職場、生活等領(lǐng)域,重點介紹國外的新技術(shù)、新觀點、新風(fēng)向。
編者按:AI會取代人類程序員嗎?對于程序開發(fā)人員而言,不應(yīng)將AI視為競爭者,而應(yīng)該將其作為助手。本文來自編譯,希望對您有所啟發(fā)。
人工智能,尤其是由大型語言模型(LLM)驅(qū)動的生成式人工智能,可能會顛覆許多程序員的生計。但一些專家認(rèn)為,人工智能不會取代人類程序員,至少不會立即取代。
加州大學(xué)戴維斯分校生物醫(yī)學(xué)工程博士、醫(yī)療人工智能研究中心MedARC首席執(zhí)行官塔尼什克-馬修-亞伯拉罕(Tanishq Mathew Abraham)說:“你不得不擔(dān)心使用人工智能的人會取代你?!?/p>
那么,在以大型語言模型為中心的編碼時代即將到來之際,軟件開發(fā)人員如何才能讓自己變得更有用、更有意義呢?這里有一些提示和技巧,可以幫助程序員在生成式人工智能世界中生存和發(fā)展。
▋1.堅持基本原則和最佳實踐
雖然無數(shù)基于人工智能的編碼助手可以幫助代碼生成,但編程的基本要素依然存在:閱讀和推理自己和他人代碼的能力,以及讓自己編寫的代碼融入一個更大的系統(tǒng)的能力。
哈佛大學(xué)約翰·A·保爾森(John a.Paulson)工程與應(yīng)用科學(xué)學(xué)院從事人機交互與編程語言交叉研究的博士生普里揚·維斯林格姆(Priyan Vaithilingam)表示:“我相信人工智能可以極大地提高軟件開發(fā)人員的生產(chǎn)力,但軟件工程不僅僅是生成代碼,還包括從激發(fā)用戶需求到調(diào)試、測試等等更多內(nèi)容?!?/p>
最不可或缺的編程技能之一仍然是人類程序員的專長:解決問題。分析問題并找到最佳的解決方案,仍然是人類程序員的核心競爭力。
Python軟件基金會研究員、軟件公司Explosion聯(lián)合創(chuàng)始人兼CEO Ines Montani表示,編程有其創(chuàng)造性的一面,很多處理問題的技巧比實際的語言或工具更重要,“不要陷入將自己與人工智能相比較的陷阱,因為人工智能或多或少是一個大型模型的統(tǒng)計輸出。開發(fā)人員所做的工作與模型輸出的結(jié)果是有區(qū)別的,作為一名開發(fā)人員,不僅僅是寫幾行代碼那么簡單。”
此外,有效率的軟件工程實踐比以往會更加有價值。這些實踐包括規(guī)劃系統(tǒng)設(shè)計和軟件架構(gòu),可以給基于AI的工具提供良好的環(huán)境,更有效地預(yù)測接下來需要完成那些代碼。
麻省理工學(xué)院計算機科學(xué)與人工智能實驗室副主任兼首席運營官阿曼多-索拉-萊薩馬(Armando Solar-Lezama)是該實驗室計算機輔助編程小組的負(fù)責(zé)人,他談道:“人類程序員必須弄清楚一段代碼的結(jié)構(gòu)、組織代碼的方式,以及滿足不同的要求。所有這些都是軟件工程實踐的核心,而且未來很長一段時間內(nèi)都不會消失?!?/p>
▋2.找到適合自己的工具
找到適合自己的AI編程工具非常重要。每種工具都有自己的交互方式,將每種工具融入開發(fā)工作流程也有不同的方法,無論是自動創(chuàng)建單元測試、生成測試數(shù)據(jù)還是編寫文檔,都是如此。
例如,GitHub Copilot和其他人工智能編碼助手可以增強編程能力,在開發(fā)者寫程序的時候提供建議。而ChatGPT和Google的Bard更像是對話式的AI程序員,可用于回答有關(guān)API的問題或生成代碼片段。
想要找到適合自己的工具,關(guān)鍵就在于嘗試。對于開發(fā)者來說,應(yīng)該廣泛試用AI工具,體會不同工具的工作原理,評估輸出的質(zhì)量,同時對其它工具保持開放的態(tài)度。亞伯拉罕說:"人工智能是一個飛速發(fā)展的領(lǐng)域,你不能只選擇一種工具,然后一輩子都用它。你需要快速適應(yīng)新的工具?!?/p>
還要考慮適當(dāng)?shù)氖褂冒咐I墒饺斯ぶ悄芄ぞ呖梢詾閷W(xué)習(xí)新的編程語言或框架提供一條捷徑,也是啟動小型項目和創(chuàng)建原型的快捷方式。
▋3.清晰準(zhǔn)確的對話至關(guān)重要
在用AI工具輔助編程的時候,開發(fā)人員應(yīng)該詳細(xì)、清晰、嚴(yán)謹(jǐn)?shù)剌斎胄枨?,把這個不斷調(diào)整輸出內(nèi)容的過程視為一種迭代。亞伯拉罕建議寫一條注釋,解釋你想要的代碼,這樣助手就更容易生成符合你要求的相關(guān)建議。
對于會話式人工智能程序員來說,程序員需要知道構(gòu)建提示語的最佳方式。亞伯拉罕建議的一種方法是思維鏈提示。這涉及到一種“分而治之”的策略,即把問題分解成多個步驟,然后逐一解決,最終解決整個問題?!耙竽P驮谔囟〞r間做太多事情會導(dǎo)致一團(tuán)亂麻,更可取的方式是一步一步來,從生成一個個代碼塊開始,"他說。
例如,與其要求人工智能程序員從頭開始編寫整個程序,不如考慮一下程序要完成的不同任務(wù),并進(jìn)一步劃分這些任務(wù),要求模型為每項任務(wù)編寫特定的代碼。
亞伯拉罕說:"把AI編程工具當(dāng)作一個實習(xí)生,他可能在知識層面差不了太多,但在經(jīng)驗層面還有不少欠缺?!?/p>
此外,精確度和清晰度對于快速實現(xiàn)需求至關(guān)重要。亞伯拉罕說:"你需要非常清楚地詢問模型你想要什么,非常準(zhǔn)確地說明你要求它做什么,并確保你在一步步跟進(jìn)整個落實的過程?!?/p>
學(xué)習(xí)人工智能和機器學(xué)習(xí)的基本概念,以及了解大型語言模型的工作原理和優(yōu)缺點也很有價值。你不需要深入研究,但掌握一些常識可以為你提供有關(guān)結(jié)果的重要背景信息。
為了幫助開發(fā)者快速入門,亞伯拉罕推薦了OpenAI的Cookbook,其中包含有關(guān)提示庫和工具、提示指南和視頻課程的部分,而Vaithilingam則建議閱讀Illustrated Transformer,以了解有關(guān)模型和機器學(xué)習(xí)基礎(chǔ)知識的更多信息。
為了幫助你入門,Abraham推薦OpenAI Cookbook,其中有提示庫和工具、提示指南和視頻課程等部分,而維斯林格姆則建議閱讀《圖解轉(zhuǎn)換器》,了解更多有關(guān)模型和機器學(xué)習(xí)的基礎(chǔ)知識。
▋4.保持批判態(tài)度并了解工具的風(fēng)險
開發(fā)人員應(yīng)該對大型語言模型的輸出持辯證的態(tài)度,首當(dāng)其沖的就是幻覺問題。顯然,一味聽信AI編程工具的輸出結(jié)果總有一次會捅大簍子。維斯林格姆說:“盲目使用人工智能生成的代碼很容易陷入調(diào)試的怪圈,而且很難發(fā)現(xiàn)細(xì)微的錯誤?!?/p>
維斯林格姆說道,"這就是為什么檢查生成的代碼至關(guān)重要,盡管這增加了一個額外的步驟,但對工作效率的提高可能弊大于利?!钡珌啿闭J(rèn)為,"在某些情況下,驗證代碼比從頭開始編寫代碼要容易得多,而且先生成代碼,然后進(jìn)行驗證,再將其納入現(xiàn)有的代碼庫中,是一種更快捷的方法。”
在檢查的過程中,開發(fā)人員可以按以下這幾個問題來審視初步的輸出結(jié)果:該模型是根據(jù)哪些數(shù)據(jù)進(jìn)行訓(xùn)練的?有哪些內(nèi)容被過濾掉了,且沒有包含在該數(shù)據(jù)中?訓(xùn)練數(shù)據(jù)的時間有多長,模型訓(xùn)練時使用的編程語言、軟件包或庫的版本是什么?這些問題的答案可能會影響結(jié)果并提供更多相關(guān)信息。
版權(quán)是另一個需要考慮的因素。原創(chuàng)性非常重要,開發(fā)人員應(yīng)該在檢查AI輸出的結(jié)果時關(guān)注有沒有哪部分是專用代碼。還一個更大的問題是安全性,因為這些模型可能會生成包含bug的代碼。維斯林格姆認(rèn)為,這就需要輸出審查,以及測試管道等方式來進(jìn)行妥善解決。
阿曼多-索拉-萊薩馬說:"經(jīng)驗豐富的軟件工程師能夠帶來的好處之一是,他們可以快速識別出常見的bug,以及代碼中薄弱的部分。這種直覺就來自實踐?!?/p>
程序員要想在生成式人工智能世界中生存下去,就需要將人工智能作為一種工具來接受,并將其融入到工作流程中,同時認(rèn)識到這些工具的機遇和局限性,畢竟它仍然要依靠人類的編碼能力來發(fā)展壯大。
本文來源:36氪
文章轉(zhuǎn)載于其他網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系我們及時刪除!