在 AI 时代的焦油坑里:一个重度用户的破防与反思
我在对话框里对着 AI 彻底破防了
我在调手头项目的代码,最近两个较大的公司任务,自己的有个千年狗屎设计的反转家教。我的代码全是用 AI 写出来的。但今天无论我怎么跟它对话、怎么调整上下文,程序产出的都是屎山,做出来的丑,难用,报错。
几个小时下来,一行业务没推进,整个人疲惫不堪。那一刻巨大的挫败感和暴躁直接涌上来,我忍不住在对话框里骂了一句:
“我他妈的好累啊,为什么,我做的程序改个 bug、加个功能怎么都做不好,浪费时间原地打转,我好烦啊。我不相信任何 AI 给我说的教程,他妈的都是错的。”
我是真的厌倦了网上那些充斥着“几分钟搞定全栈”的 AI 玩具教程。那些单文件的 Hello World 在温室里完美无缺,但在真实项目里,面对真实的生命周期、异步锁竞争和多端状态流转,AI 经常给出表面头头是道、一跑全是语法断层或逻辑死锁的代码。
我甚至不想再听 AI 给我讲任何技术建议,我让它去给我找些真实人类程序员写的帖子。我想看看真人到底是怎么受折磨的。
它翻出了那篇著名的《Programming Sucks》(编程是一件多么糟糕的事)。作者 Peter Welch 写道:
假设你去造一座桥,地基是别人用纸板箱、热熔胶和两只死老鼠糊起来的。施工标准每年换三次,螺丝钉由三个互相讨厌的委员会分别制定。垒到第 12 层楼房开始倾斜,经理走过来说:‘我们要把它改成一艘轮船,下午三点交付。’所有的软件都是建在烂泥上的危楼,每个库的作者都保证生产就绪,但他们自己都没在生产环境跑过第二次。
Fred Brooks 在《人月神话》开篇讲的“焦油坑”:
大型系统开发就像史前巨兽陷在沥青沼泽里。没有任何一个单一的问题能致命,但一万个互相纠缠的隐式依赖,会像焦油一样死死糊住你的手脚。越是用力挣扎,陷得越深。
看着这些前人留下的文字,我脑子里突然浮现出一个一直困扰我、也是我今天最核心的矛盾。我把这句话敲给了 AI:
“架构屎山了不应该重构吗,有了 AI 我可以很快推翻重来,但是无非是把场景重现一遍,可是我总是庆幸有一次能过。”
敲完这句话,我自己愣了很久。因为这就是我当下最真实、最隐秘的病态心理。
有了大模型之后,“推翻重来”的门槛被彻底击碎了。
在过去,推倒一个大项目需要掂量几个月的成本;但现在,看着眼前一坨为了防御各种奇葩边缘而打满丑陋补丁的代码,我总有一种洁癖式的冲动:“这太难看了,让 AI 帮我重构一套优雅的全新架构,反正只要几分钟。”
但 Joel Spolsky 在很多年前就写过那篇《你绝对不应该做的事:从头重写代码》。他警告过,旧代码之所以难看,不是因为原作者蠢,而是因为里面每一行看似多余的丑陋代码,都是真实生产崩溃后立下的墓碑。
AI 确实能帮我生成分层漂亮、函数干净的新架构。但 AI 的脑子里没有那些墓碑。
当我让 AI 推翻重来的时候,它把代码洗得一尘不染,也顺手把我过去几个月踩过的所有暗坑全部格式化了。结果就是:推翻重来,不过是把之前踩过的坑换个姿势重新排队踩一遍。
“可是我总是庆幸有一次能过”。
很多时候写到最后,我和 AI 的协作已经变成了玄学:改一次不行,换个提示词再改一次;再不行,重新生成一次。直到试到某一次,终端里突然跳出一行绿色的测试通过。
在那一瞬间,我心里闪过的根本不是把因果彻底吃透的掌控感,而是一种赌徒式的“庆幸”——庆幸它居然蒙过去了。
我赶紧保存,赶紧 Commit,甚至不敢再碰那行代码。因为我心里知道,底层的薄冰还在。我只是靠不断排列组合撞上了一次成功,因果链条在黑盒里,我随时会掉下去。
借助 AI 编程不是魔法,它只是把我们以前翻文档、写样板代码的双手解放了出来,但它丝毫没有免去软件工程固有的复杂性。面对那座越来越高的屎山,盲目寄希望于“让 AI 推倒重来”不过是一种逃避;而在“碰巧跑通”之后的自我安慰,更是给未来埋雷。
真实世界的工程就是一艘满身补丁的海盗船。承认这些补丁的价值,不要动不动幻想推翻重来的无菌环境;在下一次跑通的时候,多问一句“它到底为什么能过”,把那个因果钉死在单测里。
放下键盘,吹吹风。承认焦油坑的存在,然后再走回坑边,把那只脚一步一步拔出来。
— 读完这一卷,盖个 READ 戳 —
— 来信箱 —
正在查看来信…