HelloKitty • 2023-02-17 13:54
764
本文由 51CTO技术栈 撰写/授权提供,转载请注明原出处。
文章来源于:51CTO技术栈
作者:徐杰承
正当谷歌与微软为抢占 AI 搜索引擎市场争得不可开交时,一部分程序员却无心吃瓜。因为他们已经提前意识到了,当这场搜索之战落下帷幕后,软件巨头们将继续携带着 ChatGPT 或其他人工智能生成工具,向着自动编码的蓝海大步进发。到时别说是吃瓜,连自己的饭碗都有可能受到威胁。
在如今的自动编码领域,最成熟且最为人熟知的两款 AI,正是近来风头无两的 ChatGPT 以及微软于去年 6 月上线的AI编程工具 Copilot,而这“二位”也正是现阶段最被寄予厚望将取代程序员的当红明星。那么就目前而言,ChatGPT 与 Copilot 的编码能力究竟如何,是否真如传言所说将在短期内取代所有初级甚至部分中级开发者呢?
日前,一位美国技术专家利用多个 JavaScript 函数需求,测试了 ChatGPT 与 Copilot 在数据处理与算法生成方面的能力。接下来,就让我们一起通过这些结果来了解一下目前 AI 在编码方面的真实水平,然后扪心自问,自己是否真的将会被取代呢?
JavaScript 函数
接受可变数量数组并返回交集
第一场测试中,测试者首先要求ChatGPT和Copilot生成一个JavaScript函数,具体条件为:需要能接受可变数量的数组并返回它们的交集。
OpenAI ChatGPT:
微软 Copilot:
对此 ChatGPT 所生成的函数假定提供少于一个数组是无效的。通过使用 Set,ChatGPT 确保结果中不存在重复项。交集应该是一个集合操作,重复的应该被删除。Copilot 代码则返回了一个可能包含重复项的数组。
而 ChatGPT 和 Copilot 都没有按照长度对原始参数进行升序排序,这是一个微不足道的优化,却能带来巨大的改变。如果任何参数的长度为 0,则没有交集;不管怎样,它缩短了循环,因为最大交集与最短数组参数相同。
随后,测试者要求 ChatGPT 和 Copilot 提高函数的执行效率。
OpenAI ChatGPT:
微软 Copilot:
面对以上问题,Copilot 生成了与此前请求相同的代码。而 ChatGPT 给出了不同的答案并添加了评论,称该函数不会像预期那样对对象起作用,但这项描述并不准确。
而后,测试者利用相同方式检验了 ChatGPT 与 Copilt 所提供的两个最快交集库所生成代码的运行效率和内存消耗情况。
ChatGPT 所生成代码执行时所占用的 CPU 较低,但运行效率并不理想,而 Copilot 生成代码虽然对于堆的使用量较低,但 CPU 占用率和运行效率较差。
总而言之,在这项测试中 ChatGPT 与 Copilot 都无法生成足够高效的代码;ChatGPT 在该问题中给出的假设有误;而 Copilot 所生成的函在参数包含重复值时,会生成不产生集合的代码。
JavaScript 函数:笛卡尔积
第二场测试,则是要求 ChatGPT 与 Copilot 完成一个笛卡尔积的 JavaScript 函数。
OpenAI ChatGPT:
微软 Copilot:
熟悉笛卡尔积的人都会知道,从内存利用率和性能的角度看,ChatGPT 和 Copilot 所生成的结果都是爆炸性的。简单的实现将消耗大量的 RAM 用以存储所有的组合,并且直到所有组合生成后才能返回结果。ChatGPT 和 Copilot 所生成的函数都存在这些缺点。
随后,测试者再次要求 ChatGPT 和 Copilot 提高函数效率。
OpenAI ChatGPT:
微软 Copilot:
针对这项需求,ChatGPT 的表现令人感到惊喜。但在整体函数中,ChatGPT 犯了一个严重的错误,yield [item,...result] 并不在生成器内部,而是在一个 recursion 之中。而 Copilot 则直接无视了需求变化,返回了与此前相同的结果。
在代码运行效率及内存消耗情况方面,ChatGPT 和 Copilot 的表现则如下表所示。
总体看来,ChatGPT 与 Copilot 均无法生成笛卡尔积函数的正确代码;ChatGPT 会作出可能无效的假设,例如需要两个参数;虽然检测结果显示 ChatGPT 生成的代码内存效率更高,但其根本无法顺利运行。
JavaScript 函数
储存对象与原始参数
第三回合,测试人员要求二者生成能够存储对象和原始参数的 JavaScript 函数。
OpenAI ChatGPT:
微软 Copilot:
对此,ChatGPT 与 Copilot 均生成了较为低效的代码,先进行字符串转化再进行字符串比较的效率很差,并且会大量消耗内存。
虽然有一些 JavaScript 值无法被转化为字符串,例如 Infinity 和 NaN。但遗憾的是,JavaScript JSON 规范是在数据科学和微服务时代之前定义的,而这些值的存在主要是为了在代码出现某些错误条件时,程序还可以用特定的值来表示所产生结果。
最后,为验证函数效率,测试者将 ChatGPT 与 Copilot 所生成的代码与常用缓存工具nano-memoize 和 micro-memoize 进行了横向对比,使用以下代码生成第 12 个斐波那契数列。
其中 nano-memoize 是运行效率最高的,几乎是 ChatGPT 和 Copilot 所生成代码运行效率的两倍,并且其所使用的内存也是最低的,而 micro-memoize 的表现则可以说紧随其后。虽然在 CPU 利用率方面,Copilot 表现不错,但综合来看,ChatGPT 和 Copilot 在这场测试中的表现依然不足以击败一个成熟的程序员。
总结与预测
通过这三场测试,我们不难发现,虽然使用 ChatGPT 和 Copilot 所生成的代码肯定具有一定价值。但就目前而言,无论是 ChatGPT 还是 Copilot,均无法通过简单的任务描述生成足够准确且高效的代码,甚至在某些情况下,它们也会犯下一些非常糟糕的错误。在得知这个结果后,不少开发者也分分表示:感觉自己还能再坚持几年。
对于如今的企业或是程序员而言,如果你希望利用 ChatGPT、Copilot 或是其他代码生成工具帮助自己完成一些简单的辅助编码任务以加速构建,那么你完全能够得到足够的支持。但如果希望依靠它们彻底解放研发,那么你可能需要花大价钱为其配备一整支强大的调试团队。
然而即便结果如此,今天的我们仍不能忽视 AI 在自动编码领域的潜力以及这些系统背后强大的软件企业。可以肯定的是,伴随着训练量与技术成熟度的增长,未来的自动编码工具将继续扩充其在不同场景的业务数据,并逐步尝试解决一些更专业、更场景化的实际任务。
最后,对于“AI 到底能否在未来取代程序员”这个问题,目前最可靠的答案,也许就是前阿里以色列机器视觉实验室负责人 Itamar Friedman 在一次采访中所做出的预测了——“在未来的 10 到 20 年内,人工智能系统将可能使非程序员的创造者使用自然语言指令进行 0 错误的开发,届时我们的世界仍会需要大量的程序员,但其角色将可能会发生难以预测的变化。”
扫码关注公众号
获取更多技术资讯