编程领域正在经历一场AI助手的浪潮,从Copilot到Cursor,再到Zed和Aider,AI助手已无处不在。现在的编程环境中,AI助手几乎成了标配,程序员很难在日常工作中完全避开这些工具。就个人经验而言,笔者尝试过几乎所有的AI助手,并将它们融入了工作流。作为一位拥有超过10年编程经验的程序员,对AI助手的普遍使用带来的影响深感兴趣,于是决定反思:AI助手真的会让自己变成一个更差的程序员吗?
当今需要的技能比过去少了吗?
上世纪90年代出生在巴西的人,对赛车手艾尔顿·塞纳(Ayrton Senna)或许不陌生。塞纳被认为是最具天赋的车手之一,对驾驶技术精益求精,他在1994年圣马力诺赛车场的一场事故中不幸去世。关于“老派车手和现代车手谁更优秀”的辩论从未停止过。很多人认为,过去的车手需要掌握更全面的技能,而今天的车手依赖于自动化技术,失去了手动操控的感觉。
类似地,在编程中,高级语言将很多复杂的内容进行了抽象,使得开发者不再需要掌握底层细节。现在,AI助手引入了一种新的交互模式:自然语言。对于编程来说,这种抽象到底是好是坏?
核心技能 vs. 工具知识
关于是否需要接受正式的计算机教育一直存在争议。在大学的学习帮助程序员理解了计算机的本质,掌握了编程的基本原理。而今天的快速培训课程和训练营则更注重具体工具的使用。相比之下,大学教育更注重培养核心技能,而训练营更侧重于快速上手和职业应用。
这种区别同样适用于编程的AI助手使用中。比如,笔者曾在2018年开始学习Gatsby,并投入大量时间掌握了它的插件和配置。后来Gatsby逐渐被Next.js等框架取代,这些投入的时间和精力在框架更替中变得不再有用。然而,对于服务器端渲染和静态站点生成的理解却保留下来,这些核心技能在技术变迁中依旧有用。AI助手可以协助程序员完成特定框架的实现细节,而不必担心失去对核心编程概念的掌握。
AI助手的积极作用
尽管AI助手可能会让人变得“依赖”,它们也有显著的优点。AI助手可以帮助程序员处理重复性任务,减少分心,保持专注。比如不记得某个TypeScript语法时,可以直接让AI助手给出提示;需要重构文件时,可以让助手分解代码,从而保留精力去完成更重要的设计任务。AI助手在IDE中的集成大幅减少了程序员在小问题上的分心,让他们专注于解决更复杂的抽象问题。
什么时候会出问题
当然,AI助手也可能带来负面影响,最典型的就是过度依赖。当程序员完全依赖AI助手来编写代码,一旦代码出现问题,就会陷入重复提示AI、修改代码的困境,反而浪费了时间。特别是当AI生成的代码质量低下时,程序员需要进行大量的“清理”工作,这很可能让最终完成的工作量比自己手写代码还要大。因此,使用AI助手时要有明确的判断,知道什么时候应该交给AI处理,什么时候应该自己动手。
知道什么时候问题已经解决
编程中,大部分工作不是在解决特别难的技术问题,而是在组织、分析需求、配置工具。掌握“什么时候交给AI助手”是关键。比如,当任务是添加一个简单的下拉菜单排序选项,AI助手可以帮助处理“实现细节”的部分。程序员则可以将注意力集中在核心逻辑上。通过这种方法,程序员可以释放大脑资源,用于更具挑战性的部分,而AI助手则负责“例行公事”。
结论
AI助手确实可能导致编程技能的退化,尤其是当过度依赖AI时。然而,AI助手作为工具,应该是一个实现目标的手段。程序员的最终目标是将现实世界的需求翻译成计算机可以理解的语言,AI助手可以协助实现这一过程,但人类的判断力和抽象能力依然是关键。适当地使用AI助手,可以让程序员将精力放在更具挑战性的任务上,提升总体效率,最终成为更高效的开发者。