AI 寫代碼總翻車?我踩過的坑,也許能幫你少走些彎路

0 評論 1735 瀏覽 0 收藏 8 分鐘

AI 寫代碼聽起來很美,但真用起來卻常?!胺嚒?。從語法錯(cuò)誤到邏輯混亂,從工具誤導(dǎo)到思維慣性,坑一個(gè)接一個(gè)。本文作者結(jié)合親身經(jīng)歷,復(fù)盤了多個(gè)典型“翻車現(xiàn)場”,并總結(jié)出一套避坑思路,幫你在 AI 編程路上少走彎路、走得更穩(wěn)。

在用 AI 輔助開發(fā)的這段時(shí)間里,我越來越覺得:AI 并不是你隨便一說,它就能接得住。用不好,不是因?yàn)槟P筒粔驈?qiáng),而是你自己沒說清楚。下面是我在項(xiàng)目中踩過的一些坑,總結(jié)下來供參考。

1. 需求和目標(biāo),不能含糊

你可能會說:“我要一個(gè)列表頁?!钡阏f的是表格、卡片視圖,還是分頁列表?有沒有篩選?支持移動端嗎?這些 AI 不知道,也不會替你猜。

真正有效的方式,是像寫給同事那樣說清楚:

“我需要一個(gè)移動端優(yōu)先的商品列表頁,要求分頁加載,最多展示 10 條,點(diǎn)擊后進(jìn)入詳情頁,頁面使用 React + Vite,狀態(tài)管理用 Redux Toolkit?!?/p>

說得越清楚,AI 給的代碼就越接近你想要的。否則它給你寫完你還得大改,浪費(fèi)時(shí)間不說,還容易出 bug。

2. 復(fù)雜度自己先有數(shù),別一上來就全丟給 AI

比如有一次我在 cursor 里寫 prompt,想讓它幫我生成一個(gè)搜索接口的實(shí)現(xiàn)。我一句話說了大概 4 件事:模糊匹配、分頁、前端防抖和后端限流。結(jié)果它給了我一個(gè)看起來完整,但問題很多的實(shí)現(xiàn)。

后來我改成分步驟讓它寫:

第一步:實(shí)現(xiàn)一個(gè)基本的關(guān)鍵詞匹配接口,支持模糊搜索。

第二步:前端加上防抖輸入框,避免頻繁請求。

第三步:再讓它加分頁邏輯,并說明每頁大小和返回結(jié)構(gòu)。

第四步:最后告訴它,后端需要加限流策略,防止接口被刷爆。

這樣每步確認(rèn)一個(gè)點(diǎn),AI 的反饋就靠譜得多。很多時(shí)候你覺得它“聽不懂”,不是因?yàn)樗芰Σ恍校悄阋淮涡哉f了太多事,它只能抓住一部分。換成人也一樣,信息太多反而會失焦。

3. 代碼不能全信,學(xué)會自己檢查

AI 生成的代碼,經(jīng)??雌饋怼澳芘堋保芏嚓P(guān)鍵細(xì)節(jié)是缺失的。

比如生成一個(gè)登錄接口,邏輯寫得挺完整,但卻忘了處理接口失敗時(shí)的 token 清理。結(jié)果用戶登錄失敗后,前端還以為自己登錄過,接口一路 401。又比如請求數(shù)據(jù)時(shí)確實(shí)寫了 loading 狀態(tài),但沒有在出錯(cuò)或取消時(shí)正確關(guān)閉,導(dǎo)致頁面一直轉(zhuǎn)圈卡住。

這類“功能有,但邊界沒管”的代碼,在實(shí)際開發(fā)里最容易出問題。它們表面看起來沒 bug,實(shí)際上體驗(yàn)一塌糊涂。

檢查點(diǎn)包括:loading 有沒有兜住所有異步路徑、接口是否兜底失敗狀態(tài)、邏輯是否具備初始值、是否有 fallback。只要你自己不看,這些問題就不會自動被解決。

AI 可以幫你提速,但提效的前提,是你有能力去識別和修正它的疏漏。如果完全不查不看,最后埋雷的還是你自己。

4. 項(xiàng)目上下文一定要說清楚

這點(diǎn)特別重要。AI 不知道你項(xiàng)目的技術(shù)選型,不知道你是用函數(shù)式組件還是 class,也不知道你 prefer fetch 還是 axios。

比如如果我們想用 SWR 做數(shù)據(jù)請求,那每次都要提醒它:

“我們使用 swr 來做請求緩存,請用 useSWR 而不是 useEffect 去請求數(shù)據(jù)。”

如果你不說,它會給你生成一堆你可能根本不會用的寫法,后面還得你自己去改。

5. 說不清楚問題,AI 也解決不了

有個(gè)開發(fā)者只跟 AI 說:“這個(gè)布局有點(diǎn)卡”,AI 直接把整個(gè)組件改成 virtual list,雖然邏輯沒錯(cuò),但實(shí)際瓶頸并不是列表渲染多,而是圖片都同步加載,導(dǎo)致滾動時(shí)掉幀。

后來他把描述改為:

“當(dāng)前列表滾動時(shí)掉幀嚴(yán)重,初步定位是每個(gè) item 內(nèi)圖片同步加載。建議用loading=”lazy”+ IntersectionObserver 控制加載時(shí)機(jī)?!?/p>

這次 AI 給出的方案才靠譜:用原生loading=”lazy”屬性或結(jié)合 IntersectionObserver 延遲加載圖片,頁面性能立刻提升。

所以,不要說模糊詞,像“卡”、“慢”、“不好看”,你得具體說是哪塊慢、什么條件下卡,AI 才能幫得上忙。

結(jié)尾:需求說不清,AI 自然幫不了你

用 AI 寫代碼,歸根結(jié)底是個(gè)“表達(dá)-反饋-修正”的過程。你說得清楚,它才能給得準(zhǔn)確。

別期待它替你拍板選技術(shù)、補(bǔ)邊界邏輯,也別幻想它能看穿你的上下文和項(xiàng)目背景。你要做的,是逼自己把需求表達(dá)清楚,說出你真正想要的東西。

一旦你能把復(fù)雜的系統(tǒng)需求講清楚、把問題拆得有邏輯、能指出 bug 出現(xiàn)的上下文,AI 才能真正成為你的幫手,而不是一個(gè)反復(fù)返工的負(fù)擔(dān)。

后記:AI 編程沒那么省事,但值得一練

說實(shí)話,剛開始我用 AI 寫代碼的時(shí)候,覺得比我自己寫還累。

它像個(gè)“不會自動對齊語境”的智能搭子,常常給我一堆看似對的代碼,實(shí)則不合用,問題根本不在 AI,而在于我沒把話講明白。

慢慢地我意識到,AI 編程根本不是“偷懶”利器,而是反向逼你去思考表達(dá)、思考結(jié)構(gòu)、思考邏輯。你說得越明白,思路越清楚,它就越能節(jié)省你的精力。

所以,AI 編程沒有變簡單,只是把開發(fā)的難點(diǎn),從動手轉(zhuǎn)移到了動腦——從寫代碼,轉(zhuǎn)向?qū)懬宄约旱南敕ā?/p>

本文由 @AI思·享@蓉77 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)作者許可,禁止轉(zhuǎn)載。

題圖來自 Unsplash,基于CC0協(xié)議。

該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務(wù)。

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發(fā)揮!