AI加重技术债务,用AI写代码可能不是件好事

三易生活 2025-03-05 20:46:43

“程序员”这个职业将不复存在,这样的言论在过去两年随着生成式人工智能的不断进化、AI开始能够代替人类写代码,而大行其道。从百度、阿里到谷歌、Meta,AI生成代码也成为了一众科技大厂彰显AI能力的“示范田”。

那么程序员真的开发出了一个可能会“优化”自己的终结者吗?专门从事代码质量分析和改进的GitClear公司在最新报告中,给广大程序员群体吃了一颗定心丸。在这篇题为《人工智能生成的代码如何加剧技术债务》的文章中揭示了这样的现象,即随着AI代码工具的流行,代码重复率上升和质量下降的问题日益严重。

在2024年,GitClear跟踪到五行及以上代码块重复相邻代码的频率同比增加了8倍,同样是在2024年,46%的的代码变更是新增行,复制粘贴的行数超过了移动行数。据悉,GitClear提出的“移动行数”是用于跟踪代码重组的一个指标,这样的数据表明代码复用和重构正在减少。

简而言之,GitClear方面发现AI编程工具并不存在“代码复用”,而是只会一味新增代码,也就是说AI是“Ctrl C+Ctrl V”的好手,往往会直接复制粘贴写好功能的代码。作为对比,“不要重复自己”(DRY)则是一种被人类程序员广泛接受的编程原理,它要求代码中没有重复的部分。

虽然AI编程工具加快了代码的生成速度,却无法避免代码质量的下降,以至于让使用AI编程的项目变得更加难以维护。不受控制的AI生成代码将会给项目的长期维护带来负担,特别是对于那些使用时间较长的代码库更是如此。如今不仅仅是GitClear,就连超过1/4的新代码已经由AI生成的谷歌,也意识到了AI编程工具的负面性。

每年都会发布一份关于软件开发、部署、交付、安全性、文化和组织变革行业现状报告的谷歌旗下DevOps调研与研究团队(DORA),在最新的DORA 2024报告中就指出,研究人员发现AI编程采用率的提高使得软件交付稳定性降低了7.2%,交付吞吐量降低了1.5%。

DORA团队负责人Nathen Harvey表示,“我们看到采用更多人工智能功能的工程师或团队,其工作流程时间更短、个人生产力水平更高,然而我们没有看到这种生产力和时间以及流程,在能够快速安全地交付软件方面产生良好的下游影响。”

如果说大公司、行业机构的说法不那么接地气,其实也有具体的开发者抱怨AI编程。从去年夏季,也就是AI编程工具GitHub Copilot、Cursor‌被大规模应用后,海外技术社区HakerNews几乎同步就出现了大量吐槽AI代码的帖子。

比如名为Tacitus的开发者就表示,在他为客户解决技术问题的过程中发现,有相当多的问题源自于客户使用了ChatGPT等AI工具生成的代码。由于AI幻觉的存在,这类代码往往会出现各种低级错误,例如访问不存在的端口,或是试图从不存在的API响应中读取数据。

这一类错误属于典型的人类程序员一眼就能发现,但毫无编程知识的人则完全无法察觉。从某种意义来说,Tacitus遇到的问题以及他的抱怨,恰恰就指出了当下AI编程最大的命门,那就是在不了解编程的情况下使用生成式AI写代码,往往不会带来生产力的提升。

更为致命的一点,是AI本身的高技术属性是极具迷惑性的,很容易让使用者通过即时、便捷的体验产生“知识膨胀”的错觉,以至于让使用者盲目相信AI的输出。如此一来,一个更加严重的问题就会浮出水面,那就是AI能不能担责?

从目前业界认可的AI伦理来看,AI显然是不能背锅的。那么AI幻觉的存在导致AI编程工具输出的代码不稳定,就需要人类程序员来维护和检查。可是如果AI生成的内容都需要人工再校核一遍,AI也就没有意义了,因为核校不仅是对数据和来源,还包括了编程思路。

如果AI生成的代码需要人工来核校,又与“重复造轮子”有什么区别?GitClear在相关报告中就悲观地预测,“如果开发者的生产力继续通过提交数量或新增行数来衡量,AI生成的代码可维护性下降将会加剧”。由AI生成的代码缺乏可维护性,就将加重开发者的运营负担,进而带来负面的财务影响。

AI编程的支持者认为,AI将人类程序员从繁琐编写代码的工作中解放出来,使得他们能够专注于更具创造性的工作,也就是用少数有AI辅助的高水平程序员替代普通程序员。毕竟众所周知,创造性的工作往往只需要少数天赋型选手负责,以往的科技产品、互联网服务很多就都是几位大神带着一批普通人搞出来的。

所以未来的编程或者说软硬件开发,可能就是“大神”来引流潮流,而打下手或许就会从普通人变成AI。然而GitClear、谷歌DORA,乃至HakerNews如今指出了AI靠不住。所以除非彻底解决AI的幻觉问题,让AI不再虚构不存在的事实,编程工作交给AI才具有可行性。

现在的AI编程似乎更类似于寅吃卯粮,由其所产生的技术债务有朝一日终归是要出清的。

1 阅读:356
评论列表
  • 2025-03-06 21:41

    模块程序员已经写好了,AI负责搭一下,就变成了AI代替人类写代码,换成小朋友其实也可以,小朋友代替他爸写代码。对了,之前不是有个新闻,号称小朋友自学编程,自己做了个心电仪。我特么第一次知道,编程还得学医学。

  • 2025-03-06 11:51

    这只是现状。重构和代码复用是很成熟的工艺,对ai来说,学会它并没多大难度。很快这个问题就会被ai规避掉。

  • LBB 1
    2025-03-06 18:48

    借鉴很不错,但是真代替,别开玩笑了

三易生活

简介:专注IT,最快最专业资讯!