ChatGPT大战Copilot,谁才是最强王者

巨人之战:GitHub Copilot vs ChatGPT ⚔️⚔️

微信搜索关注《Java学研大本营》,加入读者群,分享更多精彩

ChatGPT的发布在编程社区引起了波澜,因为它可以产生令人难以置信的代码片段。

它与去年发布的GitHub Copilot相比如何?人工智能会追随你的工作吗?让我们找出来。

测试 ChatGPT

让我们简要回顾一下我们对GitHub Copilot进行的相同测试。https://dev.to/ruppysuppy/github-copilot-my-experience-after-one-week-usage-eie

测试 1:股票价格获取

可悲的是,它第一次生成了错误的代码。

该函数未定义为async,并且promises未正确处理。

下一次尝试更好

奇怪的是,它在没有API 密钥的情况下也能工作(只要查询参数包含apikey具有任何随机值的密钥)。

结果:GitHub Copilot让ChatGPT望尘莫及。

测试 2:BFS 遍历

这一次,ChatGPT一口气搞定了,遗憾的是太长了,截图放不下,所以生成的代码如下:

class Node:def __init__(self, value):self.value = valueself.left = Noneself.right = Noneclass BinarySearchTree:def __init__(self):self.root = Nonedef insert(self, value):new_node = Node(value)if self.root is None:self.root = new_nodereturncurrent_node = self.rootwhile True:if value < current_node.value:if current_node.left is None:current_node.left = new_nodereturncurrent_node = current_node.leftelse:if current_node.right is None:current_node.right = new_nodereturncurrent_node = current_node.rightdef inorder_traversal(self, node, numbers):if node is None:returnself.inorder_traversal(node.left, numbers)numbers.append(node.value)self.inorder_traversal(node.right, numbers)def get_numbers(self):numbers = []self.inorder_traversal(self.root, numbers)return numbersbst = BinarySearchTree()
bst.insert(10)
bst.insert(5)
bst.insert(15)
bst.insert(3)
bst.insert(7)
bst.insert(13)
bst.insert(17)numbers = bst.get_numbers()
print(numbers)  # [3, 5, 7, 10, 13, 15, 17]

整个代码由ChatGPT生成,并附有对其工作原理的评论。

结果:ChatGPT胜出。

测试 3:100 个的数组

ChatGPT为这个生成了多个建议

当GitHub Copilot启动时,它生成了一个有点靠不住的建议,但现在它生成了与ChatGPT相同的代码。

结果:并列(取决于您比较的软件版本)

创建一个完整的 TODO 项目

为了进一步推进测试,我决定使用这两个软件创建一个完整的TODO项目。

ChatGPT

  1. 如何创建TODO项目?

ChatGPT提到的步骤是相当全面的

  1. 如何创建React项目?

  1. 创建一个Todo组件

这是我不喜欢的部分。生成的代码使用的是遗留类组件语法。它也没有处理 todos 的添加

  1. 优化Todo组件处理todos的增删并标记为已完成。

这是它生成的代码(截图太长了)

import React from "react";// TodoItem component
const TodoItem = ({item,onDelete,onComplete,
}) => (<li>{item.text}<button onClick={onDelete}>Delete</button><button onClick={onComplete}>{item.isComplete ? "Undo" : "Complete"}</button></li>
);// TodoApp component
class TodoApp extends React.Component {// Define the initial state of the componentstate = {todoItems: [],};// Method to handle adding new items to the todo listaddTodo = (text) => {// Add the new item to the todo listthis.setState({todoItems: [...this.state.todoItems,{ text, isComplete: false },],});};// Method to handle deleting items from the todo listdeleteTodo = (index) => {// Delete the item at the given indexthis.setState({todoItems: this.state.todoItems.filter((_, i) => i !== index),});};// Method to handle completing/undoing a todo itemcompleteTodo = (index) => {// Update the "isComplete" property of the item at the given indexthis.setState((state) => {const todoItems = [...state.todoItems];todoItems[index].isComplete =!todoItems[index].isComplete;return { todoItems };});};// Method to render the componentrender() {return (<div>{/* Form to add new items to the todo list */}<form><inputtype="text"placeholder="Add a todo item"/><button type="submit">Add</button></form>{/* List of todo items */}<ul>{this.state.todoItems.map((item, index) => (<TodoItemkey={index}item={item}onDelete={() =>this.deleteTodo(index)}onComplete={() =>this.completeTodo(index)}/>))}</ul></div>);}
}

这次生成的代码更好一些,可以将code splitting待办事项标记为已完成。它仍在使用遗留类组件,即使在明确要求之后也没有处理待办事项的添加。

  1. 最后尝试提及创建功能组件并处理待办事项的添加、删除和完成。

import React from "react";// TodoItem component
const TodoItem = ({ item, onDelete, onComplete }) => (<li>{item.text}<button onClick={onDelete}>Delete</button><button onClick={onComplete}>{item.isComplete ? "Undo" : "Complete"}</button></li>
);// TodoApp component
const TodoApp = () => {// Define the initial state of the componentconst [todoItems, setTodoItems] = React.useState([]);// Method to handle adding new items to the todo listconst addTodo = (text) => {// Add the new item to the todo listsetTodoItems([...todoItems,{ text, isComplete: false },]);};// Method to handle deleting items from the todo listconst deleteTodo = (index) => {// Delete the item at the given indexsetTodoItems(todoItems.filter((_, i) => i !== index));};// Method to handle completing/undoing a todo itemconst completeTodo = (index) => {// Update the "isComplete" property of the item at the given indexsetTodoItems((state) => {const todoItems = [...state];todoItems[index].isComplete =!todoItems[index].isComplete;return todoItems;});};// Return the componentreturn (<div>{/* Form to add new items to the todo list */}<form><inputtype="text"placeholder="Add a todo item"/><button type="submit">Add</button></form>{/* List of todo items */}<ul>{todoItems.map((item, index) => (<TodoItemkey={index}item={item}onDelete={() => deleteTodo(index)}onComplete={() => completeTodo(index)}/>))}</ul></div>);
};

即使这次添加也没有处理。从好的方面来说,使用了功能组件

GitHub Copilot

遗憾的是Copilot无法生成 React 项目。它只能在给定的上下文中建议代码片段,所以让我们从自己创建一个React 应用程序开始

  1. 创建一个React项目

npx create-react-app react-copilot
  1. 删除多余的文件并创建TodoApp.js,TodoItem.js

  2. 终于到了Copilot施展魔法的时候了,我们坐下来喝一杯莫吉托。

在文件顶部添加了关于要完成的任务的评论

Todo Item

// Functional TodoItem component which takes onDelete,
// onComplete, and item ({ todo: string; completed: boolean })
// as props

Todo App

// Functional TodoApp component which handles addition,
// deletion & completion of todos. The TodoItem component
// is used to render each todo item
  1. 生成TodoItem

export default function TodoItem({onDelete,onComplete,item,
}) {return (<div><inputtype="checkbox"checked={item.completed}onChange={() => onComplete(item)}/><spanstyle={{textDecoration: item.completed? "line-through": "none",}}>{item.todo}</span><button onClick={() => onDelete(item)}>Delete</button></div>);
}

生成的代码使用功能组件和视觉指示器来完成带有附加样式的待办事项(它还使用了checkbox,这是我的个人偏好)

  1. 生成TodoApp

export default function TodoItem({onDelete,onComplete,item,
}) {return (<div><inputtype="checkbox"checked={item.completed}onChange={() => onComplete(item)}/><spanstyle={{textDecoration: item.completed? "line-through": "none",}}>{item.todo}</span><button onClick={() => onDelete(item)}>Delete</button></div>);
}

结果

尽管我们需要做额外的工作来设置项目,但与ChatGPT相比, Copilot能够为Todo 应用程序生成更好的代码。

归根结底,Copilot应该是一个帮助开发人员更快地编写代码的工具,而ChatGPT是一个通用的工具chatbot,但它仍然可以简化开发过程,但是当任务以编码为中心时, GitHub Copilot无疑胜出!这给我们带来了问题......

谁会抢走你的工作?

(在你的脑海里)人工智能的开发者:邪恶的笑声

在你烧掉GitHub HQ之前,让我们退后一步,看看大局。这些是简化开发过程的工具,并不是要取代开发人员。

我们仍然需要开发人员编写代码。当然,这些工具可以帮助我们更快地编写代码,但如果没有人工输入,它们仍然无法自行完成所有工作。

经济不景气裁员如火如荼,听上去很吓人,但只要你不断更新和磨练自己的技能,你就会没事的!

推荐书单

《项目驱动零起点学Java》

《项目驱动零起点学Java》共分 13 章,围绕 6 个项目和 258 个代码示例,分别介绍了走进Java 的世界、变量与数据类型、运算符、流程控制、方法、数组、面向对象、异常、常用类、集合、I/O流、多线程、网络编程相关内容。《项目驱动零起点学Java》总结了马士兵老师从事Java培训十余年来经受了市场检验的教研成果,通过6 个项目以及每章的示例和习题,可以帮助读者快速掌握Java 编程的语法以及算法实现。扫描每章提供的二维码可观看相应章节内容的视频讲解。

《项目驱动零起点学Java》贯穿6个完整项目,经过作者多年教学经验提炼而得,项目从小到大、从短到长,可以让读者在练习项目的过程中,快速掌握一系列知识点。

马士兵,马士兵教育创始人,毕业于清华大学,著名IT讲师,所讲课程广受欢迎,学生遍布全球大厂,擅长用简单的语言讲授复杂的问题,擅长项目驱动知识的综合学习。马士兵教育获得在线教育“名课堂”奖、“最受欢迎机构”奖。

赵珊珊,从事多年一线开发,曾为国税、地税税务系统工作。拥有7年一线教学经验,多年线上、线下教育的积累沉淀,培养学员数万名,讲解细致,脉络清晰。
《项目驱动零起点学Java》(马士兵,赵珊珊)【摘要 书评 试读】- 京东图书京东JD.COM图书频道为您提供《项目驱动零起点学Java》在线选购,本书作者:,出版社:清华大学出版社。买图书,到京东。网购图书,享受最低优惠折扣!icon-default.png?t=N5K3https://item.jd.com/13607758.html

精彩回顾

数据架构演进史(上)

数据架构演进史(下)

如何选择适合的后端框架

微信搜索关注《Java学研大本营》

访问【IT今日热榜】,发现每日技术热点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/51243.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么?作为程序员你还不知道人工智能搜索引擎?

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;蚂蚁集团高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《EffectiveJava》独家解析》专栏作者。 热门文章推荐…

89岁学会做PPT,巴菲特:最好的投资,是投资自己

这世上&#xff0c;那些真正成功的人&#xff0c;都有一个共同特质&#xff1a;能够找到事物的底层逻辑&#xff0c;并能迁移运用它。 如何才能够提升认知&#xff0c;找到事物的底层逻辑&#xff1f;总结下来&#xff0c;就是重视常识&#xff0c;及常识的积累。 何为常识&am…

别让STAR原则的简历毁了你的前途!

群里一个人抱怨&#xff0c;说明明用STAR原则写的简历很不错&#xff0c;怎么连面试机会都没有呢&#xff1f;她打电话到那家公司&#xff0c;人家说&#xff0c;她的简历不符合要求&#xff0c;所以没有安排面试。 她很郁闷&#xff0c;认为自己是不是没有把STAR原则做好&…

公司高层都在为CEO职位争得头破血流,而马斯克竟把职位改成...

马斯克&#xff0c;很多人心中的偶像&#xff0c;随着比特币价格的一路高歌猛进&#xff0c;似乎马斯克的火箭事业又多了不少资金基础。 不过一向语不惊人死不休的马斯克最近又一次进入大众眼帘并非是他的spacex火箭又出了什么幺蛾子&#xff0c;也不是特斯拉咋样了&#xff0c…

大数据-你投的简历真的是你认为的工作么?

大数据-你投的简历真的是你认为的工作么&#xff1f; 我的个人主页 个人主页 我的B站视频 B站视频 数仓岗位jd 钱途⭐⭐⭐⭐⭐ 看内容是否包含模型建设、etl、调度、监控、数据质量、数据治理、阿里云组件、spark/flink、熟悉一门语言等这些关键词例 负责数据体系的研发设…

乔布斯、比尔盖茨18岁求职简历曝光! 科技大佬也曾是职场菜鸟

乔布斯和比尔盖茨,是IT界的两大传奇人物,人们都说: “乔布斯之后再无乔布斯,盖茨之后没有第二个盖茨。” ​ 可是,在他们创办苹果、微软之前,他们也曾是茫茫人海里的一名求职者。

沉睡者的简历-有老板需要招兵买马吗?您的成功就差一个我

基本资料 昵称&#xff1a; 沉睡者 主要能力&#xff1a;项目产品研发&#xff0c;产品筹划&#xff0c;产品优化&#xff0c;数据分析&#xff0c;产品下载安装购买力提升 等... 半个运营能力&#xff1a;产品引流策划&#xff0c;广告联盟付费引流&#xff08;不是烧钱推广的…

能杀入BAT的程序员,简历中工作经验是这么写的……

一份简历如果没有工作经验的支撑&#xff0c;那么就说不上是一份优秀的简历。 如果说学历、专业是硬性条件&#xff0c;那么工作经验就是简历的核心。HR在查看简历时&#xff0c;在筛选完基本信息之后&#xff0c;最感兴趣的就是工作经历部分。因此&#xff0c;在填写简历时&am…

接入VISA卡进行USDT消费,如何开通并使用 OneKey Card 微信和支付宝全面开放

OneKey Card 公测中 注册链接&#xff1a;https://card.onekey.so/?iXRI549 认证必需填写邀请码&#xff1a;XRI549 邀请好友获得升级和奖励&#xff01; - 完成「邀请好友开卡」升级账户&#xff0c;获得更多奖励和更低充值费率 - &#x1f525; 公测期间&#xff0c;任务要…

文献调研方法:如何在dplp/谷歌学术中筛选CCF A/B/C类

最近在做文献调研&#xff0c;师兄要求筛选出满足一些条件的CFF A类的论文&#xff0c;但是打开谷歌学术后搜索&#xff0c;要是每篇都点开&#xff0c;再去查找相关会议会很耗时&#xff0c;那么如何在dblp/google scholar中高效筛选出满足条件的CCF A/B/C类论文&#xff1f; …

如何寻找计算机领域的英文文献?

大家一定或多或少都有文献检索的经验吧&#xff0c;中文文献还好&#xff0c;我们总归是对自己的的母语比较熟悉&#xff0c;通过关键词或其他检索条件&#xff0c;总能得心应手地找到自己需要的文献。相较于中文文献&#xff0c;对外文文献的检索就显得难度增加了不少&#xf…

windwos11 小爱音箱链接上但是没有声音

1. winr&#xff0c;输入regedit&#xff0c;打开注册表 2.复制下方路径 到这里 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Bluetooth\Audio\AVRCP\CT 然后敲击回车 修改这个变量 改为1 默认是 0 有的用户发现没有这个变量 DisableAbsoluteVolume 右键空白区域新建-…

小爱音箱当电脑音箱(电脑没有蓝牙)

1.电脑安装pc端&#xff0c;&#xff08;需要汉化的可以用汉化文件覆盖安装文件&#xff09;&#xff0c;只有记住上面的服务器地址就可以了。 2.手机端安装app &#xff08;需要电脑和手机在一个局域网内共性wifi&#xff09;输入上面的服务器地址&#xff0c;点图标。 3.电…

小爱音箱显示服务器连接不上,小爱音箱为什么连不上网络

有的时候&#xff0c;我们在使用小爱音箱时&#xff0c;可能会遇到连接不上网络的问题&#xff0c;有的是新音箱首次连接网络&#xff0c;直接就是连接不上&#xff0c;有的是明明之前好好的&#xff0c;现在突然连不上wifi网络了!为什么会出现这种情况呢?怎么解决小爱音箱连接…

小爱音箱显示服务器连接不上,小爱音箱无法连接WiFi解决方法

对于智能音箱&#xff0c;小米官方推出的小爱音箱一直受到很多用户的关注和喜爱&#xff0c;但是有些用户反馈表示&#xff0c;小爱音箱会出现无法连接wifi的情况&#xff0c;这是怎么回事呢?下面就让我们跟随小编一起来看看解决的方法吧。 小爱音箱 小爱音箱不能连WiFi是什么…

快速接入小爱音箱,操作电脑动动嘴

前言 如果有个设备能把你说的话传递到电脑中&#xff0c;这样你可以基于他开发一些软件&#xff0c;动动嘴就可以操作电脑&#xff0c;我想&#xff0c;这一定会给生活添加一些乐趣&#xff0c;而小爱音箱是个不二选择&#xff0c;开发也比较简单&#xff0c;如果用官方方式开…

如何用电脑连接小爱同学蓝牙音箱

很多朋友问我电脑连接小爱同学后&#xff0c;发现小爱同学没有声&#xff0c;但是蓝牙显示正常连接&#xff0c;今天我为大家出一个详细的教学。 进入小爱同学的蓝牙设置&#xff0c;将蓝牙可被发现打开&#xff1b;然后打开电脑蓝牙&#xff0c;进行小爱同学蓝牙配对&#xf…

系统接入小爱开放平台

背景&#xff1a;家庭中小米产品比较多&#xff0c;特别是音箱&#xff0c;无意间发现小爱有开放平台&#xff0c;了解了下&#xff0c;决定开发来玩玩 小爱开放平台 官方QQ群&#xff1a;1091193908 介绍下主流程 1、小爱开放平台配置 &#xff0c;当进入自定义技能是&#x…

小爱音箱连接Windows蓝牙没有声音

问题&#xff1a;使用Windows&#xff08;win10、win11&#xff09;电脑蓝牙连接上了小爱音箱&#xff0c;在蓝牙设备中能看到小爱音箱以配对或者已连接&#xff0c;但是在输出设备中却找不到小爱音箱&#xff0c;怎么办&#xff1f; 详细的问题由于没截图&#xff0c;这里引用…

小爱音箱mini接入HA,并且通过Node-RED来控制小爱说话

首先HA&#xff0c;先确保安装好Node-RED和xiaomi MoIT集成&#xff0c;这两部分的安装方法在我其他的教程已经介绍过了&#xff0c;所以本文建立在你已经安装好这两个的前提下&#xff0c;分享我的连接历程。 第一步&#xff1a;先把小爱音箱接入HA&#xff0c;通过xiaomi Mo…