作者|徐结成审稿人|严正就在谷歌和微软为抢占AI搜索引擎市场而大打出手之际,一些程序员却无心吃瓜。因为他们已经提前意识到,当搜索战结束后,软件巨头们将继续携带ChatGPT或其他人工智能生成工具,大步迈向自动编码的蓝海。到时候别说吃瓜了,连自己的饭碗都有可能受到威胁。在当今的自动编码领域,最成熟和知名度最高的两个AI就是最近风头正劲的ChatGPT,以及微软去年6月推出的AI编程工具Copilot,而这“两个”也在这阶段。最有希望取代程序员的当红明星。那么就目前而言,ChatGPT和Copilot的编码能力如何?是否真如传闻中所说,短期内将全部初级甚至部分中级开发人员全部换掉?日前,一位美国技术专家使用多个JavaScript函数需求测试了ChatGPT和Copilot在数据处理和算法生成方面的能力。接下来,让我们通过这些结果来了解当前AI在编码方面的水平,然后问问自己,我们真的会被取代吗?1.JavaScript函数接受可变数量的数组并返回交集。在第一次测试中,测试人员首先要求ChatGPT和Copilot生成一个JavaScript函数。具体情况是:它需要接受可变数量的数组并返回它们的交集。OpenAIChatGPT:MicrosoftCopilot:ChatGPT为此生成的函数假设少于一个数组是无效的。通过使用Set,ChatGPT确保结果中没有重复项。交集应该是一个集合操作,并且应该删除重复项。Copilot代码返回一个可能包含重复项的数组。ChatGPT和Copilot都没有按长度升序对原始参数进行排序,这是一个可以产生巨大差异的微不足道的优化。如果任何参数的长度为0,则没有交集;它无论如何都会缩短循环,因为最大的交集与最短的数组参数相同。随后,测试人员向ChatGPT和Copilot提出要求,以提高该功能的执行效率。OpenAIChatGPT:MicrosoftCopilot:面对上述问题,Copilot生成了与之前请求相同的代码。ChatGPT给出了不同的答案,并添加了评论说该功能无法按预期对对象起作用,但这种描述并不准确。然后,测试人员用同样的方法查看了ChatGPT和Copilt提供的两个最快交集库生成的代码的运行效率和内存消耗。ChatGPT生成的代码在执行过程中占用的CPU较少,但运行效率并不理想。虽然Copilot生成的代码堆占用率较低,但CPU占用率和运行效率较差。总而言之,无论是ChatGPT还是Copilot都无法在此测试中生成足够高效的代码;ChatGPT在这个问题中给出的假设是错误的;Copilot生成的函数在参数包含重复值时将生成不生成集合的代码。2.JavaScript函数:笛卡尔积第二个测试是一个JavaScript函数,需要ChatGPT和Copilot完成一个笛卡尔积。OpenAIChatGPT:MicrosoftCopilot:熟悉笛卡尔产品的人都会知道,从内存利用率和性能的角度来看,ChatGPT和Copilot产生的结果是爆炸性的。天真的实现会消耗大量RAM来存储所有组合,并且在生成所有组合之前不会返回结果。ChatGPT和Copilot生成的函数都存在这些缺点。随后,测试人员再次要求ChatGPT和Copilot提高功能效率。OpenAIChatGPT:MicrosoftCopilot:针对这种需求,ChatGPT的表现令人惊喜。但是在整体的功能上,ChatGPT犯了一个严重的错误,yield[item,...result]不在生成器内部,而是在递归中。另一方面,Copilot忽略了需求的变化并返回了与之前相同的结果。在代码运行效率和内存消耗方面,ChatGPT和Copilot的表现如下表所示。一般来说,ChatGPT和Copilot都不能为笛卡尔积函数生成正确的代码;ChatGPT会做出可能无效的假设,比如需要两个参数;尽管测试结果表明ChatGPT生成的代码内存效率更高,但运行起来并不流畅。3.JavaScript函数存储对象和原始参数第三轮测试人员要求两人生成可以存储对象和原始参数的JavaScript函数。OpenAIChatGPT:MicrosoftCopilot:在这方面,ChatGPT和Copilot都会生成相对低效的代码。字符串转换再字符串比较效率很差,而且会消耗大量内存。虽然有一些JavaScript值不能转换为字符串,比如Infinity和NaN。但不幸的是,JavaScriptJSON规范是在数据科学和微服务时代之前定义的,这些值的存在主要是为了让程序也可以使用特定的值来表示在某些错误情况发生时产生的结果代码。最后,为了验证函数的效率,测试人员将ChatGPT和Copilot生成的代码与常用的缓存工具nano-memoize和micro-memoize进行了对比,使用如下代码生成了第12个斐波那契数列。其中nano-memoize效率最高,几乎是ChatGPT和Copilot生成代码的两倍,而且占用的内存最少,而micro-memoize的性能可以说是紧随其后。尽管Copilot在CPU利用率方面表现不错,但ChatGPT和Copilot在本次测试中的综合性能仍然不足以击败成熟的程序员。4.总结和预测通过这三个测试,不难发现,虽然使用ChatGPT和Copilot生成的代码肯定有一定的价值。但就目前而言,ChatGPT和Copilot都无法通过简单的任务描述生成足够准确和高效的代码,甚至在某些情况下,它们还会犯一些非常糟糕的错误。得知这个结果后,不少开发者也表示:感觉自己还能再坚持几年。对于现在的企业或者程序员来说,如果你想使用ChatGPT、Copilot或者其他代码生成工具来帮助你完成一些简单的辅助编码任务来加速构建,那么你就可以获得足够的支持。但如果你想依靠他们彻底解放研发,那么你可能需要花大价钱去配备一整套强大的调试团队。然而,即使有这样的结果,我们今天也不能忽视人工智能在自动编码方面的潜力以及这些系统背后强大的软件公司。可以肯定的是,随着训练量的增加和技术的成熟,未来的自动编码工具将不断扩展其在不同场景下的业务数据,并逐步尝试解决一些更专业、更场景化的实际任务。最后,对于“未来AI能否取代程序员”这个问题,最靠谱的答案或许是阿里以色列机器视觉实验室前负责人ItamarFriedman在接受采访时做出的预测——“在未来10到20年几年后,人工智能系统很可能使非程序员的创作者能够使用自然语言指令进行零错误开发。到那时,我们的世界仍将需要大量的程序员,但他们的角色很可能会发生不可预测的变化。”参考链接:https://medium.com/@anywhichway/chatgpt-vs-copilot-vs-programmershttps://github.com/anywhichway/nano-memoizehttps://github.com/planttheidea/micro-memoize
