关于 Copilot 的错觉:一场对开发者的警醒
关于 Copilot 的错觉
Jj
2025年5月22日 • 阅读时长11分钟
第一章:我的同事,那位“程序员”
一个空壳人,更像鹦鹉而不是人。我的老板,一个坚信结对编程神圣仪式的人,像连体婴一样把我和这位“程序员”同事拴在一起,但我们来自不同的星球。我们共享一个键盘,却没有一个大脑。天啊,差远了。
“等等,我有个想法。快把键盘给我。”
一个想法。是的。就像蹒跚学步的孩子“想”把叉子插进墙上的插座一样。我正要构建一些美丽的东西——一段精简、优雅的逻辑,像刀切黄油一样穿透复杂性——而他来了,敲打键盘就像它欠他钱一样,粘贴着他从 2014 年由一位 Uncle Bob 的信徒写的 Stack Overflow 评论中 Frankenstein 式地拼凑而来的代码。
他知道我们的系统做什么吗?不知道。他读过工单吗?绝对没有。他是否自信地以鲁莽的态度改变全局状态?他绝对是这么做的。
我正在进行一些重构。拧紧螺栓,清理组件树,重新调整系统的脉轮。
突然:“嘿,我添加了一个 useEffect
,当_任何事情_发生变化时,它都会重新获取所有内容。很酷,对吧?”
“为什么?”我问,像在军事行动中被绑架的人质一样眨着眼睛。
“它修复了问题,”他说。“那个东西不能工作的地方。现在它是一个可以工作的东西了。”
一个伪装成队友的混乱猴子。没有测试。没有性能分析。不了解副作用或性能影响。只是盲目的点击、敲击和输入。相当于敲打你的电视来停止静态画面的编程。
而且他对_每个人_都这样做。一个单人漏洞工厂。像一个病态、扭曲的全栈 Rasputin 一样,在初级程序员的耳边低语着半成型的解决方案。显然,允许友军火力误伤。
系统崩溃了。什么都部署不了。UI 就像我冰箱里的蔬菜一样被冻结了,而我本应该在 8 年前解冻它们。我亲爱的副驾驶在哪里呢?
不在。
他消失了——可能正在阅读一个闪亮的新 JS 框架,他下周会试图强加给我。与此同时,我只能用一支由遗憾制成的手电筒,在回调地狱中探险。
我的老板把我逼到墙角。“你为什么不更多地和他结对编程?他打字速度是你的_两倍_。”
当然,他打字很快。就像一只猫在机械键盘上癫痫发作一样。但这并不意味着它应该编写生产代码。
我不断地推动自己——学习基础设施,改进我的心智模型,为权衡而苦恼。而他呢?他用 Google 搜索。他浏览。他粘贴。偶尔,他会炫耀一个巧妙的技巧——半正确、脱离上下文——团队会像穴居人发现火一样发出赞叹声。
我开始变得懒惰。当然我会。当系统强迫你和一个产生幻觉的小丑一起编写代码时,最终你会停止抵抗。你让他打字。你让他“高效”。你退出。你把你的大脑交给噪音,只是漂浮着。
显而易见队长来拯救世界了。 我说的不是一个程序员。我描述的是 GitHub Copilot。或者 Claude Codex。或者 OpenAI lmnop6.5 ultra watermelon。
这与工具、生产力或加速无关。这与进步的_错觉_有关。因为如果那个程序员——如果那个_东西,那个生物_——以人的形式走进你的站立会议,在忽略你的架构的同时,把半正确的垃圾代码输入到你的代码库中,并在清理过程中消失,你会在他们说出“没有阻碍者”之前解雇他们。
但是贴上 Microsoft 的营销标签,并将其插入组织中每个开发人员的 IDE 中?现在_这就是创新。科学。进步。利润_。
一架商业航空公司的真正的副驾驶?他们了解飞机。了解系统。他们做过模拟。他们通过了重新认证。当他们说话时,是为了_增强_飞行员——而不是向驾驶舱发射随机的建议,并在飞行途中弹射自己。
Copilot 不是那样的。它只是成千上万篇博客文章和自大的 Stack Overflow 帖子中的幽灵在低语,“嘿,我曾经见过这个。用我的眼睛。这意味着它是好代码。让我们部署它吧。”然后在应用程序投入生产并且起落架无法放下时消失。
如果你让那个幽灵驾驶飞机,你就活该被炸成一团火球。
第二章:优点
在用太阳的愤怒继续焚烧这个合成类人生物之前,让我们先把一件事弄清楚:并非一切都是坏的。
即使是牌桌上那个脑叶切除的骗子,偶尔也会拿到同花顺。那么 Copilot 呢?好吧,有时它也知道一两件事。
你很年轻。你从来没有接触过 C++。你盯着它的语法,就像它是一些火星洞穴壁画一样。你向预言者寻求帮助,然后砰——它就在那里。模板、智能指针、基于范围的 for 循环——语法上完美无瑕,就像它从 Bjarne 的大脑里直接滑到你的屏幕上一样。
当然,它不知道边缘情况。它不会低语,“嘿——如果你变得聪明并在其中像疯子一样抛掷原始指针,shared_ptr
可能会泄漏。”它不会把你指向那些神圣的卷轴,在那里老兵们像神学家一样剖析经文来辩论异常保证。但是,如果你已经知道你想要什么,只需要咒语,那么它比大多数人类实习生是一个更好、更快的抄写员——而且当你要求它在凌晨 3 点编写模板元编程代码时,它也不会抱怨。
现在,假设你正在做_真正的编程工作_ ——系统设计。重要的决定。基础设施。需要脊梁和对 ByteByteGo YouTube 频道的百科全书式知识的那种东西。你像战前的将军一样制定你的计划:这是入口,这是队列,这是可能会杀死我们所有人的缓存失效策略。
然后你问 Copilot,“嘿,什么会出问题?”
突然,它像安全审计员一样滔滔不绝地谈论着弱点。可能其中一半是愚蠢的。可能有些是重复的。但它倾倒头脑风暴的速度比你的初级程序员快,现在你有了编写规范的弹药,让你看起来像是你和 Martin Kleppmann 一起玩乐。
有时你只是累了。不是精神上死亡,而是能量不足——你的大脑处于“将对象转换为字符串”模式。你不需要_帮助_。你只是不想像解决一个用果冻制成的魔方一样,在你的头骨中旋转矩阵。
所以你说,“嘿,我有一个 C# 对象,我想要一个 LINQ 查询,它按字段 X 对其进行分组,对 Y 求和,并过滤 Z。”
Copilot 像一个拿着剪贴板的奇怪的小妖精奴隶生物一样回答:"完成了,老板。"
你不相信它。你一行一行地检查它。但仍然——你不必在你的脑海中玩弄二十个方法链,这为你节省了时间来思考实际问题。
也许你正在阅读一些密集的数学白皮书,这种白皮书是由那些拥有博士学位并且不顾人类理智的疯狂数学家编写的。你没有精力将这个充满 LaTeX 的古老卷轴转化为代码。Copilot 尝试了一下,并给了你一个半生不熟的伪代码支架。垃圾?也许。但垃圾你可以建立在其上。你处理性能调整、SIMD、底层细节。它只是给了你堆放炸药的脚手架。
也许你继承了别人的代码库。一个嵌套闭包、半注释的 hack 和像 d
和 foo
这样的变量名的雷区。一个复杂的 OOPism 的烂摊子,你必须遍历 18 个文件才能跟踪一个单一的行为。你没有一整天的时间。在你登陆并开始解除陷阱之前,你需要一次飞越——对战区的鸟瞰图。
询问 Copilot:"这段代码在做什么?" 它不会是诗歌。它不一定会提供完整的画面。但它_足够接近_让你在深入了解内部情况之前确定自己的方向。
所以——该称赞的地方就称赞**。** Copilot 就像一个油腻、高效但实际上很穷的实习生:
- 擅长语法记忆。
- 在列出你的盲点时出奇地快。
- 如果你给它提供完全正确的词语,擅长构建脚手架。
- 不擅长细微差别。
- 没有监督毫无用处。
- 如果单独放置 30 秒,绝对会在生产环境中杀死你。
现在,让我们回到放火烧它的状态。
第三章:作为程序员的你
首先:我喜欢编码。不是监督。不是像一个流着口水的硅实习生一样,徘徊在一个合成的脑叶切除聊天机器人之上,试图记住 std::move
实际上_做什么_。我不想成为审查一些神经网络的 switch
语句发烧梦的肉包中间经理。我想构建东西。真正的东西。奇怪的东西。_着火_类型的东西。"但我只是使用 AI 来处理样板代码!"你畏畏缩缩地说,紧紧抓住你的 Copilot 订阅。听听你在说什么。如果你像一个工业时代的齿轮猴子一样每天编写相同的样板代码,_自己_自动化它。编写一个库。发明一个宏。重拾一些尊严。如果 AI 正在做你的“无聊部分”,那么_剩下_让你做什么呢?摆弄滑块?在推理发挥作用时进行数字填色?
让我们不要忽视 FOMO(害怕错过)地精。我看到你了。凌晨 2 点狂饮 Monster 能量饮料,告诉自己你正在“构建未来”,同时用一个机器人用它从 2016 年 GitHub 上抓取的语法喂你,拼凑一些 Frankenstein CRUD 应用程序。它有漏洞。它很丑陋。你在将视频发布到 Twitter 之前甚至没有对它进行一次检查。“我只是行动迅速!”你说。是的——像旅鼠一样直接冲下悬崖。AI 没有帮助你构建任何新颖的东西。它不能。它只知道以前做过什么。它是具有优越感的自动完成。
你想要与代码的真正连接?你_赢得_它。你深入挖掘。你在凌晨 3 点与段错误搏斗。你踱步你的公寓,喃喃自语着关于指针算法。你燃烧着 Handmade Hero 直到你_理解_它。你写你自己的笔记,而不是拍讲座幻灯片并假装它有用。当你外包思考时,你外包了学习。你变成了一个管道,让一只机械鸟将它的狩猎物直接反刍到你的小鸟嘴里。你不知道你的代码。你是在照顾它。
让我们来谈谈你代码的质量,因为它并没有变得更好。大多数工程师已经编写了臃肿、抽象、缓慢的代码,这些代码像加利福尼亚的野火一样燃烧着 CPU 周期。干净的代码?哈!你是在为_其他程序员_的学术自慰而写作,而不是为硬件而写作。你已经忘记了机器的重要性。AI 没有内存局部性的概念。没有对缓存未命中的直觉。它不会展开循环,也不会发现你的原子结构中的错误共享。它是在已经是对硅的侮辱的代码上训练出来的。
问题不仅仅是懒惰。这是_退化_。工程师停止探索。停止改进。停止_关心_。再多一层抽象。在渲染循环中再多一个懒惰的获取调用。最终,你生活在技术债务的大教堂中,每个用户都在付出代价——一次几毫秒,每次点击都是对你冷漠的征税。
还有“副驾驶”的品牌。一个真正的副驾驶?那是一个同伴。那是一个经过认证的操作员,如果你因糟糕的 Taco Bell 而昏倒,他可以驾驶飞机。他们训练。他们练习。他们_和你一起_审查清单。GitHub Copilot 更像是一个玩了 200 小时 Arma 3 并认为他可以降落 747 的家伙。他读过一次手册。用普通话。倒着读的。现在他对着你的肩膀大喊,“让我快速编写那一段代码,我在 Slashdot 评论中看到了它!”
在那时,你不是在与副驾驶一起工作。你是在用装满弹药的依赖关系图玩俄罗斯轮盘赌。
你想像一个真正的程序员一样吗?用你的头脑。尊重机器。或者离开驾驶舱。
第四章:作为机器的计算机
听着。你是人类。柔软的肉体,腐烂的牙齿,突触在咖啡因和怨恨的驱动下相互泼洒着电信号。但是_你_ ——在你最疲惫、睡眠不足、眼睛像浣熊一样的最佳状态——你可以_尝试_。你可以眯起眼睛看着抽象层并_看穿它们_。剥开漂亮的人体工程学类型安全、纯粹、惰性、不可变的语法糖,并想象编译器吐出的汇编代码的混乱。你可以_感觉_缓存行,就像第六感一样。你知道数据想要在哪里。以及当你搞砸时硅在哪里生气。
机器是真实的。硅是真实的。DRAM、L1、错误共享、掷硬币的分支预测器——这一切都是真实的。如果你关心,你_可以_与它一起工作。你可以使你的程序像一条钢铁巨蛇一样以几乎没有开销的方式在内存中滑行。你可以熟练地安排预取。你可以手工滚动一个分配策略,让 malloc
看起来像小孩子的游戏。你可以知道——实际上_知道_ ——什么时候该活动你的指关节并编写几行肮脏但漂亮的内联汇编代码,以直接将类固醇注射到你的程序闪亮的脸颊中。
但是机器人呢?机器人?机器人毫无头绪。
机器人_完全_不理解。它无法区分页面错误和纸张划痕。它会像我连续 2 天不睡觉后产生幻觉一样,产生一个内存模型。它无法进行性能分析。它无法理解火焰图。它无法感受到在热循环中浪费的 CPU 周期的寒冷燃烧。它会复制一个汗流浃背的陌生人从 08 年的 Stack Overflow 帖子中的建议,该帖子是在 Pentium 4 上使用 512MB 的 RAM 和一个梦想进行基准测试的。它会说“这是最佳的”,好像它知道什么一样。好像它_见过_缓存未命中一样。它没有。你见过。
这东西会给你喂垃圾。它会给你喂来路不明的人提供的虚假智慧,并恳求你相信它。但是,如果你想制作一个快速、漂亮的系统——如果你想塑造那种嵌入到心脏起搏器、导弹制导系统和 M1 坦克中的软件——你最好把那个机器人扔出气闸并_学习_。
你通过_实践_来培养品味。通过受伤。通过用外科手术工具剃掉纳秒。通过在星期一编写一个例程,在星期二重写它,并在星期三意识到它仍然很糟糕。你不是通过询问 2025 年的 MS Clippy 如何完成你的工作来培养品味。
从计算历史的长河来看,我们仍然覆盖着泥土,用犁头拖拽着我们的比特。我们骑着_马_。但我们中的一些人——那些眼睛爆裂、键盘烧焦的人——我们中的一些人知道如何构建下一个东西。火车。快艇。纯代码的超音速喷气式飞机。
那些继续像对待神圣预言者一样使用 AI 的人呢?他们会在那里试图用胶带将马绑在发动机缸体上,想知道为什么它不会飞。说着,“嘿。它仍然没有飞。…… …… …… 仍然没有飞。…… …… …… 仍然没有飞,请修复它。”
第五章:结论
我最讨厌 AI 及其易于访问的一点是:黑客灵魂的缓慢、痛苦的死亡——不是由战争或稀缺造成的,而是由便利造成的。由_按钮_。由机器人。
真正的恐怖不是 AI 会抢走我们的工作——而是它会让那些从一开始就不想要这份工作的人_进来_。那些梦想着 SaaS 和 LinkedIn 个人资料中 Web3 的吸血鬼。那些空虚的躯壳,他们将终端视为不是一个领域,而是一个挖掘 VC 资金的铲子。他们会像对待生产力的圣灵一样,对着他们的 GitHub Copilot 流口水,像生产氧气一样生产 React CRUD。他们会再次 fork VS Code,只是为了将同样的梦想卖给一个同样被迷惑的孩子。
这里曾经有过魔法。这里曾经有过_疯狂_。
孩子们会用布满血丝的眼睛在 IRC 上熬夜,试图在 OpenGL 中渲染一个立方体而不会导致他们的未来段错误。他们_关心_。他们会在烤面包机上安装 Gentoo,只是为了看看它是否会启动。他们知道烧毁的稳压器的气味以及 Doom 在他们的计算器上达到 10 FPS 的_确切_汇编代码行。这些人是_艺术家_。他们像爵士音乐家一样编写代码——充满愤怒、精确和神圣的混乱。
现在呢?我们正在构建一个好奇心在门口被脑叶切除的世界。一些可怜的混蛋——天生伟大——将被告知每天“审查这个 AI 生成的补丁集”八个小时,直到所有这些奇迹都钙化为冷漠。终端将变成电子表格。调试器变成棺材。
因为_你不知道你不知道什么_。这是一个残酷的笑话。我们将用_认为_他们很优秀的人来填补这个行业,因为他们的机器人通过了 CI。他们会自信地漂浮过去,而真正的那些人——那些饥渴的人——会被一个不再重视理解的系统所吞噬。只有输出。只有每秒令牌数。
更糟糕的是,我们将使这种平庸正常化。将其固定在工具中。将其变成最佳实践。我们将把当前臃肿、缓慢、过度抽象的地狱景象奉为软件的_巅峰_——而从系统中榨取最后一滴性能,或构建精简、狂野和精确的东西的想法,听起来就像_民间传说_。
如果发生这种情况?如果最后的真正的程序员淹没在点击按钮的职业追逐者的海洋中——那么我为那些跟随我的聪明的局外人孩子们感到遗憾。
将你的思考推迟给机器人,我们都会腐烂。