ChatGPT现在可以用来辅助开发吗?

前言

我是一个很注重效率的人,我的终极梦想就是能有办法尽可能的压缩写业务代码的时间,留更多的时间给我们去做一些优化或者提升自己,而不是花大部分的时间在写业务上。我之前就写过一篇文章juejin.cn/post/720205… 使用工具来压缩开发时间,但这个方法顶天能压缩你现在开发时间的20%,这还是很理想的状态,正常也就只能8%左右。

好巧不巧,前段时间不是ChatGPT火起来了吗,所以我就想来探究一下ChatGPT能不能辅助我们开发以此来进一步压缩时间。可能有的人问了,都出来这么久了,为什么现在才写。这不是现在处于一个流浪状态,前段时间一直在找工作也没时间写文章,所以有公司缺Android开发的话,是吧,可以考虑考虑小弟。

回归正题,ChatGPT现在能不能辅助我们进行开发,我这里举几个例子,看看电脑的效果是不是比我们大脑给力。

1. 给个json让它生成实体类

这个场景是这样的,一般我们不是要根据后台接口文档去写我们对应的实体类吗,那如果这个接口有20几个参数,我们一个个复制粘贴参数名称,就比较耗时,所以看看ChatGPT能不能帮我们分忧解难。

6da8c86e226aea17013f3c1ac98cda5.png

dd4eb578685fe666aabbd798d3535cd.png

哎哟,不错哦,有点东西,这关它算是能通过了。但是根据json生成实体类这操作,AS中也有插件能做到,所以做这件事并非你不可

2. 根据描述生成资源文件

平时我们开发,多多少少会自定义一些背景,圆角这些效果,然后我们看看能不能不花时间在写这种代码上面。

1877cd3073c566ece7381343c6d0f68.png

e63d4ca447db26c7656f85a152a98de.png

哎哟,不错啊,已经很可以了,根据我的描述就能写出来。但是这个效果,如果你公司是用蓝湖来看UI图的话,蓝湖也能帮你自动生成drawable的代码(有时候不太准要修改)。或者简单的我也可以根据我自定义的Live Templates去生成更快。这里让它去生成的话,还要写描述。但是如果是复杂的效果,让它来做也是个不错的思路。

我只能说有用,但不多。

3. 帮我写反射代码

我要做hook,我懒得去写反射相关的代码,让它帮我写

8cd5345c7afd51699a2706bb248503f.png

7f54b781bc479081ac6bc7f3175471e.png

这个效果我觉得确实挺不错,是能实现这个功能,但是有两个地方不符合期望的情况,第一个是我希望是用ClassforName,它直接.Class,然后我希望对象是传过来的,它直接newInstance创建(当然这是我描述不够清楚的原因)。但是没关系,我们可以在这基础上去改。个人觉得这个操作是能节省开发时间

4. 检查代码并改正

我以单例为例子吧,我乱下一段单例的代码,然后给它一个描述,看它能不能实现。这个场景是用来模拟,我脑子里有某个功能相关的知识点,然后想写这个代码,但是我不记得详细了,正常的做法就是我去网上找个Demo让我记忆唤醒一下,然后再写。现在我希望它能根据我瞎写的代码转成正常的代码

02c7296e544827538ea132aab617db4.png

7c8ccdbdec171858f807a3cc7654630.png

看得出,我乱写的代码很离谱,它也能帮我纠正过来,注意,这里有个很有意思的地方,我的描述中,可没有说明我想写的是单例,是它直接根据我这个瞎写的代码判断出我想写单例,然后进行纠正。

是挺好的,但是还是有问题。我特意在描述写了多线程环境,它没给我加volatile,也没给我加私有构造方法。真就差一点了,老铁,不然你真超神。

5. 帮我做单元测试

众所周知,单元测试是开发流程中的一环,而我们因为没时间,所以很少去做,就算去做,也只是对一些我们觉得会出错的用例去做,而不会尽可能的覆盖。看看它能不能帮我们整。

383350d96deeba36c5f1f2db07c970d.png

20a0050c8c96f0c73463e152f84a456.png

不是大哥,你就帮我写一个啊,把描述给改详细一点试试看

b8599f92680b5ede44eb16e74d982eb.png

6b3ea75edf8bf9e112f44e727358dae.png

ca70a8d121a6ece14d3d136591f19f3.png

978e3789e3c76ab848ae8c909754bdd.png

34f61e01f31ff98dbb58e91ddf0f073.png

2734ea79096bf8520315ebcdd25d800.png

前面写得真不错,后面因为它的长度是有限制的,所以我说“继续”,格式就变了。但是没关系,还能能实现我们想要的效果的,但是你也看到了,你得描述清楚它才能做到

6. 生成逻辑代码

这个我是花了挺长时间去测的,所以之前一直没写文章,然后现在找工作也没时间总结详细的流程。我就直接说最终的效果吧。实现不了!

为什么实现不了,我测试的时候做法是,假设这个功能不和其它的功能耦合,高内聚,然后我们根据流程图,去描述这个功能步骤,然后再描述一些注意事项。

最后导致实现不了的有以下一些原因:
(1)长度不够,上面已经演示了,我说“继续”之后,它会给我一些和之前不太一样的代码,导致很奇怪
(2)很多细节问题,像我上面举例的反射那个,它是能写出来了,但是有些地方不是我所期望的。你可以说我描述不够好,但你想想,你要描述够详细,你就要花很多时间去写这个描述,然后去想怎么写能让它明白我的一个想法。相当于把写代码的时间花费到写描述的时间
(3)其实这个过程中我已经是写了很多描述,接着上一条去说,就是这个意思,写描述花了很多时间。然后你要检查它的代码(当然它的代码是好理解),但是这样一来一回也是花时间的
(4)它有些地方写得很详细的,你希望它抽象,结果它给你详细写出来了。比如说你说有个类TimeManager,这个类是你已经写好的了,你希望它直接去调就行了,结果它给你重新去创建一个TimeManager出来(当然这对最终的效果影响不大)
(5)有些地方会写得不合适导致你直接想重写
(6)花时间,太花时间了,这不是你写描述写一次就能出来结果然后改的,很多地方觉得不合适,然后你会想是不是描述不够清楚,然后去修改描述,再让它重新帮你生成代码,以此不断循环几次,着实花费时间

总结

ChatGPT现在可以用来辅助开发吗?我的结论是能,但又不完全能。

你得发挥你的想象力,思考让它能在哪些方面去辅助你。比如上面我列举的一些场景,它能做到的,然后你觉得不合意的话可以在这基础上去修改。也就是说他是能做到至少把你的需求完成90%这种底部,然后剩下的10%你去修改就行。除了上面的例子外,比如你做国际化,你把string.xml的内容给它,告诉它你要做欧美的国际化翻译成英文 ,那肯定会比你一条一条翻译快,但是它也会有些翻译是不合你意的。你不能说是它不行,因为有些翻译是根据上下文的场景的,它没有上下文,所以肯定是做直接翻译。

回到一开始说的,我希望的效果是减少业务开发的时间,但是这个它是真没法做到了,至少我尝试的是没办法。所以ChatGPT能做辅助开发,但目前没办法辅助业务的开发。

看到效果确实很牛逼是吧,但是也有缺点,缺点就是描述花时间,然后模糊的描述效果可能不太好。我感觉其实就是目前这项技术还不太成熟的一个表现吧。如果真的发展到能用的时候,放心,AS会有官方的插件、官方的工具去使用它,到时候肯定能更好的辅助开发。

本文正在参加「金石计划」

猜你喜欢

转载自juejin.im/post/7219868613667143737