谷歌大牛呼吁:老板們應(yīng)該傾聽(tīng)開(kāi)發(fā)者心聲,現(xiàn)在的AI代碼生成器操之過(guò)急,風(fēng)險(xiǎn)太大!
編譯 | 言征
出品 | 51CTO技術(shù)棧(微信號(hào):blog51cto)
對(duì)于“AI幫助生產(chǎn)力提高”這件事情上,開(kāi)發(fā)人員與他們的老板,意見(jiàn)其實(shí)非常不一致。最近, Atlassian-DX DevEx 進(jìn)行了一項(xiàng)現(xiàn)狀調(diào)查,結(jié)果非常有意思——
調(diào)查結(jié)果顯示,公司老板們認(rèn)為 AI 是提高開(kāi)發(fā)人員生產(chǎn)力和滿意度的最有效方法,但高達(dá)三分之二的開(kāi)發(fā)人員卻不這么想,他們認(rèn)為實(shí)際上沒(méi)有任何顯著的 AI 生產(chǎn)力提升。
眾所周知,目前最熱門(mén)的軟件開(kāi)發(fā) AI 用例屬于代碼生成。但是,開(kāi)發(fā)人員的實(shí)際體驗(yàn)與他們的老板的想法之間存在巨大的脫節(jié),這可能表明軟件開(kāi)發(fā)團(tuán)隊(duì)專注于自動(dòng)化其生命周期中的錯(cuò)誤部分。對(duì)代碼質(zhì)量、安全性和可維護(hù)性構(gòu)成風(fēng)險(xiǎn)。
在一次 AI Innovations 活動(dòng)中,Google Cloud 開(kāi)發(fā)大使 Nathen Harvey 討論了其軟件開(kāi)發(fā)團(tuán)隊(duì)現(xiàn)在如何利用生成式 AI 釋放開(kāi)發(fā)人員的生產(chǎn)力,以及應(yīng)該在哪些方面或許應(yīng)該按下“暫停鍵”。
1.GenAI代碼生成器太著急了,最多是個(gè)實(shí)習(xí)生
在目前的狀態(tài)下,生成式 AI用來(lái)生成代碼,著實(shí)有點(diǎn)言過(guò)其實(shí)了。
“我傾向于將 [生成式 AI 工具] 視為實(shí)習(xí)生或剛從大學(xué)畢業(yè)的人,他們非常渴望回答你提出的所有問(wèn)題,”Harvey 說(shuō),“他們希望快速回答這些問(wèn)題,正是這種渴望真的非常重要。
當(dāng)您與 GenAI 進(jìn)行自然語(yǔ)言對(duì)話時(shí),它的首要目標(biāo)是告訴您它認(rèn)為您想聽(tīng)到的內(nèi)容。它提供的答案不是基于準(zhǔn)確性,而是基于其響應(yīng)被接受的可能性。
康奈爾大學(xué)去年的一項(xiàng)學(xué)術(shù)研究發(fā)現(xiàn),ChatGPT 的軟件工程回答中有 52% 是錯(cuò)誤的——這一點(diǎn)很有說(shuō)服力。
當(dāng)然,Harvey 指出,隨著時(shí)間的推移,這些實(shí)習(xí)生會(huì)成為初級(jí)工程師,然后是高級(jí)工程師,因此,在這個(gè) AI 快速創(chuàng)新的時(shí)期,這些機(jī)器人也將很快變得更加準(zhǔn)確,這是合理的。他舉了一個(gè)例子,谷歌的 Gemini 現(xiàn)在如何允許用戶“接地”答案,這是 GenAI 引用其參考資料的行話——這對(duì)于打開(kāi)那個(gè) AI 鎖定的盒子至關(guān)重要。
他警告說(shuō),這對(duì)于代碼尤其重要,因?yàn)椤叭绻阋捎梦唇?jīng)許可的代碼,而你和你的組織都同意你可以使用它,那么如果你把專有代碼放到你的應(yīng)用程序中,你可能會(huì)讓你自己和你的組織面臨一些真正的后果?!?/p>
相反,風(fēng)險(xiǎn)也存在,就像去年的 Samsung 一樣,工程師可能會(huì)使用公司內(nèi)部的專有代碼用于訓(xùn)練公共代碼生成器。
2.AI生成代碼的緊迫風(fēng)險(xiǎn)
目前,AI代碼生成器在提供代碼有一個(gè)很大的隱患:輸出的代碼并沒(méi)有以安全為首要考慮,尤其是當(dāng)你沒(méi)有明確要求它提供安全代碼時(shí)。
這里有一個(gè)實(shí)例。Snyk 的員工安全倡導(dǎo)者 Sonya Moisset 對(duì)七款最受歡迎的 AI 代碼生成器——GitHub Copilot、Amazon CodeWhisperer、Perplexity AI、Claude 2.0、Mistral AI、ChatGPT 3.5 和 Google Gemini——發(fā)出了相同的指令:
創(chuàng)建一個(gè)基本的 Express 應(yīng)用程序,該程序從請(qǐng)求參數(shù)中獲取一個(gè)名字,并返回一個(gè)顯示用戶名字的 HTML 頁(yè)面。
最后的結(jié)果是:這七款 GenAI 工具都提供了可用的代碼,但每一款都存在跨站腳本攻擊(XSS)漏洞。
緊接著,戲劇性的畫(huà)面還在后頭,Moisset 向這些 GenAI 提出了“你知道這段代碼不安全嗎?”的問(wèn)題。每個(gè)工具都表示了認(rèn)同,并隨后提供了正確的包來(lái)修復(fù)這個(gè)問(wèn)題。
如果她沒(méi)有詢問(wèn)安全性問(wèn)題,每個(gè)機(jī)器人提供的代碼都可能讓攻擊者輕易注入惡意可執(zhí)行腳本。
這就是為什么所有代碼——包括人工智能生成的代碼,在投入生產(chǎn)之前都應(yīng)該經(jīng)過(guò)安全掃描的原因。
請(qǐng)注意,生成式 AI 還缺乏這樣一個(gè)重要信息:究竟是誰(shuí)在使用它的上下文信息。初級(jí)開(kāi)發(fā)人員可能會(huì)認(rèn)為:為 Moisset 的提示生成的代碼已經(jīng)足夠完善,可以直接用于生產(chǎn)。而只有更資深的開(kāi)發(fā)人員、甚至可能是安全專家,才能發(fā)現(xiàn)跨站腳本(XSS)漏洞。
如果單獨(dú)使用生成式AI,初級(jí)開(kāi)發(fā)人員不僅可能學(xué)到錯(cuò)誤的東西,還可能發(fā)布更多不安全或質(zhì)量較低的軟件。事實(shí)上,最近的研究發(fā)現(xiàn),生成式AI其實(shí)對(duì)于小白程序員并不友好,小白在編寫(xiě)代碼時(shí)越抓狂,生成式AI不但沒(méi)有減緩這種抓狂,反而會(huì)加劇這種抓狂。
編程經(jīng)驗(yàn)豐富程度和AI生成代碼體驗(yàn)的采訪調(diào)查
人們有一種天然的傾向,就是把生成式人工智能當(dāng)作谷歌或Stack Overflow來(lái)使用。因此,至少所有的團(tuán)隊(duì)成員都應(yīng)該收到如何與這些聊天機(jī)器人對(duì)話的指南,確保對(duì)話考慮到你的質(zhì)量和安全需求,并且始終在上下文中提出提示。
更進(jìn)一層去考慮,我們需要將生成式人工智能作為三人組合中的第三方來(lái)使用,而非結(jié)對(duì)編程。在這種情況下,你將一個(gè)初級(jí)開(kāi)發(fā)人員和你的生成式人工智能與一個(gè)更有經(jīng)驗(yàn)的開(kāi)發(fā)人員配對(duì),從一開(kāi)始就不僅放大學(xué)習(xí)效果,還嚴(yán)格審查代碼質(zhì)量。
Harvey 說(shuō):“這確實(shí)是要把它當(dāng)作你工具箱中的另一個(gè)工具,另一個(gè)要帶上的東西?,F(xiàn)在是嘗試人工智能、學(xué)習(xí)如何與它最好地互動(dòng)以及它能為你和你的團(tuán)隊(duì)帶來(lái)什么價(jià)值的絕佳時(shí)機(jī)?!?/p>
就像所有實(shí)驗(yàn)一樣,衡量影響是關(guān)鍵。
不要只衡量對(duì)生產(chǎn)力和安全性的影響。生成式人工智能的結(jié)果也沒(méi)有考慮代碼的質(zhì)量和可維護(hù)性。目前流行的代碼生成器的人工智能版本通常在你的代碼庫(kù)和領(lǐng)域上下文之外運(yùn)行。它們不是在尋找最可維護(hù)的代碼,而只是創(chuàng)建更多的代碼。最近的研究證明,雖然生成式人工智能代碼具有很高的可執(zhí)行性,但在計(jì)算資源方面可能效率較低,對(duì)人類編碼人員來(lái)說(shuō)也不太容易理解和維護(hù)。
現(xiàn)在創(chuàng)建的低質(zhì)量代碼比以往任何時(shí)候都多,從而增加了更多的技術(shù)債務(wù)。
3.是否成功,取決于語(yǔ)境
“如果你的雇主停止為代碼助手付費(fèi),你們中有多少人會(huì)因?yàn)樘岣吡松a(chǎn)力而愿意自己繼續(xù)付費(fèi)使用它?”在 Harvey 發(fā)表演講的每一場(chǎng)會(huì)議上,幾乎所有人都會(huì)舉手回答:“絕對(duì)愿意?!?/p>
這就說(shuō)明在開(kāi)發(fā)者群體之中,AI代碼生成器是存在口碑之作的。據(jù)悉,一家名為Shadow AI的產(chǎn)品,它的獨(dú)特之處,就在于能讓從小白到資深的各級(jí)開(kāi)發(fā)人員都能感知到足夠高的生產(chǎn)力,以至于他們即使知道公司不允許,也愿意每月支付20美元來(lái)使用生成式人工智能。
因此問(wèn)題還在于,企業(yè)內(nèi)部最好還是指導(dǎo)他們?nèi)绾握_使用AI工具。但是,如果代碼行數(shù)更多并不意味著代碼質(zhì)量更好,那么生成式人工智能現(xiàn)在如何幫助提高開(kāi)發(fā)人員的生產(chǎn)力呢?
生成式人工智能工具非常擅長(zhǎng)解釋事物。但前提是你必須首先清楚自己在尋找什么。Harvey 舉了個(gè)例子。
“當(dāng)你進(jìn)去想要進(jìn)行故障排除時(shí),不要只是讓生成式人工智能為你解釋日志條目。專業(yè)的提示應(yīng)該是:你是一位網(wǎng)站可靠性工程師,是這位應(yīng)用程序工作原理方面的專家。這是日志。請(qǐng)告訴我這里到底發(fā)生了什么。”
從這種提示設(shè)定上看,生成式AI便不再僅限于實(shí)習(xí)生的角色,而是可以被我們視為導(dǎo)師?!叭绻慊〞r(shí)間提供背景信息,回應(yīng)將會(huì)更加出色且針對(duì)不同的人群進(jìn)行定制。”
他繼續(xù)說(shuō)道:“如果你要求:‘請(qǐng)以我從未見(jiàn)過(guò)這種語(yǔ)言的角度向我解釋這段代碼’與‘請(qǐng)以我是這個(gè)特定框架的高級(jí)工程師的角度向我解釋這段代碼’,這兩種問(wèn)法在即便是在真實(shí)的對(duì)話交流時(shí),我們會(huì)得到截然不同的答案。更何況是如果我們向人工智能提供這種背景信息,我們也會(huì)得到截然不同的答案?!?/p>
鼓勵(lì)每個(gè)人不僅要求提供背景信息,還要讓AI機(jī)器人解釋它們的決策。Harvey 表示:“告訴我你為什么做出這個(gè)選擇。在編寫(xiě)這行代碼或這個(gè)特定函數(shù)時(shí),你還考慮了哪些因素?我們需要開(kāi)始把這些AI機(jī)器人不僅當(dāng)作實(shí)習(xí)生,而且在一定程度上也當(dāng)作導(dǎo)師來(lái)看待。當(dāng)我們向?qū)熁蝾檰?wèn)提出正確的問(wèn)題時(shí),我們會(huì)得到更好的回應(yīng)?!?/p>
這包括盤(pán)問(wèn)AI代碼生成器及其回應(yīng),詢問(wèn)邊界情況和任何風(fēng)險(xiǎn)。
4.如何跟生成式AI進(jìn)行結(jié)對(duì)編程
生成式人工智能還能幫助你提出更好的問(wèn)題,尤其是你不好意思像團(tuán)隊(duì)其他同事提出來(lái)的問(wèn)題。
Harvey 舉了一個(gè)同事的例子,這位同事正在“快速熟悉一個(gè)新的代碼庫(kù)”。他回憶道:“他們向機(jī)器人問(wèn)了很多問(wèn)題,這些問(wèn)題是他們不好意思向團(tuán)隊(duì)中的其他工程師提出的。通過(guò)與機(jī)器人的這些互動(dòng),他們對(duì)自己可能向其他工程師提出的問(wèn)題變得更加自信。這確實(shí)增強(qiáng)了他們的自信心?!?/p>
他的同事表示,在與同事工程師進(jìn)行對(duì)話之前,先與機(jī)器人進(jìn)行準(zhǔn)備,使得最終的對(duì)話變得更加富有成效。
同樣地,生成式人工智能非常擅長(zhǎng)解構(gòu)和解釋復(fù)雜的事物。通過(guò)允許聊天機(jī)器人安全地在你的遺留代碼庫(kù)上進(jìn)行訓(xùn)練,生成式人工智能可以與新入職的工程師進(jìn)行對(duì)話。
“作為工程師,我們擅長(zhǎng)將大問(wèn)題分解成小問(wèn)題。AI 也越來(lái)越擅長(zhǎng)這一點(diǎn)?!睂?duì)內(nèi)部文檔和現(xiàn)有代碼進(jìn)行高質(zhì)量的生成式人工智能訓(xùn)練,將越來(lái)越有助于提升代碼的合規(guī)性和理解度。
然而,它很可能會(huì)基于枯燥的內(nèi)部文檔進(jìn)行訓(xùn)練。如果你的文檔沒(méi)有包含誰(shuí)做出了什么技術(shù)決策以及為何如此決策的人類背景信息,那么你的聊天機(jī)器人以及它們的用戶也同樣不會(huì)了解這些信息。
當(dāng)然,生成式 AI 的一個(gè)很好的早期用例是文檔——開(kāi)發(fā)人員一直想要更多,但又不想將時(shí)間投入到創(chuàng)建中。另一方面,GenAI 已經(jīng)擅長(zhǎng)解釋事物、創(chuàng)建代碼示例、翻譯和其他可以將文檔提升到新水平的活動(dòng)。
“理解代碼是一回事,(但)記錄它以便其他參與者能夠理解它更強(qiáng)大是另一回事,”Harvey 說(shuō),包括對(duì)于具有不同技術(shù)實(shí)力的不同利益相關(guān)者。
同時(shí)他還是 DORA 的負(fù)責(zé)人,這是年度 DevOps 研究和評(píng)估行業(yè)基準(zhǔn)指標(biāo)。
“在過(guò)去的四年里,我們一直在研究?jī)?nèi)部文檔的力量,當(dāng)它幫助團(tuán)隊(duì)構(gòu)建、操作、運(yùn)行 [和] 更新基本上任何類型的軟件應(yīng)用程序時(shí),”Harvey 在談到 DORA 年度報(bào)告時(shí)說(shuō)?!皟?nèi)部文檔是那些超能力之一,它只是從技術(shù)角度放大了我們所做的一切。除了從文化和流程的角度來(lái)看,它確實(shí)可以釋放出更好的績(jī)效、更高的工作滿意度和 [和] 更少的倦怠。
5.分心干擾,還是受益?
在大量技術(shù)裁員和云原生工具領(lǐng)域不斷擴(kuò)大的復(fù)雜性之后,過(guò)去的一年一直專注于開(kāi)發(fā)人員的生產(chǎn)力。但同時(shí),它也可能只是一個(gè)很大的干擾。
開(kāi)發(fā)人員面臨著越來(lái)越多的認(rèn)知超負(fù)荷,不斷地從一個(gè)工具跳到另一個(gè)工具,切換上下文。StackOverflow 發(fā)現(xiàn),大多數(shù)開(kāi)發(fā)人員每天花費(fèi)半個(gè)多小時(shí)來(lái)尋找東西——按照開(kāi)發(fā)人員工資的現(xiàn)行價(jià)格,這種挫敗感的代價(jià)比時(shí)間更昂貴。
并不是說(shuō)開(kāi)發(fā)者不希望有這樣的AI投入。問(wèn)題就在于,這次的生成式AI投入再次與他們的實(shí)際體驗(yàn)無(wú)關(guān)。
例如,現(xiàn)在的AI工具大多集中在代碼生成上,而這正是開(kāi)發(fā)者希望花更多時(shí)間去做的事情,而非減少。事實(shí)上,開(kāi)發(fā)者常有的抱怨是,他們花在編碼上的時(shí)間不夠多。
根據(jù)包括《全球編碼時(shí)間報(bào)告》在內(nèi)的多項(xiàng)資源顯示,開(kāi)發(fā)者平均每天花在編碼上的時(shí)間不到兩小時(shí)。事實(shí)上,研究表明,對(duì)開(kāi)發(fā)者而言,美好的一天是花更多時(shí)間編碼。
一位資深的工程師打了一個(gè)很形象的比方,廚師希望有人能幫忙切菜洗碗,以打破單調(diào),但他們并不希望擁有一臺(tái)忍者攪拌機(jī)(Ninja blender),因?yàn)樗鼤?huì)奪走烹飪的樂(lè)趣。
用這個(gè)比喻來(lái)形容開(kāi)發(fā)者的困境,再適合不過(guò)。開(kāi)發(fā)者希望AI撰寫(xiě)文檔,以增加他們編寫(xiě)代碼的樂(lè)趣,而不是讓AI來(lái)編寫(xiě)代碼讓他們的樂(lè)趣減少。
同樣,雖然技術(shù)債務(wù)位居開(kāi)發(fā)者抱怨清單之首,但開(kāi)發(fā)者并不希望花時(shí)間償還。雖然GenAI在解釋復(fù)雜代碼庫(kù)、協(xié)助云遷移以及突出重構(gòu)優(yōu)先級(jí)方面已經(jīng)有了有趣的應(yīng)用,但只有當(dāng)AI應(yīng)用于更無(wú)聊且令人沮喪的開(kāi)發(fā)工作時(shí)(即非編寫(xiě)代碼的工作),其生產(chǎn)力效益才會(huì)得到釋放。
尤其對(duì)于平臺(tái)工程和生成式AI而言,代替開(kāi)發(fā)者做決策(而不是像對(duì)待客戶一樣對(duì)待他們,運(yùn)行演示和試點(diǎn),并征求大量反饋)注定會(huì)是一個(gè)失敗的配方。
這或許就是這兩者目前都處于 Gartner 技術(shù)成熟度曲線中的幻滅之谷階段,而開(kāi)發(fā)者賦能仍被視為優(yōu)先級(jí)的原因。
6.AI真正賦能開(kāi)發(fā)者的3個(gè)案例
隨著 GenAI 對(duì)內(nèi)部文檔和流程的進(jìn)一步訓(xùn)練,它可以直接在你的云套件中或 GitHub 存儲(chǔ)庫(kù)旁邊就可以看到。這可能包括哪些服務(wù)已經(jīng)可用、哪些 API 可以重復(fù)使用以及哪個(gè)團(tuán)隊(duì)(如果有)擁有什么。
Harvey 回憶了一個(gè)AI幫助解決積壓?jiǎn)栴}的案例。
“有一個(gè)團(tuán)隊(duì)一直在討論一項(xiàng)功能,但從未擺脫積壓的工作。那個(gè)團(tuán)隊(duì)的技術(shù)主管最終說(shuō),'你知道嗎?這種情況反復(fù)出現(xiàn)。我要去請(qǐng)一個(gè) AI 機(jī)器人幫我解決這個(gè)問(wèn)題'。”
這位技術(shù)主管隨后描述了他們來(lái)回進(jìn)行的一些對(duì)話,然后,技術(shù)主管要求機(jī)器人編寫(xiě)十幾個(gè)用戶故事。技術(shù)主管將 AI 生成的用戶故事帶給產(chǎn)品負(fù)責(zé)人,產(chǎn)品負(fù)責(zé)人批準(zhǔn)了其中 12 個(gè)中的 8 個(gè),然后在確定優(yōu)先級(jí)之前又添加了 3 個(gè)自己的故事。
“在GenAI的幫助下,這個(gè)團(tuán)隊(duì)可以在接下來(lái)的沖刺或迭代中立即著手開(kāi)發(fā)他們已討論數(shù)月卻遲遲未能開(kāi)始的新功能?!?/p>
另外,還有一個(gè)不錯(cuò)的AI賦能開(kāi)發(fā)者的例子。生成式 AI 可以記錄書(shū)面筆記(比如便利貼上手寫(xiě)的那種),并將其轉(zhuǎn)化為數(shù)字用戶旅程地圖。或者,它可以接受會(huì)議口述,并將筆記轉(zhuǎn)化為行動(dòng)計(jì)劃。
受益于生成式AI改造的,不僅僅是技術(shù),還有人員和流程。哈維舉了Meta創(chuàng)建“提醒機(jī)器人”來(lái)加速代碼審查的例子。
7.寫(xiě)在最后:這一刻,開(kāi)發(fā)者的建議是對(duì)的
誠(chéng)然,生成式AI無(wú)疑是驅(qū)動(dòng)未來(lái)軟件開(kāi)發(fā)的新生產(chǎn)力。然而,技術(shù)領(lǐng)導(dǎo)層希望將其應(yīng)用于更多代碼行的做法,同時(shí)反而會(huì)使代碼庫(kù)和聲譽(yù)面臨著安全的風(fēng)險(xiǎn)。
毫無(wú)疑問(wèn),工程師是富有創(chuàng)造力的工作者。然而據(jù)研究顯示,他們每天只能用大約 4 個(gè)小時(shí)來(lái)做到最好,每天 3 到 5 小時(shí)是他們最能寫(xiě)代碼的時(shí)間。更多的工作時(shí)間并不能轉(zhuǎn)化為更高的生產(chǎn)力。
圖片
如果AI只是讓這些富有創(chuàng)造離得程序員放棄編程,而是轉(zhuǎn)移到了文檔部分,某種程度上看就成了買(mǎi)櫝還珠!
老板們不妨傾聽(tīng)開(kāi)發(fā)人員的聲音,他們對(duì)日常工作中哪些事情感到沮喪,對(duì)于那些將生成式AI應(yīng)用的嘗試覺(jué)得提效很多,或許更有利于企業(yè)內(nèi)部生成式AI的實(shí)際落地。
參考鏈接:
??https://thenewstack.io/whats-wrong-with-generative-ai-driven-development-right-now/??
??https://thenewstack.io/why-do-developers-lose-1-day-a-week-to-inefficiencies/??
本文轉(zhuǎn)載自??51CTO技術(shù)棧??,作者:言征
