幾年前,我曾寫過關於我對一次性原型開發的熱愛;那些純粹為了將想法從腦中取出並轉化為具體事物的概念驗證。當時,我最大的瓶頸是我自己;建置專案、串接無聊的細節所需的時間,以及到達可以實際測試有趣部分的階段。快轉到現在,那個瓶頸幾乎消失了。

我一直有點猶豫要寫這件事。我已經分享了一些關於 AI 及其在我的工作流程中定位的謹慎想法,我仍然堅持我說過的所有話。我仍然認為這個產業正在實時摸索,我仍然認為謹慎是值得的。但謹慎不代表盲目,而誠實的說,AI 已經改變了我從「我不知道…」到「哦,它奏效了」的速度。

如果你最近看過我的 GitHub,你會注意到一系列新儲存庫的出現。Sakoa,一個我從頭開始設計的漸進式系統語言,包含效果系統、三種記憶體模式,以及一個具有多個後端的 MIR。Kato,一個介於 JSON、TOML 和 YAML 之間的標記語言,但明確設計為對人類和代理程式都友好。Seal,一個安靜地透過將機密資訊儲存在作業系統原生憑證存放區來取代 .env 檔案的小型 CLI。Karabiner,一個以 iOS 為優先的代理程式原生訊息應用程式。Plim,一個受 Notion 啟發、可嵌入的網頁區塊編輯器,具有框架無關的核心和 React 綁定。還有一些還沒準備好公開的。

幾年前,這個列表會是三個帶有 README 的儲存庫、兩個被放棄的分支,以及一個我會暗自驕傲的可用原型。現在呢?原型存在了。它們運行了。其中一些有測試。有幾個開始看起來像真正的專案。雖然並非所有都會變成嚴肅的事情(這也是重點所在),但能夠實際嘗試一個想法,而不是僅僅談論它,這點非常令人滿意。

沒有人真正警告過我的是,AI 在多大程度上改變了工程工作的形態,而不僅僅是速度。當我不再是那個輸入每一行程式碼的人時,我被迫以不同的方式思考。我正在思考邊界、合約,以及各個部分如何組合在一起。我正在撰寫描述系統整體性的提示和規格,在系統存在之前。

這個轉變聽起來很小,但它已經悄悄地產生了變革。我正在以更抽象的層級進行規劃,在解決問題之前先構建問題,並且我在委派方面明顯變得更好;無論是委派給代理程式還是委派給人。結果發現,「精確描述成功是什麼樣子,以至於初級工程師(或模型)可以在你不在場的情況下採取行動」這項技能,在兩個方向上都是相同的。分享願景、分解工作、預測可能出錯的地方;這些是我被迫更刻意地鍛鍊的肌肉,而我因此變得更好。

我一直在鬆散地追蹤這件事,主要是出於好奇。根據我自己的日常工程任務(以典型工作的 PR 時間粗略衡量),我的平均速度比代理程式成為我工作流程中有意義的一部分之前快了約 4 倍。有些日子更快,有些日子更慢,有些日子代理程式會做一些令人愉快的奇怪事情,花了我一個小時來撤銷(我會樂意將其計入平均值)。

但這個數字低估了更有趣的影響:我能夠承擔的工作類型已經改變了。以前我會將其歸類為「好主意,沒時間」的事情,現在可以在一下午內完成。我以前會畏縮不前的重構現在可以完成。嘗試新事物的成本已經足夠低,以至於我會直接嘗試那些我原本會在文件中爭論的事情。

並非全是好處。同樣的速度使我變得高效,也意味著我輸入的程式碼比以前少了,我注意到我必須刻意保持自己的技術敏銳度。如果我放任不管,工具會樂意為我做所有事情;而這並不是我想要的交易。我仍然想知道我所做的事情實際上是如何運作的。

所以我開始刻意騰出時間來處理手動的部分。親手實現某個端到端的東西。閱讀原始碼而不是要求摘要。坐在調試器前而不是將堆疊追蹤貼到聊天中。這比較慢,有時令人沮喪,而且可能很有必要;無論是為了我自己的理智,還是因為 AI 不足的時刻仍然需要一個真正知道自己在做什麼的工程師。

這方面的另一面則更令人愉快:有了新的速度,意外地很容易騰出時間進行探索、學習和原型開發。我過去花在專案中不可避免的中間部分的時間,現在可以自由地用來玩弄新想法、深入研究我不完全理解的事物,或者僅僅是為了好玩而構建一些奇怪的東西。這是一筆我樂於做出的交易。

這個新的步調也體現在我的日常工作中。在不透露太多細節的情況下(一旦獲得適當的批准,我會為正式的寫作保留),速度的提升讓我能夠在職位的幾個不同領域產生影響,而這些領域我以前沒有足夠的餘力去觸及:

這兩者都是我幾年前可能會有想法但卻沒有足夠的空間在核心工作之外實際交付的事情。速度的變化不僅加快了我已經在做的事情;它擴大了我總體上能夠做的事情的範圍。

該領域的其他幾位工程師也一直在撰寫類似的轉變,閱讀這些內容令人欣慰(且有幫助)。我特別推薦兩位:

我還會提到 Simon Willison 的超能力文章,更廣泛地探討編碼代理程式在實際應用中的能力;如果你還沒讀過,非常值得一讀。

我仍然不認為 AI 是魔法,我仍然對大局感到謹慎;環境、財務和社會問題都沒有消失。但對我來說,現在,日常的現實是我可以比以前移動得更快、思考得更廣、交付得更多。而這確實很有趣。

我沒有一個簡潔的結論來結束這篇文章。我只想繼續原型開發,在需要時繼續親自動手,並繼續關注哪些在變化,哪些沒有。隨著事態的持續發展,我會有更多想法。