編者按:隨著ChatGPT的推出,市面上涌現(xiàn)出一批人工智能代碼生成助手。生成式人工智能炙手可熱,已滲透到人類(lèi)生活的方方面面,AI真的會(huì)取代人類(lèi)程序員嗎?對(duì)于程序開(kāi)發(fā)人員而言,如何在在ChatGPT世界中生存發(fā)展呢?本文將分享4個(gè)小技巧,幫助人類(lèi)程序員領(lǐng)先于生成式AI。文章來(lái)自翻譯,希望能對(duì)你有所啟示。
圖片來(lái)源:由無(wú)界 AI 生成
人工智能,尤其是由大型語(yǔ)言模型(LLM)驅(qū)動(dòng)的生成式人工智能,可能會(huì)顛覆整個(gè)程序員行業(yè)。但一些專(zhuān)家認(rèn)為,人工智能不會(huì)取代人類(lèi)程序員,至少不會(huì)立即取代。
加州大學(xué)戴維斯分校生物醫(yī)學(xué)工程博士、醫(yī)療人工智能研究中心 MedARC 首席執(zhí)行官塔尼什克·馬修·亞伯拉罕(Tanishq Mathew Abraham)說(shuō):“你將不得不擔(dān)心那些使用人工智能取代自己的人。”
那么,在 LLM編碼時(shí)代即將到來(lái)之際,軟件開(kāi)發(fā)人員如何才能讓自己變得更有價(jià)值、更有用呢?以下是編碼員在生成式人工智能時(shí)代生存和發(fā)展的一些提示和技巧。
堅(jiān)持基本原則和最佳實(shí)踐
雖然眾多基于人工智能的編碼助手可以幫助我們編寫(xiě)代碼和生成代碼,但學(xué)會(huì)編程的基本能力依然要具備,即需要具備閱讀和分析代碼的能力,以及理解所編寫(xiě)的代碼如何適用于大型系統(tǒng)。
哈佛大學(xué)約翰·A·保爾森(John a . Paulson)工程與應(yīng)用科學(xué)學(xué)院從事人機(jī)交互與編程語(yǔ)言交叉研究的博士生普里揚(yáng)·維斯林格姆(Priyan Vaithilingam)表示:“我相信人工智能可以極大地提高軟件開(kāi)發(fā)人員的生產(chǎn)力,但軟件工程不僅僅是生成代碼,還包括從出用戶需求、調(diào)試及測(cè)試等更多內(nèi)容。”
其中最不可或缺的編程技能之一仍然是人類(lèi)編碼員的專(zhuān)長(zhǎng)領(lǐng)域:?jiǎn)栴}解決。分析問(wèn)題并為其找到合適的解決方案仍然是備受推崇的編碼專(zhuān)長(zhǎng)技能。
“編程有其創(chuàng)造性的一面,而解決問(wèn)題的那些技能比實(shí)際的編程語(yǔ)言或工具更為重要。不要執(zhí)著于與人工智能做比較,AI或多或少只是一個(gè)大型語(yǔ)言模型的統(tǒng)計(jì)輸出。開(kāi)發(fā)人員所做的與模型輸出的是有區(qū)別的,作為開(kāi)發(fā)人員,除了編寫(xiě)代碼,還有更多其他的工作。”Python/ target=_blank class=infotextkey>Python 軟件基金會(huì)研究員、Explosion 公司聯(lián)合創(chuàng)始人兼首席執(zhí)行官 Ines Montani 說(shuō)道。
此外,良好的軟件工程實(shí)踐比以往任何時(shí)候都更有價(jià)值。這些實(shí)踐包括規(guī)劃系統(tǒng)設(shè)計(jì)和軟件架構(gòu),程序員可以利用人工智能工具更有效地預(yù)測(cè)接下來(lái)所需的代碼。
麻省理工學(xué)院計(jì)算機(jī)科學(xué)與人工智能實(shí)驗(yàn)室副主任兼首席運(yùn)營(yíng)官阿曼多·索拉·萊薩馬(Armando Solar-Lezama)是該實(shí)驗(yàn)室計(jì)算機(jī)輔助編程小組的負(fù)責(zé)人,他談道:“程序員必須弄清楚一段代碼的數(shù)據(jù)結(jié)構(gòu)、組織代碼的正確抽象,以及不同界面的要求。所有這些都是軟件工程實(shí)踐的核心,而且未來(lái)很長(zhǎng)一段時(shí)間內(nèi)都不會(huì)消失。”
找到滿足你需求的工具
找到合適的人工智能工具至關(guān)重要。每種工具都有自己的交互方式,并且可以以不同的方式將每個(gè)工具融入到開(kāi)發(fā)工作流程中,無(wú)論是自動(dòng)創(chuàng)建單元測(cè)試、生成測(cè)試數(shù)據(jù),還是編寫(xiě)文檔。
例如,Github Copilot 和其他人工智能編碼助手可以增強(qiáng)我們的編程能力,為我們提供編碼建議。另一方面,ChatGPT 和谷歌的 Bard 更像是會(huì)話式人工智能程序員,可用于回答有關(guān) API(應(yīng)用程序接口)的問(wèn)題或生成代碼片段。
關(guān)鍵在于實(shí)驗(yàn)。嘗試使用人工智能工具,熟悉它的工作原理,考慮其輸出質(zhì)量,同時(shí)也要對(duì)其他智能工具保持開(kāi)放的心態(tài)。亞伯拉罕說(shuō):“人工智能領(lǐng)域發(fā)展瞬息萬(wàn)變,你不可能永遠(yuǎn)只使用某一種工具,所以你需要快速適應(yīng)新的工具。”
此外,還要考慮適當(dāng)?shù)氖褂冒咐I墒饺斯ぶ悄芄ぞ呖梢詭椭覀兛焖賹W(xué)習(xí)一門(mén)新的編程語(yǔ)言,也可以短時(shí)間內(nèi)實(shí)現(xiàn)創(chuàng)建項(xiàng)目原型。
清晰和精確的對(duì)話至關(guān)重要
在使用人工智能編碼助手時(shí),需要詳細(xì)闡述你的需求,并將其視為一個(gè)更新迭代的過(guò)程。亞伯拉罕建議編寫(xiě)一段用于解釋代碼的注釋?zhuān)@樣助手就能根據(jù)注釋生成符合你要求的代碼。
對(duì)于會(huì)話式人工智能程序員來(lái)說(shuō),你需要知道如何以最佳方式設(shè)置提示,這就是提示工程的作用所在。
亞伯拉罕建議采用思維鏈提示法。這種方法其實(shí)涉及到一種“分而治之”的策略,即把問(wèn)題分解成多個(gè)步驟,然后逐一解決,最終解決整個(gè)問(wèn)題。“要求模型在特定時(shí)間內(nèi)做太多事情反而效果不佳。它要做的是能夠處理可管理的信息塊,并生成可管理的代碼塊。”他說(shuō)。
例如,與其要求人工智能程序員從頭開(kāi)始編寫(xiě)整個(gè)程序代碼,不如認(rèn)真考慮一下程序需要完成的所有任務(wù)。進(jìn)一步劃分這些任務(wù),要求模型為每項(xiàng)任務(wù)編寫(xiě)特定的函數(shù),這就需要與模型來(lái)回探討實(shí)現(xiàn)某項(xiàng)任務(wù)所需采取的步驟。
亞伯拉罕說(shuō):“將其視為一個(gè)了解某個(gè)主題知識(shí)但經(jīng)驗(yàn)不太豐富的聰明實(shí)習(xí)生。”
提示工程的精確性和清晰性非常重要。亞伯拉罕提到:“你需要非常清楚地告訴模型你想要什么,非常準(zhǔn)確地告訴它你要求它解決什么問(wèn)題,并確保你在一直跟進(jìn)。”
學(xué)習(xí)人工智能和機(jī)器學(xué)習(xí)的基本概念,以及了解大型語(yǔ)言模型的工作原理和優(yōu)缺點(diǎn)也很有價(jià)值。你需要深入研究,但掌握一些常識(shí)對(duì)于判斷結(jié)果至關(guān)重要。
為了幫助你快速入門(mén),Abraham 推薦,其中包含有關(guān)提示庫(kù)和工具的章節(jié)內(nèi)容、提示指南和視頻課程等,而維斯林格姆則建議閱讀《圖解轉(zhuǎn)換器》,以了解更多有關(guān)模型和機(jī)器學(xué)習(xí)的基礎(chǔ)知識(shí)。
保持批判態(tài)度,并關(guān)注風(fēng)險(xiǎn)
軟件工程師應(yīng)對(duì)大型語(yǔ)言模型的輸出結(jié)果持批判態(tài)度,因?yàn)樗鼈兺鶗?huì)產(chǎn)生幻覺(jué),生成虛構(gòu)、不準(zhǔn)確甚至是錯(cuò)誤的代碼。維斯林格姆說(shuō):“盲目使用人工智能生成的代碼很容易陷入死胡同,而且很難發(fā)現(xiàn)其中細(xì)微的錯(cuò)誤。”
維斯林格姆說(shuō)道,"這就是為什么檢查生成的代碼至關(guān)重要,盡管這會(huì)增加一定的工作量,但對(duì)于提高工作效率可能弊大于利。但亞伯拉罕認(rèn)為,"在某些情況下,驗(yàn)證代碼比從頭開(kāi)始編寫(xiě)代碼要容易得多,而且先生成代碼,然后進(jìn)行驗(yàn)證,最后再整合至現(xiàn)有的代碼庫(kù)中是一種更快的方法"。
我們不妨對(duì)這些模型的輸出結(jié)果進(jìn)行分析,并提出以下問(wèn)題: 這個(gè)模型是根據(jù)什么數(shù)據(jù)訓(xùn)練的?哪些數(shù)據(jù)被過(guò)濾掉了,哪些數(shù)據(jù)沒(méi)有包括在內(nèi)?訓(xùn)練數(shù)據(jù)的歷史有多長(zhǎng)?模型是在什么版本的編程語(yǔ)言、軟件包或庫(kù)上訓(xùn)練的?這些問(wèn)題的答案可能會(huì)影響結(jié)果并提供更多相關(guān)信息。
開(kāi)發(fā)人員還應(yīng)該警惕在這些模型中輸入專(zhuān)有代碼。一些公司,如 Tabnine,提供企業(yè)版的人工智能編碼助手,在提供隱私的同時(shí)還能學(xué)習(xí)企業(yè)的編碼模式和風(fēng)格。
版權(quán)是另一個(gè)需要考慮的因素,不過(guò)如果你使用這些工具來(lái)完成幾行代碼或?yàn)槠胀ì嵥榈娜蝿?wù)生成代碼,那么與生成大段代碼相比,版權(quán)問(wèn)題就不那么令人擔(dān)憂了。
"程序員應(yīng)該對(duì)自己所要做的事情的獨(dú)創(chuàng)性有一定的認(rèn)識(shí),以及這種獨(dú)創(chuàng)性在多大程度上符合他們的環(huán)境,"萊薩馬說(shuō)。"如果模型生成的代碼具有一定的原創(chuàng)性,那么在將其放入代碼庫(kù)之前,一定要保持懷疑和猜忌的態(tài)度"。
一個(gè)更大的問(wèn)題是代碼的安全性,因?yàn)檫@些模型可能會(huì)生成包含漏洞的代碼。維斯林格姆認(rèn)為,軟件開(kāi)發(fā)的最佳實(shí)踐,比如代碼審查和強(qiáng)大的測(cè)試流水線有助于防范這種風(fēng)險(xiǎn)。
萊薩馬說(shuō):"更有經(jīng)驗(yàn)的軟件工程師能夠帶來(lái)的一種意識(shí)是,代碼中最常見(jiàn)的漏洞和代碼容易受到攻擊的最常見(jiàn)方式。"他們會(huì)建立一種直覺(jué),知道哪些地方需要注意,哪些地方會(huì)引起警覺(jué)。今后,這類(lèi)技術(shù)將成為軟件工程組合中更重要的組成部分。”
程序員要想在生成式人工智能世界中生存下去,就需要將人工智能視為一種工具,并將其融入到工作流程中,同時(shí)認(rèn)識(shí)到這些工具的機(jī)遇和局限性,并且依靠人類(lèi)的編碼能力來(lái)發(fā)展壯大。
譯者:Araon_