"Software production today appears in the scale of industrialization somewhere below the more backward construction industries."
—— M. Douglas McIlroy, Mass Produced Software Components (1968)
多年以後,面對軟件行業依然難以根除的手工作坊式混亂,人們終究還是會想起 McIlroy 半個多世紀前的那句當頭棒喝。
一、加米施的秋天與半世紀的作坊
1968 年秋天,在西德度假勝地加米施(Garmisch)的冷冽薄霧中,五十多位頂尖計算機科學家圍坐一堂。那場由北大西洋公約組織(NATO)資助的傳奇會議,第一次提出了「Software Crisis(軟件危機)」這個詞。
當時的焦慮真實而尖銳。硬件算力按摩爾定律翻倍增長,軟件交付卻一再失控。預算超支與交付無期成了家常便飯,系統更是動輒崩潰。在那個連大型主機都稀缺的年代,程序員們各自守着獨門手藝,打造出一件件無法複製、也無人能懂的孤品。
McIlroy 在那次會議上尖銳地指出,軟件生產的工業化水平甚至低於最落後的建築業。他渴望的是把「製造原型本身」的過程工業化,像流水線那樣,以可互換、有標準公差的零件組裝軟件。
隨後的半個世紀裏,這個行業先後發明了結構化編程、物件導向與設計模式,又引進了敏捷(Agile)、Scrum,以及 CI/CD 與微服務。我們自詡為現代工程師,辦公室裏掛滿監控大屏。
但做過生產系統的工程師心底都清楚,軟件從未真正工業化。
我們只是給手工作坊換上了Slack 和 Jira 看板,生產邏輯依然原始。系統還能運轉,全靠幾個資深工程師腦子裏沒寫進文檔的直覺與記憶。新人接手時像盲人摸象,「別碰那段代碼,我也不知道它為甚麼能跑」仍是通行全行業的避險指南。軟件是一寸寸拼湊出來的,遠談不上工業化的「製造」。
直到大語言模型與 AI Coding 出現。
二、銀彈的幻覺
2023 年起,整個行業陷入狂熱。
代碼生成的邊際成本一夜之間跌近於零,所有人都以為追尋了半個世紀的「銀彈」終於找到了。
對着對話框敲幾行字,完整的業務邏輯、API 路由與測試腳本便在屏幕上傾瀉而出。「寫代碼已經過時」、「一人就是獨角獸」的預言席捲社交媒體。看着自動補全的光標飛馳,大家彷彿看到了軟件工業化的終極形態。以前十個人磨幾個月的活,現在 AI 幾秒鐘就能寫完。
如果軟件危機的根源在於「人類敲代碼太慢、記性太差,導致產能太低」,那麼代碼生成變得無窮無盡、唾手可得之後,軟件危機豈不是自然消解了?
三、裝上噴氣引擎的混亂
狂熱退潮後,工程現實很快給出了反饋。AI 沒有終結手工作坊式的混亂,只是把混亂的生產速度提高了幾百倍。
傳統開發時代,混亂是緩慢而局部的。程序員花一星期寫出糟糕的代碼,團隊至少還有 Review 和消化的時間。到了 AI 時代,Coding Agent 不知系統邊界,缺乏全局事實錨點,卻能不知疲倦地持續輸出。一旦放權,它十分鐘內就能重構三個模組,引入四種相互矛盾的設計範式,順手刪掉關鍵邊界條件,最後還附上一份看似完美卻全由幻覺構成的測試報告。
以前的困境是「寫不出來」;現在的困境是「太容易寫出來,卻無人敢信」。
Fred Brooks 在 1986 年的《No Silver Bullet》中早就挑明了這一點:編寫代碼只是次要複雜度(Accidental Complexity),理解業務並定義概念與邊界,才是本質複雜度(Essential Complexity)。
AI 大幅壓低了次要複雜度,卻把本質複雜度的短板徹底暴露出來。生成代碼越容易,系統腐敗(Software Rot)就越快。Prompt 毫無章法,上下文隨機飄移,依賴關係失控,代碼庫只會迅速堆積大量無人能懂的廢料。
四、回到起點的探問
若寫代碼從來不是瓶頸,那我們這兩年瘋狂追逐的,究竟是能擊穿難題的銀彈,還是一場被技術浪潮裹挾的集體幻覺?
五、小結
軟件危機並未消失,只是換了一副面孔。代碼生成成本坍塌後,真正稀缺的是約束生成過程的反饋機制(Harness)。
接下來六篇,我們先看傳統軟件工程留下的三道防線:測試與 CI、領域文檔、靜態分析;再看 AI 時代出現的兩類新工具:多 Agent 審查與形式化驗證;最後回到做決策、負責任的人。
工序可以越做越精,但有一件事從一開始就懸而未決。我們追的究竟是一顆銀彈,還是一場關於銀彈的夢?