克劳德必须从某个地方获取那些代码
作者反思了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掉。
所以,如果一个氛围编码工具真正有用且现在就能用,而我的却已经开发了多年,或许我应该高兴,因为社区其他人有了新东西可用。我可以继续为自己的版本工作,在它准备好时发布。毕竟,克劳德必须从某个地方获取那些代码。