本文经授权转自公众号CSDN(ID:CSDNnews)
作者 | Darren Horrocks,翻译 | 郑丽媛
随着 AI 技术的迅猛发展,诸如 GitHub Copilot 这样的编程辅助工具正逐渐渗透进开发者的日常工作中。一方面,Copilot 凭借其强大的代码生成能力,极大地提升了开发效率,让许多程序员得以从繁琐的编码任务中解脱出来,专注于更高层次的设计与创新。另一方面,也有声音指出,过度依赖 Copilot 可能会导致程序员的基本技能和创造性思维逐渐退化,进而影响整个行业的健康发展。
原文链接:https://www.darrenhorrocks.co.uk/why-copilot-making-programmers-worse-at-programming/
过去几年里,诸如 GitHub Copilot 以及其他大语言模型(LLM)这类 AI 驱动工具的快速演进,都承诺将彻底改变编程方式。通过运用深度学习,这些工具能够生成代码、提供解决方案,甚至可以实时解决问题,大大节省了开发者的工作时间。
然而,尽管这些 AI 工具在大幅提高了生产力,但越来越多的人担心它们可能对程序员的编程质量和技能产生意想不到的负面影响。
1、核心编程技能的退化
依赖像 Copilot 这样的工具,带来的一个最大隐患就是程序员的核心编程技能逐渐退化。在过去,学习编程意味着要亲自动手解决实际问题、进行调试,并且对代码的各个层面都有深刻的理解——从算法设计到底层实现的细节。
AI 助手虽然很有用,但也往往使得开发者跳过了这些关键步骤。例如,程序员不必深入理解算法的底层结构,也不需要学习如何编写高效的循环或递归逻辑,就可以直接采用 AI 自动生成的代码片段。长此以往,开发者可能无法在没有 AI 辅助的情况下有效解决问题,因为他们从未完全掌握编程所需的解决问题能力和批判性思维技巧。
2、过度依赖自动生成的代码
使用 Copilot 这样的工具,开发者可以迅速生成可运行的代码,而不必完全理解其内部机制,这就会导致一种“代码依赖”的现象,即开发者过度依赖 AI 生成的解决方案,却不去检查其正确性、效率或可维护性。
自动生成的代码有一个关键问题,,就是它未必总是针对特定问题的最佳解决方案。如果程序员不对代码进行充分审查,他们可能会接受效率低下、存在漏洞或不安全的代码,这些代码在表面上看似可行,但长远来看会带来问题。这种依赖性降低了程序员对代码进行重构甚至审查的动力,长期而言会对代码库的质量和团队生产力造成损害。
3、缺乏代码所有权感和责任感
AI 辅助的代码生成可能导致开发者与他们“编写”的代码脱节。手写每一行代码时,开发者会对其行为负责,无论是功能性、安全性还是效率。相比之下,当 AI 生成了大部分代码时,开发者容易将这些责任推给 AI 助手。
缺乏所有权感可能会使开发人员变得懈怠,认为“既然是 AI 生成的,那应该是对的”。但实际上,AI 生成的代码并非无懈可击,仍可能存在错误、bug 甚至是安全隐患。最终,开发者仍需要对代码进行审查、理解和优化,但由于 Copilot 带来的便利,这种严谨的态度可能会逐渐消失。
4、学习机会减少
成为一名优秀程序员的关键在于持续的学习过程。每一次遇到的 bug、每一个设计决策,以及每一个研究过的算法,都是一次学习新知识的机会。然而,Copilot 和其他大语言模型可能会缩短这个学习过程,让开发者在不深入理解的情况下就得到了答案。
当一个工具能直接给出解决方案时,开发者就不太可能自发地去寻找替代方法、尝试不同途径或全面理解不同实现之间的权衡。这种短期看来有益的便捷性,实际上减少了有助于长期技能发展的学习经历。
5、创造性思维受到局限
编程不仅仅是逻辑思维的过程,更是一个充满创造力的工作。一位熟练的程序员可以从多个角度解决问题,并提出多种解决方案,权衡各种方案的利弊。然而,AI 驱动的工具只能给出基于现有代码或模式的建议,这可能会限制开发者探索新方法或创新解决方案的空间。
虽然 Copilot 能给出“可行”的方案,但它可能会优先建议那些常见或传统的模式,而不是鼓励程序员进行突破常规的思考。更令人担忧的是,AI 工具可能会让编程变成一种机械化的接受建议的过程,不再是一个推动创新、打破常规的创造性追求。
6、对专有工具的依赖
AI 驱动工具还有一个缺点是,它们会让开发者越来越依赖像 GitHub Copilot 这样的专有平台。当开发者开始使用这些工具后,会越来越依赖它们来生成、排查或优化代码。一旦这些工具出现故障、变更服务条款或涨价后,他们可能就会失去动力。
此外,这种对 AI 工具的依赖可能会让开发者与更广泛的编程社区和开源工具脱节,与同行的协作和知识分享愈发减少,从而进一步阻碍其编程技能的提升。
7、虚假的专业能力
也许 AI 代码生成带来的最令人担忧的影响之一是,它可能让开发者产生一种虚假的专业感。借助 Copilot,开发者可能会认为自己精通编程,因为他们能够快速生成可运行的代码——尽管他们并未完全理解这些代码的原理。
这种情况在开发者进入软件工程更复杂的领域时尤为危险,比如性能优化、并发处理或安全性管理,这些领域需要对代码有更深入的理解。缺乏扎实的基础知识,开发者可能会犯下代价高昂的错误,无论是在时间上还是金钱上。
8、简而言之
如果你作为一名开发者,不理解代码的本质,不明白你是如何走到这一步,也不知道如何独立解决问题,那么只是简单地从大语言模型中复制粘贴代码或被动接受答案,并不会让你成为一名更好的程序员。相反,这样做只会让你对 AI 的依赖越来越重,而你也将无法完成 AI 还未能做到的事情。
本文转自公众号“CSDN”,ID:CSDNnews
---END---