经常有人问我,ChatGPT出来这么久了,你怎么不写点教程(割点韭菜)呢?其实,从它一出来,我就关注了,也在平时的工作中进行了使用,正好最近在处理一个埋点的问题,就拿ChatGPT来进行下演示吧,看我怎么用ChatGPT来摸鱼,解决我们平时遇到的问题。
问题是这样的,相信很多朋友也遇到过,那就是RecyclerView的Item曝光埋点问题。最开始对埋点数据要求不高的时候,埋点代码,都是直接写在onBindViewHolder�里的,这是最简单的方式,但是问题在于RecyclerView的预加载会创建一些页面不可见的缓存Item,这就导致了曝光数据不准,所以,当产品突然要求更加精准的曝光埋点时,这种方式就显得手足无措了。
这个问题的解决,国际上大致有两种方案。
一种是基于Adapter,在滚动停止时,计算当前firstVisible和lastVisible,并与上次的记录进行对比,从而计算出曝光的Item,这种方式也是简单有效,但是弊端在于统计粒度比较粗,如果以后产品要按照「Item展示大于x%才算曝光」,这样就无法实现了。
那么另一种方案,就是计算当前View的已经绘制的Rect和原始Rect的对比,从而可以推断当前View的曝光状态,类似airbnb的epoxy,就是这种方案github.com/airbnb/epox…,这种方式的定制程度就比较高了,但是稍微复杂一点,需要处理好监听的管理,否则会有一些性能压力。
ok,现在压力给到ChatGPT,让我们来看看它是如何解决这个问题的,下面的这些截图,就是我和ChatGPT的完整对话过程,首先,我们把问题抛给ChatGPT,当然,最开始我们需要给它一个比较宽泛的问题,然后再一步步引导它将答案具化。
看来ChatGPT还是信手拈来。接下来将问题具化到我们的RecyclerView。
由于是使用Kotlin,所以我的思路是尽量不改原来的代码,所以,拓展函数来一个?
这时候已经有点意思了。
ChatGPT果然是老实人,我说锁屏你就真的只管锁屏?
有点扯了,算了,先实现方案,后面再处理。
这个我还真没想到,之前对这种方案了解不对,还真是小刀划腚子。
不得不说,ChatGPT还是很听劝的,也很有礼貌,对于我的指责,能够好好反省。
但当我把它的代码copy到项目里面去运行,才发现了一堆新的问题。
不得不说,你创造API的能力是一流的。
态度挺好,但是,这错的是不是有点多啊,能不能一次改完?
终于改完了,我们现在在试试变更需求,看它能不能理解。
不错,再加点难度。
这时候,ChatGPT就突然变蠢了,改了好几次都不能完成这个需求。
越改bug越多。
到这个时候,我已经失去耐心了,这个bug来来回回改了这么多次,依然有问题,也许是跟我对话时间太长,变蠢了?
总而言之,我花了一个上午的时间想利用ChatGPT来摸鱼,但最后发现竟然比我自己做还累??我不仅要检查它的思路是否正确,还得给它解bug?
其实这个问题并不复杂,我们在问它之前,已经有一些思路了,但是最终ChatGPT并没有生成完整能符合需求的代码,不过这也不能全怪ChatGPT,它毕竟只是一个出道两年的练习生而已。
虽然忙了一上午没摸成鱼,但是我们也进一步了解了ChatGPT,不可否认,它的确有用,但还不足以能威胁到我的饭碗。那么我们能利用ChatGPT摸什么鱼吗,当然是可以的。
首先,你可以一定程度上替代搜索引擎,虽然有些问题它有些瞎扯淡,但是比起百度来说,我觉得还是更胜一筹的,很多简单的问题,基本就可以放弃百度了,直接ChatGPT就好了。
其次,你可以借助ChatGPT来给你提供思路,虽然它的代码不一定能完全满足你的需求,但它的思路,基本还是符合国际惯例的,有时候甚至还能给你一些惊喜。
最后,ChatGPT是需要调教的,别指望一下子就能给你很完善的回答,你需要一步步引导它,但对于像我这个level的程序员来说,这就好像在面试一个出道两年的练习生,有点惊喜,但不多,更多的是无奈,回答不到点子上。
当我用ChatGPT摸了一上午鱼,结果……我浪费了一上午!!!
欢迎大家关注我的公众号——【群英传】,专注于「Android」「Flutter」「Kotlin」
我的语雀知识库——www.yuque.com/xuyisheng