80%的代码AI帮你写?还没这么夸张,不过也快了

兔年春节一过,APIcat进入到云服务版本的开发阶段,过年前发生了一件大事,Chatgpt横空出世,不少人预测Chatgpt会替代的10大行业,其中就有程序员

这时,一位特斯拉的老哥出来说,GitHub Copilot帮助他写了80%的代码。

当地时间2022年12月30日,特斯拉的人工智能主管、开发自动驾驶仪的主要领导人安德烈·卡尔帕西 (Andrei Karpathy)在推特发文称,他写的代码中有80%是由GitHub Copilot编写完成的,且准确率约为80%。

 有这么大的能耐么?我们开春就来试一下

GitHub Copilot是什么

GitHub Copilot 是由 Github 和 OpenAI 创造的 AI 工具。该工具通过自动代码补全来帮助程序员们编写代码。Visual Studio Code、Neovim 和 JetBrains 的用户可以使用插件来使用对应功能,这个功能是付费使用的,目前是免费体验60天,之后每月10美元。

下载插件,填写信用卡等信息,就可以启动了,基本无感启动。

GitHub Copilot使用效果展示

GitHub Copilot也不需要什么交互,就是你写程序的时候会自动的出来。我给大家边写代码边展示。

今天准备加一个controller,来完成APIcat的项目管理功能:

Copilot展示

我做了什么:我创建了一个叫project.go的文件,进去后,敲了必要的声明信息,之后的事情,几乎就是在等Copilot给我建议,Tab引用,再等下一个建议,再用Tab引用……

扫描二维码关注公众号,回复: 14801671 查看本文章

当然,这是“合作”一周之后的结果,刚开始的时候,他不清楚我会在函数前面加上swag注释,不过写过一两次就好了。

那么接下来,我们看看,Copilot还会建议我们给Project这个controller加哪些功能函数呢?

Copilot使用体验2

有意思吧,Copilot直接建议我为Project:

  1. 添加List用于列出所有的Project
  2. 添加Delete用于删除
  3. 添加Update用于更新
  4. 添加Get用于获取单个详情

这基本一个大体的资源管理控制器的主体功能就出来了。

上面这段就是我写文章的时候边写边敲的,没有做任何的事前准备,所有的代码加中文注释都是Copilot自己想的。

实际Copilot在这周还帮我做了很多的事情:

当我不想写注释的时候,帮我写注释

 为我补充测试例(注意,我并没有让他取个新的id)

为我写最不想写的输入验证规则(我都不知道他从他找来这么个规则)

而且这家伙真的是学识渊博,我有个按位取值的简单权限系统,他给的权限操作直接是按位来的,我都要再去写个矩阵想想到底对不对……

func (a *Admin) HasPrivilege(privilege int32) bool {
	return a.Privilege&privilege&privilege != 0
}

func (a *Admin) RemovePrivilege(privilege int32) {
	a.Privilege &= ^privilege
}

如果单纯说代码量,我看80%都是少的 

当然,他也没那么智能

大家也不用担心,未来的几年,他还替代不了程序员,还是会出很多的错

func (g *generator) hasDefault(par interface{}) bool {
    if par == nil { //AI自动判断
        return false
    }
    switch tp := par.(type) {
    case *openapi3.ParameterRef:
        return tp.Value != nil && tp.Value.Schema != nil && tp.Value.Schema.Value.Default != nil
    case *openapi3.SchemaRef:
        return tp.Value.Default != nil
    }
    return false
}

例如上面的片段,我出错了,Copilot加了个nil判断,实际在par参数类型为interface{},实际是下面两个类型的指针的时候,这个判断无效。

d.CloudProvider = CloudProvider(bucket.Get([]byte("cloud_provider"))[0])

例如上面的这个操作,是要先判断bucket.Get([]byte("cloud_provider"))是否为nil的。

但话说回来,我也只是写了下面代码的第一行,Copilot就直接补全了后面的:

		var bts = bucket.Get([]byte("cloud_provider"))
		if len(bts) > 0 {
			d.CloudProvider = CloudProvider(bts[0])
		}

所以,Copilot确实从Github大量的项目中学习到了很多编程知识,但是也因为采集面太广,他的实际表现也基本等同于一个初中级程序员,太深的东西他也做不出来。

还有个关键,效率似乎也没有太大提升

看完上面的,也许大家要说,那其实就是检查一下他写的对不对,然后大量代码都不用写了,是不是觉得工作效率就会高很多。

但实际我用下来,也不是这么回事,有几个大的问题:

  1. 他的思路和我的思路还是有区别,我不得不像理解一个同事一样去理解他,这就造成他写出来一段代码之后,我必须停下来阅读,查看里面不一致的部分,并进行修改,这个从敲代码的层面看,我确实也没做太多的工作,但是问题在于,我的思路一直在自己的和Copilot的之间进行转换,很多时候,这种工作的效率也不高。
  2. 他会从其他库中学习灵感,但可能和项目不符,比如我们在创建User权限的时候,他会建议很多种用户类型,但是和我们的定义不符,这时,Copilot转变自己思路的速度会稍慢,造成你不得不用修改多次类似代码的方式来和他沟通
  3. 我需要查看并检查他是否出错,这是最大的问题来源了,比如上面说的没有判断nil的问题,确实他一次也修改完成了,但是问题在于他默认提示的是有问题的,这时要反过来验证和查找问题,程序员就知道,时间损耗就多多了。

所以,总的来说,我也没太感觉编程效率有太大的提升,更多的在于解放双手,大脑并没有解放

但是,我也回不去了,你要知道每个月只用花60多块钱而已,这仅仅是普通开发1,2个小时的工资,即便只解放了双手也值啊。

这样的好日子又能有多久?

可以说,现在的阶段是程序员最好的时光了,有个AI帮你干活,还不能替代你的作用,但是这样的发展阶段又能有多久呢,听说GPT4的模型又扩展了数倍的参数规模,现在看网上的效果,也可以写出来一小段的程序了, 难保哪一天,你直接给需求,就能直接把整个系统写出来

那时候,可能程序员就真失业咯

更多的思考

  1. 我写的代码是不是又回去帮助了美国人?
  2. 国内版本的什么时候有?
  3. 我乐意教一个徒弟,但是让我去教一个魔王,我不乐意,能收他培训费么?
  4. 如果美国程序员以1当5了,中国涉密的研发还跟得上么?
  5. 这玩意拿来控制武器怎么办?

猜你喜欢

转载自blog.csdn.net/baijiafan/article/details/128963868