ChatGPT是什么,我就不用再多介绍了吧!相信大家已经看到了它在文本领域所展现出来的实力,虽然目前的效果依旧无法比拟专业文字工作者,但其文字能力也超过了绝大多数普通人,主要还相当的便宜,让不少文字相关工作者瑟瑟发抖。不过今天我们不讨论它的文字能力,而是讨论下它的代码能力。
经过我两个月的使用,我发现ChatGPT目前还完全无法替代程序员,尤其是在一些强上下文的编程场景下,比如一些重业务的编程场景。而在一些比较通用化的编程场景下,其展现出来的能力尚可。总结起来,我们程序员目前不必太担心ChatGPT抢我们饭碗的情况,但是可以利用它来完成一些编程相关的事,把它当做一个工具来大幅度提升我们的工作效率,下面是一些我总结的可以利用ChatGPT的一些场景,希望对大家有所帮助。
代码评审(CodeReview)
可以使用ChatGPT对已有代码进行CodeReview,从而提早发现问题。ChatGPT可以检测出语法错误
、代码风格问题、潜在的bug、性能问题…… 然而,需要注意的是,ChatGPT可能无法像专业的代码审查工具或经验丰富的开发者那样全面和准确地检查代码,而可能还会出现错误。所以在实际应用中,建议只将其作为辅助工具,与其他代码审查工具和人工审查相结合。
参考prompt:
请对以下代码进行CodeReview,指出代码中可能存在的问题,包括但不仅限于代码风格、潜在bug、性能问题、代码可读性、代码安全性等问题。
代码优化
如果你觉得代码评审还不够,你可以直接让ChatGPT帮你优化并重写下整个代码,当然你也可以要求它返回优化的理由。 不过需要和代码评审注意同样的问题,ChatGPT的表现无法像专业的程序员一样,依旧是建议将其作为辅助工具,参考其给出的结果,再结合专业人士的建议对代码做优化。
参考prompt:
请在保持原有代码逻辑的情况下优化下以下代码,尽可能提升代码的可读性、可维护性、性能……,并给出优化的理由。
备注:ChatGPT在代码评审和代码优化方面表现出的水平,我个人认为基本上相当于高级工程师的水平,但距该领域资深工程师或者专家还是差一大截的,所以我个人还是比较建议初级工程师实用ChatGPT来对自己的代码做一些优化,顺便也学习一下升代码指令的方法。
代码释义
程序猿日常工作中的很大一部分时间都是在维护老的代码,尤其是维护一些别人写的、没有注释的代码,如果需要修改一些逻辑,还要尝试去理解原有代码,相当痛苦。这个时候就可以将代码给到ChatGPT,让它帮忙生成一些代码释义,可以一定程度减轻你理解代码的负担。
参考prompt:
请解释以下代码的逻辑,请在代码中合适的地方增加注释。
提供解决方案
在我们日常工作中,经常会遇到一些问题不知道如何编程去解决,尤其是新手程序员,这类的问题非常多,这个时候给ChatGPT描述清楚你遇到的问题,让它给出一些建议和解决方案。此类问题无特定的prompt可以参考,但我可以给你举个例子。
我们最近在生产环境遇到一个线上问题,由于我们数据量增长,同一个设备的kafka消息可能同时被多台机器消费,导致数据状态不对,这个时候我可以要求ChatGPT给我一些解决问题的建议,ChatGPT对此问题的回答如下:
可以用ChatGPT解决的编程问题非常多,再举一些小例子:比如如何解决多线程相互间信息同步的问题、代码中怎么加Cache、java中有哪个开源包中有immutable的集合类可以直接使用??
代码生成
对于一些给定的问题,ChatGPT其实是可以直接生成相关代码的,而且生成的代码指令也是可用的。比如我上周就用ChatGPT生成了一份分布式锁注解的代码,可用性相当高。
整个上下文太长了,我就不完整贴出来了。针对分布式锁注解这个问题,ChatGPT不仅给出了注解接口代码,也给出来完整的切面实现代码,甚至给出了具体的使用示例,完整的demo分分钟就可以跑起来。
备注: 分布式锁这个问题我问了ChatGPT好几次,每次回答还是略有差异,甚至有些代码还稍微有些问题,需要自己识别下。总之ChatGPT的答案,目前不建议全信,需要自行做好甄别。
还有一些代码场景很实用用ChatGPT来做,比如用它来生成某段代码的单元测试。虽然它无法考虑到各种各样的数据case,但至少它能帮你把单测的基础代码写好,你只需要完善其他数据即可。
设计模式和架构建议
上面一些例子是如何在代码和实现的层面上利用好ChatGPT,但实际上,ChatGPT 在更高层面上也可以提供一些建议,比如代码设计甚至是架构设计上。比如我们系统现在遇到一个问题,由于是单体应用,上面运行了http服务、kafka消费者、定时任务,可能会存在不同任务相互抢占资源的情况,因此,我们一直计划对服务进行拆分,这个时候可以征求下ChatGPT的建议。
从ChatGPT的回答来看,还是相当有参考价值的。
学习新知识
如果你在某个领域是资深工程师,我肯定ChatGPT在这方面肯定没有你强,但是它知识邻域的广度肯定是你远不可及的。某个人可能在某个领域做到了90分,但ChatGPT可以在j大多数领域做到60分,甚至更高,而我们单个人可能只能在大多数领域只能做到10分 20分,所以ChatGPT是可以在你不熟悉的领域来帮助你学习的。
举个很简单的例子,我是一个后端工程师,我可能java水平能到90分,但我对前端代码不了解,但我也能看懂,大概水平就是十几二十分。但在ChatGPT的辅助下,我用Electron写出了一个ChatGPT的桌面客户端。 这样的例子真的数不胜数,只要你愿意学,ChatGPT什么都可以教你。
备注:由于ChatGPT训练数据的时效性问题,它无法提供非常新的资料,甚至有些时候还会出现瞎编的情况,注意甄别。
总结
还记得在ChatGPT刚爆火的那段时间,某大佬放出豪言说ChatGPT在x年内会替代xx%的程序员,最近类似的言论少了很多,我个人感觉不会有那么夸张,但肯定会替代掉一部分的,尤其是哪些低技术水平(比如简单的CURD)。不过我们只要学会使用好ChatGPT这个工具,我们一定不会被它替代。 最后附上前一段时间凯文凯利在接受csdn专访时说的一句话 AI 会取代人的 90% 技能,并放大剩余的 10%。