來源:市場(chǎng)資訊
(來源:圖靈人工智能)
您想知道的人工智能干貨,第一時(shí)間送達(dá)
![]()
作者:王勃,清華大學(xué)碩士,獨(dú)到科技CTO
原文:
https://zhuanlan.zhihu.com/p/2019985504695768622,已獲轉(zhuǎn)載授權(quán)
一個(gè) 48 年前的「預(yù)言」
1978 年,計(jì)算機(jī)科學(xué)的祖師爺之一 Edsger Dijkstra 寫了一篇短文,編號(hào) EWD667,標(biāo)題直白到近乎挑釁:
![]()
《論「自然語言編程」的愚蠢》(On the foolishness of "natural language programming")
他的論點(diǎn)很簡單:有人覺得編程太嚴(yán)格了,希望有一天能用自然語言跟計(jì)算機(jī)說話。
Dijkstra 認(rèn)為這個(gè)愿望不僅不切實(shí)際,而且方向就是錯(cuò)的。形式化符號(hào)不是程序員的負(fù)擔(dān),而是特權(quán)。
48 年后的 2026 年,大語言模型讓自然語言編程真的成了現(xiàn)實(shí)。
Karpathy 說自己從去年 12 月起幾乎沒再親手敲過代碼,Anthropic Claude Code 產(chǎn)品負(fù)責(zé)人 Cat Wu 撰文指出 PM 的核心產(chǎn)出正在從文檔變成可運(yùn)行的原型,Stripe 每周有 1300 個(gè)無人值守的 Agent PR 被合并。
Dijkstra 錯(cuò)了嗎?
我?guī)F(tuán)隊(duì)用了一年多 AI 編程工具,從最初的阻力到現(xiàn)在全員 Cursor,從 Vibe Coding 的興奮到 Planned 模式的回歸。回頭看,我覺得 Dijkstra 對(duì)了一半——而且是更重要的那一半。
Dijkstra 到底說了什么
EWD667 全文不長,但論證鏈條極其鋒利。核心是三個(gè)觀點(diǎn):
第一,形式化符號(hào)是文明進(jìn)步的引擎,不是累贅。
他用數(shù)學(xué)史來論證:希臘數(shù)學(xué)因?yàn)橥A粼诳陬^和圖形描述而停滯不前;穆斯林代數(shù)短暫嘗試符號(hào)化后退回修辭風(fēng)格而消亡;現(xiàn)代科學(xué)的崛起,恰恰是因?yàn)?Vieta、Descartes、Leibniz、Boole 這些人精心設(shè)計(jì)了形式化符號(hào)系統(tǒng)。
他寫道:
形式化文本的美德在于,其操作只需滿足少數(shù)簡單規(guī)則;它們是排除各種胡說八道的極其有效的工具——而當(dāng)我們使用自然語言時(shí),胡說八道幾乎不可避免。
第二,自然語言的「自然」本質(zhì)上是一種危險(xiǎn)的舒適。
這是全文最犀利的一句:
所謂自然語言的「自然性」,歸根結(jié)底,不過是我們能輕松地用它說出那些荒謬性并不顯而易見的話。
翻譯成大白話:自然語言讓你很容易說出自己都沒意識(shí)到的模糊和矛盾,而且還覺得自己說清楚了。
第三,讓接口變寬,不一定減輕負(fù)擔(dān),可能兩邊都更累。
他指出,接口設(shè)計(jì)不是簡單的勞動(dòng)分配。讓機(jī)器理解自然語言,不只是給機(jī)器加活——跨接口的溝通成本也會(huì)增加,最終可能雙方都更累。他因此主張「窄接口」(narrow interface):約束越明確,合作越高效。
一年 AI 編程實(shí)踐的印證
去年我要求團(tuán)隊(duì)全面使用 Cursor,原則是不限量、用好模型。
初期有阻力,但很快大家就感受到了效率的飛躍。前端崗位開始大量減少,我們要求前端轉(zhuǎn)全棧。產(chǎn)品經(jīng)理也開始用 Cursor 寫文檔、出交互式原型。很多項(xiàng)目一個(gè)人就能搞定需求分析加開發(fā)。
Vibe Coding 的甜蜜期是真實(shí)的:用自然語言描述需求,AI 幾分鐘就能生成一個(gè)能跑的 demo。Demo 效率大增,我們開始接受「不用想很清楚就可以開始」的工作方式,產(chǎn)品和研發(fā)一起摸石頭過河。
但甜蜜期過后,問題開始浮現(xiàn)——而這些問題,恰恰是 Dijkstra 48 年前預(yù)言的。
AI 總是漏需求。 你以為自己說清楚了,AI 也表現(xiàn)得好像理解了,但交付的東西總是差那么幾個(gè)關(guān)鍵點(diǎn)。本質(zhì)上就是 Dijkstra 說的:自然語言讓你輕松說出荒謬性并不顯而易見的話。你的需求描述有模糊地帶,你自己都沒意識(shí)到,AI 就按它的理解填補(bǔ)了空白。
代碼沒有架構(gòu)感。 AI 生成的代碼能跑,但結(jié)構(gòu)松散,容易被現(xiàn)有代碼的風(fēng)格帶偏。因?yàn)樽匀徽Z言描述天然缺乏架構(gòu)約束——你說「幫我寫一個(gè)用戶管理模塊」,這句話里沒有任何關(guān)于分層、依賴關(guān)系、接口設(shè)計(jì)的形式化信息。
上下文越長越降智。 對(duì)話一長,AI 的服從性反而變成問題——它會(huì)被之前對(duì)話中的錯(cuò)誤信息污染,然后在錯(cuò)誤的方向上越走越遠(yuǎn),最終放棄或者亂試。這就是 Dijkstra 說的「接口變寬,兩邊都更累」的現(xiàn)代版本。
寫碼快不代表深思熟慮。 這一點(diǎn)我們團(tuán)隊(duì)反復(fù)體會(huì)到。AI 可以很快寫出代碼,但速度掩蓋了思考的缺失。不推薦所有標(biāo)榜對(duì)編碼特化的模型,除非代碼用一次就扔。
形式化沒有消失,只是換了形態(tài)
踩完坑之后,我們的工作流逐漸從 Vibe Coding 回歸到了 Planned 模式。一個(gè)典型的開發(fā)過程變成了:
描述需求
和模型對(duì)齊,確認(rèn)它的理解是正確的
讓模型分析細(xì)化,排除矛盾
可行性預(yù)研,給出備選方案,人來選擇
提出測(cè)試需求
系統(tǒng)設(shè)計(jì)和關(guān)鍵算法設(shè)計(jì),人來審查
設(shè)計(jì)測(cè)試方案(自動(dòng)化 + 端到端)
分拆任務(wù),確定驗(yàn)收標(biāo)準(zhǔn)
執(zhí)行并驗(yàn)收
看到了嗎?這個(gè)流程的每一步,都是在把自然語言的模糊描述逐步轉(zhuǎn)化為更形式化的約束——spec、測(cè)試用例、驗(yàn)收標(biāo)準(zhǔn)、任務(wù)分拆。
這不是倒退,這是 Dijkstra 說的「窄接口」思想的現(xiàn)代實(shí)踐。
今年行業(yè)里出現(xiàn)了一個(gè)概念叫 Harness Engineering(馬具工程/駕馭工程),由 Terraform 的作者 Mitchell Hashimoto 提出。他的核心原則是:每次發(fā)現(xiàn) AI 犯錯(cuò),就花時(shí)間工程化一個(gè)機(jī)制,讓它以后再也不犯這個(gè)錯(cuò)。
這個(gè)概念的演進(jìn)路線很清晰:
- 2023-2024:Prompt Engineering
— 怎么跟 AI 說話。本質(zhì)是優(yōu)化一次性的自然語言輸入。
- 2025:Context Engineering
— 給 AI 看什么信息。不再只盯措辭,而是設(shè)計(jì)整個(gè)信息環(huán)境。
- 2026:Harness Engineering
— 構(gòu)建什么環(huán)境讓 AI 可靠地工作。驗(yàn)證閉環(huán)、架構(gòu)約束、測(cè)試護(hù)欄、熵清理。
從 Prompt 到 Context 到 Harness,這條路線的方向是什么?是從自然語言走向形式化約束。
CLAUDE.md、AGENTS.md 這些配置文件,本質(zhì)上就是寫給 AI 的形式化規(guī)范。TDD 測(cè)試套件就是用代碼表達(dá)的驗(yàn)收標(biāo)準(zhǔn)。CI/CD 管道就是自動(dòng)化的質(zhì)量閘門。
Dijkstra 說「形式化符號(hào)是排除胡說八道的工具」。在 AI 時(shí)代,這句話變成了:測(cè)試和約束是排除 AI 胡說八道的工具。
過去 CI/CD 集成、TDD 這些被認(rèn)為是昂貴的工程實(shí)踐,很多團(tuán)隊(duì)嫌麻煩不做。但在 AI 編程時(shí)代,它們已經(jīng)從奢侈品變成了必需品。AI 由于實(shí)現(xiàn)機(jī)制的原因,沒有辦法保證 100% 穩(wěn)定不出錯(cuò),在兜底防御方面投入多少力氣都不為過。
AI 真正改變的是什么
說到這里,可能有人覺得我在唱衰 AI 編程。恰恰相反。
Dijkstra 的洞察在 LLM 時(shí)代依然成立,但他有一件事沒預(yù)見到:形式化的生產(chǎn)成本可以被 AI 大幅降低。
以前,寫一套完整的測(cè)試用例、設(shè)計(jì)一份嚴(yán)謹(jǐn)?shù)慕涌谝?guī)范、維護(hù)一份結(jié)構(gòu)化的需求文檔——這些形式化工作本身就需要大量人力,所以很多團(tuán)隊(duì)干脆不做。代碼裸奔、需求口頭傳遞、測(cè)試靠手點(diǎn),這是大多數(shù)團(tuán)隊(duì)的現(xiàn)實(shí)。
現(xiàn)在不一樣了。你可以用自然語言描述你想要什么,讓 AI 幫你生成測(cè)試用例、類型定義、接口文檔、驗(yàn)收標(biāo)準(zhǔn)。然后你審核和修正這些形式化產(chǎn)物。
這個(gè)變化的意義在于:不是用自然語言替代了形式化,而是用 AI 作為自然語言到形式化的橋梁。
自然語言是好的輸入層——它降低了表達(dá)意圖的門檻。 形式化是必要的驗(yàn)證層——它保證意圖被正確執(zhí)行。 AI 是兩者之間的翻譯器——它讓形式化變得便宜了。
這三層結(jié)構(gòu),才是 AI 編程真正可持續(xù)的工作模式。
我們團(tuán)隊(duì)現(xiàn)在的做法是:產(chǎn)品用自然語言寫 spec,AI 幫忙轉(zhuǎn)化成結(jié)構(gòu)化需求;開發(fā)用自然語言描述功能,AI 生成代碼同時(shí)生成測(cè)試;測(cè)試人員用 AI 增強(qiáng)能力,從手工點(diǎn)點(diǎn)點(diǎn)轉(zhuǎn)向編寫自動(dòng)化測(cè)試。每個(gè)環(huán)節(jié),自然語言是入口,形式化是出口,AI 在中間做翻譯。
燒 token 的速度直接代表了你的 AI 編程能力——這句話聽起來有點(diǎn)夸張,但實(shí)際確實(shí)如此。對(duì)編程工具的駕馭能力和并行工作的能力,直接決定了你燒 token 的速度。別摳省 token,浪費(fèi)的是你的時(shí)間和成長速度。
Dijkstra 如果活在今天
Dijkstra 在 EWD667 的最后寫了一句很有意思的話:
我有一種直覺可以讓我感到安慰:能用我們的母語編程的機(jī)器,無論是荷蘭語、英語、美語、法語、德語還是斯瓦希里語——它們既該死地難以制造,也該死地難以使用。
制造這件事,LLM 做到了。但「該死地難以使用」這個(gè)預(yù)言,某種意義上也成真了——不是難在操作界面上,而是難在如何讓自然語言的模糊性不變成系統(tǒng)性的質(zhì)量問題。
如果 Dijkstra 活在今天,看到我們先用自然語言讓 AI 寫代碼,然后又花大量精力構(gòu)建測(cè)試、約束、驗(yàn)證閉環(huán)來確保 AI 不犯錯(cuò),他大概會(huì)說:
「你們終于造出了能聽懂自然語言的機(jī)器,然后發(fā)現(xiàn)還是得用形式化來約束它——這不正是我說的嗎?」
寫代碼變便宜了,但思考沒有變便宜。
駕馭 AI 的能力,本質(zhì)上是構(gòu)建形式化約束的能力——把模糊的意圖變成精確的規(guī)則,把不可驗(yàn)證的期望變成可執(zhí)行的測(cè)試,把「我覺得差不多了」變成「測(cè)試全部通過」。
這件事,48 年前 Dijkstra 就想明白了。只不過他當(dāng)年是對(duì)著編譯器說的,我們今天是對(duì)著大語言模型說的。
工具變了,思想沒變。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.