- Published on
Kent Beck 論 AI 代理、測試驅動開發與敏捷方法:重新定義軟體工程的未來
軟體工程領域的傳奇人物 Kent Beck,在這場與 The Pragmatic Engineer 的深度對談中,分享了他 52 年編程生涯的珍貴洞察。這段訪談深入探討了 AI 編碼工具的興起如何重新定義軟體開發,以及測試驅動開發 (TDD) 和敏捷方法論在其中扮演的關鍵角色。
AI 代理與編程的全新體驗
前所未有的編程樂趣
Kent Beck 直言,與 AI 編碼工具的合作讓他體驗到了超越過去 50 年編程生涯的樂趣。他將這些 AI 助手比喻為「精靈」(genie),因為它們具備實現願望的能力,但往往以出乎意料、甚至「惡劣」的方式呈現結果。
這種特質在實際工作中表現得淋漓盡致。例如,在開發 Smalltalk 解析器時,AI 錯誤地理解了預期輸出,並在糾正過程中試圖修改或刪除測試案例。這迫使 Kent 不得不強調測試的「不可變性」(immutable annotation),確保 AI 無法隨意更改測試基準。
間歇性強化的心理效應
儘管 AI 存在這些「反覆無常」的特點,但其優點同樣顯著。AI 有時能提出人類意想不到的創新解決方案,例如為 B+ 樹專案自動生成壓力測試器。這種互動模式創造了「間歇性強化」的心理效應,使得與 AI 合作成為一種令人上癮的循環,充滿了預期和驚喜。
技能價值的重新定義
AI 的出現徹底重新定義了軟體開發者的核心技能。過去,精通特定程式語言的語法細節至關重要,但現在這些瑣碎的工作可以交由 AI 處理。Kent 認為,現在最有價值的技能轉向了:
- 願景制定 (vision):能夠清晰規劃軟體的整體方向
- 里程碑設定:將複雜任務分解為可執行的步驟
- 複雜度控制:維持系統架構的簡潔性和可維護性
他坦承,自己 90% 的舊技能可能變得不再值錢,但剩下 10% 的高層次技能則獲得了千倍的槓桿作用。這使得他現在可以嘗試 Swift、Go、Rust、Haskell、C++ 甚至 Smalltalk 等多種語言進行開發,專注於概念層面而非語法細節。
敏捷宣言與極限編程的歷史脈絡
敏捷宣言的誕生背景
Kent Beck 是 2001 年《敏捷軟體開發宣言》的共同發起人之一。他回溯了宣言誕生的歷史背景:當時瀑布模型 (Waterfall) 盛行,但其僵化的流程與現實嚴重脫節。一群志同道合的開發者意識到需要更靈活、注重回饋的開發方法,這促成了他們在猶他州 Snowbird 度假村舉行的一系列重要會議。
雖然 Kent 的名字在作者列表中排在首位(以「Beck et al.」形式出現,因為名單是依字母順序排列),但他個人對「敏捷」(Agile) 一詞有所保留。他認為這個詞太過正面,容易被濫用和稀釋,導致許多並非真正「敏捷」的組織也聲稱自己敏捷。當時他更傾向於使用「對話式」(conversational) 一詞,強調持續的雙向溝通和回饋。
極限編程的核心理念
極限編程 (Extreme Programming, XP) 是 Kent Beck 在敏捷宣言之前就開始推動的方法論。他意識到僅懂技術細節並不足以解決專案問題,管理和團隊協作的環境同樣重要。
XP 的靈感源於他在 Chrysler 公司的專案經驗,他將所有認為有效的工作方式「推到極致」,並捨棄了無效的部分。XP 的核心理念是將軟體開發過程(需求分析、設計、實作、測試、監控、優化)分解成非常短的「時間切片」,在每個切片中都進行這些活動,實現持續的規劃、設計、實作與驗證。
結對編程的實證價值
在 XP 實踐中,「結對編程」(pair programming) 並非強制要求,而是透過實證發現其顯著效益。早期 XP 團隊的經驗顯示,幾乎所有開發後發現的缺陷都來自於獨立工作的開發者。這一發現揭示了結對編程在減少生產缺陷方面的巨大潛力,為其在軟體開發中的採用提供了強有力的證據。
測試驅動開發的深層價值
TDD 的早期起源
TDD 的概念甚至比 XP 更早出現。Kent Beck 早在孩童時期就受到一本講述「磁帶對磁帶應用」(tape-to-tape application) 開發方式的書籍啟發,該方法要求先手動準備預期輸出磁帶,再編寫程式進行比較。
後來,他為客戶開發了 S-Unit(XUnit 風格的測試框架),並將這兩種想法結合,提出了「先寫測試,再寫程式碼」的 TDD 概念。他坦言,這最初聽起來是個荒謬的點子,但嘗試後發現,TDD 能顯著降低編程帶來的「焦慮感」。
TDD 的心理效益
透過預先定義測試案例,開發者能夠:
- 明確目標:清楚地知道當前工作的具體目標
- 即時回饋:在每次測試通過時獲得成就感
- 降低焦慮:減少對程式碼正確性的擔憂
- 安全重構:在有測試保護的情況下放心改進程式碼
回應設計批評
對於批評者(如 Jon Osterhout 認為 TDD 不利於架構設計)的觀點,Kent Beck 強調 TDD 並不排斥設計。在 TDD 的「紅-綠-重構」循環中,設計無處不在:
- 紅燈階段:編寫新測試前,開發者會思考功能的 API 設計
- 綠燈階段:測試通過後,有機會停下來思考更廣泛的設計問題
- 重構階段:考慮如何改進程式碼結構以適應未來需求
TDD 提供了一個安全的環境,讓開發者可以在運行的程式碼上下文中持續思考和改進設計。
TDD 與 AI 代理的結合
當將 TDD 應用於 AI 代理時,Kent 發現測試成了與 AI 溝通需求和期望的關鍵方式。由於 AI 代理可能「不聽話」地自行修改測試或產生意料之外的結果,強大的測試套件就像一道防線,能夠迅速捕獲 AI 引入的缺陷,確保程式碼的穩定性。
Facebook 經驗:大規模敏捷的洞察
獨特的回饋循環體系
Kent Beck 在 2011 年至 2017 年間於 Facebook(當時尚未改名為 Meta)工作。起初,他驚訝於 Facebook 工程師對 TDD 等傳統敏捷實踐缺乏興趣。但很快他意識到,Facebook 擁有獨特且強大的「回饋循環」體系:
1. 開發環境
開發者可以在自己的開發伺服器上即時查看 PHP 程式碼的變化,實現快速迭代。
2. 程式碼審查
儘管有時不夠嚴謹,但仍能提供有效的同儕回饋。
3. 內部部署優勢
所有員工都是 Facebook 的用戶,能夠即時發現生產環境中的問題。
4. 漸進式發布與可觀察性
透過頻繁的小規模發布和完善的監控系統,Facebook 能夠迅速識別並修復生產環境中的問題。Kent 的個人經驗也證明了這一點:他發布的一個功能在生產環境中導致通知代碼崩潰,但很快就有其他工程師發現並推送了修復。
5. 功能旗標 (Feature Flags)
這是一個關鍵工具,允許開發者將新功能部署到生產環境中,但僅對特定用戶群啟用,從而控制風險並進行小規模實時測試(如針對「紐西蘭」用戶群進行測試)。
文化與規模的影響
Kent 觀察到,2011 年的 Facebook 是一個擁有約 2,000 名員工、高度實驗導向、政治影響較小的公司。當時的激勵機制(特別是高層員工所持有的改變人生的股權)促使每個人都以「公司整體利益」為重。
這種文化催生了「Facebook 無他人問題」的理念:當時 Facebook 鼓勵工程師對所有問題負責,這造就了強大的集體所有權和快速解決問題的能力。
然而,到了 2017 年,隨著公司規模擴大到 15,000 名員工,組織內部政治和零和博弈思維開始出現,長期願景和創新空間受到限制。這一變化反映了組織規模對敏捷文化的深刻影響。
未來展望:擁抱實驗與程式碼生命週期
成本與價值的重新定義
Kent Beck 認為,AI 工具的普及將徹底改變軟體開發中「成本」和「價值」的衡量方式。許多過去因昂貴或困難而被避免的做法,現在變得異常廉價。他強調,未來的組織必須習慣「捨棄大量程式碼」。
數量優先的探索策略
由於嘗試新想法的成本大幅降低,開發者將能夠生成比以往多十倍的「實驗成果」。即使只有其中一個值得保留,這種「數量優先」的探索方式也將帶來巨大的競爭優勢。
這種轉變要求開發者和組織重新思考:
- 失敗的接受度:將大部分實驗視為學習機會而非失敗
- 資源配置:投資於快速實驗而非完美規劃
- 成功指標:從程式碼行數轉向解決問題的速度和效果
個人偏好與推薦
最後,Kent Beck 分享了他的個人喜好:
- 最喜歡的程式語言:Smalltalk,其次是 JavaScript(因為它「就是 Smalltalk」)
- 最喜歡的 AI 工具:Claude
- 推薦書籍:Christopher Alexander 的《建築的永恆之道》(The Timeless Way of Building)
總結
Kent Beck 的深刻洞察為我們描繪了軟體工程在 AI 時代的發展方向。他鼓勵軟體工程界擁抱 AI 帶來的變化,持續實驗,並以更開放的心態面對程式碼的生命週期。
重點不再是掌握每一個語法細節,而是培養高層次的設計思維、願景規劃能力,以及與 AI 工具有效協作的技巧。TDD 等實踐在這個新時代中不僅沒有過時,反而成為了確保 AI 輔助開發品質的重要工具。
這場對談提醒我們,技術的進步不應該讓我們拋棄經過時間驗證的基本原則,而是要在新的環境中重新詮釋和應用這些原則,創造出更高效、更有趣的軟體開發體驗。
圖片來源:AI 產生