程序員「求生寶典」!AI大發(fā)展下的程序員求生指南,干貨滿滿
前幾天Stability AI的CEO剛剛放下豪言,說AI在5年內(nèi)將會徹底取代人類程序員。
今天「求生寶典」就來了!
國外網(wǎng)友梳理總結(jié)了程序員如何跑贏生成式AI的一些技巧,包教包會,拿來就用!
趕快學(xué)起來!拒絕AI取代,從我做起。
基礎(chǔ)知識學(xué)習(xí)和實踐兩手抓
雖說有無數(shù)基于AI的編碼助手可以幫助程序員們生成代碼,但編程的基礎(chǔ)仍然存在——閱讀和推理自己和他人的代碼,以及理解編寫的代碼如何適應(yīng)更大的系統(tǒng)。
這些能力亙古不變,是編程的地基。
Priyan Vaithilingam是哈佛大學(xué)工程與應(yīng)用科學(xué)學(xué)院的一名博士生,他主要研究人機交互和編程語言的交叉領(lǐng)域。
他表示,「我相信AI可以顯著提高軟件開發(fā)人員的生產(chǎn)力,但軟件工程不僅僅是生成代碼——從用戶需求到調(diào)試、測試等等,都是他們的工作?!?/span>
實際上,任何技能落實到最后都是四個字:解決問題。
而如何找到問題所在(這個問題并不是某個具體的問題,而是抽象的需求),如何找到最佳的解決方案,仍然是人類程序員的核心競爭力。
Python軟件基金會研究員、軟件公司Explosion聯(lián)合創(chuàng)始人兼CEO Ines Montani表示,解決問題的許多技能比實際的語言或工具更重要。
「程序員們應(yīng)該專注于AI和自然語言處理的開發(fā)工具,但不要陷入將自己與AI進行比較的陷阱,作為開發(fā)人員,我們的工作并不僅僅是寫代碼這么簡單?!?/span>
此外,有效率的軟件工程實踐比以往會更加有價值。
這些實踐包括規(guī)劃系統(tǒng)設(shè)計和軟件架構(gòu),這些實踐可以給基于AI的工具提供良好的環(huán)境,更有效地預(yù)測接下來需要完成那些代碼。
「人類程序員必須弄清楚一段代碼的結(jié)構(gòu)、組織代碼的方式,以及滿足不同的要求。這些才是軟件工程的核心,而這并不會很快被AI取代?!?/span>
找到符合需求的工具
第二,對于人類程序員來說,找到適合自己的AI編程工具非常重要。
每個工具都有自己的交互方式,并且可以通過不同的方式將每個工具合并到的程序員的開發(fā)工作流程中,無論是自動創(chuàng)建單元測試、生成測試數(shù)據(jù)還是編寫文檔,都是如此。
例如,GitHub Copilot和其他AI編碼助手可以增強編程能力,在開發(fā)者寫程序的時候提供建議。
而ChatGPT和Google的Bard更像是對話式的AI程序員,可用于回答有關(guān) API(應(yīng)用程序編程接口)的問題或生成代碼片段。
而想要找到適合自己的工具,關(guān)鍵就在于實踐。
對于開發(fā)者來說,應(yīng)該廣泛試用AI工具,體會不同工具的工作原理,評估輸出的質(zhì)量,同時對其它工具保持開放的態(tài)度。
而且,快速適應(yīng)新出現(xiàn)的AI編程工具的能力同樣非常重要。
清晰準(zhǔn)確的對話是關(guān)鍵
在用AI工具輔助編程的時候,開發(fā)人員應(yīng)該詳細、清晰、嚴(yán)謹?shù)剌斎胄枨?,把這個不斷調(diào)整輸出內(nèi)容的過程視為一種迭代。
專家建議,編寫注釋會非常有用。
而對于對話式AI程序員來說,程序員需要知道構(gòu)建prompt的最佳方式。
這里建議的一種方法是「思想鏈提示」。這涉及到一種分而治之的策略,將問題分解為多個步驟并解決每個步驟,從而解決整個問題。
一口氣讓模型在同一時間內(nèi)完成太多任務(wù)反倒會導(dǎo)致結(jié)果一團亂麻,更可取的方式是一步一步來,從生成一個個代碼塊開始。
例如,不要要求AI編程工具從頭開始一口氣編寫整個程序,而是考慮程序試圖完成不同的細分任務(wù)。
專家給出了這么一個類比,把AI編程工具當(dāng)作一個實習(xí)生,他可能在知識層面差不了太多,但在經(jīng)驗層面還有不少欠缺。
此外,精確度和清晰度對于快速實現(xiàn)需求至關(guān)重要。
「你需要非常清楚地詢問模型你想要什么,非常準(zhǔn)確地說明你要求它做什么,并確保你在一步步跟進整個落實的過程?!?/span>
學(xué)習(xí)AI和機器學(xué)習(xí)的基本概念,以及了解大型語言模型的工作原理及其優(yōu)缺點也很有價值。
為了幫助開發(fā)者快速入門,Abraham推薦了OpenAI的Cookbook,其中包含有關(guān)提示庫和工具、提示指南和視頻課程的部分,而Vaithilingam則建議閱讀Illustrated Transformer,以了解有關(guān)模型和機器學(xué)習(xí)基礎(chǔ)知識的更多信息。
保持批判態(tài)度并了解工具的風(fēng)險
最后,開發(fā)人員應(yīng)該對大型語言模型的輸出持辯證的態(tài)度,首當(dāng)其沖的就是幻覺問題。顯然,一味聽信AI編程工具的輸出結(jié)果總有一次會捅大簍子。
這就是為什么檢查生成的代碼至關(guān)重要。
在檢查的過程中,開發(fā)人員可以按以下這幾個問題來審視初步的輸出結(jié)果:
該模型是根據(jù)哪些數(shù)據(jù)進行訓(xùn)練的?
有哪些內(nèi)容被過濾掉了,且沒有包含在該數(shù)據(jù)中?
訓(xùn)練數(shù)據(jù)的時間有多長,模型訓(xùn)練時使用的編程語言、軟件包或庫的版本是什么?
還有一個不容易注意到的細節(jié)——版權(quán)。
原創(chuàng)性非常重要,開發(fā)人員應(yīng)該在檢查AI輸出的結(jié)果時關(guān)注有沒有哪部分是專用代碼。
最后就是安全性問題。
拋開幻覺不談,輸出的代碼可能有不少bug。這就需要輸出審查,以及測試管道等方式來進行妥善解決。
有經(jīng)驗的人類程序員可以快速識別出常見的bug,以及代碼中薄弱的部分。這種直覺就來自實踐。
總而言之,對待任何新興事物都應(yīng)該以一種積極的心態(tài)去面對。
對于人類程序員來說,在被有可能的取代之前,利用AI編程工具提升自己的工作效率、提高工作質(zhì)量才應(yīng)該是首要考慮的目標(biāo)。
希望以上內(nèi)容對大家能有所幫助。