我們恐怕只是把復(fù)雜的問(wèn)題想得過(guò)于簡(jiǎn)單。
軟件行業(yè)苦降本增效久已。蔓延開(kāi)去的開(kāi)發(fā)周期,遙遙無(wú)望的上線時(shí)間,以及不斷冒起的缺陷,怎么看都配不上這支精兵強(qiáng)將的隊(duì)伍。生成式 AI 似乎帶來(lái)了曙光,它的表現(xiàn)讓人耳目一新,不少人會(huì)這么想:生成式 AI 能自動(dòng)生成代碼,成本低,可重復(fù),即拋的能力像云上的資源,這段代碼不合適的話(huà)扔掉好了,重新生成一段。這是不是意味著,不需要這么多精兵強(qiáng)將了?
生成式 AI 在回答我們的問(wèn)題時(shí),偶爾會(huì)拋出個(gè)煞有介事的答案,但如果你稍作檢索,就會(huì)發(fā)現(xiàn)這個(gè)答案徒有其表:不是查無(wú)此言,就是一派胡言,這與人工智能的威名不符。這即所謂生成式 AI 的幻覺(jué),hallucination——因?yàn)闆](méi)有真實(shí)可靠的語(yǔ)料,它自作主張拼湊了一個(gè)假的回答。
大模型技術(shù)仍然在不斷更新,能讓人感知到幻覺(jué)程度也在逐漸降低。但在它被投入到具體的領(lǐng)域和使用場(chǎng)景時(shí),幻覺(jué)效應(yīng)仍在發(fā)生。在這篇文章里,我會(huì)分享下生成式 AI 在軟件開(kāi)發(fā)領(lǐng)域的應(yīng)用,以及其帶來(lái)的三個(gè)幻覺(jué)。
01 幻覺(jué)一:更快的速度
不同的軟件工具廠商都在迭代更新自己的代碼助手產(chǎn)品,最著名的是 GitHub 的 Copilot,他們宣稱(chēng),可以加快程序員完成任務(wù)的速度達(dá) 55% 以上,那些清麗迅捷的演示視頻看起來(lái)也如飛一般。
但這是否意味著軟件的交付進(jìn)度可以加快 50%?
那些作為演示的代碼是可疑的,更多程序員在自己的項(xiàng)目中采用 Copilot 的反饋似乎也表明,提速基本只會(huì)出現(xiàn)在一些常用的功能實(shí)現(xiàn)上。比如數(shù)組的排序,數(shù)據(jù)結(jié)構(gòu)的初始化,或者是一些再簡(jiǎn)單不過(guò)的模板代碼。
可重復(fù)的工具代碼交由 AI 也就罷了。但對(duì)于一個(gè)開(kāi)發(fā)中的軟件而言,有多少類(lèi)似的代碼需要重復(fù)開(kāi)發(fā)呢?這恐怕值得討論。遑論多數(shù)時(shí)候,它們只需要一次成型,封裝待用。還有數(shù)量相當(dāng)可觀的業(yè)務(wù)代碼,程序員會(huì)以怎樣的速度來(lái)進(jìn)行?你可以把足夠數(shù)量的業(yè)務(wù)代碼交由 AI 來(lái)生成,但是否安全恐怕是一個(gè)更大的問(wèn)題。
這里還有兩個(gè)問(wèn)題值得關(guān)注。
一是程序員對(duì) AI 提供代碼的選擇。
AI 如此容易提供多套方法的實(shí)現(xiàn),程序員難免要嘗試從中找出最優(yōu)的選項(xiàng)。
這個(gè)好?還是那個(gè)好?咦,竟然有五種不同的實(shí)現(xiàn)。需要先讀懂每一種代碼的實(shí)現(xiàn),再切換到下一種。這個(gè)實(shí)現(xiàn)的方法很優(yōu)雅,但可惜單元測(cè)試失敗了。換下一個(gè)。
程序員的好奇心被代碼助手充分?jǐn)噭?dòng)。心猿意馬,線性的思維習(xí)慣碎落一地。程序員遺忘的不只是開(kāi)發(fā)紀(jì)律,還有時(shí)間。
二是軟件自有生命周期。
很顯然,輪到程序員開(kāi)始編寫(xiě)代碼,很多事情已經(jīng)發(fā)生,而更多的事情還會(huì)繼續(xù)發(fā)生,直到系統(tǒng)上線。這些事情包括但不限于:收集需求,理解需求(從需求說(shuō)明到用戶(hù)故事),測(cè)試,維護(hù)基礎(chǔ)設(shè)施,以及那些層出不窮的修復(fù)工作。
我的意思是說(shuō),即便 AI 幫助程序員寫(xiě)得再快,這個(gè)階段也只是軟件生命周期中的一部分而已。早有相關(guān)的數(shù)據(jù)統(tǒng)計(jì),程序員日常的工作,只有 30% 的時(shí)間是在編寫(xiě)代碼,而更多的時(shí)間是在嘗試?yán)斫馑麄円獙?shí)現(xiàn)什么功能,以及設(shè)計(jì)和學(xué)習(xí)新技能上。
02 幻覺(jué)二:更少的 Bug
人編寫(xiě)的代碼難免存在缺陷,這是軟件質(zhì)量的基本共識(shí)。而且似乎越有經(jīng)驗(yàn)的程序員,越容易生產(chǎn)出隱晦的問(wèn)題,要過(guò)了很久才會(huì)被發(fā)覺(jué)。線上問(wèn)題更讓人提心吊膽,但這樣的擔(dān)心很難避免。
AI 生成的代碼,聽(tīng)起來(lái)也很高級(jí),是不是會(huì)帶來(lái)足夠完美的結(jié)果?很可惜,答案可能會(huì)讓人失望。
生成式 AI 背后的大模型,以互聯(lián)網(wǎng)上大量的語(yǔ)料作為數(shù)據(jù)來(lái)源,盡管大模型技術(shù)一直在改善,但網(wǎng)絡(luò)上已經(jīng)現(xiàn)實(shí)存在的帶有偏見(jiàn)的數(shù)據(jù)量十分可觀。這也包括大量飽含缺陷的代碼。這意味著程序員在代碼助手中精挑細(xì)選的代碼,也可能存有缺陷。因?yàn)檫@段有缺陷的代碼,可能來(lái)自地球另一端的某個(gè)人,只是恰巧成為了地球這一端的選擇。
要命的是,生成式 AI 有放大器(amplify)的功效。簡(jiǎn)單來(lái)說(shuō),就是如果程序員采用了存有缺陷的生成代碼,Copilot 會(huì)記錄這樣的行為,在接下來(lái)類(lèi)似的場(chǎng)景,會(huì)繼續(xù)建議有缺陷或差不多的代碼。AI 并不能讀懂這樣的代碼,它只是被鼓勵(lì)繼續(xù)提供。我們可以預(yù)想最后的結(jié)果。
程序員要嚴(yán)守團(tuán)隊(duì)的開(kāi)發(fā)紀(jì)律,保持統(tǒng)一的代碼規(guī)范,因?yàn)檫@樣別人才能讀懂,更容易發(fā)現(xiàn)潛在問(wèn)題并修復(fù)它。但代碼助手提供的不同樣貌的代碼,似乎也提供了更多的混亂。
代碼有缺陷,只是軟件最后會(huì)爆出難以挽回的問(wèn)題來(lái)源之一,甚至是很少的一部分。構(gòu)建軟件的過(guò)程,其實(shí)是知識(shí)生產(chǎn)和創(chuàng)造的過(guò)程。在軟件生命周期不同階段加入進(jìn)來(lái)的各角色,共同理解和分析軟件的需求,然后轉(zhuǎn)換其為代碼,也在團(tuán)隊(duì)和人員更替的過(guò)程中,傳遞這些表面為需求和代碼實(shí)則為知識(shí)的信息。
但通常,知識(shí)會(huì)衰減,知識(shí)資產(chǎn)的傳遞會(huì)不可避免地出現(xiàn)差池。
比如,讀不懂代碼,無(wú)法持續(xù)更新文檔,整個(gè)團(tuán)隊(duì)又被替換,等等。這些才是軟件不斷產(chǎn)生 Bug 和問(wèn)題的原因所在。人工智能并未能解決這些軟件工程中棘手的問(wèn)題,至少現(xiàn)在看短時(shí)間內(nèi)做不到。
03 幻覺(jué)三:更少的人
AI 的代碼助手看起來(lái)確實(shí)像見(jiàn)多識(shí)廣的程序員。甚至有人愿意把它當(dāng)成結(jié)對(duì)編程實(shí)踐的伙伴。用人成本一直是 IT 團(tuán)隊(duì)頭疼的問(wèn)題,好手太貴,合適的人招不到,從頭去培養(yǎng)熟練的程序員又需要太久時(shí)間。有了人工智能和代碼助手的加持,是否意味著可以縮編快一半的人?
AI 和代碼助手不僅無(wú)法提供上述的速度快和質(zhì)量高保障外,也期待使用者要有足夠經(jīng)驗(yàn)的程序員才好,才能盡可發(fā)揮它該有的優(yōu)勢(shì)。這位有經(jīng)驗(yàn)的程序員,需要有能力判斷代碼的優(yōu)劣,判定對(duì)已有生產(chǎn)代碼的影響,還需要有精心調(diào)整提示詞的耐心和技巧。
在這篇文章里,作者講述了她在使用代碼助手時(shí)諸多要留意的問(wèn)題,還有你能看到的她縝密的內(nèi)心戲。因?yàn)榇a助手帶來(lái)的不確定性,可能會(huì)引起兩類(lèi)風(fēng)險(xiǎn),一是影響到代碼的質(zhì)量,二是浪費(fèi)時(shí)間。這里其實(shí)顯示的是一位足夠資深的程序員的自省能力。
也只有這樣,代碼助手才可以心安理得扮演見(jiàn)多識(shí)廣的新手,而經(jīng)驗(yàn)程序員充當(dāng)守門(mén)員,她才是那個(gè)負(fù)責(zé)提交代碼的人。這樣說(shuō)來(lái),AI 改變的其實(shí)是編程體驗(yàn)。
(圖片來(lái)源:https://martinfowler.com/articles/exploring-gen-ai.html,作者把代碼助手想象成一個(gè)著急幫忙、固執(zhí)、說(shuō)話(huà)清楚但缺乏經(jīng)驗(yàn)的角色,于是用 AI 畫(huà)出了這個(gè)卡通形象)
AI 和代碼助手在解決簡(jiǎn)單重復(fù)性問(wèn)題上,效果顯著。但在構(gòu)建軟件的過(guò)程中,有更多需要人和專(zhuān)業(yè)經(jīng)驗(yàn)的場(chǎng)景來(lái)解決復(fù)雜的問(wèn)題。比如軟件系統(tǒng)日益增加的架構(gòu)復(fù)雜度和范圍,應(yīng)付市場(chǎng)和業(yè)務(wù)側(cè)的需求,跨角色之間的溝通和協(xié)作,還有那些更加時(shí)髦的涉及代碼倫理和安全的問(wèn)題。
雖然判斷程序員是否足夠?qū)I(yè)和熟練,不像數(shù)數(shù)那樣一目了然,但我們也可以說(shuō),引入 AI 和代碼助手然后減員開(kāi)發(fā)團(tuán)隊(duì),能帶來(lái)的成效是不確定的,目前看弊大于利。
04 寫(xiě)在最后
生成式 AI 的本質(zhì)是模式轉(zhuǎn)換,從文字的一種形式,轉(zhuǎn)換成另一種形式,高級(jí)的代碼助手的能力也不出其右。如果把涉足軟件構(gòu)建的 AI 代碼助手,認(rèn)為是解決諸多軟件工程難題的妙方,我們恐怕只是把復(fù)雜的問(wèn)題想得過(guò)于簡(jiǎn)單。
寫(xiě)到這里,我們一直在談什么呢?
我們其實(shí)在談的是,在軟件開(kāi)發(fā)上投資 AI 的成效該如何衡量。投資 AI 并不是簡(jiǎn)單如購(gòu)買(mǎi)代碼助手的 License,然后就可以坐享降本增效。不斷詢(xún)問(wèn)“我們要如何衡量投資 AI 和代碼助手的效果?”,不如詢(xún)問(wèn)“我們到底要衡量什么?”。從 DORA 定義的四個(gè)關(guān)鍵指標(biāo)開(kāi)始,是個(gè)明智的選擇,它們是變更前置時(shí)間、部署頻率、平均恢復(fù)時(shí)間 (MTTR) 和變更失敗率。
以下幾條基本衡量原則供參考:
衡量團(tuán)隊(duì)效率,而不是個(gè)人績(jī)效。
衡量成效而不是產(chǎn)出。
查看隨時(shí)間推移的趨勢(shì),而不是比較不同團(tuán)隊(duì)的絕對(duì)值。
用儀表板上的數(shù)據(jù)開(kāi)啟對(duì)話(huà),而不是就此結(jié)束。
衡量有用的東西,而不是容易衡量的東西。
本文來(lái)源:36氪
文章轉(zhuǎn)載于其他網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系我們及時(shí)刪除!