太长不看版:copilot是一个现代化的代码自动补全插件,本地/网络上的轮子代码越完善,补全效果越好

前言

尽管去年就知道了github copilot,但一直没有去尝试。最近又刷到了一些关于copilot的视频,于是决定试用一下。前天申请的测试名额,今天就通过了。

这次以screeps游戏框架中的代码为基础进行试用。因为较为小众,代码样本较少(其实最少有四位数吧),可以更明显的测试copilot的效果。

使用体验

copilot直接“学习“了项目中的代码

copilot无视了注释,而是按照上方模板分析出带有“Terminal”字样的变量的类型为StructureTerminal。然后将其.room.name(string)填入了对应类型(string)的参数位置。

copilot学习他人代码

copilot也许是通过分析函数名中含有“whiteList”,搜索到了相关代码(这个自动补全的if),而且符合期待代码。

因为预期代码是对同一个变量的内容进行判断,所以我改为了switch后尝试copilot补全。结果符合预期。但仔细观察可以发现,填写的case存在重复。实际体验中copilot也比较容易出现复读。

吐槽:把whiteList从数组换为set的过程中自动补全了一个玩家名称,而其恰为screeps的dev。也许上述补全代码均参考自o4kapuk之手?

后记

通过几小时的试用,我给出我对copilot的简单理解以及评价:

copilot通过分析文件名,函数名,注释文本,结合从本地/在线项目代码库中搜索的结果,返回一段拼接后的代码。

不得不说,体验中生成代码的合理程度很大程度上取决于本地/网络中是否存在相似的代码片段。倘若是使用人数较少的代码框架,恐怕是难以直接生成令程序员满意的代码片段。**这意味着,copilot很大程度上参考了其他人的代码**

然而,根据我的片面了解,现在互联网企业的主流前后端开发框架使用人数众多(如前端vue,react,后端java spring boot,数据库mysql等),在这种情况下,copilot应该可以生成比较完美的代码。

由此,我猜测主流框架日常开发的成本、门槛会大幅度降低,而底层程序员的地位并不会受到怎样的影响...


I am a noob