AI 生成代码导致开发者从「写代码」退化为「审 AI 输出」,作者呼吁保持对系统原理的深度理解,避免因依赖 AI 而丧失调试和架构能力。
Originally published on tamiz.pro.
AI 辅助编程的承诺令人向往:更高的效率、更少的样板代码、以及消除切换上下文的疲惫感。像 GitHub Copilot、Cursor 以及各类 IDE 插件这样的工具,已经从新奇玩意变成了许多现代代码库中的必需品。然而,一个微妙却危险的偏移正在我们的开发实践中悄然发生。我们正在经历从"编写代码"到"审核 AI 输出"的转变,而这样做,我们正在放弃作为工程师最宝贵的资产:主导权(agency)。当我们不再追问系统如何运作,而是开始接受机器所说的它是如何运作的时候,我们调试、架构和创新自己的能力就在退化。本文认为,在自动化时代保持开发者主导权不仅是哲学立场,更是构建健壮、安全、可维护系统的关键工程要求。
开发者主导权面临的主要威胁是"能力幻觉"。当 AI 在几秒钟内生成一个复杂的 React 组件、一个精巧的正则表达式或一条多表连接的 SQL 查询时,它创造了一条认知捷径。人类大脑天生追求效率,往往跳过深度验证步骤,因为输出"看起来是对的"。这在心理学上被称为"流利性启发式"——信息处理的流畅度被误认为就是其真实性。
考虑这样一个场景。你需要为一个 API 端点实现限流中间件。你没有去查看现有的 express-rate-limit 库,也没有写一个简单的内存计数器,而是让 AI 助手"用 Redis 创建一个自定义限流器"。它提供了一个使用 ioredis 的滑动窗口算法代码片段。代码编译通过了。它在你的本地环境运行成功。你合并了这个 PR。
三个月后,在负载下,你的 Redis 连接池耗尽了。AI 生成的代码没有优雅地处理连接错误,也没有考虑到网络往返带来的延迟抖动。因为你没有编写这段逻辑,所以你不懂其中的边界情况。你感受不到这个抽象层的"重量"。这种触觉理解的缺失,是工程主导权基础的第一道裂缝。
在传统软件工程中,所有权源于创造。如果你写的,你就懂。你知道变量名、控制流和隐含假设。在 AI 增强的工作流中,这个链接被切断了。我们变成了代码的策展人而非作者。这个区别微妙却深刻。策展人只是挑选,作者才真正理解。
当我们把 AI 生成的代码当作黑盒处理时,我们就失去了追溯决策脉络的能力。为什么模型选择 Map 而不是 Object 来做缓存?为什么使用 async/await 而不是 .then() 链?这些选择反映了在可读性、错误处理和性能方面的权衡。通过不加质疑地接受输出,我们放弃了对这些权衡做出明确判断的责任。我们成了技术的被动消费者,而不是系统的主动塑造者。
侵蚀主导权的第二个主要因素是认知卸载。正如 GPS 导航削弱了我们的先天空间感知能力,AI 编程助手也正在削弱我们的算法直觉。这不是关于记忆语法;而是问题解决模式的内化。
调试是软件工程的熔炉。它是我们面对系统的心智模型与实际行为之间差距的地方。这个过程构建了深刻而持久的知识。当 AI 工具被用来生成 bug 修复时,我们绕过了这个学习循环。我们应用了补丁,bug 消失了。但我们没有学到它为什么会发生。我们的诊断能力没有得到强化。
随着时间推移,这导致了一种脆弱的技能组合。一个从未手动追踪过闭包作用域或优化过数据库查询的初级工程师,在 AI 失效时可能会陷入困境——而随着系统复杂度增加和独特性提升,这种情况发生的可能性也在上升。AI 是在公开代码库中的常见模式上训练的。它在处理那些存在于生产环境中的特殊的、遗留的或高度优化的代码时表现吃力。当工具失效时,低主导权的工程师就会失去方向。
架构思维需要对系统有全局视角。它涉及在一致性、可用性、分区容错性、延迟和成本之间平衡权衡。AI 助手通常针对局部正确性进行优化:它们生成的代码在当前上下文中语法正确、逻辑合理。它们很少考虑更广泛的架构影响。
例如,AI 可能会建议为一个小的、很少被调用的函数使用微服务。表面上,这促进了关注点分离。然而,它可能忽略了这个决定所带来的运营开销、网络延迟和分布式追踪复杂性。如果没有开发者主动主导权来质疑这些建议,我们就有风险构建出在技术上"正确"但在架构上不合理的系统。
重新获得主导权不意味着拒绝 AI 工具。那既不现实也不可取。AI 是一个强大的力量倍增器。目标是从不积极的消费转变为主动的协作。以下是一个在 AI 增强工作流中保持开发者主导权的框架。
永远不要在首先阅读和理解之前就把 AI 生成的代码粘贴到代码库中。如果你无法向同事解释生成代码的每一行,你就还没准备好合并它。这迫使你参与逻辑、识别潜在问题并验证假设。它把 AI 从作者转变为一个提出想法的结对程序员,而你始终是主工程师。
在接受 AI 生成的代码后,花时间重构它。重命名变量以匹配你的领域语言。拆分复杂函数。添加解释"为什么"的注释,而不仅仅是解释"是什么"。这个过程将代码重新嵌入你的心智模型。它向你未来的自己(和你的团队)表明,这是你的代码,而不是 AI 的。
AI 模型偏向于常见模式。主动质疑这些默认值。问问自己:"对于我们的特定约束来说,这是最有效的解决方案吗?""这是否引入了不必要的依赖?""这如何扩展?"通过对输出提问,你重新确立自己作为决策者的角色。你用 AI 来生成选项,但用你的专业知识来选择和精炼它们。
随着 AI 处理更多的样板代码和日常任务,深度基础知识的价值反而增加了。理解编译器行为、内存管理、网络协议和数据库内部原理变得更重要,而不是更不重要。这些正是 AI 最可能失败或提供次优解决方案的领域。通过投资这些深层技能,你确保自己始终是房间里的权威。
重新获得主导权不只是个人责任;它是一项文化要求。工程领导者必须营造一种鼓励质疑 AI 输出的环境,而不是惩罚这种行为。代码审查应该关注理解和原理,而不仅仅是语法和风格。如果审查者看到 AI 生成的代码,他们应该问:"你能给我讲讲这个是怎么工作的吗?"这个简单的问题强化了对所有权的期望。
此外,招聘实践也应该演变。虽然熟练使用 AI 工具正在变得必不可少,但批判性思考、调试复杂系统和做出架构决策的能力仍然是高级工程师的核心区分因素。我们应该寻找把 AI 当作杠杆使用的工程师,而不是当作拐杖。
AI 辅助编程的时代已经到来,而且不会消失。问题不是我们是否使用这些工具,而是我们如何使用它们。如果我们允许 AI 成为一个决定我们编码实践的黑盒,我们就冒着失去主导权、技能和构建真正健壮系统能力的风险。但如果我们将 AI 视为协作伙伴,保持我们作为代码架构师和所有者的角色,我们就能释放前所未有的生产力和创造力。
开发者主导权是原始计算能力与有意义的工程之间的桥梁。它是人类元素,确保我们的系统不仅仅是功能性的,而且是深思熟虑的、可维护的,并与我们的价值观一致。让我们不要让那座桥倒塌。让我们用 AI 来增强我们的智能,而不是取代我们的判断。这样做,我们找回的不仅仅是代码,还有我们的工艺。
For more insights on navigating the evolving landscape of software engineering, explore Tamiz's Insights for deeper dives into the intersection of technology and professional growth.
For further actions, you may consider blocking this person and/or reporting abuse