文/ 阿里云 - 秦奇
GitHub Copilot 自问世以来就饱受关注,其堪称惊艳的代码推荐能力自不可说,带来的一些其他问题也让大家议论纷纷,比如 程序员自此是不是就失业了? 以及其推荐的代码的“版权”问题。不过本文并不打算对以上的问题进行探讨, 仅仅是我试用申请通过之后,对于Copilot的代码推荐能力的一些实践,希望对大家能有所帮助。
能力汇总
这里我将GitHub Copilot的能力大致分为三种:辅助编程 、文本转代码 以及 经验推断。
辅助编程
顾名思义,辅助编程就是在编程过程中基于用户输入的上下文,对可能的代码进行预测和推荐,从而使编程效率更高。看几个例子: 首先是最常见的React组件的编写和对比:
-
基本在没有任何上下文时,可以推荐出可用的React组件代码。
-
在先声明了
IProps
的情况下,推荐出的则是包含接口定义的组件代码
-
引入
Dialog
和Table
组件的代码推荐
总结一下:在没有上下文时,也可以推荐出可用的代码,虽然这个代码大概率不是我们想要的;在具备上下文时,根据上下文语境推荐出的代码则更加准确,并且上下文越丰富,推荐越准确。
文本转代码
文本转代码 是指根据一段描述自动生成目标代码。可以看几个例子:
-
字符串反转
-
来个难一点的,浏览器检测
可以看到,虽然耗时有点久,但也推荐了代码,并且代码看起来还挺像那么回事,至于真的是不是可用,还有待验证。(PS./*@cc_on!@*/
还真是ie11以下独有的代码,可以参考这里) -
再来一个常见的面试题:快速排序

总结:常用的一些功能、算法确实是可以根据描述来生成代码的,不过生成代码的准确性就无法保证了,这些代码大概率也是来自实际的代码片段,正确与否就需要开发者自己去判断了。个人建议,生成的代码仅供参考,最好不要直接用于生产当中。
经验推断
Copilot 可以自动找出代码中隐含的一些规律。另外,用的多了之后,它可以学习个人编码的习惯,从而推荐出个性化的代码出来。来看个例子:

再来一个复杂一点的,

这个能力还是蛮惊艳的,我猜背后的逻辑类似于code2vec,根据文本语义的相似性推荐来的。
个人建议
Copilot 作为一个代码辅助工具确实好用,但是也需要注意一些事情:
-
⚠️ 不要过分依赖生成的代码,因为准确性无法保证。
-
⚠️ 目前还没有本地版的Copilot,使用需要联网,注意代码安全问题。
-
⚠️ 把它当做一个开发辅助工具(代码补全、代码搜索),而不是当成用来吃饭的家伙。
淘系前端-F-x-Team 开通微博 啦!(微博登录后可见)除文章外还有更多的团队内容等你解锁🔓