查看原文
其他

我是如何用ChatGPT写代码的

强风ht 强风Talk 2023-04-02

之前我写了一个小工具,80%的代码是ChatGPT提供的。这周想做点优化,解决不同sheet复制过程中图片复制的问题,这次想完全通过ChatGPT写这部分的代码,下面是我的尝试。

首先我问ChatGPT在JAVA中如何将一个sheet中的图片复制到另一个sheet中,它给了我一段代码。

我贴到IDE中发现报错,XSSFDrawing这个类里面没有getImages这个方法,ChatGPT说可能是POI库的版本问题,又重新给了我一段代码。

我发现还是有报错,createPicture这个方法有问题,ChatGPT解释说这个方法的参数应该是2个,不是3个。我告诉它不是参数个数的问题,是第二个参数的类型有问题,应该是一个int类型的值,而不是XSSFPictureData类型的对象。

ChatGPT理解了我的意思,又给了我一段代码,我试了一下发现图片已经复制过来了,但是大小不对,ChatGPT让我使用resize方法进行图片处理,我试了一下发现不行。它又给我提供了一个方法,通过setAnchor方法手动设置图片的大小。

这个时候我需要先知道原始图片的尺寸,ChatGPT告诉我用getAnchor方法。

我发现还有一个getXSSFClientAnchor方法,特意问了一下它们之间的区别,getAnchor是一个通用的接口,getXSSFClientAnchor是专门针对xlsx文件格式的一个实现。

另外我发现最终要生成的图片使用了getPreferredSize进行尺寸的设置,我问ChatGPT为啥要用这个方法,反馈说这个方法会综合考虑图片原始尺寸的大小、图片覆盖的单元格大小和这个sheet的大小进行尺寸设置。

我明确告诉ChatGPT我不需要使用getPreferredSize这个方法,我需要保持原始图片的尺寸大小,这次提供的代码运行成功了。

整个过程没有做任何google搜索,也没有查API文档,只是通过ChatGPT提供的代码就完成了。

下面说说我的感受。

  1. ChatGPT很难一次就给到正确的代码,之前大家在网上看到的都是比较简单的例子,稍微复杂一点就容易出错,但是在不断的引导下,最终可以给到正确的结果。

  2. 整个过程效率是很高的,你只需要通过对话的方式告诉ChatGPT问题所在,不需要google搜索相关报错信息,有时候可能你找半天也找不到报错的原因,也不需要查看POI库的API文档了解excel处理的每一个方法。

  3. 能力上比Github Copilot更强大,ChatGPT能够完全基于自然语言提供代码解决方案,Copilot更多的还是基于代码上下文提供建议,如果有问题也没法持续引导改进。

  4. 需要有一定的英语基础,整个沟通过程都是英文的,ChatGPT对英文的理解更好一些。

  5. 提出好的问题,要抓住每个阶段问题的关键,好的问题能够引导ChatGPT不断地改进它的解决方法,逐步逼近最终正确的代码。

  6. 知其然不知其所以然,因为代码都是ChatGPT帮我写的,整个过程没有看POI库的API文档,我对于底层的实现细节理解的并不深刻,所以也会有一些潜在的风险,测试覆盖并不一定全面。


我个人觉得ChatGPT可以辅助编程,提升编码效率,但是不是把ChatGPT提供的代码贴过来就完事了,要求甚解,要理解每一行代码,过度依赖ChatGPT会让我们的能力退化。如果不知其所以然,面临复杂问题的时候,我们就会束手无策,ChatGPT也帮不了我们。我记得刚开始学习JAVA的时候,老师就不让我们用IDE,我们得通过命令行一步步让代码跑起来,这样才能理解很多细节,这些细节很重要。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存