跳到主要内容

“如虎添翼而非雪中送炭”——前端程序员的 GitHub Copilot 试用报告

MoyuScript

GitHub Copilot,是全球知名开源平台 GitHub 推出的一个 AI 辅助写代码的工具。

从它的英文名来看,“GitHub”是制作它的公司名,而“Copilot”则是“副驾驶”的意思。

我从今年 10 月开始了 60 天的试用期,整体用下来感觉还不错,让我用一句话来形容使用体验的话,那就是“只能如虎添翼,不能雪中送炭”。

这篇文章我主要给大家分享一下我作为前端开发程序员使用 GitHub Copilot 的一些体验。

img

能做的

把程序员从重复劳动中解放出来

首先是它能做的事。

很显然,它是一个工具,而工具的发明就是为了将人类从重复无趣的生产任务中解放出来,Copilot 也不例外。因此,它第一个能做的就是“把程序员从重复劳动中解放出来”

我们先画个红色的正方形,现在,我们需要让它能被鼠标拖动。一般来说我们要做的无非就是下面几件事:监听各种事件、鼠标左键按下时记住鼠标初始位置、鼠标移动后计算并设置红色正方形的位置、鼠标松开时解除监听事件。

v2-aaf2995557c3a299265e254f358b4090_b

这种算是重复劳动了,因此,我们可以使用 Copilot 来生成相关逻辑代码。

我们首先获取红色正方形的 DOM,然后使用一行注释,告诉 Copilot 我们需要让它可以被拖动,稍等片刻,它就会生成其中一个解决方案。

img

如果并不是我们想要的,我们可以人工写一下一小部分,让它推测后面的内容。可以看到,经过一点点纠正后,Copilot 就写出了我们想要的结果。

img

快速生成帮助类函数

接下来,还有一个场景使用 Copilot 挺合适的,就是生成帮助类函数。

比如,我需要一个函数能把 RGB 值转换为十六进制的值,可以写个叫 rgb2hex 的函数,然后,他就能给我自动补全代码,这个算法我之前甚至都不知道,顺便又学会了新的知识。

img

还有一种就是日常开发中经常用到的 lodash 库,如果我想引入整个包的话代码体积可能会变得比较大,现在我只想使用它其中一个功能,比如,获取对象属性的“get”方法。

虽然可以通过引入更小的“lodash.get”包来解决体积过大的问题,但是我这里采用直接编码的方式来解决。

我们可以通过写这个注释,告诉 Copilot 我需要 lodash.get 方法,它就能自动匹配到对应的代码并补全,可见还是很方便的。

img

快速上手不熟悉的编程语言

Copilot 的第三个作用,就是快速上手不熟悉的编程语言。

比如,在开发中我需要使用一个 Shell 脚本来自动批量命名,但是,我对 Shell 并不是很熟悉,这时候,我就可以通过注释的方式,告诉 Copilot 我需要什么功能,它就能自动生成相关代码。

当然,它生成的代码并不一定完全符合我们的使用需求,我们接下来还需要对自动生成的代码进行小改,就可以用了,整体的学习成本还是比自己去网上查资料的成本要低。

img

不能做的

当然,Copilot 也并非万能,你不能指望它能把活全都给你干了,它只能是作为工具辅助你开发。

解决屎山

首先,它不能解决屎山一样的代码。如果使用者的水平较差,写出来的代码架构混乱,连人类都难以看懂,那就基本别指望 Copilot 能看懂了。

想让 Copilot 工作,就必须要让它理解你的意图。如果你的代码不写注释、命名混乱,那它只能根据代码上下文的逻辑来理解你的意图,很可能不会正确工作。想要让 Copilot 发挥最大的作用,需要你本来就已经有比较高的编码水平。

img

函数意图不明,无法预测

img

函数意图明确,很轻松就预测出来了

生成完全可用的代码

然后,Copilot 生成的代码,不一定完全可用。对于一些算法代码,大部分都是固定的代码片段,使用 Copilot 来生成通常都能准确无误。但是,对于业务代码,它是无法完全理解需求的,这就需要人为去介入。

正确的做法是使用 Copilot 来生成部分代码,然后,再在它生成的代码基础上进行人工修改,从而达到完全符合使用需求的目的。

使用风险

如果你听完我上面的分享,想开始使用 Copilot 来辅助写代码的话,先别急,这里存在一些使用风险需要了解一下。

违反开源协议

如果你之前有关注过 Copilot,就会知道,它是拿 GitHub 上所有公开的代码作为训练集,不管是什么开源协议,需要注意的是,开源有时候并不等于能用于商业用途。也就是说,它生成的代码可能包括不能商用的开源项目的源代码,如果你要将生成的代码直接用于商业项目,可能会有违反开源协议的风险。

GitHub编程神器Copilot被斥“盗版”大量开源代码,面临90亿美元集体诉讼澎湃号·湃客澎湃新闻-The Paper

我的建议是尽量不要生成大段的代码,如果一定要使用的话,可以改几个变量名,或者是调整一下逻辑来规避风险。当然,如果你不想要这个功能的话,可以在配置页关掉匹配公共代码的开关。

img

商业代码泄露

另外还有一个风险,就是 Copilot 会上传你的代码到服务器进行运算,然后再将结果返回给你,这里就存在泄露商业代码的风险。虽然你可以通过设置不允许 Copilot 使用你的代码来提升产品体验,但是 Copilot 总归是需要联网工作的,需要你自己去评估使用风险后再决定是否使用。

img

如果你想不联网使用 AI 来写代码的话,可以尝试一下 Tabnine AI 作为替代。

img

结论

总之,想用好它的前提是你的代码水平已经比较高,只是希望能通过使用 Copilot 来减少重复性工作,提高开发效率。因此,Copilot 能让你如虎添翼,不能给你雪中送炭。

以上,就是我通过实践得出的一些结论,希望能对大家有所帮助。