GitHub Copilot,是全球知名开源平台 GitHub 推出的一个 AI 辅助写代码的工具。
从它的英文名来看,“GitHub”是制作它的公司名,而“Copilot”则是“副驾驶”的意思。
我从今年 10 月开始了 60 天的试用期,整体用下来感觉还不错,让我用一句话来形容使用体验的话,那就是“只能如虎添翼,不能雪中送炭”。
这篇文章我主要给大家分享一下我作为前端开发程序员使用 GitHub Copilot 的一些体验。
能做的
把程序员从重复劳动中解放出来
首先是它能做的事。
很显然,它是一个工具,而工具的发明就是为了将人类从重复无趣的生产任务中解放出来,Copilot 也不例外。因此,它第一个能做的就是“把程序员从重复劳动中解放出来”。
我们先画个红色的正方形,现在,我们需要让它能被鼠标拖动。一般来说我们要做的无非就是下面几件事:监听各种事件、鼠标左键按下时记住鼠标初始位置、鼠标移动后计算并设置红色正方形的位置、鼠标松开时解除监听事件。
这种算是重复劳动了,因此,我们可以使用 Copilot 来生成相关逻辑代码。
我们首先获取红色正方形的 DOM,然后使用一行注释,告诉 Copilot 我们需要让它可以被拖动,稍等片刻,它就会生成其中一个解决方案。
如果并不是我们想要的,我们可以人工写一下一小部分,让它推测后面的内容。可以看到,经过一点点纠正后,Copilot 就写出了我们想要的结果。
快速生成帮助类函数
接下来,还有一个场景使用 Copilot 挺合适的,就是生成帮助类函数。
比如,我需要一个函数能把 RGB 值转换为十六进制的值,可以写个叫 rgb2hex 的函数,然后,他就能给我自动补全代码,这个算法我之前甚至都不知道,顺便又学会了新的知识。
还有一种就是日常开发中经常用到的 lodash 库,如果我想引入整个包的话代码体积可能会变得比较大,现在我只想使用它其中一个功能,比如,获取对象属性的“get”方法。
虽然可以通过引入更小的“lodash.get”包来解决体积过大的问题,但是我这里采用直接编码的方式来解决。
我们可以通过写这个注释,告诉 Copilot 我需要 lodash.get 方法,它就能自动匹配到对应的代码并补全,可见还是很方便的。
快速上手不熟悉的编程语言
Copilot 的第三个作用,就是快速上手不熟悉的编程语言。
比如,在开发中我需要使用一个 Shell 脚本来自动批量命名,但是,我对 Shell 并不是很熟悉,这时候,我就可以通过注释的方式,告诉 Copilot 我需要什么功能,它就能自动生成相关代码。
当然,它生成的代码并不一定完全符合我们的使用需求,我们接下来还需要对自动生成的代码进行小改,就可以用了,整体的学习成本还是比自己去网上查资料的成本要低。
不能做的
当然,Copilot 也并非万能,你不能指望它能把活全都给你干了,它只能是作为工具辅助你开发。
解决屎山
首先,它不能解决屎山一样的代码。如果使用者的水平较差,写出来的代码架构混乱,连人类都难以看懂,那就基本别指望 Copilot 能看懂了。
想让 Copilot 工作,就必须要让它理解你的意图。如果你的代码不写注释、命名混乱,那它只能根据代码上下文的逻辑来理解你的意图,很可能不会正确工作。想要让 Copilot 发挥最大的作用,需要你本来就已经有比较高的编码水平。
函数意图不明,无法预测
函数意图明确,很轻松就预测出来了
生成完全可用的代码
然后,Copilot 生成的代码,不一定完全可用。对于一些算法代码,大部分都是固定的代码片段,使用 Copilot 来生成通常都能准确无误。但是,对于业务代码,它是无法完全理解需求的,这就需要人为去介入。
正确的做法是使用 Copilot 来生成部分代码,然后,再在它生成的代码基础上进行人工修改,从而达到完全符合使用需求的目的。
使用风险
如果你听完我上面的分享,想开始使用 Copilot 来辅助写代码的话,先别急,这里存在一些使用风险需要了解一下。
违反开源协议
如果你之前有关注过 Copilot,就会知道,它是拿 GitHub 上所有公开的代码作为训练集,不管是什么开源协议,需要注意的是,开源有时候并不等于能用于商业用途。也就是说,它生成的代码可能包括不能商用的开源项目的源代码,如果你要将生成的代码直接用于商业项目,可能会有违反开源协议的风险。
GitHub编程神器Copilot被斥“盗版”大量开源代码,面临90亿美元集体诉讼澎湃号·湃客澎湃新闻-The Paper
我的建议是尽量不要生成大段的代码,如果一定要使用的话,可以改几个变量名,或者是调整一下逻辑来规避风险。当然,如果你不想要这个功能的话,可以在配置页关掉匹配公共代码的开关。
商业代码泄露
另外还有一个风险,就是 Copilot 会上传你的代码到服务器进行运算,然后再将结果返回给你,这里就存在泄露商业代码的风险。虽然你可以通过设置不允许 Copilot 使用你的代码来提升产品体验,但是 Copilot 总归是需要联网工作的,需要你自己去评估使用风险后再决定是否使用。
如果你想不联网使用 AI 来写代码的话,可以尝试一下 Tabnine AI 作为替代。
结论
总之,想用好它的前提是你的代码水平已经比较高,只是希望能通过使用 Copilot 来减少重复性工作,提高开发效率。因此,Copilot 能让你如虎添翼,不能给你雪中送炭。
以上,就是我通过实践得出的一些结论,希望能对大家有所帮助。