“警告:依赖 AI 代码生成,你的编程之路或将越走越窄!”

【CSDN 编者按】AI 生成代码技术的兴起,让许多人看到了提高编程效率、加速软件开发进程的希望。然而,本文作者认为必须正视一个潜在的风险:过度依赖 AI 生成的代码,可能会让程序员在不知不觉中走向技能退化的深渊,进而成为一个糟糕的程序员。

参考链接:https://slopwatch.com/posts/bad-programmer/

者 | Rudis Muiznieks       翻译 | 郑丽媛
出品 | CSDN(ID:CSDNnews)

除非你不在乎自我提升或对自己的工作不以为意,否则,用 AI 写代码可不是什么好事。

事先声明一下,我在本文中提到的“使用 AI 生成代码”,是指完全让 AI 代劳编写代码的过程——而不是将 AI 作为一种辅助工具,用以深入理解编程语言和库,从而提升自己编写的代码品质。然而,如果你曾尝试过仅通过编写一些描述性的函数名或评论,便让 AI 完成剩余代码的工作,或是依赖 AI 来代替你理解和学习代码库,那么这篇文章正是为了提醒你注意这种情况。

图片


图片

不要使用 AI 生成的代码的理由

(1)剥夺了你宝贵的学习机会

在互联网早期,“脚本小子”(script kiddie)这个贬义词被用来形容那些不懂技术原理、仅凭现成工具进行所谓“黑客攻击”的人。这些人往往借助他人编写的工具或脚本,试图执行诸如破解密码、入侵他人电脑、篡改网页等恶意行为,并因此自诩为真正的黑客。

你或许会觉得,把使用 AI 生成代码的开发者比作“脚本小子”有些过于牵强,但我认为这种类比有一定道理。

那些渴望成为顶尖黑客的“脚本小子”们,若只是一味地运行现有脚本,永远无法实现他们的梦想。真正的高手是那些亲自编写脚本的人,他们在探索和研究中积累了深厚的知识,真正理解了所利用的安全漏洞。同理,如果开发者想成为大牛,但若总是依赖 AI 来完成代码编写,那么实际上是在阻碍自己前进的脚步。至少就目前来说,真正的大牛开发者依然是那些编写代码并能为这些 AI 系统提供训练数据的人。

毋庸置疑,任何技能的提升都离不开实践。就如同不下棋就不可能提高棋艺,不练琴就无法掌握钢琴演奏,不上场打球就无法成为一名更出色的曲棍球员一样,如果不亲手编写代码,你的开发技能永远也不会进步。

(2)你的现有技能可能会退化

但如果你对自己作为程序员的技能已经感到得心应手,只想让 AI 处理那些枯燥无味的任务呢?比如创建新项目框架、编写简单的阶乘或归并排序函数,或是生成模板代码——那些日常琐碎的工作。

也许你觉得这没问题。毕竟早在大型语言模型出现之前,经验丰富的开发者就已经习惯将琐事的任务交给初级开发者了——然而,使用 AI 来代替自己完成这些工作真的没有区别吗?

首先, 初级程序员不仅需要更多的指导,还可能会向你求教。在这一过程中,帮助他们不仅能强化你自己的技能,还能培养新的能力(如辅导技巧、沟通能力,如何在不断增加的烦躁和不耐烦中仍能面带微笑)。

其次,在软件开发中(以及一般生活里),如果不经常练习某项技能,这项技能就会逐渐退化。如果你已经在这个行业待了一段时间,不妨回想一下你学的第一个编程语言,对于我来说是 Pascal。我现在甚至都写不出一行语法正确的 Pascal 代码,更别说实现任何有意义的功能了。再举个例子:试着一天不使用语法高亮和自动补全,看看没有这些工具你会感觉多么无助。你会发现,这些工具通过减少记忆简单任务的需求,实际上削弱了你的实际编码能力。想象一下,如果 AI 完全接手了你编写代码的工作,你会变得多么依赖它。如果你不再亲自编写代码,哪怕是那些无聊的部分,你的技能也会变得生疏,遗忘一些重要的细节。这会导致你在处理复杂问题时遇到更大的困难,因为你失去了那些构建高级技能所需的基础。

设想一种情况,如果一家健身器材制造商推出了一款“人工力量”产品,声称可以借助智能助手提升你的训练效果,即这个机器人会为你举重来帮你“征服下一次训练”。如果你开始依赖这种产品,你的最大卧推重量会发生怎样的变化?同样地,编码助手随着时间的推移会对你的编程能力和逻辑思考产生什么样的影响?

(3)你可能会依赖上你最终的替代者

目前市场上的许多 AI 编码助手(截至我写这篇文章时)都为学生提供免费服务。你可能认为这是他们的好意——他们愿意减轻那些经济压力大的学生的负担。错了!如果说开发者的学习过程中有哪个阶段绝对不能走捷径,那就是刚开始学习编程的阶段。

这简直是掠夺性行为。AI 公司深知,只要在开发者第一次接触文本编辑器之前就吸引他们,就能确保长期的订阅收入。他们预见到了未来的开发者群体,那将是一支完全依赖 AI 的队伍,甚至不能独立完成“Hello World”的输出,除非是在与 AI 助手长时间对话后得到指引。

在本文前面提到,我们许多人已经依赖上了高级开发环境,如语法高亮、自动完成、代码分析和自动重构。你可能会问,AI 与这些工具有什么不同?答案很简单:前者旨在帮助你更高效地工作,写出更高质量的代码;而后者则有着最终取代你的目标。企业高层之所以热衷于 AI 工具,并非因为相信这些工具能将员工培养成高薪的高级开发者,而是因为他们看到了一个未来——在这个未来中,高薪的高级开发者将被成本更低、依赖 AI 的初级开发者所取代,甚至被 AI 本身彻底替代。一旦我们有足够多的人支付了这种订阅费,就可以训练出不再需要我们参与的 AI。

(4)一个小插曲:你真正拥有 AI 生成的代码吗?

虽然我不是律师,也不打算在电视上扮演律师角色,但我确实订阅了 Nebula 上的《Hello Future Me》,并且深刻地感觉到关于 AI 生成作品的所有权问题,至少可以说是存在一些法律模糊地带。这种不确定性不仅限于艺术作品,同样适用于代码领域。(而且,如果你像我一样,把编程视作一种艺术表达形式,可能会更能理解这一点。)

假设你使用 AI 生成了一个函数,而这个 AI 的训练数据中包含了 LGPL 许可证的代码,那么这个生成的函数是否也必须遵循 LGPL?也许你不在乎 LGPL,因为它的约束力有限,但如果训练数据中包含了某个财力雄厚且具有强大诉讼能力的公司的非自由仓库呢?如果他们能够证明你在构建一个有些过于成功的竞争产品时使用了这个 AI,又该怎么办?

坦率地讲,对于上述问题我没有确切答案,我也不想在未来法院审理此类案件时成为支付这些法律账单的人,那你呢?

(5)你的代码将得不到应有的尊重

我们不能断言 AI 生成的代码一定会质量低下。尽管当前的技术水平可能存在一定的局限性,但显然这项技术将持续进步并变得更加完善。

我可以肯定的是,如果你依赖这些 AI 工具,那么除了一些同样依赖 AI 的开发者外,外界大多数人都不会对你的编程技能产生深刻印象。软件开发不仅仅是一种技术,它更像是一门艺术——构建一个连贯紧凑的代码库、为复杂问题提供精妙的解决方案,并赢得同行的尊重,这些应该是每个程序员引以为豪的事情。你是希望别人赞美自己亲手创造的成果,还是机器生成代码的成果?或许我的想法有些传统,但这正是我个人拒绝将 AI 生成代码融入开发环境的主要原因——即使这可能导致我失去工作。

我不想委托他人创作然后声称那是我的作品,我希望成为真正的创作者。追求高标准有错吗?为自己的工作感到自豪不会让它更加有趣吗?如果你都没有亲自编写代码,怎么可能尊重自己的代码,或者期望别人尊重它呢?


图片

使用 AI 生成代码的理由

(1)你是一个受虐狂,喜欢代码审查胜过编写代码

我之前提到的观点并非完全准确。实际上,这只是我个人坚决不将 AI 工具融入我开发环境的主要原因。我热爱编写代码,但非常不喜欢阅读、审查以及对他人的代码提供建议。虽然我知道这是一种宝贵的技能,可以帮助指导新手成长,成为更有生产力的团队成员,但我仍然不喜欢做这件事。

随着你越来越多地依赖 AI 生成代码,你的角色也将逐渐从编码者转向代码审查者。或许有人享受这种转变,但这并不是我的选择。

(2)你其实并不想做程序员

如果你对学习编程毫无兴趣,而是把 AI 当作一种自由职业者工具,通过简单指示如“创建一个卡丁车竞速游戏”或“这不行,改进它”来完成任务,那么以上讨论的顾虑可能与你无关。

我真心认为,这就是大型科技公司正热切盼望的未来:一个由他们封闭生态系统的应用分发,和一个他们掌控应用生产方式的世界。有一个新应用的创意?只需告诉应用商店的 AI,它就能直接将应用部署到你的设备上,使企业能获得 100% 的订阅收入——比以往需要与开发者分成 30% 收益的情况更为有利可图。

这也引出了我最后一个关于使用 AI 生成代码的理由。

(3)你相信我们已经进入了一个后工作时代,并信任企业将引领我们走向这个未来

如果你已经深陷于这种观念之中,甚至在阅读本文的前几段后仍未离开,那么我实在没什么可说的了。我建议你去读《一九八四》、《华氏451度》或《雪崩》等书籍,这些作品中对未来社会的想象或许会让你感到兴奋,并有所期待。

对于其他人,感谢阅读。未来我将继续分享关于 AI 的个人观点,不过目前没有固定的更新计划,因此不必过于期待——当然,你也可以请 AI 代劳保持期待。