建之法》| 第四章兩人合作:代碼規(guī)范不是“表面文章“,AI結(jié)對編程怎么“知人善任“)
本文適合和同事代碼風(fēng)格打架的開發(fā)者、從不做代碼復(fù)審的團(tuán)隊、想嘗試AI結(jié)對編程但不知道怎么配合的同學(xué)。你將收獲代碼風(fēng)格與設(shè)計規(guī)范的核心要點、代碼復(fù)審的3種形式與核查清單、結(jié)對編程的駕駛員/領(lǐng)航員模型、AI結(jié)對編程的知人善任策略、兩人合作的5個階段。寫在前面前兩章聚焦個人——個人技術(shù)、個人成長。從第四章開始視角轉(zhuǎn)向人與人的最小協(xié)作單位兩個人。為什么是兩個人因為合作的最小單位不是團(tuán)隊而是兩個人。兩個人都合作不好團(tuán)隊協(xié)作就是空談。第四版在這一章新增了4.6 與AI結(jié)對編程——知人善任這是前三版沒有的也是這一版最讓我期待的部分。01 | 代碼規(guī)范合作的前提是說同一種語言兩個人合作寫代碼第一步不是分工而是統(tǒng)一規(guī)范。否則你用Tab我空格、你駝峰命名我下劃線合并代碼就是災(zāi)難。1.1 代碼風(fēng)格規(guī)范書中給出的原則只有三個詞簡明、易讀、無二義性。具體規(guī)定覆蓋了這些維度維度規(guī)范要點我的踩坑經(jīng)歷縮進(jìn)4個空格不用TabTab在不同編輯器顯示寬度不同合并后代碼跳來跳去行寬限制100字符超長行在小屏幕上要左右滾code review時根本看不全括號復(fù)雜條件表達(dá)式用括號標(biāo)明優(yōu)先級a b || c 誰優(yōu)先不加括號就是埋雷斷行每個{和}獨占一行壓縮在一行看起來省空間但debug時找不到括號對應(yīng)關(guān)系命名Pascal形式類名/ Camel形式變量一個項目里混用兩種風(fēng)格閱讀體驗災(zāi)難級注釋隨代碼更新誤導(dǎo)性注釋比沒有更糟改了代碼忘了改注釋同事按舊注釋理解直接踩坑1.2 代碼設(shè)計規(guī)范風(fēng)格規(guī)范管的是怎么寫設(shè)計規(guī)范管的是怎么設(shè)計函數(shù)只做一件事并且要做好goto有助于邏輯清晰時可以用不必視如洪水猛獸錯誤處理Debug版驗證所有參數(shù)正式版驗證外部傳入?yún)?shù)斷言用于肯定如此的情況錯誤處理代碼用于可能發(fā)生的情況類僅在必要時使用避免過度封裝我的實戰(zhàn)感悟以前覺得代碼規(guī)范是表面文章——代碼能跑就行規(guī)范不規(guī)范的有什么關(guān)系直到有一次接手離職同事的代碼沒有注釋、命名隨意、一個函數(shù)500行、Tab和空格混用……我花了三天才理清邏輯而如果他有基本的規(guī)范意識可能只需要半天。代碼規(guī)范不是為了好看而是為了降低協(xié)作成本。你自己寫的代碼自己能看懂但別人呢三個月后的你呢一句話提煉代碼規(guī)范的本質(zhì)不是約束自己而是善待他人。你寫的每一行代碼都是別人或三個月后的自己要讀的文檔。02 | 代碼復(fù)審看代碼是否在規(guī)范框架內(nèi)正確解決了問題2.1 三種復(fù)審形式書中定義了代碼復(fù)審的三種形式形式誰vs誰特點適用場景自我復(fù)審自己vs自己最方便但最不可靠——人對自己總是過于自信日常自查同伴復(fù)審復(fù)審者vs開發(fā)者簡便易行最推薦的常規(guī)方式日常代碼提交團(tuán)隊復(fù)審團(tuán)隊vs開發(fā)者覆蓋率高但效率低全體到場關(guān)鍵代碼、不再更新的代碼2.2 復(fù)審的目的不只是找bug而是6個目標(biāo)1.找出代碼錯誤編碼錯誤、不符合規(guī)范2.發(fā)現(xiàn)邏輯錯誤3.發(fā)現(xiàn)算法錯誤4.發(fā)現(xiàn)潛在的錯誤和回歸性錯誤5.發(fā)現(xiàn)可能需要改進(jìn)的地方6.傳授經(jīng)驗教育開發(fā)人員第6點經(jīng)常被忽略。代碼復(fù)審不只是挑錯更是團(tuán)隊知識傳遞的通道。新人通過看老手的復(fù)審意見能快速學(xué)到什么是好代碼。2.3 復(fù)審后做什么書中給出了明確的三步處理1.更正明顯的錯誤——當(dāng)場改2.記錄無法很快更正的錯誤——建issue跟蹤3.把錯誤記入我常犯的錯誤表——作為以后自我復(fù)審的第一步第3步太精妙了。每個人維護(hù)一份常犯錯誤清單每次寫完代碼先自查這個清單等于給自己加了一層個性化防護(hù)。我的踩坑案例我們團(tuán)隊以前沒有代碼復(fù)審流程每個人寫完直接提交。有一次兩個同事同時改了同一個配置文件的同一個位置合并后誰都沒發(fā)現(xiàn)上線后系統(tǒng)直接崩了。如果哪怕有一個人做一次同伴復(fù)審這種問題5秒鐘就能發(fā)現(xiàn)。代碼復(fù)審不是額外負(fù)擔(dān)而是保險。它花5分鐘省5小時。一句話提煉代碼復(fù)審不是審判而是互助。它幫你抓bug、傳經(jīng)驗、建規(guī)范——一箭三雕。03 | 結(jié)對編程兩個人一臺電腦3.1 兩個角色結(jié)對編程的核心是兩個角色的分工角色職責(zé)類比駕駛員Driver控制鍵盤寫代碼專注實現(xiàn)細(xì)節(jié)開車的人領(lǐng)航員Navigator審視全局提醒方向發(fā)現(xiàn)潛在問題副駕駛看導(dǎo)航關(guān)鍵點兩個角色平等互補(bǔ)不是主從關(guān)系。而且要定期互換——你開一段我開一段。3.2 結(jié)對編程的好處書中從三個層次總結(jié)· 開發(fā)層次更好的設(shè)計質(zhì)量和代碼質(zhì)量兩人解決問題的能力更強(qiáng)· 個人層次更多信心高產(chǎn)出帶來高滿足感· 企業(yè)管理層次有效交流相互學(xué)習(xí)知識傳遞更高投入產(chǎn)出比我的思考結(jié)對編程在現(xiàn)實中爭議很大。很多老板覺得兩個人干一個人的活是浪費。但我的體會是結(jié)對編程最大的價值不是寫得更快而是減少返工。兩個人一起寫設(shè)計缺陷當(dāng)場被發(fā)現(xiàn)邏輯錯誤實時被糾正省掉的不是編碼時間而是后續(xù)的調(diào)試和重構(gòu)時間。當(dāng)然不是所有任務(wù)都適合結(jié)對。探索性任務(wù)、復(fù)雜算法設(shè)計適合結(jié)對簡單CRUD、重復(fù)性工作就沒必要。一句話提煉結(jié)對編程不是兩個人干一個人的活而是一個人干兩個人的活——同時編碼復(fù)審產(chǎn)出質(zhì)量翻倍。04 | 與AI結(jié)對編程——知人善任第四版新增這是第四版新增的內(nèi)容也是這一章最前沿的部分。4.1 AI也是結(jié)對伙伴第四版將結(jié)對編程的模型擴(kuò)展到了人AI。AI可以扮演駕駛員生成代碼也可以扮演領(lǐng)航員審查代碼、提供建議。但書中強(qiáng)調(diào)了一個關(guān)鍵概念知人善任。不是所有任務(wù)都適合交給AI也不是所有AI都適合同一個任務(wù)。就像團(tuán)隊里不同人有不同特長你要知道AI的能力邊界合理分配角色。4.2 我的實戰(zhàn)體會做交付項目這一年我大量使用AI輔助編程。體會有三點第一AI適合做駕駛員的場景寫樣板代碼、生成測試用例、處理格式化任務(wù)。這些任務(wù)機(jī)械但易錯AI干得又快又好。第二AI適合做領(lǐng)航員的場景代碼審查、發(fā)現(xiàn)潛在bug、提供優(yōu)化建議。AI不替代人做決策但能幫你看到盲區(qū)。第三AI不擅長的場景理解復(fù)雜業(yè)務(wù)上下文、跨系統(tǒng)影響分析、涉及領(lǐng)域知識的判斷。這些必須人來。核心原則AI是你的副手不是你的替身。決策權(quán)永遠(yuǎn)在你手里。一句話提煉AI結(jié)對編程的關(guān)鍵是知人善任——知道AI能干什么、不能干什么把對的活交給對的伙伴。05 | 兩人合作的五個階段書中借用團(tuán)隊發(fā)展的經(jīng)典模型描述了兩人合作會經(jīng)歷的階段階段特征我的理解萌芽階段互相客氣試探邊界你說了算都可以磨合階段意見沖突風(fēng)格碰撞你這樣寫不對你才不對規(guī)范階段建立共識形成默契這次你來寫我來復(fù)審創(chuàng)造階段高效協(xié)作112不用說話就知道對方要什么解體階段合作結(jié)束各自上路項目交付各回各的如何正確給予反饋書中給出了反饋的三個層次最外層行為和后果——你這段代碼沒有處理空指針可能導(dǎo)致線上崩潰推薦中間層習(xí)慣和動機(jī)——你總是不寫異常處理是不是覺得不重要慎用最內(nèi)層本質(zhì)和固有屬性——你就是個粗心的人絕對避免好的反饋針對行為不針對人格。這條原則不只適用于代碼復(fù)審適用于所有職場溝通。一句話提煉兩人合作從客氣到?jīng)_突到默契再到創(chuàng)造是正常路徑。跳過磨合階段的假和諧走不到創(chuàng)造階段。干貨復(fù)盤本章核心概念一句話理解常見誤區(qū)代碼風(fēng)格規(guī)范簡明、易讀、無二義性能跑就行規(guī)范不重要代碼設(shè)計規(guī)范函數(shù)只做一件事錯誤處理分層設(shè)計規(guī)范是架構(gòu)師的事代碼復(fù)審看代碼是否在規(guī)范框架內(nèi)正確解決問題復(fù)審就是挑刺結(jié)對編程駕駛員領(lǐng)航員平等互補(bǔ)兩個人干一個人的活A(yù)I結(jié)對編程知人善任AI是副手不是替身AI什么都能干兩人合作5階段萌芽→磨合→規(guī)范→創(chuàng)造→解體跳過沖突追求假和諧本章最大收獲合作的最小單位是兩個人。代碼規(guī)范是合作的地基代碼復(fù)審是合作的保險結(jié)對編程是合作的極致形態(tài)。而AI時代的結(jié)對編程多了一個不知疲倦但需要知人善任的新伙伴——關(guān)鍵是想清楚AI能干什么、不能干什么決策權(quán)永遠(yuǎn)在自己手里。下篇讀第五章團(tuán)隊和流程。如果這篇筆記對你有幫助歡迎轉(zhuǎn)發(fā)給也在學(xué)軟件工程的朋友。