AI代碼助手正在超越自動(dòng)補(bǔ)全:接下來會(huì)發(fā)生什么
自動(dòng)補(bǔ)全適用于小型任務(wù),但當(dāng)今的開發(fā)者需要超越逐行輔助的AI工具,這些工具能夠適應(yīng)更廣泛的項(xiàng)目環(huán)境,從而實(shí)現(xiàn)真正的生產(chǎn)力提升。
譯自AI Code Assistants Are Moving Beyond Auto-Complete: Here’s What’s Next,作者 Ado Kukic。
直到最近,AI 代碼助手這個(gè)術(shù)語還與自動(dòng)補(bǔ)全功能同義。這是有原因的。AI 輔助代碼補(bǔ)全功能,它會(huì)在開發(fā)者輸入時(shí)預(yù)測(cè)并建議接下來的幾個(gè)字符、單詞或行,是根據(jù)工作流程和需要提供相關(guān)幫助的一個(gè)很好的例子。我從事專業(yè)編寫和維護(hù)代碼已有20多年了。在 AI 輔助代碼補(bǔ)全之前,各種開發(fā)者工具已經(jīng)通過依賴 IDE 中內(nèi)置的語言服務(wù)器功能提供了類似的功能。因此,AI 驅(qū)動(dòng)的代碼補(bǔ)全感覺像是 IDE 及其為開發(fā)者提供的幫助的自然發(fā)展步驟。
另一種流行的 AI 交互方式,即聊天界面,對(duì)于開發(fā)者來說并不被認(rèn)為非常有價(jià)值,因?yàn)樗饕换卮鹜ㄓ貌樵儯纭叭绾畏崔D(zhuǎn)鏈表?”,而這在開發(fā)者的日常工作中并不需要。
因此,完成接受率 (CAR)(一個(gè)計(jì)算開發(fā)者接受 AI 建議完成的百分比的指標(biāo))成為許多 AI 代碼工具的關(guān)鍵績(jī)效指標(biāo)。代碼工具的營(yíng)銷材料重點(diǎn)介紹了它們的自動(dòng)補(bǔ)全功能,通常展示它們?nèi)绾文軌蛲ㄟ^減少擊鍵次數(shù)來節(jié)省[開發(fā)人員的時(shí)間]。
然而,這種情況正在改變。
使自動(dòng)補(bǔ)全有用的“流程”也限制了它
當(dāng)你坐下來編寫一段代碼時(shí),代碼會(huì)神奇地出現(xiàn)在你的屏幕上,這可能是一種真正類似于流程的體驗(yàn)。然而,同樣的“上下文”質(zhì)量——在你需要的時(shí)候,在你需要的地方提供幫助——使自動(dòng)補(bǔ)全變得有幫助,這也是限制其效用的原因:
- 范圍有限: 編寫代碼——一項(xiàng)極其依賴人的活動(dòng)——以人的速度進(jìn)行。此外,編寫代碼甚至并非一直是主要的開發(fā)者活動(dòng)。
- 上下文狹窄: 自動(dòng)補(bǔ)全逐行工作,缺乏對(duì)代碼更廣泛上下文或開發(fā)者意圖的理解。
- 對(duì)延遲敏感: 必須盡快提供補(bǔ)全,這限制了可以使用的 AI 模型。任何提供建議的延遲都會(huì)擾亂開發(fā)者的流程。
因此,由此帶來的軟件開發(fā)速度的提高充其量只是漸進(jìn)式的。
解決復(fù)雜的軟件問題不僅僅需要編寫代碼
我們看到開發(fā)者使用 AI 工具的方式正在發(fā)生轉(zhuǎn)變。AI 代碼助手僅僅完成你的代碼行已經(jīng)不夠了。工程團(tuán)隊(duì)的需求更多。他們希望解決更復(fù)雜的問題。他們希望生成全新的功能,重構(gòu)遺留代碼,將代碼現(xiàn)代化到更新的語言和框架版本,提高代碼測(cè)試覆蓋率,提高對(duì)安全和編碼標(biāo)準(zhǔn)的合規(guī)性,等等。所有這些都無法通過自動(dòng)補(bǔ)全來完成。它需要對(duì)組織更廣泛的代碼庫(超出開發(fā)者同時(shí)處理的幾個(gè)文件)有更深入的理解。大多數(shù) AI 代碼助手都缺乏這種能力。
截至今天,此類任務(wù)的最佳界面是良好的 AI 驅(qū)動(dòng)的聊天。開發(fā)人員意識(shí)到,同樣的聊天如果缺乏上下文,可能會(huì)過于通用而無用(記住反轉(zhuǎn)鏈表?),但在擁有適當(dāng)?shù)纳舷挛臅r(shí),它會(huì)變成一臺(tái)強(qiáng)大的機(jī)器。這就解釋了為什么開發(fā)人員轉(zhuǎn)向面向聊天的編程 (CHOP) 或通過迭代提示改進(jìn)進(jìn)行編碼來解決他們的問題。
讓我們來看一個(gè)面向聊天編程如何幫助我的最新例子。我正在開發(fā)一個(gè)處理大量視頻內(nèi)容的應(yīng)用程序。用戶會(huì)上傳視頻,我的服務(wù)需要將它們編碼成各種格式,創(chuàng)建剪輯,將音頻提取到 .mp3 文件中,等等。
許多這些操作都將非常計(jì)算密集型,因此我需要構(gòu)建一個(gè)排隊(duì)系統(tǒng),該系統(tǒng)可以調(diào)度作業(yè),在資源可用時(shí)處理任務(wù),并在任務(wù)完成后更新隊(duì)列。我最初通過依賴 Redis(一個(gè)用于創(chuàng)建排隊(duì)系統(tǒng)的強(qiáng)大的鍵值存儲(chǔ))構(gòu)建了所有功能。
我的實(shí)現(xiàn)方案在測(cè)試中運(yùn)行良好,但一旦上線并開始使用我構(gòu)建的排隊(duì)系統(tǒng),我很快意識(shí)到我的實(shí)現(xiàn)方案更適合關(guān)系數(shù)據(jù)庫。該系統(tǒng)依賴于我需要訪問的各種屬性,這意味著必須查詢大量不必要的數(shù)據(jù)才能從Redis獲取我需要的鍵值對(duì)。將所有內(nèi)容重寫為使用SQLite將是一項(xiàng)相當(dāng)大的工作。盡管如此,由于面向聊天的編程,我只需在我的編碼助手之間通過幾條聊天消息,并使用我的代碼庫作為上下文,就可以進(jìn)行這項(xiàng)代碼庫范圍內(nèi)的更改。
圖片
AI編碼助手不僅為我提供了關(guān)于需要發(fā)生什么的逐步說明,而且還生成了可工作的代碼,用SQLite數(shù)據(jù)庫查詢替換了現(xiàn)有的Redis調(diào)用,生成了與我在Redis中使用的匹配的正確模式,并為我提供了關(guān)于去哪里以及更新什么的精確說明,從而節(jié)省了我無數(shù)小時(shí)的手動(dòng)遷移工作。說到遷移,我還讓我的編碼助手編寫了新的功能,將Redis中所有現(xiàn)有的作業(yè)數(shù)據(jù)遷移到SQLite,以便在新版本部署時(shí)不會(huì)丟失任何數(shù)據(jù)。
圖片
成功取決于結(jié)果,而非輸出
隨著這一演變,成功的衡量標(biāo)準(zhǔn)也發(fā)生了變化。完成接受率 (CAR) 仍然很重要,但不再是黃金標(biāo)準(zhǔn)。相反,工程團(tuán)隊(duì)正在關(guān)注更全面的衡量指標(biāo):
- 節(jié)省的時(shí)間: 使用此工具減少了多少總體開發(fā)時(shí)間?
- 問題解決能力: 此工具能否幫助解決復(fù)雜的編碼難題?
- 代碼質(zhì)量改進(jìn): 此工具能否幫助提高代碼庫的整體質(zhì)量和可維護(hù)性?
- 學(xué)習(xí)和適應(yīng): 此工具如何適應(yīng)項(xiàng)目特定的需求和編碼風(fēng)格?
展望未來
即使在AI使用成為編碼主流的最初兩年中,使用模式也從更“代碼輸入”的活動(dòng)迅速發(fā)展到更具迭代性設(shè)計(jì)或轉(zhuǎn)換的活動(dòng)。隨著我們繼續(xù)前進(jìn),很明顯,自動(dòng)完成雖然仍然有用,但這只是AI輔助編碼的冰山一角。編碼與在編輯器中努力地進(jìn)行輸入的日子已經(jīng)過去了。
未來屬于更全面、更上下文感知的AI系統(tǒng),這些系統(tǒng)能夠真正理解并協(xié)助軟件開發(fā)。我們?nèi)绾味x編碼技能以及未來軟件工作的培訓(xùn)方式可能與今天的有所不同。通過智能提示最有效地利用AI,并結(jié)合其他有助于理解代碼的工具,可能會(huì)成為軟件構(gòu)建方式的重要方面。