隨興開發(Vibe coding)聽起來很瞎。因為遊戲規則是開發者不能去看或動 AI 寫出來的程式。
也許那是我們才剛穿越到 2025 年,還不習慣這種做法。寫過程式的人,會在過去的經驗中必須了解程式碼的所有細節。或,真的嗎?
我發現我從來沒有管過編譯器下面的事。假設用 Python 寫了程式,看起來沒問題,執行起來沒什麼問題,我就覺得沒問題了,非常 Vibe。
一種原因是程式語言編譯後的錯誤,通常很罕見也很安靜,所以人們不怎麼檢查,出事也不怎麼嚴重。
直接問 AI 有什麼上過頭條的編譯器錯誤,他能給出最接近的答案是 1994 的 Pentium FDIV bug ,和編譯器無關。這個事件是數學系教授在研究數學時,發現有個除法一直算錯,追究下去發現是晶片的問題。
再對 AI 嚴加逼問之後,發現最近最有名的編譯器錯誤就發生在我們區塊鏈圈子。 2023 年,撰寫合約用的 Vyper 語言,因為編譯器的實作錯誤,用來避免重入攻擊的函式失去效果。駭客因此漏洞從 Defi 專案的合約竊取 7000 萬美金。
且不說編譯器這麼遙遠的主題。多少工程師是有辦法檢查每個專案依賴的套件?我能做到的就是看起來可疑的套件不要用。
或整個軟體開發上,為了減少開發者認知負擔,本身就需要重重抽象。套件是別人包好的,開發者可以在不需要知道背後的運作細節的情況使用它。函式也是,當人們寫一個 get_post_by_id ,不用知道背後的實作細解也大概可以想像這段程式的用途。
所以本來開發上就有某種程度的瞎,與適度的瞎。
瞎的部分是問題會發生的所在。想辦法補起來就好,但不一定總得靠人力。
從編譯器的思路出發,隨興開發就好像某種更高階的語言一樣。以往的程式語言,是模擬英文的感覺,但加上非常嚴格的語法,讓人們可以和電腦溝通。高階的程式語言需要經過層層翻譯,先變成比較低階的語言,再變成組合語言,再變成機器碼,叫石頭與磚頭開始工作。
現在則是我們用非常不精確的人話溝通。 AI 聽得懂,並翻譯成以往的程式語言。這整串流程只是多加了一個 AI 翻譯官。
1940 年代,人們最早是透過機器碼和組合語言和機器溝通的。早期的高階語言可以拉到 Fortran (1957) 或 LISP (1958) 。
最早的時候機器超貴,造價是年薪 100 倍( 1950 機器 100 萬美金,工程師年薪 1 萬美金),但現在工程師的年薪可以買 50~100 台筆電(2025 筆電 2000 美金,工程師年薪 10 萬美金)。因此早期的時候,可以花很多工時,用最接近機器的語言和機器溝通。現代工程師的時間比較貴,用人話才越有效率。 但人話又可以讓開發這件事情讓非工程師的人勝任。
Claude Code 開發者的專訪中,他說人們總說隨興開發讓從零到一這件事情變簡單了。他個人覺得是專案要上線前,往往需要放棄的那 2% 功能,現在可以不用倚賴工程師完成。
隨興開發在重塑人與機器的溝通,也在重塑人與人之間的合作方式。或也許單個人本身的合作方式也變了。
產品經理與開發者一直有某種利益衝突的關係。前者需要更多的功能上線,但後者需要為開發新功能帶來的後果負責,那包含開發的耗時與耗神、上線後的故障等。如果一直推了新功能然後又撤掉,開發團隊士氣會燃燒殆盡。
我自己寫程式的時候,一直要把想要的新功能與自己的耗時和疲勞權衡。但叫 AI 寫程式的時候,我可以一直推功能,一直欠技術債。產品經理腦不會和開發者腦打架。把開發的工作推給 AI 解決了那種利益衝突。
難道這代表隨興開發之下,真的不再用人眼去看以往的程式語言了嗎?不盡然。在高階語言開發之下,會需要動到低階語言的先例不是沒有。
人們常會在效能熱點的地方,換成人比較不好理解但高效能的低階語言實作。在區塊鏈圈子看到的是 Defi 或密碼學的數學會用省油的組合語言實作。低階語言效能高的原因其實是高階語言在翻譯下來的過程中,編譯器往往會以保守安全並犧牲效能的方式翻譯。但如果人們在熟悉業務邏輯的情況下撰寫低階語言,可以知道哪些不必要的步驟可以省略,達成節省運算的目的。
大約一年以前,我需要整合某個新密碼學套件,做某種面向使用者的應用。但因為當時 AI 對一個全新套件以及其密碼學並無理解。我就再把密碼學套件再包成數個符合業務邏輯的函式, AI 就能接手後面的工作了。用函式包裝程式的作法在和人協作的時候很標準,但在和 AI 協作時,好像是為了某種高階語言去用低階語言去最佳化的感覺。
我們的意念變成機器的行動的距離變近了。開發變得像《猴爪》小說一樣,要小心自己許的願望,並一直調整自己許的願望是什麼。
這樣想想就覺得還要開口和寫訊息和機器溝通好冗贅。我們需要魔法。