克勞德必須從某個地方獲取那些代碼
作者反思了AI輔助編程對復古計算社區的影響。從安德烈亞斯·克林使用AI加速開發的故事,到作者自己在經典Macintosh上的手動編碼項目,再到對“氛圍編碼”產物氾濫的複雜感受——最終認識到AI工具也有其價值。
2019年,我開始觀看Andreas Kling的編程視頻,其中很多是他為全新操作系統SerenityOS編寫代碼的直播。他用Qt Creator IDE時速度飛快,因為IDE的C++代碼補全功能讓類名、變量和函數簽名信手拈來。那時他彷彿將整段代碼都寫在腦中,唯一限制他的只是打字速度。
四年後,他換用了CLion——這款IDE早期就集成了GitHub Copilot的AI代碼補全。起初他對Copilot持懷疑態度,但經過試驗後,幾個月內Copilot就能為他編寫代碼塊,“讀懂他的心思”,甚至寫出完整函數。AI加持的IDE補全終於追趕上了他的思維速度,讓他更快地將想法轉化為代碼。
儘管我着迷於Andreas加速開發的方式,但多年間這並未吸引我用於自身工作。我甚至不用IDE或LSP(語言服務器協議)。我對AI持懷疑態度,大概因其早期失敗而過早否定了它。
後來我開始在網頁瀏覽器中試用Claude,問它一些原本會去搜索引擎找Stack Overflow答案的問題。Claude Code面世後,能直接訪問我筆記本上的代碼目錄並讀寫文件,這種能力令我驚歎。它能完全(且迅速地)逆向工程一個二進制文件,零上下文也能應對。本地模型足夠好且小巧後,我開始在M4 Mac Mini上使用Ollama進行離線本地工作。
與許多事物一樣,我們可以喜歡並使用某種技術、語言或工具,同時拒絕圍繞它們的炒作、騙局和負面社區(比如Rails或Rust)。當然,你也可以選擇不喜歡或不用它們。你可能更傾向用手鋸而非圓鋸,或者開手動擋汽車而非自動駕駛電動車。但我認為,如今還把全部AI技術看作無用或有害是幼稚的。不過AI行業本身……
2020年,受Andreas啓發,我開始錄製自己在8 MHz Macintosh 512Ke(後來換成Macintosh Plus)上使用THINK C 5 IDE編程的視頻。我之前從未用過經典Macintosh,想體驗四十年前人們如何為它編程。我給自己定下規矩:只在Macintosh本機上編寫代碼,用它的Apple M0110鍵盤敲打一切。任何現代計算機都不參與我項目的代碼編寫、編輯或編譯。
從那個系列開始,我編寫了(大部分)一個IMAP電子郵件客户端、一個版本控制系統、一個Wikipedia閲讀器、一個IRC客户端,然後是一個多用户、多線程的BBS服務器。所有這些讓我對Macintosh和C語言有了深刻理解,並激發了我的復古計算愛好,還結識了許多新朋友。
編寫郵件客户端時有一點困擾我:它需要一個現代服務器上的代理來剝離TLS,向緩慢的Macintosh呈遞明文。因此,在給Mac Plus添加Wi-Fi功能後,我又添加了一個TLS卸載設備,這樣我的Mac就能獨立進行TLS解密。
這為編寫經典Mac OS的“現代”網頁瀏覽器(至少比能解析HTML 5的MacWeb更新)提供了最後一塊巨大拼圖,因為如今一切都已加密。我於2024年開始着手開發那個瀏覽器,並添加了Gopher等協議(以及不情願地,Gemini)。
幾個月前,我對計算機感到特別煩躁,發佈了這些筆記:“我對閲讀新軟件項目已失去所有熱情,尤其是涉及復古計算的。一兩年前聽起來很棒、讓我想與作者交流的東西,現在我只假設那是AI吐出來的,感覺空洞而無聊,於是掃過。而編寫軟件就像Marge在卡丁車比賽中那樣:緩慢而穩定地工作一年,寫出某個平台上前所未有的東西,但別人可以聽説了就用Claude在一週內趕超你,做出十倍功能的東西。舉個例子,今天我看到了這些:一個支持CSS、ES5 JavaScript和TLS的Mac OS 9現代瀏覽器;一個System 7的3D打印機監控應用。一年前這兩者聽起來都很棒,但現在我滾動跳過,因為我覺得它們都是AI寫的。”
今天有人發佈了這個:一個完全“氛圍編碼”的經典Mac OS Gopher客户端。Claude甚至為它做了個花哨網站。你猜怎麼着?它的部分代碼甚至來自我自己的項目。
前幾周,Andreas發了這條推:“感覺‘我其實喜歡親手寫代碼’即將成為程序員2026年的某種道德信號。”雖然我並非完全同意,但這確實讓我質疑自己為何要為四十年前的電腦編寫只有少數人使用的軟件,以及為何在這種情境下被氛圍編碼的軟件所困擾。
我寫很多軟件是因為我自己想要,但也樂意讓社區其他成員使用。或許我只是虛榮,因為我希望自己的心血被所在社區的人們欣賞,而如果某個氛圍編碼版本帶着一堆功能和華麗界面出現,我擔心我的作品會被淹沒,感覺白費了力氣。我的Comet會被Yahoo掉。
所以,如果一個氛圍編碼工具真正有用且現在就能用,而我的卻已經開發了多年,或許我應該高興,因為社區其他人有了新東西可用。我可以繼續為自己的版本工作,在它準備好時發佈。畢竟,克勞德必須從某個地方獲取那些代碼。