【新智元導(dǎo)讀】2024年的AI編程到底什么實(shí)力?近日,谷歌的工程主管Addy Osmani,為我們揭示了AI輔助編碼在一線開(kāi)發(fā)中的真實(shí)情況。
2024年,AI編程已然滲透了各行各業(yè),影響著軟件的整個(gè)生命周期。
那么問(wèn)題來(lái)了,AI coding用過(guò)都說(shuō)好,但我們平時(shí)用的軟件咋感覺(jué)沒(méi)啥進(jìn)步呢?
近日,Addy Osmani,谷歌的工程主管,同時(shí)也是一位亞馬遜暢銷書(shū)作家,為我們揭示了AI輔助編碼在一線開(kāi)發(fā)中的真實(shí)情況。
碼農(nóng)怎么用AI?
一般來(lái)說(shuō),團(tuán)隊(duì)利用AI進(jìn)行開(kāi)發(fā)有兩種不同的模式:「引導(dǎo)程序(bootstrappers)」 和 「迭代器(iterators)」。兩者都在幫助工程師(甚至是非技術(shù)用戶)縮小從想法到執(zhí)行的差距。
Bootstrappers
這一類包括Bolt, v0, 和screenshot-to-code等AI工具,其特點(diǎn)為:
從設(shè)計(jì)或粗略概念開(kāi)始;
使用AI生成完整的初始代碼庫(kù);
能夠在幾小時(shí)或幾天內(nèi)獲得工作原型;
專注于快速驗(yàn)證和迭代
這樣的工作流令人印象深刻。比如一位獨(dú)立開(kāi)發(fā)人員可以使用Bolt,在短時(shí)間內(nèi)將Figma設(shè)計(jì)轉(zhuǎn)變?yōu)橛行У腤eb應(yīng)用程序。盡管達(dá)不到生產(chǎn)級(jí)別的要求,但用來(lái)獲得初步的用戶反饋綽綽有余。
Iterators
這一類主要負(fù)責(zé)日常開(kāi)發(fā)工作流程,包括Cursor、Cline、Copilot和WindSurf等工具,效果沒(méi)有上面那么浮夸,但更加實(shí)在,比如:
完成代碼、提供建議;
執(zhí)行復(fù)雜的重構(gòu)任務(wù);
生成測(cè)試和文檔;
作為解決問(wèn)題的「結(jié)對(duì)程序員」
雖然這兩種方法都可以大大加快開(kāi)發(fā)速度,但「天下沒(méi)有免費(fèi)的午餐」。
「AI速度」的隱性成本
高級(jí)工程師使用Cursor或Copilot等AI工具,可以在幾分鐘內(nèi)搭建整個(gè)功能的基架,并完成測(cè)試和文檔,就像變魔術(shù)一樣。
但仔細(xì)觀察就會(huì)發(fā)現(xiàn),在參考AI建議的同時(shí),資深工程師們還會(huì):
將生成的代碼重構(gòu)為更小的模塊;
添加邊緣情況處理;
優(yōu)化類型定義和接口;
添加全面的錯(cuò)誤處理;
甚至是質(zhì)疑AI給出的架構(gòu)
換句話說(shuō),他們正在用多年積累的工程智慧,塑造和限制AI的輸出。AI負(fù)責(zé)加速代碼實(shí)現(xiàn),但人類的專業(yè)知識(shí)確保代碼的可維護(hù)性。
而初級(jí)工程師就經(jīng)常錯(cuò)過(guò)這些關(guān)鍵步驟。他們更容易接受AI的輸出,從而導(dǎo)致所謂的「紙牌屋代碼(house of cards code)」——看起來(lái)很完整,但在現(xiàn)實(shí)世界的壓力下會(huì)崩潰。
知識(shí)悖論
所以實(shí)際上,相比于初學(xué)者,AI反而更能幫助有經(jīng)驗(yàn)的開(kāi)發(fā)人員,——這多少有點(diǎn)反直覺(jué)。
高級(jí)工程師利用AI快速構(gòu)建想法的原型(理解)、生成基本實(shí)現(xiàn)(可改進(jìn))、探索已知問(wèn)題的替代方法等等;
而初學(xué)者卻經(jīng)常接受不正確或過(guò)時(shí)的解決方案、忽略關(guān)鍵的安全性和性能問(wèn)題、不知道如何調(diào)試AI生成的代碼,最終構(gòu)建了一個(gè)自己不完全理解的脆弱系統(tǒng)。
70% problem
使用AI進(jìn)行編碼的非工程師,經(jīng)常遇到一個(gè)窘境: 他們可以出人意料地迅速完成70%的工作,但最后的30%就相當(dāng)痛苦了。
「70% problem」揭示了AI輔助開(kāi)發(fā)的現(xiàn)狀,剛開(kāi)始如有神助,后來(lái)被現(xiàn)實(shí)按在地上摩擦。
實(shí)際情況通常是:
嘗試修復(fù)一個(gè)小錯(cuò)誤——>
AI提出了一個(gè)似乎合理的更改——>
這個(gè)更改破壞了其他一些東西——>
要求AI修復(fù)新問(wèn)題——>
又產(chǎn)生了兩個(gè)新bug——>
無(wú)限循環(huán)
這個(gè)循環(huán)對(duì)于非工程師來(lái)說(shuō)尤其痛苦,因?yàn)樗麄內(nèi)狈I(yè)知識(shí)來(lái)理解真正出了什么問(wèn)題。
有經(jīng)驗(yàn)的開(kāi)發(fā)人員遇到bug時(shí),可以根據(jù)多年的模式識(shí)別來(lái)推理潛在原因和解決方案。如果沒(méi)有這個(gè)背景,那基本上就是在用自己不完全理解的代碼「打地鼠」。
學(xué)習(xí)悖論
還有一個(gè)更深層次的問(wèn)題:讓非工程師使用AI編碼工具,實(shí)際上可能會(huì)阻礙學(xué)習(xí)。
代碼生成了、運(yùn)行了,但「開(kāi)發(fā)者」不了解基本原理,此時(shí),他錯(cuò)過(guò)了學(xué)習(xí)基本模式、沒(méi)有培養(yǎng)調(diào)試技能、無(wú)法對(duì)架構(gòu)決策進(jìn)行推理,而這份代碼又需要維護(hù)和擴(kuò)展。
于是,「開(kāi)發(fā)者」不斷返回AI來(lái)解決問(wèn)題,而沒(méi)有培養(yǎng)自己處理問(wèn)題的專業(yè)能力。
非工程師使用AI編碼工具的最好方式可能是「混合模式」:
1. 使用AI進(jìn)行快速原型設(shè)計(jì)
2. 花點(diǎn)時(shí)間了解生成的代碼是如何工作的
3. 學(xué)習(xí)基本的編程概念以及AI使用
4. 逐步建立知識(shí)基礎(chǔ)
5. 將AI用作學(xué)習(xí)工具,而不僅僅是代碼生成器
但這需要耐心和奉獻(xiàn)精神,與許多人使用AI工具的目標(biāo)恰恰相反。
「70% problem」表明,當(dāng)前的AI還不是許多人希望的那個(gè)AI。最后30%的工作(使軟件可用于生產(chǎn)、可維護(hù)等),仍然需要真正的工程知識(shí)。
最佳實(shí)踐
Addy Osmani觀察了幾十個(gè)團(tuán)隊(duì),總結(jié)了一些最佳實(shí)踐方式:
「AI初稿」模式
讓 AI 生成基本實(shí)現(xiàn);手動(dòng)審查和模塊化重構(gòu);添加全面的錯(cuò)誤處理;編寫(xiě)全面的測(cè)試;記錄關(guān)鍵決策。
「持續(xù)對(duì)話」模式
為每個(gè)不同的任務(wù)開(kāi)始新的AI聊天;保持上下文集中和最?。唤?jīng)常查看和提交更改;保持緊密的反饋循環(huán)。
「信任但驗(yàn)證」模式
使用AI生成初始代碼;手動(dòng)審查所有關(guān)鍵路徑;邊緣案例的自動(dòng)測(cè)試;定期安全審計(jì)。
AI的真正前景?
盡管存在這些挑戰(zhàn),但作者對(duì)AI在軟件開(kāi)發(fā)中的作用持樂(lè)觀態(tài)度。關(guān)鍵是要充分利用AI的真正優(yōu)勢(shì):
加速已知AI擅長(zhǎng)幫助實(shí)現(xiàn)我們已經(jīng)了解的模式,就像有一個(gè)無(wú)限耐心的結(jié)對(duì)程序員,他可以非??焖俚卮蜃帧?/p>
探索可能性AI非常適合快速構(gòu)建想法原型和探索不同的方法,就像一個(gè)沙箱,我們可以在其中快速測(cè)試概念。
自動(dòng)化例程AI大大減少了花在樣板和日常編碼任務(wù)上的時(shí)間,讓我們可以專注于有趣的問(wèn)題。
如果您剛剛開(kāi)始AI輔助開(kāi)發(fā),作者的建議是,先從小處著手。
將AI用于非耦合的、定義明確的任務(wù),查看生成的每一行代碼,逐漸構(gòu)建更大的功能。
過(guò)程中保持模塊化:將所有內(nèi)容分解為小的重點(diǎn)文件,在組件之間保持清晰的接口,記錄模塊的邊界。
重要的一點(diǎn)是,相信自己的經(jīng)驗(yàn):AI用來(lái)加速而不能取代你的判斷、感覺(jué)不對(duì)勁時(shí)要質(zhì)疑、時(shí)刻維護(hù)自己的工程標(biāo)準(zhǔn)。
Agent興起
隨著我們進(jìn)入2025年,AI輔助開(kāi)發(fā)的格局正在發(fā)生巨大變化。雖然當(dāng)前的工具已經(jīng)改變了原型設(shè)計(jì)和迭代方式,但我們正處于更重要轉(zhuǎn)型的風(fēng)口浪尖:智能體(Agent)軟件工程的興起。
智能體系統(tǒng)不僅可以響應(yīng)提示,還將以越來(lái)越高的自主性規(guī)劃、執(zhí)行和迭代解決方案。
比如Anthropic的Claude能夠使用計(jì)算機(jī),或者Cline自動(dòng)啟動(dòng)瀏覽器和運(yùn)行測(cè)試的能力。
在調(diào)試過(guò)程中,智能體系統(tǒng)不僅給出修復(fù)bug的建議,還可以:
主動(dòng)識(shí)別潛在問(wèn)題、啟動(dòng)和運(yùn)行測(cè)試套件、檢查UI元素并捕獲屏幕截圖、提出并實(shí)施修復(fù)、驗(yàn)證解決方案是否有效。
下一代工具將可以無(wú)縫集成視覺(jué)理解(UI 屏幕截圖、模型、圖表)、口頭語(yǔ)言對(duì)話和環(huán)境交互(瀏覽器、終端、API)。
未來(lái)的AI不是取代開(kāi)發(fā)人員,而是成為一個(gè)越來(lái)越有能力的協(xié)作者,既可以采取主動(dòng),又能尊重人類的指導(dǎo)和專業(yè)知識(shí)。