作者按:最近要忙了,日更的日子要到头了。后面每一篇讲的点就小一点吧,大的点等后面有空了再写。大家见谅。
碰到了认知边界
我的有的朋友跟我说,用ChatGPT编程需要你至少要跟他对等水平,因为现阶段我们还不能做到完全不需要关心它写出来的代码,当你要读懂它写的代码的时候,就必须能力对等。还有的朋友跟我说,ChatGPT的不能超过你的认知水平,你的认知水平的上限决定了它的表现,比如你认知水平不行,导致自己不能分解任务的时候,那么你用ChatGPT也写不出代码。
上面说的都没错,但是如果是以往的工具,它可能到这里就会出现一种分层。这种分层就会导致人和人的差距的鸿沟在企业里可能就会变成一种划分职级的边界。但是ChatGPT跟以往的工具都不同,以往的工具他没有办法提升你的认知,没有办法提升你的水平。但是ChatGPT可以扮演多种角色,除了当一个生产工具之外,它还可以当一个教学工具。也就是说,当你进入到了一种低认知的状态,他可以立刻转变为教学问题,让你通过学习进入高认知状态。提升你的水平。然后你就又可以一种较高的水准进行工作了。
举个例子,在我们的这个程序里
08-01-final-process-view.png开发最后的png_info_post_inject模块时,我其实并不会操作png的内嵌信息,以前也没有过类似的经验。所以一开始,我只是想当然的认为nodejs应该可以吧。所以我问了他很多的问题,做了很多的设计,甚至改了很多遍。就是想让他用Node.js给我做出来。经过一系列的尝试之后,果然就失败了。(主要是我用的AI自己会在图片里留一些信息,我又不想覆盖掉,我还想它的信息和我的信息在作图AI的软件里都能被看到。)我又让他给了我其他的库或原生的写法,都不太好用。由于我太有自信了,所以这个过程中我全程TDD,为了搭建这个测试环境还浪费了我很多时间。
然后在这个时候我就进入了一种迷茫的状态。我不知道该怎么办了。
跨越认知边界
幸好我现在的工具是个人工智能。所以我问他:
08-02-ask-for-solution.png嗯……Python,我的画图AI也是用的python,这个应该可行。但是这回我学聪明了。我并不直接开始TDD。我先建了个spike文件夹。也就是调研用的。这里的代码呢只是做一个尝试。并不真正作为产品代码使用。
其实这个动作在TDD里面也是被讲究的,你应该先调研,调研完了之后再来tdd。你不应该带着对某一个知识点的不理解工作,并且在你的代码里边试验边学习一个知识点。这种做法非常常见,但是其实是反模式。因为你的代码里往往都有各种各样的其他无关因素,造成了你的学习效率不高。学习一个知识点和将这个知识点用于工作,应该是两个阶段。
所以接下来我是这么做的。我新建了一个spike文件夹。然后开始在里面实验我的代码这个spike文件夹我有可能最终是不会提交到代码库的。
然后我在里面准备了一张test.png
然后调研用python来访问png,但是我毕竟不太了解这个领域,我决定开始之前double check以下,我又问了一遍
08-03-double-check-solution.pnghmm……果然有点小坑,也不知道哪个是哪个,看起来PIL更基础一点,行吧,我的功能不复杂,可能PIL就够用了。
于是我问:
08-04-solution-to-code.png似乎又说PIL就是Pillow,不知道靠不靠谱啊。我们都知道,ChatGPT经常会编造。这也是很多人不信任他的地方。别的领域我们不好说,但是编程领域其实不太有必要不信任他。一个是你看我们可以像这样去做一个double check。另一个就是我们可以让他从他讲的方案直接生成代码。如果他的方案不可行,你代码自然没法执行。甚至你把代码提到ide里,它可能都会有语法错误,对吧?我们有一套完整的IDE、编译器和我们的电脑组成的开发环境来验证它输出的内容是不是可信的。这也是我为什么这么放心大胆用于编程的原因。
那么既然我们得到了代码,我就可以开始试验了,我直接把example.png 改成了test.png,果然打印了出来,这可行!
然后就又问了他怎么修改,怎么append,这里就不展示了,其实如果自己走一遍就会发现,这个里面修改可能是完全覆盖可能是append,我前面说,我想保留原有信息,所以我需要的是append,这个就不是那么直接可用了,跟它折腾了一会。
所以spike这一步的其中一个意义就在这里:我可以在一个非常单纯的环境下随意地测试方案是否可行,而不用带上其他复杂的上下文,毕竟我做到这里的时候,程序也挺长的了,输入的intention.yml也挺复杂的了,每次都从头测试也很低效。
接着我又让他给我生成了nodejs怎么调用python,在今天之前,我也从来没用过这个能力。这个能力spike的很快,spike完我就直接封装了一个runPythonScript函数出来。
接着到了真正的集成点。我们需要把Python代码封装成一个node js函数,然后对我们的程序提供服务。这个时候再给大家演示一下,上一篇我们提到的编程语言也是一种语言的场景:
08-05-programming-language-is-also-a-language.png所以可以看到,我们可以直接把代码给他,不用说太多废话。他自己能看懂,然后让他来抹平集成时可能出现的问题。比如传参问题还有返回值问题。我之前并不知道要怎么传参和得到返回值,现在我知道了。
所以前面调研环节的另一个价值就体现出来了:你调研得到的代码可以直接作为prompt使用,并不需要还转化为什么自然语言,语言就是语言,都能作为prompt的一部分,而且啊,搞不好chatgpt还更喜欢编程语言,毕竟人类的自然语言太不严谨了。
总结一下
在本文中,我们探讨了使用ChatGPT进行编程时可能会遇到的认知边界,并分析了ChatGPT与传统工具的不同之处。与传统工具相比,ChatGPT可以扮演多种角色,除了当一个生产工具之外,它还可以当一个学习工具。这意味着,当你遇到认知边界时,ChatGPT可以立即转变为教学角色,帮助你通过学习进入高认知状态。
通过一个实际的例子我们看到了,当我们在编程中遇到自己不会的事情的时候,因为我们自己也分解不出任务,ChatGPT也不能帮我们解决问题,ChatGPT的表现也会下降。这时,我们可以进行调研,也就是进入学习状态。这个时候我们就可以把ChatGPT当成学习工具使用,提升自己的认知,从而提升ChatGPT的表现。
其实编程工作一直是有两个状态的,一个是学习态,一个是工作态。而且经常是要随时切换的,所以我们要时刻提醒自己,意识到自己是处于学习态还是工作态。两种状态的工作流程我总结了一下,如下图所示:
08-06-learning-status-and-working-status.png最后再说一点,结合我们上一篇提到的编程语言也是语言的思路,调研过程中得到的代码其实并不是什么浪费,他可以作为prompt的一部分来加速我们后面工作态时的效率。在以前,其实这样做也是可以提效的,但是因为整个过程是在人脑中,并不是很明显,今天我们通过ChatGPT来编程,我们就会发现,这种方法确实是更科学而高效的。
网友评论