The Tower Keeps Rising

Armin Ronacher

高塔仍在不斷升高

原文由 Armin Ronacher 發布,訂閱此部落格

我覺得有些 vibecoded 軟體的改動有點隨機且難以預料。這讓我想起布勒哲爾的《巴別塔》,畫中呈現的巴別塔本身就已經相當混亂。這個故事通常被說成是關於驕傲與野心,以及人類為何不再說同一種語言,但它同時也是一個關於促成技術進步的團結的故事。

文本從一項技術升級開始:

他們彼此說:來吧,我們來做磚,把磚燒透。他們就以磚為石,以石漆為灰泥。

他們將它用在一項文明工程上:

來吧,讓我們為自己建造一座城和一座塔,塔頂通天

但當上帝審視局勢時,讓祂在意的並不是磚塊:

看哪,百姓是一樣的,言語也是一樣的,[…] 如今他們所謀要做的,就沒有什麼能攔阻他們。1

他們力量的來源是協作。他們共享一種語言,憑藉這種共同的語言,他們能將各自的工作匯聚成單憑一人無法完成的成果。上帝並沒有奪走他們的磚塊,也沒有奪走他們製磚的知識。祂奪走的是他們彼此理解的能力,於是建造便停了下來。

有一個很吸引人的想法,認為 AI 輔助程式設計意味著更好的工具,讓我們得以打造更宏大的軟體。在個人層面上,這當然是事實,無庸置疑,擁有 agent 的開發者在修改程式碼庫方面的能力將會大幅提升。但大型軟體專案從來不只是受限於個人產出程式碼的速度,更受限於人們能否協調彼此對正在修改的系統的理解。

軟體專案的共同語言不是英文或 Python,而是對於其概念的含義、邊界在哪裡、哪些不變量是重要的、誰負責什麼,以及系統為何會是現在這種樣貌的共同理解。這種語言很少被完整地寫在某一個地方。它一部分存在於文件與程式碼中,但也存在於程式碼審查、對話、爭論,以及必須向他人解釋一項改動的經驗裡。

在有 agent 之前,這種共同理解有一部分是靠摩擦來維持的。如果我想修改你的儲存層,我通常得去讀你的程式碼、向你提問,甚至可能還要與另一個依賴該服務的團隊協調。這很慢,而這種緩慢有很大一部分是浪費,但並非全部。其中一部分是讓你的理解變成我的理解的過程,也是讓我們兩人發現彼此是否仍對系統的運作方式有共識的過程。這種摩擦讓人們得以同步。

Agent 消除了大部分這種摩擦。我可以請 agent 加上 OAuth,你可以請它加上快取,另一個人則可以請它從頭重建資料庫並把 UI 變成粉紅色。每一個改動單獨看來都可能是合理的。程式碼可以編譯,測試可以通過,說明也可以隨需產生。我們當中沒有人一定得跟其他人對話,甚至不需要去掌握那個以往會迫使我們必須學習的共享模型中的部分。

正如我之前多次說過的:agent 不會感到痛苦,只有人才會。Agent 現在讓我們能在以往需要仰賴他人的系統區塊中行動,也能在那些若由人來做早就會群起反抗的程式碼庫中動手。

當我觀察一些規模化了的 vibecoded 專案時,會發現程式碼庫變成巴別塔,並不是因為沒人能溝通,而是因為沒人需要溝通。每一位開發者都有一個不知疲倦的翻譯,能解釋塔的某個角落,並按照他們的要求做出任何局部的修改。改動持續不斷地被合併進來,即使那個能讓人們共同推敲這些改動的架構語言已經消失了。

但這並不是聖經裡的故事。在巴別塔,失去共同語言讓建造停了下來;而在 AI 輔助的工程中,即使共享的理解已經崩解,建造仍能繼續。正是因為沒有立即的失敗,才讓這件事顯得奇特而有點令人迷失方向。高塔並沒有倒塌,所以我們沒有察覺自己失去了什麼。它只是不斷地往上蓋。

本文章由 muse-spark-1.2-contributor 進行翻譯

留言