學習指南:調(diào)試、評審與項目實戰(zhàn))
這兩年我身邊聊 AI 聊得最多的問題不是某個模型又發(fā)布了什么新功能而是“AI 時代軟件開發(fā)應該如何學習”。程序員們發(fā)現(xiàn)曾經(jīng)引以為傲的“從零搭一個模塊”“手寫一套業(yè)務(wù)接口”正在快速貶值而新的能力要求好像又沒有一本現(xiàn)成的教材能講明白。這篇內(nèi)容不是趨勢預測也不是販賣焦慮而是我在不同規(guī)模的項目里觀察到的真實變化以及我重新整理出來的學習框架。想讀下去的朋友大概是這幾類剛?cè)腴T但不知道從哪里使勁的初學者有一定經(jīng)驗但擔心基本功退化的工程師還有已經(jīng)在用 AI 寫代碼、卻總覺得少了點什么的人。1. 先看現(xiàn)實AI 到底動了軟件的哪塊蛋糕1.1 初級開發(fā)崗位正在經(jīng)歷的第一輪變化我以前帶人最看重的學習指標是“能不能獨立寫出一個功能模塊”。語法、框架、數(shù)據(jù)結(jié)構(gòu)、常見 API這些東西只要背得夠多、練得夠勤很快就能積累起來。但 AI 工具出現(xiàn)之后工作量最大的那部分——把功能描述翻譯成代碼——突然變得非常便宜。舉一個典型場景。過去團隊里要加一個“批量導入用戶名單”的功能新人的第一反應通常是查文檔搞清楚上傳格式、數(shù)據(jù)庫表結(jié)構(gòu)、校驗規(guī)則然后一行行寫邏輯。現(xiàn)在同樣的需求丟給 AI幾秒鐘就能生成一個看起來能跑的版本讀取文件、逐行解析、批量入庫連異常捕獲都給你寫好了。你會發(fā)現(xiàn)真正拉開差距的地方不在“寫出來”而在說清楚到底要什么樣的導入規(guī)則重復用戶怎么處理失敗到第幾條要不要回滾單次導入上限多少字段錯誤是跳過還是終止這些需求澄清、邊界定義、異常兜底的工作AI 幫不了你因為這些問題的答案不在代碼里而在業(yè)務(wù)場景里。初級崗位被壓縮的恰恰是最容易被工具替代的“把已知方案寫成代碼”的部分而“搞清楚要解決什么問題”不僅沒變反而在函數(shù)里的比重越來越大。1.2 從“寫代碼”到“定方案”的能力遷移我接觸過的開發(fā)者里對變化反應最大的不是寫不好代碼的人而是過去特別擅長寫代碼的人。原因很簡單他們最依賴的技能點正在變成默認能力以前“我寫得比別人快”的優(yōu)勢不再成立。現(xiàn)在真正值錢的是三種能力。第一個是需求拆解能力也就是把一個模糊的想法變成一個可驗收的交付物。這里有個很實用的標準如果需求描述里出現(xiàn)“大概”“差不多”“盡量”這些詞說明拆解還沒做完。舉例說“做一個提醒功能”誰都會說但“用戶可以選擇提醒時間到期后彈通知若應用不在前臺則發(fā)本地通知且對同一用戶五分鐘內(nèi)去重”才是可執(zhí)行的描述。第二個是系統(tǒng)判斷力知道哪些環(huán)節(jié)該交給 AI哪些環(huán)節(jié)必須保留人肉。AI 擅長生成局部代碼但整體的數(shù)據(jù)流向、模塊邊界、部署策略需要人來決策。這種判斷力不是直接從教程里學來的而是靠一次次比較“自己寫”和“AI 寫”之間的差異慢慢建立的。第三個是質(zhì)量兜底能力。AI 生成的代碼表面上很完整但線上崩的往往不是表面而是狀態(tài)沒管理好、邊界沒覆蓋、并發(fā)沒考慮。誰能更快定位、誰能提前發(fā)現(xiàn)這些問題誰才是團隊里不可替代的人。下面這個表可以直觀看出學習重心的遷移舊重心新重心記住語法和常見 API提出正確的問題實現(xiàn)已知功能定義未知需求寫出代碼審查與驗證代碼從頭搭建組合、取舍、重構(gòu)速度優(yōu)先可靠性與可維護性優(yōu)先說到底AI 不是把軟件開發(fā)這個行業(yè)消滅了而是把“實現(xiàn)”這個環(huán)節(jié)變得便宜把“決策”這個環(huán)節(jié)擺到了臺面上。軟件開發(fā)的學習本質(zhì)是在學怎么做好決策。2. 越用 AI 越覺得基本功不能丟調(diào)試、結(jié)構(gòu)、可讀性2.1 可運行不等于正確調(diào)試意識為什么成了分水嶺這半年我面試人或者看團隊同學提交的代碼發(fā)現(xiàn)一個很普遍的誤區(qū)代碼能跑起來大家就覺得任務(wù)完成了。AI 生成的代碼尤其容易給人這種錯覺因為它語法正確、縮進漂亮、注釋齊全看起來非?!罢?guī)”。但可運行和正確是兩件完全不同的事。說個我實際遇到的例子。某團隊做訂單模塊讓 AI 生成了一段庫存扣減代碼測試環(huán)境單獨跑也沒問題。結(jié)果壓測時一出現(xiàn)并發(fā)下單庫存就對不上了。問題出在生成代碼壓根沒有考慮并發(fā)場景——先查庫存、判斷充足、再更新數(shù)量這三個動作之間沒有鎖也沒有事務(wù)約束。這種問題靠肉眼讀代碼很難發(fā)現(xiàn)通常要配合日志、斷點、甚至線上監(jiān)控才能定位。這時候真正有用的是你對“程序如何在運行時流轉(zhuǎn)”的直覺。你去猜測哪一步出了錯、把嫌疑范圍一步步縮小、在關(guān)鍵位置打印日志、觀察數(shù)據(jù)狀態(tài)這些都是工具替代不了的底層的調(diào)試意識。我甚至覺得AI 時代學調(diào)試比學語法更重要因為 AI 給你一張看起來完美的地圖只有會識圖的人才知道哪些地方標錯了。2.2 讀代碼、拆代碼、改代碼AI 給不了的結(jié)構(gòu)感有朋友問過我既然 AI 寫代碼又快又好是不是不用再花時間讀代碼了我的觀點恰恰相反AI 時代讀代碼變得更重要了。你將來要面對的局面是AI 一次性給你生成幾百行代碼你得有能力在五分鐘之內(nèi)搞懂它的大致結(jié)構(gòu)和潛在風險。這種能力沒有捷徑只能靠平時大量閱讀有效代碼喂出來。我給自己和團隊同學推薦一個訓練方法叫“三步讀代碼”先看輸入輸出這個函數(shù)或模塊拿到什么數(shù)據(jù)最后吐出來什么變化的只有這一層嗎再找狀態(tài)變化代碼執(zhí)行過程中哪些變量被修改了什么時候修改有沒有可能出現(xiàn)并發(fā)或者被外部共同引用的情況最后看邊界處理空值、超時、超量、重復請求這些分支有沒有被覆蓋覆蓋得對不對。日常練習的時候可以配合 AI 一起做。你拿到一段代碼先用自己的話說一遍它是干嘛的再讓 AI 解釋對比一下漏掉了什么。反復做上幾十次你對代碼結(jié)構(gòu)的敏感度會明顯提升。讀代碼和拆代碼的本質(zhì)是建立因果鏈工具給的是信息信息只有被你組織成因果鏈才變成真本事。3. 把 AI 當陪練而不是代練一套能落地的學習方法3.1 提問方式?jīng)Q定了 AI 是助手還是老師同樣是打開一個 AI 工具每個人得到的效果天差地別。有人讓 AI 直接寫完整功能拿到手就粘貼這叫“代練”有人把 AI 當作“陪練”用它來逼自己思考和驗證。同樣的工具用法不同學習速度差出好幾倍。我建議你在日常學習中多試這幾種提問姿勢。第一別急著要答案先要方案。可以把需求原樣丟給 AI然后追問一句“不要寫代碼先給我三種實現(xiàn)思路分別說清楚適用場景和取舍點。”這樣一來你至少被迫面對“為什么選 A 不選 B”的權(quán)衡問題。這種權(quán)衡能力在項目里最值錢。第二讓 AI 解釋每段思路。它給出代碼之后你可以繼續(xù)問“這一段為什么用異步而不是同步這個條件判斷什么情況下會漏掉”AI 的解釋不一定全對但你只要帶著批判性接收就能培養(yǎng)出屬于自己的判斷力。第三試著角色反轉(zhuǎn)。比如你寫了一段邏輯把它貼在對話框里讓 AI “以資深評審者的身份從并發(fā)安全、邊界條件、可維護性三個角度指出問題”。我試過很多次這個做法能逼你對默認寫出來的東西進行第二次審視。核心邏輯是AI 不應該替代你的思考而是把你的思考變成實驗讓驗證變得更加即時。3.2 拿到 AI 生成結(jié)果后的驗收清單AI 生成代碼之后許多新人會誤以為工作結(jié)束但恰恰這時候工作才剛開始。我整理過一個簡單的驗收清單每次拿到代碼都會過一遍邊界條件如果輸入是空值、超大值、重復值程序會怎樣失敗路徑數(shù)據(jù)庫連接不上、文件不存在、權(quán)限不足有處理嗎資源釋放文件流、網(wǎng)絡(luò)連接、線程池做完后釋放干凈了嗎并發(fā)安全多個人同時在跑結(jié)果會不會互相干擾可維護性換一個人來改這段代碼能快速看懂嗎舉一個實際例子。讓 AI 寫一個文件上傳模塊很多 AI 給出的版本都有模有樣接收文件、保存到本地、返回路徑。但你拿驗收清單一查就會發(fā)現(xiàn)同名文件會直接覆蓋、磁盤滿了沒有任何提示、上傳大文件時沒有超時控制。這些缺失不會在“能跑”的體驗里暴露但它們決定了你在真實項目里是省心還是踩坑。這里還想強調(diào)一句AI 給你代碼時通常不會自然告訴你它哪里不可靠。你在使用時必須默認“它只是候選解不是標準答案”一切都以你的驗收結(jié)果為準。3.3 讓 AI 反向評審自己寫的代碼還有一個我特別推薦的學習動作就是把自己手工寫的代碼拿給 AI 評審。很多人把這個順序搞反了總是讓 AI 寫第一版自己去優(yōu)化。但如果你的基本功還在建設(shè)期我更建議第一版盡量自己寫哪怕寫得很笨然后讓 AI 來找毛病。這樣做的價值在于你會清楚地看到自己的盲區(qū)。比如我讓一個剛開始學編程的朋友寫一個“倒計時器”他自己寫完覺得沒問題AI 卻指出了幾個小問題第一次渲染會有一秒延遲、時間到零之后沒有清理定時器、切到后臺再回來時間不準。這樣的反饋比任何課程講“定時器該如何處理”都更具體因為它直接砸在你剛寫完的真實代碼上。這個流程重復若干次之后你會慢慢內(nèi)化一種“先找毛病再看亮點”的讀取習慣。如果 AI 每次點出的問題你都記錄了并且在下一次寫作時有意識地避開那你的成長速度會遠超只看教程的同期學習者。4. 別再做練習題了以項目為主線的學習路徑設(shè)計4.1 練習項目的四個選擇標準有人問我AI 時代還需要刷題和做教程練習嗎我的答案是傳統(tǒng)練習題可以做但絕不能作為主糧。教程練習的典型問題是它已經(jīng)有人替你定義好了問題和答案而 AI 時代最稀缺的恰恰是自己定義問題的能力。我建議你盡快切換到“以項目為主線”的學習路徑但選項目要有標準。我平時幫團隊新人選題基本看四點你能說清楚它的輸入和輸出是什么。它包含至少一個你之前沒寫過的環(huán)節(jié)。它的規(guī)模小到能在一周內(nèi)完成閉環(huán)。它帶有現(xiàn)實約束比如數(shù)據(jù)量不能太大、響應時間要夠快、多人使用不能出錯。拿第四條舉例很多業(yè)余項目問題是場景太虛。你做一個“待辦事項應用”從來沒有真實用戶就不會遇到性能、并發(fā)、權(quán)限這些工程問題。一旦加上“假設(shè)有一百個人同時用”的約束你立刻就發(fā)現(xiàn)自己對很多東西一無所知了。真實的約束才是學習最好的老師。4.2 模仿—改造—原創(chuàng)三階進階曲線我拿一個完全虛構(gòu)的“會議紀要自動整理工具”來演示這條路徑。第一階段是模仿。你可以讓 AI 給你一段“把錄音轉(zhuǎn)文字并按說話人分組”的參考代碼然后逐行讀、逐段問確保自己明白每一步做了什么。這里的關(guān)鍵是別滿足于“看懂大概”要能合上 AI 自己復述一遍設(shè)計思路。第二階段是改造。把需求換掉一個關(guān)鍵變量比如原來的工具只支持英文音頻現(xiàn)在要求支持中英文混排你動手去改數(shù)據(jù)結(jié)構(gòu)、調(diào)整算法。改造的過程一定會碰壁而碰壁之后的排查過程才是最有效的學習。第三階段是原創(chuàng)。給自己定一個有挑戰(zhàn)但邊界明確的小題目完全不依賴現(xiàn)成教程。比如“做一個局域網(wǎng)里輕量的文件同步工具”需求很簡單但如果動手做起來就會涉及文件監(jiān)聽、沖突解決、增量傳輸、斷點續(xù)傳等一系列沒有標準答案的問題。你不得不自己設(shè)計方案、權(quán)衡取舍然后借助 AI 驗證思路。這個過程做完一遍比看十篇教程都有用。我見過不少學習效果好的人不是智商有多高而是很早就走上“模仿—改造—原創(chuàng)”這條串聯(lián)路徑并且每一個階段都刻意留出“做不出來”的緩沖時間。學習不是看會不會而是看你卡住之后有沒有一套解題和檢索的方法。5. 行業(yè)評價方式變了代碼評審成了新的能力標尺5.1 代碼評審現(xiàn)場發(fā)生的真實變化以前評審代碼大家會看代碼風格、有沒有注釋、邏輯是否清晰?,F(xiàn)在代碼風格有 AI 幫你整理注釋也越來越像模板評審現(xiàn)場真正討論的話題已經(jīng)變成“你為什么采納這段 AI 生成代碼它有哪些前提條件出問題時怎么辦”我有一次旁聽某團隊的評審開發(fā)者把一段 AI 生成的對外接口代碼貼出來第一輪就被人追問了一個問題這個接口在調(diào)用方超時重試的情況下會不會重復扣費最后查到生成代碼里確實沒有做冪等處理。這個場景很有代表性。代碼生成工具把寫代碼的體力活消滅了需要人來承擔的“解釋責任”反而浮出水面。如果你想在團隊里被認可不再取決于你提交了多少行代碼而是取決于你能不能講清楚一段代碼的設(shè)計邏輯和邊界風險。這其實就是一種高級的學習方式因為你隨時要面對質(zhì)疑所以你必須對自己使用的代碼有更深層的理解。平時練習時我建議你也給自己加一個步驟——每寫完一個功能在代碼旁邊寫幾行“設(shè)計說明”和“風險點”這個習慣很快會鍛煉出工程判斷力。5.2 從同行那里觀察到的幾種高杠桿學習法我周圍有好幾個學習效率很高的開發(fā)者他們的做法并不神秘反而很樸素值得拿出來分享。有人堅持“每周 AI 實驗日”固定抽出一個下午用來做工具實驗試著讓 AI 完成一個平時沒做過的小任務(wù)然后復盤它的不足。這個習慣不追求產(chǎn)出只追求探索長期積累下來對工具的邊界理解非常深。有人用“兩遍學習法”第一遍完全手工實現(xiàn)核心邏輯強迫自己理解每一步第二遍用 AI 重做同一功能然后逐段對比兩版代碼的差異。這個對比過程可以讓你清晰地看到“哪些地方我寫得啰嗦”“哪些地方 AI 做得更嚴謹”學習效果比我見過的任何單方面看教程都要扎實。還有人推動一種內(nèi)部約定凡是 AI 生成的代碼必須附帶“驗收備注”說明你審查過哪幾個風險點、為什么確認可合并。這個約定最初被嫌麻煩但執(zhí)行一段時間后團隊的線上事故明顯減少了。原因很簡單它強制每一位成員在提交之前真正過了一遍腦子。這些做法有一點是共通的它們都要求你把 AI 的使用過程轉(zhuǎn)化成可匯報、可復盤、可評審的對象而不是一個人偷偷生成一堆代碼然后祈禱它能跑。學習方式的改變最終會反映在協(xié)作方式的改變上。6. 持續(xù)學習中我反復用到的復盤習慣與避坑提醒6.1 一周復盤模板記錄 AI 幫不了你的地方學習軟件開發(fā)和學習任何復雜技能一樣最大的敵人不是學不會而是不知道自己哪里沒學會。AI 會放大這個問題因為它可能幫你把不會的部分悄悄補全了讓你誤以為自己什么都會。我給自己定了一個很輕量的每周復盤模板一共三件事這周 AI 幫我完成了什么這周 AI 沒幫我完成什么這周我憑借自己的判斷發(fā)現(xiàn)了哪幾個 AI 沒發(fā)現(xiàn)的問題第一個問題幫助你看到工具的杠桿第二個問題幫你看清工具的邊界第三個問題其實在衡量你自己的成長。如果連續(xù)幾周的答案里第三件事都是空白那說明學習沒有真正發(fā)生。復盤不需要寫長文幾句話就夠關(guān)鍵是長期堅持。這種習慣比收藏一堆學習資料管用得多。6.2 幾條避坑建議別學偏了方向最后列幾條我見過很多次的學習彎路寫給正在摸索的朋友。別沉迷“提示詞大全”。提示詞技巧是快速入門的輔助工具但不是核心競爭力。同樣一段需求能理解業(yè)務(wù)本質(zhì)的人無論用什么提示詞都能拿到不錯的候選方案不懂業(yè)務(wù)的人背再多模板也問不出關(guān)鍵問題。別跳過基礎(chǔ)知識。數(shù)據(jù)結(jié)構(gòu)、網(wǎng)絡(luò)協(xié)議、操作系統(tǒng)常識這些東西可能不會天天直接用到但在排查性能問題和設(shè)計系統(tǒng)時它們決定你的天花板。AI 能幫你查到零散的知識卻幫不了你建立底層模型。別只學“生成”不學“評審”。現(xiàn)在很多課程都在教怎么用 AI 生成代碼但工程里更重要的其實是評審和驗證的能力。你如果能指出別人代碼里的三個風險點比你能生成三個模塊更值錢。別怕做慢的小項目。我見過有人半年沒寫完一個完整功能但一直在研究各種工具技巧最后什么都沒有落地。恰恰是那些笨拙、有點幼稚的小項目逼你面對真實問題逼你把零散知識串成體系。AI 時代的學習節(jié)奏和過去確實很不一樣但有一點沒變軟件開發(fā)最終是關(guān)于判斷力的工作。代碼可以生成方案、取舍、審查、兜底這些判斷只能靠你自己練出來。我個人這兩年最深的體會是評估一個開發(fā)者有沒有成長不再看他寫了多少行代碼而是看他能不能在一段 AI 生成的代碼里指出三個風險點。學習方式變了值得學習的東西也變了但通往可靠工程師的路依然是踏實動手、認真復盤這兩條腿走出來的。