最近讀到兩篇談 AI 寫程式的文章,乍看好像在吵架,細看才發現實在是同一件事的兩面,頗具參考性:

核心互補性

Jason Gorman 的文章(Codemanship)強調:

  • AI 不會取代程式設計師
  • 程式設計的難點在於將人類思維轉化為精確的計算思維
  • LLM 說穿了只是在做模式匹配,並不是真的理解你的程式碼

Steve Krenzel 的文章(Bits of Logic)則說明:

  • AI agent 得有夠水準的程式碼環境才跑得動
  • 那些好習慣(測試、型別、文件)從「有最好」變成「沒有不行」
  • AI 會「把程式碼庫最糟糕的傾向放大」

三個層次的互補

1. 戰略層面的一致性

兩位作者其實都同意一件事:人類程式設計師還是主角

  • Gorman:「當事情重要時,軟體開發人員會掌舵」
  • Krenzel:「agent 只有在你為它們創造的環境裡才有效」

所以這不是「AI vs 人類」的零和遊戲啦,而是人類定義規則,AI 在規則內執行

2. 技術層面的呼應

Gorman 點出 LLM 的根本限制:

  • 不理解程式碼,只做統計預測
  • 同一個提示丟進去,吐出來的結果還不一樣
  • 終究還是得靠人類驗證輸出

而 Krenzel 開的藥方,剛好就是衝著這些限制來的:

  • 100% 程式碼覆蓋率:逼 AI 用可執行的範例證明每一行
  • 強型別系統:縮小 AI 的搜尋空間,讓非法狀態根本寫不出來
  • 快速回饋循環:把 AI「綁在短繩上」,小改動→檢查→修復

講白了就是:既然 AI 不理解程式碼,那我們就用機械化的護欄把它框住

3. 實踐層面的轉化

Gorman 的預測蠻悲觀的:

「LLM 實際上讓大多數團隊變慢,軟體更不可靠、更難維護」

Krenzel 則給了一條避開這個坑的路:

  • 不是放 AI 自由發揮,而是建立嚴格的自動化護欄
  • 不是期待 AI 看懂商業邏輯,而是透過型別和測試把邏輯外化出來
  • 不是一口氣生出一大坨程式碼,而是快速迭代、持續驗證

深層洞察:AI 作為「放大器」

這兩篇文章其實都指向同一個關鍵:

AI 不是替代品,而是放大器

  • 如果你的程式碼庫一團亂、測試不夠、型別鬆散 → AI 會把這些問題放大(Gorman 的警告)
  • 如果你的程式碼庫結構漂亮、測試完整、型別嚴格 → AI 會把生產力放大(Krenzel 的承諾)

我想這也解釋了為什麼:

  1. Gorman 看到的失敗案例:團隊想用 AI 來補技術債,結果債務反而加倍
  2. Krenzel 看到的成功案例:團隊先乖乖把「技術稅」繳了,再用 AI 領紅利

對實踐的啟示

兩篇合起來看,大概可以拼出一套完整的策略:

短期(現在)

  1. 先別急著裁程式設計師(Gorman 的建議)
  2. 把錢投在程式碼品質的基礎建設上(Krenzel 的路線圖)
    • 建立 100% 測試覆蓋率
    • 遷移到強型別語言
    • 凡是能自動化的檢查,通通自動化

中期(1-3 年)

  1. 把 AI 當成「需要盯著的實習生」
    • 重複性的雜事可以丟給它
    • 但你得給明確的規則和即時回饋
    • 架構決策還是別交給它

長期(3+ 年)

  1. 重新定義「程式設計師」這個角色
    • 從「寫程式碼」轉向「設計系統和護欄」
    • 從「實作功能」轉向「定義不變量和約束」
    • 比較像「系統架構師 + 品質工程師」的綜合體吧

一個有趣的悖論

Krenzel 那篇文章的標題是《AI is forcing us to write good code》,但說真的:

AI 根本沒逼任何人做任何事

真正發生的是:

  • 那些本來就想把程式碼寫好的團隊,發現 AI 剛好給了他們一個超好的理由去說服管理層掏錢
  • 那些不想在品質上投資的團隊,則發現 AI 把事情搞得更糟了

這跟 Gorman 的觀察其實完全吻合:AI 不會改變基本面,只會加速本來就在跑的趨勢

結論

所以這兩篇文章一點都不矛盾,反而像是同一枚硬幣的兩面:

  • Gorman 講的是「為什麼」:為什麼 AI 不會取代程式設計師(因為難的從來不是語法)
  • Krenzel 講的是「怎麼做」:怎麼讓 AI 變成真的好用的工具(靠的是建立嚴格的環境)

兩篇湊在一起,倒是描繪出一個還算清楚的未來:更多的程式設計師,寫更好的程式碼,把繁瑣的雜活丟給 AI

只是這個未來不會自己走過來——它需要你有意識地投資,還要一點紀律。想通這件事的團隊會活得很好,沒想通的大概就會繼續掙扎吧。

那麼,你的團隊現在卡在這條光譜的哪一段呢?哪些「技術稅」最值得你先繳?我自己是覺得,測試覆蓋率大概是 CP 值最高的那一筆… :-)