【CSDN编者按】AI生成代码技术的兴起,让许多人看到了提高编程效率、加速软件开发进程的希望。然而,本文作者认为必须正视一个潜在的风险:过度依赖AI生成的代码,可能会让程序员在不知不觉中走向技能退化的深渊,进而成为一个糟糕的程序员。
作者|RudisMuiznieks翻译|郑丽媛
出品|CSDN(ID:CSDNnews)
除非你不在乎自我提升或对自己的工作不以为意,否则,用AI写代码可不是什么好事。
不要使用AI生成的代码的理由
(1)剥夺了你宝贵的学习机会
在互联网早期,“脚本小子”(scriptkiddie)这个贬义词被用来形容那些不懂技术原理、仅凭现成工具进行所谓“黑客攻击”的人。这些人往往借助他人编写的工具或脚本,试图执行诸如破解密码、入侵他人电脑、篡改网页等恶意行为,并因此自诩为真正的黑客。
你或许会觉得,把使用AI生成代码的开发者比作“脚本小子”有些过于牵强,但我认为这种类比有一定道理。
那些渴望成为顶尖黑客的“脚本小子”们,若只是一味地运行现有脚本,永远无法实现他们的梦想。真正的高手是那些亲自编写脚本的人,他们在探索和研究中积累了深厚的知识,真正理解了所利用的安全漏洞。同理,如果开发者想成为大牛,但若总是依赖AI来完成代码编写,那么实际上是在阻碍自己前进的脚步。至少就目前来说,真正的大牛开发者依然是那些编写代码并能为这些AI系统提供训练数据的人。
毋庸置疑,任何技能的提升都离不开实践。就如同不下棋就不可能提高棋艺,不练琴就无法掌握钢琴演奏,不上场打球就无法成为一名更出色的曲棍球员一样,如果不亲手编写代码,你的开发技能永远也不会进步。
(2)你的现有技能可能会退化
但如果你对自己作为程序员的技能已经感到得心应手,只想让AI处理那些枯燥无味的任务呢?比如创建新项目框架、编写简单的阶乘或归并排序函数,或是生成模板代码——那些日常琐碎的工作。
也许你觉得这没问题。毕竟早在大型语言模型出现之前,经验丰富的开发者就已经习惯将琐事的任务交给初级开发者了——然而,使用AI来代替自己完成这些工作真的没有区别吗?
首先,初级程序员不仅需要更多的指导,还可能会向你求教。在这一过程中,帮助他们不仅能强化你自己的技能,还能培养新的能力(如辅导技巧、沟通能力,如何在不断增加的烦躁和不耐烦中仍能面带微笑)。
(3)你可能会依赖上你最终的替代者
在本文前面提到,我们许多人已经依赖上了高级开发环境,如语法高亮、自动完成、代码分析和自动重构。你可能会问,AI与这些工具有什么不同?答案很简单:前者旨在帮助你更高效地工作,写出更高质量的代码;而后者则有着最终取代你的目标。企业高层之所以热衷于AI工具,并非因为相信这些工具能将员工培养成高薪的高级开发者,而是因为他们看到了一个未来——在这个未来中,高薪的高级开发者将被成本更低、依赖AI的初级开发者所取代,甚至被AI本身彻底替代。一旦我们有足够多的人支付了这种订阅费,就可以训练出不再需要我们参与的AI。
(4)一个小插曲:你真正拥有AI生成的代码吗?
虽然我不是律师,也不打算在电视上扮演律师角色,但我确实订阅了Nebula上的《HelloFutureMe》,并且深刻地感觉到关于AI生成作品的所有权问题,至少可以说是存在一些法律模糊地带。这种不确定性不仅限于艺术作品,同样适用于代码领域。(而且,如果你像我一样,把编程视作一种艺术表达形式,可能会更能理解这一点。)
假设你使用AI生成了一个函数,而这个AI的训练数据中包含了LGPL许可证的代码,那么这个生成的函数是否也必须遵循LGPL?也许你不在乎LGPL,因为它的约束力有限,但如果训练数据中包含了某个财力雄厚且具有强大诉讼能力的公司的非自由仓库呢?如果他们能够证明你在构建一个有些过于成功的竞争产品时使用了这个AI,又该怎么办?
坦率地讲,对于上述问题我没有确切答案,我也不想在未来法院审理此类案件时成为支付这些法律账单的人,那你呢?
(5)你的代码将得不到应有的尊重
我们不能断言AI生成的代码一定会质量低下。尽管当前的技术水平可能存在一定的局限性,但显然这项技术将持续进步并变得更加完善。
我可以肯定的是,如果你依赖这些AI工具,那么除了一些同样依赖AI的开发者外,外界大多数人都不会对你的编程技能产生深刻印象。软件开发不仅仅是一种技术,它更像是一门艺术——构建一个连贯紧凑的代码库、为复杂问题提供精妙的解决方案,并赢得同行的尊重,这些应该是每个程序员引以为豪的事情。你是希望别人赞美自己亲手创造的成果,还是机器生成代码的成果?或许我的想法有些传统,但这正是我个人拒绝将AI生成代码融入开发环境的主要原因——即使这可能导致我失去工作。
我不想委托他人创作然后声称那是我的作品,我希望成为真正的创作者。追求高标准有错吗?为自己的工作感到自豪不会让它更加有趣吗?如果你都没有亲自编写代码,怎么可能尊重自己的代码,或者期望别人尊重它呢?
使用AI生成代码的理由
(1)你是一个受虐狂,喜欢代码审查胜过编写代码
我之前提到的观点并非完全准确。实际上,这只是我个人坚决不将AI工具融入我开发环境的主要原因。我热爱编写代码,但非常不喜欢阅读、审查以及对他人的代码提供建议。虽然我知道这是一种宝贵的技能,可以帮助指导新手成长,成为更有生产力的团队成员,但我仍然不喜欢做这件事。
随着你越来越多地依赖AI生成代码,你的角色也将逐渐从编码者转向代码审查者。或许有人享受这种转变,但这并不是我的选择。
(2)你其实并不想做程序员
如果你对学习编程毫无兴趣,而是把AI当作一种自由职业者工具,通过简单指示如“创建一个卡丁车竞速游戏”或“这不行,改进它”来完成任务,那么以上讨论的顾虑可能与你无关。
我真心认为,这就是大型科技公司正热切盼望的未来:一个由他们封闭生态系统的应用分发,和一个他们掌控应用生产方式的世界。有一个新应用的创意?只需告诉应用商店的AI,它就能直接将应用部署到你的设备上,使企业能获得100%的订阅收入——比以往需要与开发者分成30%收益的情况更为有利可图。
这也引出了我最后一个关于使用AI生成代码的理由。
(3)你相信我们已经进入了一个后工作时代,并信任企业将引领我们走向这个未来
如果你已经深陷于这种观念之中,甚至在阅读本文的前几段后仍未离开,那么我实在没什么可说的了。我建议你去读《一九八四》、《华氏451度》或《雪崩》等书籍,这些作品中对未来社会的想象或许会让你感到兴奋,并有所期待。