作者:Doug Slater
发布时间:2025-05-19

在软件工程中,过度依赖LLM会加速无能。LLM无法替代人类的批判性思维。

本文完全没有使用任何AI编写。

到目前为止,关于2022年底冲击公众意识的AI和LLM浪潮,已经有大量文章讨论。作为一名经验丰富的软件工程师,我想谈谈我观察到的关于LLM的两种令人担忧的工程观点。

"LLM是我的朋友"

我不认为有人会真的相信计算机程序是他们的伙伴,所以让我们来解释上述短语的委婉含义:即LLM为其用户带来了巨大的好处。

将LLM视为盟友的工程师总是优先考虑或感到被迫优先考虑速度;对他们来说,生产胜过洞察力。虽然LLM确实可以快速提供大量代码,但它们的使用带来了长尾风险。

使用LLM的风险

  • 输出风险。 LLM可能给出明显错误的输出,例如无法编译的代码。更可能且更危险的是,它可能给出微妙且无法检测的错误输出,如逻辑错误。如果提示者没有资格评估输出,风险会更高,例如项目经理为源代码提示。

  • 输入风险。 LLM不会质疑引导性的提示¹,或者假设有缺陷或上下文不完整的提示。例如:工程师提示"在C#中提供一个线程安全的列表实现",并收到200行完美、正确的代码。这仍然是错误的答案,因为问题应该是"我如何使这段代码线程安全?",答案是"使用System.Collections.Concurrent"和1行代码。LLM无法识别XY问题²的实例,因为它没有被要求这样做。

  • 未来速度。 这是典型的"技术债务"论证,但更紧迫。AI可以如此快速地降低代码库的质量。你见过囤积症的结果吗?从外面看,房子或公寓可能看起来很好。但里面是不卫生的、令人厌恶的和无法正常运作的。开发者发现,如果没有强有力的护栏,LLM产生的代码就像这样的空间。

  • 用户幼稚化。 将思考和问题解决外包给LLM的个人和组织内部将发生人才灭绝:

    • 当高级工程师被剥夺通过富有成效的斗争学习的机会时,他们现有的问题解决和批判性思维技能会萎缩:

      • "微软对知识工作者的研究发现,AI驱动的信心往往以牺牲批判性思维为代价"³

      • "在一个推动'反射性AI使用'的世界中,我倡导一些不同的东西:与AI进行深思熟虑、有意的合作,保持编码作为一门手艺的本质"⁴

      • "LLM给我完成的思想,精美而有说服力,但没有自己发展它们所带来的智力成长"⁵

    • 初级工程师从一开始就从未发展出这样的技能,因此永远无法反过来指导未来的初级工程师。

  • 失去快乐。 许多开发者报告说,使用AI剥夺了他们的心流状态和创造的快乐。⁶ AI生成的代码读起来和修改起来都很痛苦。

在未来的文章中,我计划写关于每种风险的缓解措施。如果这听起来有趣,请务必在下面订阅。

"我会变得多余"

不,你不会。也就是说,你确实可以做一些事情来进一步区别于LLM。为了保持主题,我将把这推迟到未来的文章。

有两种编程能力是LLM无法提供的:程序理论和程序熵。

程序理论

...编程应该被正确地视为程序员形成或获得某种洞察力、理论的活动,关于手头的事务

-- Peter Naur,《编程作为理论建构》,1985年⁸

Naur是计算领域的伟大人物之一。他反对当时的流行观点,认为程序不是其源代码。相反,程序是一个共享的心理构造:一个理论或设计。从中,工程师推导出代码,但有价值的工作产品是设计,而不是代码。

为了帮助你思考程序理论和程序文本之间的区别,考虑这个思想实验:想象两个同等才能的工程团队A和B被锁在不同的房间里。每个团队都被告知不要与另一个团队交流。团队A的任务是编写一个程序,例如一个简单的基于终端的国际象棋游戏。团队B只是等待,玩真正的国际象棋,或者其他什么。当团队A完成时,他们的源代码被交给团队B。现在每个团队被要求并行地为程序添加一个功能,例如一个虚拟象棋玩家,这样游戏就可以单独玩了。(我们让团队A在开始之前先休息一下)。

问题:哪个团队会提供更好的解决方案?

答案:团队A,因为这些工程师对他们刚刚创建的程序有一个新鲜的心理模型,而团队B没有。

根据Naur的观点,理论很重要,因为程序不可避免地需要维护,即在初始创建后进行修改。如果你只有源代码而没有对其设计的内化理解,这些修改的成本会更高。我想我们每个人都能记起被介绍到一个大型现有代码库的时候。起初我们的生产力接近零。当我们将程序理论加载到我们的头脑中时,生产力上升了。

LLM和程序理论

目前存在的LLM无法掌握理论、设计或心理构造,因为它们在上下文窗口之外不记得。只有人类才能获得和保持程序理论。

程序熵

复杂性是编程的基本对立力量⁹,它与熵相关。

...程序构建是一个熵减过程...程序维护是一个熵增过程,即使是最熟练的执行也只能延迟系统陷入无法修复的过时状态

-- Fred Brooks,《人月神话》,1975年

Brooks,计算领域的另一位杰出历史人物,断言在初始构建之后,对程序所做的更改只能使源代码更加复杂。然而,与设计和谐一致的更改会以较慢的速度这样做。

LLM和程序熵

LLM是一个标记预测器。它只在文本级别工作。它无法在概念级别工作:它不对想法、图表或需求规范进行推理。每个用大块代码提示LLM的人都看到LLM倾向于应用不必要和奇怪的更改,对话拖得越久,它偏离得越多。你多久见过LLM降低一段代码的复杂性?

只有人类才能减少或抵抗复杂性。

结论

我们通过回忆我们学科的两位先驱对软件设计和复杂性的看法,为LLM时代找到了智慧。

如果你希望AI能将你的工程职业生涯推向下一个水平,请注意它可能会产生相反的效果。LLM可以加速无能。

如果你是一名熟练、有经验的工程师,担心AI会让你失业,请采用更细致的观点。LLM无法替代人类工程。

AI的商业吸引力是通过商品化工程降低成本,但就像离岸工程人才带来混合成果一样,LLM也有不足并带来风险。

AI炒作周期最终会达到顶峰¹⁰。现在过度使用AI的公司将继承长尾成本,它们要么转向要么灭绝。因此,人类在工程中的长期价值主张保持不变。世界仍然需要并愿意为工程中的技术技能和深度思考付费。

不过,AI会继续存在。将其用作工具,而不是拐杖,并继续投资于2019年被认为有价值的相同基本工程技能。

参考文献

  1. 引导性问题

  2. XY问题

  3. ThoughtWorks技术雷达第32卷

  4. 编码作为手艺:回到老健身房

  5. 关于思考的思考

  6. AI编码的隐藏成本

  7. "我想知道我是否会变得多余"

  8. 编程作为理论建构

  9. Grug论复杂性

  10. Gartner炒作周期