在取得大學學位所需的時間內,大型語言模型(LLMs)已從提供逼真的聊天回應,演變成能夠自主協調並以整個工程團隊的規模來完成任務。
在程式設計領域,過去當你遇到困難時,通常會求助於 Stack Overflow。簡單的搜尋通常會讓你找到另一位曾遭遇相同問題的程式設計師,如果幸運的話,還能找到解決方案(相關的 xkcd)。然而,自 2022 年以來,Stack Overflow 的新增貼文數量已下降了 77%。取而代之的是,開發者開始轉向 ChatGPT 等工具尋求協助,而現在,甚至出現了整個程式設計代理艦隊。
根據我的經驗,程式設計代理能做令人驚豔的事情。我曾在幾小時內建置了無數個原型,這些原型過去會因為我自身能力不足而無法完成。最近,我為個人儲物箱的拍照、索引和搜尋功能,建立了一個全端 iOS 應用程式。後端是我熟悉的領域,但 iOS 前端則不然。所以我讓代理完成了 100% 的前端工作,到了下午,我就有一個功能齊全的原型了。儘管如此,我仍然會遇到這些代理的極限。最近一次,我在為 SSL 憑證路徑新增一個可設定欄位。這項任務很平凡且定義明確,但代理卻固執地要新增一個不相關的參數。無論我如何懇求,都無法讓代理相信它實際上是錯的。
Steven Yegge 透過他名為 Gas Town 的挑釁性協調工具,提出了對程式設計代理使用的一個引人注目的願景:
Gas Town 是一個工業化的程式設計工廠,由超級智慧的機器人黑猩猩操作,當牠們高興時,牠們可以瞬間搞砸你的事情。
這聽起來很熟悉。雖然很明顯有些重大的改變正在發生,但我仍然不確定這在未來一、二十年內會如何發展。有些人認為 AI 超級智慧即將到來(無論好壞)。另一些人則認為我們將哲學上的殭屍誤認為真正的智慧,並正在加速我們自身的腦部退化。
面對不確定的未來,我試圖將我的預測建立在歷史的結果上。在電腦發展史上,碰巧「氛圍編碼」(Vibe Coding),或更具體地說「自動程式設計」(Automatic Programming),曾經被發明過。閱讀這段歷史重塑了我對未來的看法以及我在其中的位置。你的看法可能不同。
讓我們回到 1950 年代初期。計算機已經從機械式的算盤式計算器,發展到能夠結束戰爭的房間大小的計算機。ENIAC 和 UNIVAC 是當時最先進的設備。這個領域很小,現存的計算機不到 1,000 台。
程式設計這些機器非常耗費人力。當時是透過打孔卡進行的,程式設計師需要根據操作手冊定義精確的機械步驟。執行一個簡單的兩數相加,就需要明確地編排數值將儲存在何處、計算步驟何時觸發,以及將輸出連接回有意義的位址。即使是最基本的要求也存在複雜性。
當時最引人注目的計算是預測總統選舉的獲勝者,其中 UNIVAC-1 系統從 5.5% 的選民樣本中正確預測了艾森豪將以壓倒性優勢獲勝。另一個值得注意的應用是 SAGE 防空系統,該系統使用了 250,000 到 500,000 行組合語言程式碼,並僱用了 7,000 名工程師——約佔當時世界程式設計師的 20%。
當時的頂尖思想家認為程式設計是一門黑魔法,如此先進以至於永遠無法大規模普及。雖然存在簡化程式設計的努力,例如麻省理工學院的 Laning 和 Zierler 系統,但它們卻使機器速度減慢了五到十倍。由於計算成本如此之高,這種效率低下就像燒錢一樣。少數能夠產生高效且正確程式碼的貢獻者認為自己非常聰明,並嘲笑他們可能會被取代的想法。一位名叫 John Backus 的人後來將這群黑魔法程式設計師稱為「祭司」,而他本人就是其中之一。但他有自己的計劃來顛覆現狀。
作為 IBM 程式設計研究組的負責人,John Backus 試圖大幅簡化 IBM 704 的有效使用。他的動機很直接:「我當時不喜歡寫程式碼,」他後來承認。他的團隊著手在機器碼之上建立一個抽象層,試圖在不犧牲速度的情況下簡化邏輯。風險很高:電腦的成本接近 100 萬美元,而專案總時間的 90% 以上都花在規劃、編寫和除錯上,期間機器則閒置著。
在 1956 年的《程式設計師參考手冊》中,Backus 做了一個大膽的聲明:
有了 FORTRAN,程式碼編寫和除錯幾乎可以被消除,因此解決問題的成本應該可以降低一半以上。
事後看來,這似乎很荒謬。有句俗話說「任何語言都可以寫 FORTRAN」,提醒我們任何語言都可能產生有錯誤、難以閱讀的程式碼。但與手寫組合語言相比,FORTRAN 確實帶來了進步。過去需要 1000 行機器指令的程式,現在可以用 47 行 FORTRAN 語句來編寫。通用汽車的生產力研究表明,FORTRAN 將程式設計工作量減少了五到十倍。這是顯著的進步。
FORTRAN 並非唯一大幅簡化電腦程式設計的語言。Grace Hopper,一位曾協助建置 UNIVAC-1 的計算先驅,也深信程式設計不必如此晦澀難懂。她推動了 FLOW-MATIC 語言的創建,該語言是 COBOL 的前身,也是第一個採用類似英語語法的編譯語言。Hopper 的動機很簡單:你不能強迫商人學習數學符號。
程式語言正從打孔卡上的晦澀符號,轉向可攜式、可讀的文字。
電腦程式碼越來越容易編寫,但並非所有人都對此印象深刻。John Backus 本人在反思中描述道:
祭司們想要並得到了簡單的機械輔助工具來處理困擾他們的文書工作,但他們敵視並嘲笑那些讓程式設計對更多人來說更容易的更宏偉的計劃。
懷疑論者在經濟上也佔有優勢。速度減慢意味著損失金錢,因此自動程式設計必須達到手寫程式碼的效率才能被採用。還有一個人的因素:程式設計是一項艱辛獲得的技能,暗示它可以自動化感覺就像是對這門技藝本身的攻擊。
與此同時,在 1960 年代初期,分析師預測為了滿足預期需求,每個人都必須成為程式設計師。電腦正在迅速普及。軟體至關重要。預測是程式設計師將像打字員一樣普遍,技術將會民主化。
儘管有歷史性的批評,效率問題最終還是得到了解決。FORTRAN 的優化編譯器產生的程式碼運行速度幾乎與手寫組合語言一樣快。IEEE 電腦學會後來指出,它是「在未來 5 年、10 年,甚至 20 年內,整體上最好的優化器」。加上計算成本的下降,性能上的反對意見消失了。
然而,民主化的願景確實部分實現了。COBOL 成為世界上使用最廣泛的語言,但並非供大眾使用。商人仍然需要訓練有素的程式設計師。閱讀和編寫程式碼被證明是截然不同的技能。正如圖靈獎得主 Fred Brooks 所說,更簡單的程式語言減少了任務的偶然複雜性,但本質的複雜性仍然存在。你仍然需要知道你希望電腦做什麼,而這可能非常困難。雖然不是每個人都編寫電腦程式,但世界上電腦的數量卻爆炸式增長。這個數量從 1960 年的不到 1,000 台,增長到今天僅智慧手機就超過 70 億台。電腦成為了世界上大多數人的日常工具,而不僅僅是為了商業。
隨著程式設計變得更容易,團隊也沒有縮小,反而擴大了。諷刺的是,他們規模變大了。美國的電腦從業人員從 1970 年的 20 萬人增加到 2015 年的 160 萬人,全球估計有 2600-2800 萬人。作為標準普爾 500 指數的科技公司佔比,從指數 1957 年推出時的約 3%,增長到 2024 年的超過 32%。現在已是下一個最大行業的兩倍多。
「祭司」失去了他們的影響力,將指令告訴電腦的黑魔法也傳播到了大眾。
這篇文章最初是作為對歷史的探索。當我閱讀 John Backus 關於 1950 年代程式設計師的感想時,它完全符合我作為 HPC 開發者優化 GPU 核心時的觀點。
程式設計師必須是一位足智多謀的發明家,以適應他對電腦特性的問題……他必須運用他能想到的每一個技巧來讓程式以能夠證明其高昂運行成本的速度運行。而他必須依靠自己的獨創性來完成這一切。
第一次讀到這段話時,我意識到自己是現代「祭司」的一份子。七十年後,這仍然符合我和其他人對我們技藝的看法。但歷史表明,即使是最精湛的技能也會被淘汰;推動計算達到極限的需求仍然存在。改變的是他們將要解決的問題。
自行車界有句諺語:「它從未變得容易,你只是騎得更快。」也許對於知識工作來說,它並沒有變得更容易,只是系統變得更加複雜。在 FORTRAN 出現之前,粗略的選舉預測和追蹤少數飛機是當時最先進的技術。接下來的 50 年帶來了天氣預測、宇宙規模的模擬以及人類基因組的編碼。這遠遠超出了編譯器時代黎明時任何人的想像。
這個教訓甚至早於 FORTRAN。當 James Watt 優化蒸汽機時,預期是煤炭使用量將急劇下降。但實際上卻大幅增加。這被稱為 Jevons 悖論,並且至今仍在持續。2016 年,諾貝爾獎得主 Geoffrey Hinton 預測放射科醫生將在 5 年內被淘汰。十年後,放射科醫生 Dana Smetherman 指出,不僅需求強勁,「AI 甚至可能透過識別額外的發現來增加工作量」。
當我從歷史中汲取教訓時,我發現自己對技術的傲慢感正在消退。我對被淘汰的擔憂已轉變為對還有什麼值得建造的好奇心。程式設計的偶然複雜性正在急劇下降,但本質的複雜性仍然存在。抽象化浪潮再次興起,以駕馭我們尚未命名的問題。