作者按:最近要忙了,日更的日子要到頭了其障。后面每一篇講的點(diǎn)就小一點(diǎn)吧银室,大的點(diǎn)等后面有空了再寫。大家見(jiàn)諒励翼。
碰到了認(rèn)知邊界
我的有的朋友跟我說(shuō)蜈敢,用ChatGPT編程需要你至少要跟他對(duì)等水平,因?yàn)楝F(xiàn)階段我們還不能做到完全不需要關(guān)心它寫出來(lái)的代碼汽抚,當(dāng)你要讀懂它寫的代碼的時(shí)候抓狭,就必須能力對(duì)等。還有的朋友跟我說(shuō)殊橙,ChatGPT的不能超過(guò)你的認(rèn)知水平辐宾,你的認(rèn)知水平的上限決定了它的表現(xiàn),比如你認(rèn)知水平不行膨蛮,導(dǎo)致自己不能分解任務(wù)的時(shí)候叠纹,那么你用ChatGPT也寫不出代碼。
上面說(shuō)的都沒(méi)錯(cuò)敞葛,但是如果是以往的工具誉察,它可能到這里就會(huì)出現(xiàn)一種分層。這種分層就會(huì)導(dǎo)致人和人的差距的鴻溝在企業(yè)里可能就會(huì)變成一種劃分職級(jí)的邊界惹谐。但是ChatGPT跟以往的工具都不同持偏,以往的工具他沒(méi)有辦法提升你的認(rèn)知驼卖,沒(méi)有辦法提升你的水平。但是ChatGPT可以扮演多種角色鸿秆,除了當(dāng)一個(gè)生產(chǎn)工具之外酌畜,它還可以當(dāng)一個(gè)教學(xué)工具。也就是說(shuō)卿叽,當(dāng)你進(jìn)入到了一種低認(rèn)知的狀態(tài)桥胞,他可以立刻轉(zhuǎn)變?yōu)榻虒W(xué)問(wèn)題,讓你通過(guò)學(xué)習(xí)進(jìn)入高認(rèn)知狀態(tài)考婴。提升你的水平贩虾。然后你就又可以一種較高的水準(zhǔn)進(jìn)行工作了。
舉個(gè)例子沥阱,在我們的這個(gè)程序里
開(kāi)發(fā)最后的png_info_post_inject模塊時(shí)缎罢,我其實(shí)并不會(huì)操作png的內(nèi)嵌信息,以前也沒(méi)有過(guò)類似的經(jīng)驗(yàn)考杉。所以一開(kāi)始策精,我只是想當(dāng)然的認(rèn)為nodejs應(yīng)該可以吧。所以我問(wèn)了他很多的問(wèn)題奔则,做了很多的設(shè)計(jì)蛮寂,甚至改了很多遍。就是想讓他用Node.js給我做出來(lái)易茬。經(jīng)過(guò)一系列的嘗試之后,果然就失敗了及老。(主要是我用的AI自己會(huì)在圖片里留一些信息抽莱,我又不想覆蓋掉,我還想它的信息和我的信息在作圖AI的軟件里都能被看到骄恶。)我又讓他給了我其他的庫(kù)或原生的寫法食铐,都不太好用。由于我太有自信了僧鲁,所以這個(gè)過(guò)程中我全程TDD虐呻,為了搭建這個(gè)測(cè)試環(huán)境還浪費(fèi)了我很多時(shí)間。
然后在這個(gè)時(shí)候我就進(jìn)入了一種迷茫的狀態(tài)寞秃。我不知道該怎么辦了斟叼。
跨越認(rèn)知邊界
幸好我現(xiàn)在的工具是個(gè)人工智能。所以我問(wèn)他:
嗯……Python春寿,我的畫圖AI也是用的python朗涩,這個(gè)應(yīng)該可行。但是這回我學(xué)聰明了绑改。我并不直接開(kāi)始TDD谢床。我先建了個(gè)spike文件夾兄一。也就是調(diào)研用的。這里的代碼呢只是做一個(gè)嘗試识腿。并不真正作為產(chǎn)品代碼使用出革。
其實(shí)這個(gè)動(dòng)作在TDD里面也是被講究的,你應(yīng)該先調(diào)研渡讼,調(diào)研完了之后再來(lái)tdd骂束。你不應(yīng)該帶著對(duì)某一個(gè)知識(shí)點(diǎn)的不理解工作,并且在你的代碼里邊試驗(yàn)邊學(xué)習(xí)一個(gè)知識(shí)點(diǎn)硝全。這種做法非常常見(jiàn)栖雾,但是其實(shí)是反模式。因?yàn)槟愕拇a里往往都有各種各樣的其他無(wú)關(guān)因素伟众,造成了你的學(xué)習(xí)效率不高析藕。學(xué)習(xí)一個(gè)知識(shí)點(diǎn)和將這個(gè)知識(shí)點(diǎn)用于工作宿礁,應(yīng)該是兩個(gè)階段漾抬。
所以接下來(lái)我是這么做的蜀踏。我新建了一個(gè)spike文件夾铝量。然后開(kāi)始在里面實(shí)驗(yàn)我的代碼這個(gè)spike文件夾我有可能最終是不會(huì)提交到代碼庫(kù)的骑冗。
然后我在里面準(zhǔn)備了一張test.png
然后調(diào)研用python來(lái)訪問(wèn)png石抡,但是我畢竟不太了解這個(gè)領(lǐng)域芹血,我決定開(kāi)始之前double check以下筏勒,我又問(wèn)了一遍
hmm……果然有點(diǎn)小坑遮精,也不知道哪個(gè)是哪個(gè)居夹,看起來(lái)PIL更基礎(chǔ)一點(diǎn),行吧本冲,我的功能不復(fù)雜准脂,可能PIL就夠用了。
于是我問(wèn):
似乎又說(shuō)PIL就是Pillow檬洞,不知道靠不靠譜啊狸膏。我們都知道,ChatGPT經(jīng)常會(huì)編造添怔。這也是很多人不信任他的地方湾戳。別的領(lǐng)域我們不好說(shuō),但是編程領(lǐng)域其實(shí)不太有必要不信任他广料。一個(gè)是你看我們可以像這樣去做一個(gè)double check砾脑。另一個(gè)就是我們可以讓他從他講的方案直接生成代碼。如果他的方案不可行性昭,你代碼自然沒(méi)法執(zhí)行拦止。甚至你把代碼提到ide里,它可能都會(huì)有語(yǔ)法錯(cuò)誤,對(duì)吧汹族?我們有一套完整的IDE萧求、編譯器和我們的電腦組成的開(kāi)發(fā)環(huán)境來(lái)驗(yàn)證它輸出的內(nèi)容是不是可信的。這也是我為什么這么放心大膽用于編程的原因顶瞒。
那么既然我們得到了代碼夸政,我就可以開(kāi)始試驗(yàn)了,我直接把example.png 改成了test.png榴徐,果然打印了出來(lái)守问,這可行!
然后就又問(wèn)了他怎么修改坑资,怎么append耗帕,這里就不展示了,其實(shí)如果自己走一遍就會(huì)發(fā)現(xiàn)袱贮,這個(gè)里面修改可能是完全覆蓋可能是append仿便,我前面說(shuō),我想保留原有信息攒巍,所以我需要的是append嗽仪,這個(gè)就不是那么直接可用了,跟它折騰了一會(huì)柒莉。
所以spike這一步的其中一個(gè)意義就在這里:我可以在一個(gè)非常單純的環(huán)境下隨意地測(cè)試方案是否可行闻坚,而不用帶上其他復(fù)雜的上下文,畢竟我做到這里的時(shí)候兢孝,程序也挺長(zhǎng)的了窿凤,輸入的intention.yml也挺復(fù)雜的了,每次都從頭測(cè)試也很低效跨蟹。
接著我又讓他給我生成了nodejs怎么調(diào)用python卷玉,在今天之前,我也從來(lái)沒(méi)用過(guò)這個(gè)能力喷市。這個(gè)能力spike的很快,spike完我就直接封裝了一個(gè)runPythonScript函數(shù)出來(lái)威恼。
接著到了真正的集成點(diǎn)品姓。我們需要把Python代碼封裝成一個(gè)node js函數(shù),然后對(duì)我們的程序提供服務(wù)箫措。這個(gè)時(shí)候再給大家演示一下腹备,上一篇我們提到的編程語(yǔ)言也是一種語(yǔ)言的場(chǎng)景:
所以可以看到,我們可以直接把代碼給他斤蔓,不用說(shuō)太多廢話植酥。他自己能看懂,然后讓他來(lái)抹平集成時(shí)可能出現(xiàn)的問(wèn)題。比如傳參問(wèn)題還有返回值問(wèn)題友驮。我之前并不知道要怎么傳參和得到返回值漂羊,現(xiàn)在我知道了。
所以前面調(diào)研環(huán)節(jié)的另一個(gè)價(jià)值就體現(xiàn)出來(lái)了:你調(diào)研得到的代碼可以直接作為prompt使用卸留,并不需要還轉(zhuǎn)化為什么自然語(yǔ)言走越,語(yǔ)言就是語(yǔ)言,都能作為prompt的一部分耻瑟,而且啊旨指,搞不好chatgpt還更喜歡編程語(yǔ)言,畢竟人類的自然語(yǔ)言太不嚴(yán)謹(jǐn)了喳整。
總結(jié)一下
在本文中谆构,我們探討了使用ChatGPT進(jìn)行編程時(shí)可能會(huì)遇到的認(rèn)知邊界,并分析了ChatGPT與傳統(tǒng)工具的不同之處框都。與傳統(tǒng)工具相比搬素,ChatGPT可以扮演多種角色,除了當(dāng)一個(gè)生產(chǎn)工具之外瞬项,它還可以當(dāng)一個(gè)學(xué)習(xí)工具蔗蹋。這意味著,當(dāng)你遇到認(rèn)知邊界時(shí)囱淋,ChatGPT可以立即轉(zhuǎn)變?yōu)榻虒W(xué)角色猪杭,幫助你通過(guò)學(xué)習(xí)進(jìn)入高認(rèn)知狀態(tài)。
通過(guò)一個(gè)實(shí)際的例子我們看到了妥衣,當(dāng)我們?cè)诰幊讨杏龅阶约翰粫?huì)的事情的時(shí)候皂吮,因?yàn)槲覀冏约阂卜纸獠怀鋈蝿?wù),ChatGPT也不能幫我們解決問(wèn)題税手,ChatGPT的表現(xiàn)也會(huì)下降蜂筹。這時(shí),我們可以進(jìn)行調(diào)研芦倒,也就是進(jìn)入學(xué)習(xí)狀態(tài)艺挪。這個(gè)時(shí)候我們就可以把ChatGPT當(dāng)成學(xué)習(xí)工具使用,提升自己的認(rèn)知兵扬,從而提升ChatGPT的表現(xiàn)麻裳。
其實(shí)編程工作一直是有兩個(gè)狀態(tài)的,一個(gè)是學(xué)習(xí)態(tài)器钟,一個(gè)是工作態(tài)津坑。而且經(jīng)常是要隨時(shí)切換的,所以我們要時(shí)刻提醒自己傲霸,意識(shí)到自己是處于學(xué)習(xí)態(tài)還是工作態(tài)疆瑰。兩種狀態(tài)的工作流程我總結(jié)了一下眉反,如下圖所示:
最后再說(shuō)一點(diǎn),結(jié)合我們上一篇提到的編程語(yǔ)言也是語(yǔ)言的思路穆役,調(diào)研過(guò)程中得到的代碼其實(shí)并不是什么浪費(fèi)寸五,他可以作為prompt的一部分來(lái)加速我們后面工作態(tài)時(shí)的效率。在以前孵睬,其實(shí)這樣做也是可以提效的播歼,但是因?yàn)檎麄€(gè)過(guò)程是在人腦中,并不是很明顯掰读,今天我們通過(guò)ChatGPT來(lái)編程秘狞,我們就會(huì)發(fā)現(xiàn),這種方法確實(shí)是更科學(xué)而高效的蹈集。