![]()
編譯|宇琪、Tina
上個(gè)時(shí)代的開(kāi)發(fā)工具,是被非常仔細(xì)地一步步打磨出來(lái)的:行為穩(wěn)定,交互克制,出了問(wèn)題大多也在預(yù)期之內(nèi)。可到了今天,Claude Code、Codex 這些軟件產(chǎn)品,把“用 AI 寫(xiě)自己”當(dāng)成默認(rèn)路線。雖然 AI 的確讓寫(xiě)代碼更快了,但它并沒(méi)有自動(dòng)解決“怎樣把一個(gè)復(fù)雜的軟件長(zhǎng)期維護(hù)好”這件事。
Claude Code 是一個(gè)很典型的例子。Anthropic 這套工具幾乎是從零開(kāi)始做的,但團(tuán)隊(duì)又長(zhǎng)期堅(jiān)持一種非常激進(jìn)的內(nèi)部方式:他們強(qiáng)調(diào)“Claude Code 的 100% 代碼都要由 Claude Code 自己寫(xiě)”,并且內(nèi)部工程師和研究人員的各項(xiàng)任務(wù),從大型代碼重構(gòu)、squash commit,到各種瑣碎的編碼工作,都依賴Claude Code。
問(wèn)題在于,當(dāng)?shù)讓幽P捅旧砭褪欠谴_定性的,而承載這些能力的產(chǎn)品代碼又是在這樣的開(kāi)發(fā)方式下快速堆疊出來(lái)的,系統(tǒng)很容易陷入一種惡性循環(huán)。這一兩年里,Claude Code 一直在快速擴(kuò)展能力,交互邏輯越來(lái)越復(fù)雜,于是這個(gè)產(chǎn)品本身變得越來(lái)越不穩(wěn)定:各種崩潰、各種詭異報(bào)錯(cuò),bug 越來(lái)越多,速度越來(lái)越慢。
事情甚至發(fā)展到一種頗為荒謬的狀態(tài)——與其回過(guò)頭去系統(tǒng)性修復(fù)這些性能問(wèn)題,不如直接收購(gòu)核心依賴 Bun,把希望寄托在底層 runtime 團(tuán)隊(duì)身上。換句話說(shuō),就是買(mǎi)下一整支 runtime 團(tuán)隊(duì),只為了盡量別讓自家的 CLI 工具動(dòng)不動(dòng)就吃掉 2GB 內(nèi)存。
Cursor 的處境則是另一種復(fù)雜。它一開(kāi)始面對(duì)的,就是一個(gè)極其龐大、極其復(fù)雜,而且并非自己從零塑造出來(lái)的代碼底座——他們直接 fork 了 VS Code。這個(gè)起點(diǎn)決定了,它從第一天起就在打一場(chǎng)高難度戰(zhàn)役:你不是在空白紙面上做產(chǎn)品,而是在一個(gè)超大工程體系上做增量改造;你不僅要持續(xù)改出自己的差異化能力,還要長(zhǎng)期維護(hù)這個(gè)分叉版本,并盡可能跟上游同步必要更新。只要做過(guò)大型工程的人都知道,這種事本來(lái)就極其痛苦,而且隨著時(shí)間推移,分叉只會(huì)越來(lái)越深,維護(hù)成本只會(huì)越來(lái)越高。
如果把這些現(xiàn)象放在一起看,一個(gè)越來(lái)越清晰的趨勢(shì)是:AI 編程工具,很可能會(huì)經(jīng)歷一輪“大規(guī)模重寫(xiě)潮”。
因?yàn)槠浯a庫(kù)本身在早期高速迭代中已經(jīng)被帶進(jìn)了一種越來(lái)越難逆轉(zhuǎn)的狀態(tài)。繼續(xù)往上疊功能,只會(huì)讓系統(tǒng)更加脆弱;真正的解法,往往只能是承認(rèn)舊底盤(pán)已經(jīng)失控,然后從零再做一套新的。
但這并不意味著所有團(tuán)隊(duì)都會(huì)走到這一步。
OpenCode 提供了一個(gè)很有意思的對(duì)照。它同樣是在 AI 編程浪潮中構(gòu)建出來(lái)的工具,但團(tuán)隊(duì)采取了完全不同的策略:他們比過(guò)去更強(qiáng)調(diào)代碼庫(kù)的一致性和約束,盡量確保沒(méi)有任何文件偏離既定規(guī)范;同時(shí),也大量采用那些約束更強(qiáng)、設(shè)計(jì)哲學(xué)更明確的工具與框架,并更堅(jiān)定地踐行領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)。
他們認(rèn)為在大模型參與開(kāi)發(fā)的情況下,代碼庫(kù)一旦變“臟”,后果會(huì)被放大。大語(yǔ)言模型無(wú)法區(qū)分“舊模式”和“新模式”,它會(huì)將舊寫(xiě)法當(dāng)成正確示范并繼續(xù)生成不符合當(dāng)前規(guī)范的代碼。因此,不干凈的代碼庫(kù)帶來(lái)的負(fù)面影響,反而比過(guò)去更嚴(yán)重。
于是出現(xiàn)了一個(gè)有些反直覺(jué)的結(jié)果:他們的代碼庫(kù)反而比以往任何時(shí)候都更干凈,“甚至可能是我們寫(xiě)過(guò)的質(zhì)量最高的一批代碼。”O(jiān)penCode 創(chuàng)始人之一 Dax Raad 在播客中這樣說(shuō)。
與此同時(shí),他也并沒(méi)有放棄“手寫(xiě)代碼”這件事本身。“當(dāng)我設(shè)計(jì)新功能或復(fù)雜架構(gòu)時(shí),寫(xiě)代碼本身就是思考過(guò)程。我不擅長(zhǎng)寫(xiě)一大段詳細(xì)規(guī)格說(shuō)明,相反,我喜歡寫(xiě)類型定義,嘗試函數(shù)組合,調(diào)整文件結(jié)構(gòu),通過(guò)編寫(xiě)代碼來(lái)理解問(wèn)題,這是大多數(shù)程序員長(zhǎng)期以來(lái)的工作方式。我看不出有什么理由要放棄這種方式,寫(xiě)代碼是我思考的方式。”
另外,他還從代碼質(zhì)量角度小小鄙視了一番 Claude Code:“Claude Code 做了一個(gè)原型,產(chǎn)品市場(chǎng)匹配度極高,即便體驗(yàn)不完美也會(huì)成功。但這并不意味著,所有人都必須犧牲質(zhì)量,才能達(dá)到那個(gè)速度。”
基于該播客視頻,InfoQ 進(jìn)行了部分刪改。
OpenCode 的起源
Host:從去年 12 月開(kāi)始,OpenCode 的發(fā)展非常迅猛。能不能帶我們回顧一下 OpenCode 是如何誕生的?
Dax:我們公司做開(kāi)源已經(jīng)很多年了,一直以來(lái)我們都在為開(kāi)發(fā)者構(gòu)建工具,也經(jīng)歷過(guò)不同公司在這個(gè)領(lǐng)域的興衰更替,因此在開(kāi)源產(chǎn)品的構(gòu)建方面積累了很多經(jīng)驗(yàn)。
我們之前的項(xiàng)目是 SST,雖然遠(yuǎn)不如 OpenCode 現(xiàn)在的規(guī)模,但也算相當(dāng)受歡迎。它給了我們完整的實(shí)踐經(jīng)驗(yàn):如何啟動(dòng)一個(gè)開(kāi)源項(xiàng)目,如何讓它成功,日常如何運(yùn)營(yíng),開(kāi)源的優(yōu)勢(shì)和劣勢(shì)分別是什么。可以說(shuō),我們?cè)谶@個(gè)領(lǐng)域深耕已久。
2025 年 2 月左右,我們實(shí)現(xiàn)了盈利。當(dāng)時(shí)公司只有三個(gè)人。實(shí)現(xiàn)盈利之后,我們開(kāi)始反思下一步該做什么:是繼續(xù)深耕現(xiàn)有產(chǎn)品,還是探索新的方向?AI 顯然是這個(gè)時(shí)代的重要趨勢(shì),如果完全忽視它會(huì)顯得非常不理智。
于是我們開(kāi)始嘗試一些想法,探索 AI 能為開(kāi)發(fā)者做什么、在更廣泛層面又可以做什么。我們?cè)囘^(guò)幾種方向,但都沒(méi)有真正形成產(chǎn)品。有些點(diǎn)子對(duì)我們自身很有幫助,但始終無(wú)法打磨成成熟產(chǎn)品。
差不多就在那個(gè)時(shí)候,我們開(kāi)始用 Claude Code。其實(shí)在這之前,我們已經(jīng)看過(guò)很多 AI 編程工具,比如 Cursor,當(dāng)時(shí)已經(jīng)挺火了。但我們團(tuán)隊(duì)里沒(méi)有人真正用下去。我們也試過(guò),但感覺(jué)是在放棄一些我們?cè)鞠矚g的東西,同時(shí)又沒(méi)有獲得足夠多的收益,所以沒(méi)有堅(jiān)持下來(lái)。
但 Claude Code 是第一次讓我們覺(jué)得,“這才是對(duì)的工作流”。在那之前,我們一直在做的事情就是把代碼復(fù)制到 ChatGPT 里,再?gòu)?fù)制出來(lái),反復(fù)來(lái)回。我們一直在想,為什么這些東西不能直接連接到文件系統(tǒng)?為什么要這么手動(dòng)?
而 Claude Code 在這點(diǎn)上是一個(gè)很聰明的整合方式,把這些流程串在了一起。于是我們就覺(jué)得,如果這是第一個(gè)真正讓我們“用下去”的工具,那這件事可能就很重要了。
接下來(lái)我們就開(kāi)始想:如果我們把自己在開(kāi)源上的經(jīng)驗(yàn)用起來(lái)會(huì)怎么樣?當(dāng)時(shí)有一個(gè)很明顯的空白點(diǎn)——居然還沒(méi)有一個(gè)開(kāi)源的 coding agent。于是我們就在想,能不能做一個(gè)開(kāi)源的 coding agent,同時(shí)支持多種模型,因?yàn)槲覀冎肋@些模型之間的競(jìng)爭(zhēng)會(huì)長(zhǎng)期存在,而且會(huì)越來(lái)越激烈。
這個(gè)切入點(diǎn),對(duì)我們來(lái)說(shuō)是一個(gè)很自然的延伸。
Host:現(xiàn)在你的日常開(kāi)發(fā)工作流是什么樣的?發(fā)生了多大變化?畢竟你既是開(kāi)發(fā)者,也是開(kāi)發(fā)開(kāi)發(fā)者工具的人,這種視角很特別。
Dax:我們團(tuán)隊(duì)成員都是 Vim 用戶,幾乎所有工作都在終端完成,非常享受 Vim 的編輯體驗(yàn)。遷移到 Cursor 對(duì)我們來(lái)說(shuō)成本很高,因?yàn)殡m然還能編輯代碼,但文本編輯體驗(yàn)在我們看來(lái)變差了,而獲得的收益又不足以彌補(bǔ)這種損失。
Claude Code 能“用下去”的原因在于,我們可以繼續(xù)用原來(lái)的編輯器,同時(shí)在一個(gè)單獨(dú)的空間里做 AI 相關(guān)的事情,兩者不會(huì)互相干擾。這對(duì)我們來(lái)說(shuō)很重要。
我覺(jué)得 Cursor 更像是一個(gè)過(guò)渡產(chǎn)品,它試圖把你從傳統(tǒng)編輯器直接帶到 AI 編程的那套新范式上。這當(dāng)然有一些好處,但對(duì)我和很多人來(lái)說(shuō),它處在一個(gè)有點(diǎn)尷尬的中間狀態(tài)——我其實(shí)只想用編輯器來(lái)寫(xiě)代碼,不想讓各種 AI 功能到處彈出來(lái)。
用 Cursor 的時(shí)候,我會(huì)感覺(jué)各種建議無(wú)處不在,還有一堆新的 UI 面板,這讓我很不適應(yīng)。我更喜歡把 agent 當(dāng)成一個(gè)“坐在旁邊的笨同事”:我偶爾看一眼它在干什么,給點(diǎn)反饋,然后讓它繼續(xù)干,我自己也可以做別的事情,工作是可以拆開(kāi)的。
所以 Claude Code 最大的優(yōu)勢(shì),其實(shí)就是它在編輯器之外提供了一個(gè)獨(dú)立空間。我們?cè)谧?OpenCode 的時(shí)候,也是在延續(xù)這個(gè)方向:在這個(gè)“獨(dú)立空間”里,能把和 agent 交互這件事做得多豐富、多好。
現(xiàn)在我的工作流依然是:用 Neovim 編輯代碼,用 Agent 處理需要 Agent 的任務(wù)。我們確實(shí)越來(lái)越多地使用 Agent,在編輯器里的時(shí)間相對(duì)減少,但我遠(yuǎn)沒(méi)有完全放棄手寫(xiě)代碼。我仍然大量使用編輯器,手動(dòng)寫(xiě)代碼。
不再寫(xiě)代碼?
Host:現(xiàn)在有很多頂尖開(kāi)發(fā)者聲稱自己已經(jīng)不再?gòu)牧銓?xiě)任何一行代碼了,很多人聽(tīng)到這句話會(huì)理解為“編程已死”,你怎么看?
Dax:我對(duì)這種說(shuō)法感到困惑。如果你問(wèn)我手寫(xiě)代碼的比例是多少,我其實(shí)很難回答。我在不同工具之間不斷切換,很難量化。
如果有人說(shuō)他們幾乎不用編輯器,完全在這些 agent 工具里工作,不管是 OpenCode、Codex 還是其他類似工具,我會(huì)很驚訝。因?yàn)檫@些工具其實(shí)并不適合閱讀代碼。那他們是完全不做代碼審查嗎?還是把代碼推到 GitHub 上再看?
另外,當(dāng)我在設(shè)計(jì)新功能,或者做一些比較復(fù)雜的事情時(shí),寫(xiě)代碼本身就是我思考的一部分。如果只是加一個(gè)按鈕、做一個(gè)簡(jiǎn)單改動(dòng),那當(dāng)然可以直接 prompt 一下,甚至都不用怎么看生成的代碼,因?yàn)樗蟾怕屎椭車(chē)拇a是類似的。
但當(dāng)我在做全新的東西、或者在設(shè)計(jì)一個(gè)系統(tǒng)時(shí),我需要通過(guò)寫(xiě)代碼來(lái)搞清楚到底該怎么做。我很難坐在那里寫(xiě)一大段詳細(xì)的 Spec,然后就讓 AI 去實(shí)現(xiàn)。我更習(xí)慣寫(xiě)類型定義,嘗試不同函數(shù)怎么組合,調(diào)整文件結(jié)構(gòu),從這些過(guò)程中去理解問(wèn)題,這其實(shí)也是大多數(shù)程序員一直以來(lái)的工作方式。
所以我看不出有什么理由讓我停止這樣做,因?yàn)檫@是我搞清楚事情的方式。
所以當(dāng)有人說(shuō)“我完全不寫(xiě)代碼了”,我會(huì)有一點(diǎn)偏懷疑的態(tài)度。我覺(jué)得這里面有一種心理因素:大家都感覺(jué)到一個(gè)巨大的變化正在發(fā)生,也擔(dān)心自己被淘汰,于是會(huì)傾向于說(shuō)服自己“我已經(jīng)在最前沿了”。
再加上現(xiàn)在有一種敘事,說(shuō)這個(gè)變化會(huì)淘汰很多人,只留下少數(shù)人。所以大家會(huì)有一種傾向,把某些局部的成功放大成“現(xiàn)在一切都可以這樣做”。一旦有一個(gè)場(chǎng)景跑通了,就會(huì)被表達(dá)成“全部都可以這么做”,會(huì)有一點(diǎn)夸張。
所以很難從這些說(shuō)法里判斷真實(shí)情況,因?yàn)楸澈髶诫s了很多情緒和心理因素。
Host:我覺(jué)得這點(diǎn)很好,因?yàn)槲疑踔敛挥X(jué)得這是“故意營(yíng)銷(xiāo)”。比如 Claude Code 的早期作者之一 Boris,他說(shuō)過(guò)自己幾乎不再?gòu)牧銓?xiě)代碼,但他最近也說(shuō)過(guò)“為什么 Anthropic 仍然在招聘開(kāi)發(fā)者”,說(shuō)明人類仍然有大量參與,所以確實(shí)很讓人困惑。
Dax:我同意,這并非出于惡意,而是興奮與不安交織下的結(jié)果,使人們難以準(zhǔn)確表達(dá)現(xiàn)實(shí)情況。類似現(xiàn)象在以往新技術(shù)或新框架出現(xiàn)時(shí)也屢見(jiàn)不鮮,人們常宣稱其“徹底改變了工作方式”。對(duì)此,一個(gè)有效的判斷標(biāo)準(zhǔn)是直接檢驗(yàn)其產(chǎn)出:許多情況下并無(wú)真正落地的產(chǎn)品,僅停留在嘗試層面;即便已有產(chǎn)品,質(zhì)量也未必更優(yōu),甚至可能更差。在當(dāng)前的 AI 編程實(shí)踐中亦是如此,一些人聲稱“完全依賴 AI 寫(xiě)代碼”,但其產(chǎn)出質(zhì)量并不理想,這在一定程度上反映了當(dāng)下的真實(shí)水平。
Host:OpenCode 和 Claude Code 似乎是直接競(jìng)爭(zhēng)關(guān)系,你怎么看?尤其是在 Anthropic 限制訂閱使用之后,你的看法有變化嗎?
Dax:我不認(rèn)為世界是零和的,大多數(shù)系統(tǒng)允許多方共贏。但在商業(yè)領(lǐng)域,競(jìng)爭(zhēng)是真實(shí)存在的。商業(yè)更像體育比賽,大家爭(zhēng)奪對(duì)世界的不同愿景。可能不會(huì)完全一方勝出,但競(jìng)爭(zhēng)確實(shí)存在。不過(guò),更重要的是“定位”。即便產(chǎn)品看似相似,定位可能完全不同。
OpenCode 的成功更多來(lái)自定位,而不僅僅是產(chǎn)品質(zhì)量。我們判斷模型之間的競(jìng)爭(zhēng)會(huì)持續(xù),包括閉源模型和開(kāi)源模型。價(jià)格會(huì)下降,競(jìng)爭(zhēng)會(huì)越來(lái)越激烈。所以我們選擇:做一個(gè)不綁定單一模型的工具,這樣我們可以從模型競(jìng)爭(zhēng)中受益。其次,我們要占據(jù)“開(kāi)源 coding agent 第一”的位置。歷史經(jīng)驗(yàn)表明,大多數(shù)開(kāi)發(fā)工具最終都會(huì)走向開(kāi)源,數(shù)據(jù)庫(kù)、編譯器、編輯器都是如此。
Claude Code 走的是垂直整合路線,這和我們的定位不同。從定位角度看,我們不一定直接競(jìng)爭(zhēng)。但在價(jià)值觀層面,我們確實(shí)存在分歧,也希望證明我們的價(jià)值觀會(huì)帶來(lái)更好的結(jié)果。
Host:作為一個(gè)同時(shí)使用過(guò) Open Code 和 Claude Code 的用戶,我肯定會(huì)說(shuō) Open Code 的體驗(yàn)非常好,我總結(jié)下來(lái)就是開(kāi)源、可以在不同模型之間自由切換、沒(méi)有鎖定,以及先發(fā)優(yōu)勢(shì)。
Dax:這些確實(shí)是核心方向,并不只是口號(hào),而是體現(xiàn)在大量具體細(xì)節(jié)里。比如為什么堅(jiān)持開(kāi)源?因?yàn)殚_(kāi)源意味著會(huì)有更多人在不同環(huán)境中嘗試它。Open Code 從一開(kāi)始就被設(shè)計(jì)成可以適配各種環(huán)境。哪怕是在企業(yè)強(qiáng)限制的筆記本上,只能使用 Amazon Bedrock,也確保可以正常運(yùn)行。開(kāi)源的好處在于,雖然無(wú)法在內(nèi)部復(fù)現(xiàn)所有環(huán)境,但社區(qū)可以。別人可以在真實(shí)環(huán)境里測(cè)試、提交問(wèn)題、甚至提交修復(fù),因此能夠很好地覆蓋各種長(zhǎng)尾場(chǎng)景。如果產(chǎn)品只有現(xiàn)在一半好,我們可能依然會(huì)取得類似的成功,因?yàn)槌晒Ω鄟?lái)自定位,而不是單純的產(chǎn)品質(zhì)量。
Host:OpenAI 至少在與你們的合作關(guān)系上采取了一條不同的路線。你們之間到底是什么關(guān)系?為什么 OpenAI 會(huì)采取不同的做法?
Dax:這其實(shí)還是回到我們的定位。如果我們是開(kāi)源選項(xiàng),就有機(jī)會(huì)成為一種“標(biāo)準(zhǔn)”,讓其他人基于我們構(gòu)建或把我們嵌入到他們的體系中。因此,在與 OpenAI 合作之前,我們已經(jīng)在和 GitHub、GitLab、JetBrains 等溝通,希望他們將 Open Code 作為使用其大模型服務(wù)的一種推薦方式,因?yàn)槲覀冊(cè)谶@方面投入更多,用戶反饋也更好。說(shuō)服了部分公司后,我再去找 OpenAI,表示行業(yè)已有支持,詢問(wèn)他們是否愿意加入。
之所以選擇 OpenAI,是因?yàn)樗麄兣c Anthropic 存在競(jìng)爭(zhēng),而在編碼領(lǐng)域 Anthropic 的心智份額更高。對(duì) OpenAI 來(lái)說(shuō),支持我們既有公關(guān)收益,也能吸引更多用戶使用 Codex。我聯(lián)系他們的時(shí)間點(diǎn)也恰逢 Anthropic 封禁 Cloud Max 和 Open Code 前后,他們因此看到了一個(gè)反向布局的機(jī)會(huì)。
至于 OpenAI 是否真正認(rèn)同這種模式,還是出于短期競(jìng)爭(zhēng)動(dòng)機(jī),我并不確定。但我們擅長(zhǎng)洞察各方激勵(lì),在關(guān)鍵節(jié)點(diǎn)施加影響,促成對(duì)自身、用戶以及開(kāi)源社區(qū)都有利的局面。本質(zhì)上,就是理解激勵(lì)機(jī)制,并在博弈中創(chuàng)造更優(yōu)結(jié)果。
Host:最近行業(yè)內(nèi)有不少收購(gòu)案例,OpenCode 會(huì)是下一個(gè)嗎?
Dax:我們花了很多年尋找一個(gè)真正巨大的市場(chǎng),而現(xiàn)在我們找到了。全球有三到五千萬(wàn)開(kāi)發(fā)者,我們的產(chǎn)品理論上可以服務(wù)所有人,這種機(jī)會(huì)很難得。因此,輕易把它交出去是很困難的決定。我們確實(shí)收到過(guò)不少收購(gòu)邀約,但沒(méi)有認(rèn)真推進(jìn)。除非對(duì)方開(kāi)出很高的價(jià)格,而 AI 領(lǐng)域確實(shí)存在夸張的收購(gòu)案例。
有一次我在團(tuán)隊(duì)群里提到某家公司想收購(gòu)我們,大家完全無(wú)視,繼續(xù)討論產(chǎn)品。我又提醒一次,有人說(shuō)“讓他們多加一個(gè)零再來(lái)”。團(tuán)隊(duì)真的想把事情做到底,而不是快速套現(xiàn)。
當(dāng)然,幾年后如果增長(zhǎng)停滯,我的態(tài)度可能會(huì)變。公司能做大,是因?yàn)閯?chuàng)始人多年保持動(dòng)力。很多收購(gòu)發(fā)生,是因?yàn)閯?chuàng)始人動(dòng)力下降或前路太漫長(zhǎng),目前我們想走到最后。
Host:AI 讓我們速度更快,但是否積累了更多技術(shù)債?這種權(quán)衡是否發(fā)生了本質(zhì)變化?
Dax:這種權(quán)衡一直存在。很多時(shí)候,人們用“為了速度做了權(quán)衡”來(lái)解釋質(zhì)量問(wèn)題。但回頭看,大多數(shù)問(wèn)題并非刻意權(quán)衡,而是經(jīng)驗(yàn)不足。
當(dāng)我第一次做某件事時(shí),95% 的問(wèn)題來(lái)自經(jīng)驗(yàn)不足,而非有意識(shí)的取舍。下一次再做,同樣的時(shí)間內(nèi)我能做得更好。
AI 也是如此,它提升了每個(gè)人的能力上限,但不應(yīng)成為偷懶的借口。我們?nèi)匀粦?yīng)該反思、改進(jìn),而不是因?yàn)椤澳芘芷饋?lái)”就覺(jué)得沒(méi)有問(wèn)題。
有些人會(huì)說(shuō):“代碼很糟,但我們寫(xiě)得很快。”實(shí)際上,更有經(jīng)驗(yàn)的人可以在同樣速度下寫(xiě)出更好的代碼,這本質(zhì)上還是能力問(wèn)題。
Host:那從產(chǎn)品和用戶角度看,短期內(nèi)定位和速度可能比質(zhì)量更重要。比如 Claude Code,當(dāng)時(shí)快速發(fā)布是不是合理?后來(lái)是不是應(yīng)該做得不同?
Dax:我認(rèn)為每個(gè)人都會(huì)盡可能快地前進(jìn),并根據(jù)經(jīng)驗(yàn)做出不同的取舍。Claude Code 的情況是,他們做了一個(gè)原型,產(chǎn)品市場(chǎng)匹配度極高,即便體驗(yàn)不完美也會(huì)成功。這種情況很常見(jiàn),但這并不意味著“所有人都必須犧牲質(zhì)量才能達(dá)到那個(gè)速度”。
我們做 Open Code 的時(shí)間差不多,也構(gòu)建了終端框架、Zig 實(shí)現(xiàn)、React 和 SolidJS 綁定、編譯為 bun 二進(jìn)制等。我們之所以能在相似速度下交付更高質(zhì)量,是因?yàn)檫@是我們熟悉的領(lǐng)域。當(dāng)然,也一定有人可以做得比我們更好。總的來(lái)說(shuō),這個(gè)行業(yè)里永遠(yuǎn)存在比你差十倍的人,也永遠(yuǎn)存在比你強(qiáng)十倍的人。
開(kāi)發(fā)者的選擇
Host:當(dāng)大量代碼由 AI 生成時(shí),你們?nèi)绾卧谔嵘屎捅WC質(zhì)量之間取得平衡?比如在代碼 review 方面,你會(huì)在不閱讀代碼的情況下直接提交嗎?
Dax:一個(gè)有些反直覺(jué)的現(xiàn)象是,我認(rèn)為我們現(xiàn)在的代碼庫(kù)比以往任何時(shí)候都更干凈,甚至可能是我們寫(xiě)過(guò)的質(zhì)量最高的一批代碼。原因在于,不干凈的代碼庫(kù)帶來(lái)的負(fù)面影響如今比過(guò)去更嚴(yán)重。
過(guò)去,代碼庫(kù)的典型生命周期是這樣的:最初我們制定一套模式,幾個(gè)月后發(fā)現(xiàn)更好的實(shí)踐,于是通知團(tuán)隊(duì)今后按新方式開(kāi)發(fā),但舊代碼不會(huì)立刻重構(gòu)。時(shí)間一長(zhǎng),代碼庫(kù)中就形成多層歷史遺留風(fēng)格。這在以前尚可接受,但現(xiàn)在不行了。因?yàn)榇笳Z(yǔ)言模型無(wú)法區(qū)分“舊模式”和“新模式”,它會(huì)將舊寫(xiě)法當(dāng)成正確示范并繼續(xù)生成不符合當(dāng)前規(guī)范的代碼。
因此,我們比以往更加重視明確并嚴(yán)格執(zhí)行統(tǒng)一模式,確保代碼庫(kù)中沒(méi)有任何文件偏離規(guī)范。某種程度上說(shuō),我們現(xiàn)在更在意代碼質(zhì)量,因?yàn)槲覀儭肮蛡颉绷艘蝗呵趭^但缺乏理解能力的 LLM,它們記憶力極強(qiáng),卻無(wú)法自行判斷哪種模式更優(yōu)。我們大量采用帶有強(qiáng)約束和明確設(shè)計(jì)哲學(xué)的工具與框架,并更堅(jiān)定地踐行領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)。
至于是否閱讀所有代碼,我的做法是基于風(fēng)險(xiǎn)判斷。在模式成熟且穩(wěn)定的模塊中,我對(duì)輸出結(jié)果有較強(qiáng)的預(yù)期感,通常只做快速檢查;而在結(jié)構(gòu)尚未穩(wěn)定的區(qū)域,我會(huì)更加謹(jǐn)慎地逐行確認(rèn),團(tuán)隊(duì)大體也采取類似策略。
Host:有些人聽(tīng)到你不會(huì)逐行審查所有代碼,可能會(huì)感到震驚。但回顧過(guò)去,即便在大型科技公司,也并非每一行代碼都會(huì)被認(rèn)真閱讀。很多時(shí)候,只要對(duì)開(kāi)發(fā)者建立了信任,review 也會(huì)較為快速。某種程度上,你似乎是在說(shuō),也可以對(duì) LLM 建立某種“信任”。
Dax:我仍然算是偏保守的。即便在大型公司里,至少有一個(gè)人真正理解代碼——也就是編寫(xiě)它的人。而如果是 AI 生成代碼且沒(méi)有任何人理解它,那會(huì)令人不安。
我更傾向于用“風(fēng)險(xiǎn)感”來(lái)判斷。例如最近一次我較少審查的情況,是實(shí)現(xiàn)一個(gè)終端界面的新對(duì)話框。我從用戶角度做了充分測(cè)試,確認(rèn)功能正常。由于底層構(gòu)建對(duì)話框的基礎(chǔ)組件非常成熟,我判斷風(fēng)險(xiǎn)較低。雖然技術(shù)實(shí)現(xiàn)上可能存在細(xì)節(jié)瑕疵,之后也確實(shí)進(jìn)行了清理,但短期內(nèi)問(wèn)題不大。不過(guò),我仍會(huì)盡快修復(fù),因?yàn)椴灰?guī)范的代碼可能污染后續(xù)模型生成。
這本質(zhì)上和過(guò)去一樣:你可以適當(dāng)“偷懶”,但要記得回來(lái)修。
Host:如今很多人認(rèn)為,編程的樂(lè)趣被削弱了,開(kāi)發(fā)者變成了“提示詞工廠”。你怎么看?AI 是否讓你失去了對(duì)編程的興趣?
Dax:對(duì)我而言,答案是否定的。但我可能屬于少數(shù)情況,因?yàn)槲医?jīng)營(yíng)自己的公司,可以自主選擇工作方向。AI 工具讓我能更快探索新想法,把時(shí)間投入到更有創(chuàng)造性的部分,而不是重復(fù)性勞動(dòng)。
但我理解很多人為何會(huì)產(chǎn)生挫敗感:如果你只是被分配任務(wù),輸入提示后等待結(jié)果,而沒(méi)有更具挑戰(zhàn)性的工作,那確實(shí)容易感到無(wú)聊。事實(shí)上,編程中本就有大量重復(fù)性工作,如今正好由 Agent 接管。
真正有趣的部分,系統(tǒng)設(shè)計(jì)、方向判斷、問(wèn)題界定,仍然是人類主導(dǎo),而且往往并不頻繁發(fā)生。也許每月一次,而不是每天都有。
Host:我個(gè)人覺(jué)得 AI 反而提升了樂(lè)趣。它讓我專注于更高層抽象,而不必糾結(jié)語(yǔ)法細(xì)節(jié)。但我也擔(dān)心,如果過(guò)度依賴工具,技能是否會(huì)退化?
Dax:這種擔(dān)憂是真實(shí)存在的。我記得小時(shí)候心算能力很強(qiáng),如今卻明顯退化。類似地,如果長(zhǎng)期依賴 AI,某些編碼能力可能會(huì)萎縮。雖然現(xiàn)實(shí)中這或許影響有限,就像計(jì)算器取代心算一樣,但在遇到復(fù)雜問(wèn)題時(shí),這種能力落差可能顯現(xiàn)。
問(wèn)題在于,這就像“精靈已經(jīng)從瓶子里放出來(lái)”。只要有工具能讓人少花力氣,人們就會(huì)一直使用它。關(guān)鍵在于:節(jié)省下來(lái)的精力是被用來(lái)做更有價(jià)值的事情,還是只是刷 TikTok?
我在兩種狀態(tài)之間都體驗(yàn)過(guò),有時(shí)很投入,有時(shí)也會(huì)讓 AI 工作,自己放空。這種現(xiàn)象如果在數(shù)百萬(wàn)程序員身上同時(shí)發(fā)生,長(zhǎng)期生產(chǎn)力到底提升多少,其實(shí)不好判斷。尤其如果只是打一份自己不太關(guān)心的工,人很難主動(dòng)多付出努力。
Host:那喜歡寫(xiě)代碼,會(huì)不會(huì)反而成為一種劣勢(shì)?比如有人過(guò)度沉迷技術(shù),而忽視更重要的能力?
Dax:這并非新問(wèn)題,過(guò)去也有開(kāi)發(fā)者沉迷技術(shù)細(xì)節(jié),而忽視產(chǎn)品和業(yè)務(wù)判斷。優(yōu)秀的人往往懂得平衡:何時(shí)深挖技術(shù),何時(shí)關(guān)注產(chǎn)品方向。
在我看來(lái),編程能力可以帶來(lái)不錯(cuò)的職業(yè)位置,但真正突破上限,往往來(lái)自第二項(xiàng)專長(zhǎng)。如果你既是優(yōu)秀程序員,又深諳某個(gè)行業(yè)(例如金融、醫(yī)療或能源),那你就處在極其稀缺的位置。程序員可以進(jìn)入幾乎所有行業(yè),這是巨大優(yōu)勢(shì)。若能在所在領(lǐng)域積累深刻理解,就能發(fā)現(xiàn)被忽視的結(jié)構(gòu)性機(jī)會(huì)。
Host:你曾拒絕多次收購(gòu)與高薪邀請(qǐng)。為何沒(méi)有選擇更穩(wěn)定的路徑?
Dax:我年輕時(shí)看到 Snapchat 拒絕 Facebook 數(shù)十億美元收購(gòu)時(shí),覺(jué)得創(chuàng)始人瘋了,但后來(lái)我理解了。隨著職業(yè)發(fā)展,你的“安全網(wǎng)”變大。早年如果有不錯(cuò)的 offer,你可能無(wú)法拒絕。但當(dāng)你有積累、有能力、有退路時(shí),野心也會(huì)隨之增長(zhǎng)。接受收購(gòu)意味著放棄原有夢(mèng)想,那種“所有愿景就此終止”的感覺(jué),遠(yuǎn)比短期輕松更強(qiáng)烈。因此,除非條件極端優(yōu)厚,否則我很難做出那樣的選擇。
Host:很多人認(rèn)為你是“精英開(kāi)發(fā)者”。你認(rèn)為自己的核心優(yōu)勢(shì)是什么?
Dax:坦率地說(shuō),我身邊有不少同事在技術(shù)執(zhí)行層面比我更強(qiáng)。我未必是最優(yōu)秀的程序員。我的優(yōu)勢(shì)更多體現(xiàn)在具備整體視角,能夠預(yù)判發(fā)展趨勢(shì)并做出合理判斷,我的另外兩位聯(lián)合創(chuàng)始人也同樣擅長(zhǎng)此方面,我們彼此相互促進(jìn)。我們致力于在復(fù)雜的行業(yè)環(huán)境中梳理規(guī)律,區(qū)分長(zhǎng)期成立的基本邏輯與暫時(shí)成立的認(rèn)知,團(tuán)隊(duì)在這方面投入了大量時(shí)間,我也常與朋友就此展開(kāi)深入探討。這種思維方式具有可遷移性,能夠應(yīng)用于編程、業(yè)務(wù)運(yùn)營(yíng)、個(gè)人決策與人才招聘等多個(gè)方面,這或許就是我真正的優(yōu)勢(shì)。
Host:你剛才提到的這些能力,是天生的嗎?還是你后來(lái)刻意培養(yǎng)出來(lái)的?如果是刻意培養(yǎng)的,是不是任何人都可以通過(guò)努力提升?
Dax:與行業(yè)內(nèi)頂尖人才交流時(shí),會(huì)覺(jué)得他們似乎擁有與生俱來(lái)的天賦,但深入溝通后會(huì)發(fā)現(xiàn),他們大多起步普通,只是通過(guò)持續(xù)投入逐步提升。對(duì)我而言,這項(xiàng)能力的核心在于真正在意自身認(rèn)知的最終正確性,而非追求當(dāng)下?tīng)?zhēng)論的勝負(fù),即建立準(zhǔn)確認(rèn)知世界的模型。若以此為目標(biāo),便會(huì)倒推所需付出的行動(dòng),核心在于保持思維清晰,認(rèn)清自我與自身的不安全感。很多時(shí)候,不安全感會(huì)影響判斷,使人因主觀期待而刻意采信片面證據(jù),這需要長(zhǎng)期的成長(zhǎng)積累。
年輕時(shí)我安全感不足,看待問(wèn)題的能力較弱,隨著自信心與成果的積累,思維方式也不斷完善。同時(shí),需要謹(jǐn)慎對(duì)待接收的信息,避免信息過(guò)載導(dǎo)致思維受限,陷入單一認(rèn)知環(huán)境。保持自我覺(jué)察與持續(xù)反思是一項(xiàng)需要長(zhǎng)期堅(jiān)持的事,在當(dāng)下的社會(huì)環(huán)境中,維持思維清晰面臨諸多干擾,真正做到這一點(diǎn),需要始終堅(jiān)守對(duì)最終正確的追求。
Host:談到招聘,你怎么看“捷徑”?比如學(xué)歷或大廠背景重要嗎?
Dax:很多人會(huì)用一個(gè)憑證,比如“我在 Google 工作過(guò)”。從經(jīng)驗(yàn)來(lái)看,這種憑證確實(shí)會(huì)帶來(lái)巨大影響。但讓我不舒服的是,它的影響被放大了。很多人看到 Google、Meta、Amazon、Apple 這樣的品牌,就會(huì)自動(dòng)附加某些能力假設(shè)。雖然確實(shí)存在一定相關(guān)性,但遠(yuǎn)遠(yuǎn)沒(méi)有大家想象的那么強(qiáng)。
我們處于獨(dú)特位置:產(chǎn)品面向開(kāi)發(fā)者,且開(kāi)源,因此潛在候選人往往是用戶或貢獻(xiàn)者。能在混亂的開(kāi)源環(huán)境中做出高質(zhì)量貢獻(xiàn),本身就是極強(qiáng)篩選機(jī)制。我們近期招聘的十余人,沒(méi)有進(jìn)行傳統(tǒng)面試,也未查看簡(jiǎn)歷,我們更關(guān)注實(shí)際成果。
從宏觀角度看,大規(guī)模招聘確實(shí)需要“捷徑”,如學(xué)歷或公司背景。但從個(gè)體角度看,這種標(biāo)簽在正負(fù)兩個(gè)方向都可能帶來(lái)偏見(jiàn)。當(dāng)我看到簡(jiǎn)歷上寫(xiě)著 Google,我反而會(huì)本能地產(chǎn)生負(fù)面預(yù)設(shè)。我會(huì)聯(lián)想到他們選擇那條職業(yè)路徑的動(dòng)機(jī)、價(jià)值觀以及日常合作方式。同樣地,如果有人因?yàn)檫@個(gè)憑證而自動(dòng)高看對(duì)方,那也是不公平的。歸根結(jié)底,和一個(gè)人聊一兩次,很容易就能感受到對(duì)方的真實(shí)狀態(tài)。對(duì)我來(lái)說(shuō),要么我非常興奮,要么就是沒(méi)有共鳴。在我們的規(guī)模下,這種方式完全可行。最終,最有效的方式仍然是展示成果。如果你足夠優(yōu)秀,世界遲早會(huì)糾正對(duì)你的低估。
https://www.youtube.com/watch?v=IGsbARhERqc
會(huì)議推薦
OpenClaw 出圈,“養(yǎng)蝦”潮狂熱,開(kāi)年 Agentic AI 這把火燒得不可謂不旺。在這一熱潮下,自托管 Agent 形態(tài)迅速普及:多入口對(duì)話、持久記憶、Skills 工具鏈帶來(lái)強(qiáng)大生產(chǎn)力。但這背后也暴露了工程化落地的真實(shí)難題——權(quán)限邊界與隔離運(yùn)行、Skills 供應(yīng)鏈安全、可觀測(cè)與可追溯、記憶分層與跨場(chǎng)景污染、以及如何把 Agent 納入團(tuán)隊(duì)研發(fā) / 運(yùn)維流程并形成穩(wěn)定收益。
針對(duì)這一系列挑戰(zhàn),在 4 月 16-18 日即將舉辦的 QCon 北京站上,我們特別策劃了「OpenClaw 生態(tài)實(shí)踐」專題,將聚焦一線實(shí)踐與踩坑復(fù)盤(pán),分享企業(yè)如何構(gòu)建私有 Skills、制定安全護(hù)欄、搭建審計(jì)與回放機(jī)制、建立質(zhì)量 / 效率指標(biāo)體系,最終把自托管 Agent 從可用的 Demo 升級(jí)為可靠的生產(chǎn)系統(tǒng)。
特別聲明:以上內(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.