原文標(biāo)題:《谷歌陣地失守!ChatGPT 又準(zhǔn)又快,改 bug 完全不需要搜》
ChatGPT 上岸第一劍,先斬開(kāi)發(fā)者!
上一波圖像生成模型大火,讓藝術(shù)家們十分焦慮,并開(kāi)始聯(lián)合抗議 Stable Diffusion 等模型侵犯自己的版權(quán),而這次 ChatGPT 帶來(lái)的文字革命則是讓各行各業(yè)都產(chǎn)生了危機(jī)感。
尤其是程序員群體,更是瑟瑟發(fā)抖,親手把自己的飯碗整沒(méi)了,未來(lái)只能淪為「代碼審核專員」。
但 ChatGPT 改代碼的能力真有想象中那么強(qiáng)嗎?
可能還真就有那么強(qiáng)!
用上 ChatGPT,完全不需要從浩如煙海的文檔中尋找一個(gè)有價(jià)值答案了,只需要一個(gè)問(wèn)題,直接就能返回大概率是正確的答案,并且還有諸多示例,從依賴庫(kù)版本更新到 MacOS 技術(shù)支持無(wú)所不能。
ChatGPT 出馬,一個(gè)能頂倆,老板直呼省錢...
理解編程語(yǔ)言的版本更新
「版本匹配」絕對(duì)是最讓程序員們掉頭發(fā)的問(wèn)題,每次碰到 tensorflow 不兼容、各種依賴庫(kù)版本互斥、語(yǔ)言版本特性等問(wèn)題都要耗費(fèi)大量的精力來(lái)調(diào)試和修改。
大部分人都不會(huì)關(guān)注每次版本更新到底都有哪些內(nèi)容變動(dòng),但 ChatGPT 把它們都記下來(lái)了。
比如老板給你一個(gè)需求,把所有網(wǎng)站從非常過(guò)時(shí)的 PHP 7.4 版本遷移到最新的 PHP 8,這個(gè)問(wèn)題可能就頭疼了。
PHP 是 WordPress 和許多其他網(wǎng)絡(luò)管理工具所依賴的網(wǎng)絡(luò)編程語(yǔ)言,其中會(huì)涉及到大量的插件,而其中某些插件并不兼容 PHP 8,如果想讓升級(jí)后的網(wǎng)站成功運(yùn)行,就必須找到并修復(fù)其中的代碼。
一般的解決流程是,先到 PHP.net 上搜索問(wèn)題,然后再在 StackExchange 上查找一些相關(guān)評(píng)論,確定具體該如何修改,整個(gè)過(guò)程非?;靵y且耗時(shí)。
現(xiàn)在可以把問(wèn)題的細(xì)節(jié)直接輸入給 ChatGPT,就能快速得到一個(gè)解決方案,并且回答中還會(huì)包括一些演示代碼。
問(wèn):我在用 PHP 的時(shí)候,在沒(méi)有傳入數(shù)組的情況下,extract 函數(shù)返回了一個(gè) fatal error,代碼在 PHP 7.4 中就正常運(yùn)行,但在 PHP 8 中有錯(cuò)誤。PHP 8 的 extract 有什么變化嗎?
I'm having trouble with the PHP extract function giving a fatal error when not passed an array. In PHP 7.4, I did not get the error, but I seem to in PHP 8. Did extract change for PHP 8?
ChatGPT 回答:在 PHP8 中,extract () 函數(shù)的行為變得更加嚴(yán)格。在以前的 PHP 版本中,如果沒(méi)有傳入數(shù)組,extract () 函數(shù)只會(huì)返回 false;但是在 PHP 8 中,如果沒(méi)有傳入數(shù)組,則會(huì)拋出一個(gè)致命錯(cuò)誤。此修改是為了提高函數(shù)的健壯性,并防止意外輸入引起的潛在錯(cuò)誤。
你可以通過(guò)使用 is_array () 函數(shù)檢查傳遞給函數(shù)的變量是否是數(shù)組,然后再調(diào)用 extract ()
還可以使用 array_key_exists () 函數(shù)檢查傳入的變量是否為數(shù)組。
或者使用... 運(yùn)算符將數(shù)組解構(gòu)為多個(gè)變量。
事實(shí)證明,根據(jù) ChatGPT 的答案幾分鐘內(nèi)就可以修完 bug,其中很大一部分原因是知道去哪里找到答案,并且 ChatGPT 也說(shuō)明了在不同版本的 PHP 中函數(shù)的行為是如何變化的。
問(wèn):當(dāng)把代碼從 PHP 7.4 遷移到 PHP 8 時(shí),哪些 PHP 函數(shù)可能會(huì)出問(wèn)題?
What PHP functions are likely to break when moving from PHP 7.4 to PHP 8?
ChatGPT 回答:當(dāng)從 PHP 7.4 遷移到 PHP 8 時(shí),有一些函數(shù)和特性可能會(huì)無(wú)法運(yùn)行或具有不同的行為。以下是一些可能引發(fā)問(wèn)題的主要變化:
如前面答案中所提到的,如果沒(méi)有傳入一個(gè)數(shù)組,則 extract () 函數(shù)會(huì)拋出一個(gè)致命錯(cuò)誤;
PHP 8.0 中刪除了 foreach , array_keys () 和 current ();
PHP 8.0 中刪除了 create_function () 函數(shù),建議使用匿名函數(shù);
list () 構(gòu)造,在與 foreach 一起使用時(shí),現(xiàn)在會(huì)將鍵和值作為單獨(dú)的變量返回,而非單個(gè)數(shù)組;
在 PHP 8.0 中已經(jīng)刪除了__autoload () 函數(shù);
$php_errormsg 變量在 PHP 8.0 中已被刪除;
一些棄用(deprecations)函數(shù)已經(jīng)被刪了,包括 create_function (),each ()、__autoload () 和 () 和 $php_errormsg
這些只是從 PHP 7.4 遷移到 PHP 8 時(shí)可能會(huì)發(fā)生問(wèn)題的一些更改示例,在升級(jí)之前徹底測(cè)試您的代碼和應(yīng)用程序是一個(gè)好主意,以確保一切都按預(yù)期運(yùn)行。
在這份回答中,ChatGPT 同時(shí)還說(shuō)了「如前面答案中所提到的」,讓人感到既驚訝又惶恐。
在正在修改的代碼中,原來(lái)的開(kāi)發(fā)人員(已經(jīng)離職很久了)經(jīng)常使用 create_function,當(dāng)時(shí)我不知道該函數(shù)已經(jīng)被棄用了,但根據(jù) ChatGPT 提供的修改列表,只需要搜索代碼,找到需要更新和重寫的內(nèi)容。
然后,繼續(xù)要求 ChatGPT 展示替換該函數(shù)的方法。
問(wèn):在 PHP 中使用 create_function 重寫代碼的好方法是什么?給我一個(gè)使用 create_function 的例子。
What's a good way to rewrite code using create_function in PHP? Can you give me an example using create_function, and then one using the currently proper mechanism?
create_function 是 PHP 中已棄用的函數(shù),用于創(chuàng)建匿名函數(shù)。官方不再推薦使用這個(gè)函數(shù),PHP 8.0 中已經(jīng)刪除了它?,F(xiàn)在可以使用 function 關(guān)鍵字創(chuàng)建匿名函數(shù) (也稱為閉包)。
下面是一個(gè)示例:
下面是使用匿名函數(shù)的等價(jià)代碼:
此外,還可以使用 use 關(guān)鍵字將變量傳遞到閉包中:
這個(gè)回答相當(dāng)清晰,看了解釋以后很快就可以重寫完代碼。
MacOS 技術(shù)支持
假設(shè)在研究 Mac 上的優(yōu)化存儲(chǔ)(Optimize Storage)時(shí)也有一些問(wèn)題,為了縮小研究范圍可以直接問(wèn) ChatGPT。
問(wèn):使用 MacOS 功能 Optimize Mac Storage 時(shí),Time Machine 是否會(huì)因?yàn)橐恍┪募槐硎緸楸镜貦C(jī)器上的存根而進(jìn)行不完整的備份?
If you use the MacOS feature Optimize Mac Storage, will Time Machine make incomplete backups because some files are only represented as stubs on the local machine?
ChatGPT 回答:MacOS 中的「優(yōu)化 Mac 存儲(chǔ)」功能使用 iCloud 將很少使用的文件從 Mac 卸載到云中,同時(shí)在本地機(jī)器上保留一個(gè)「存根」(stub)文件來(lái)表示原始文件。這樣可以節(jié)省 Mac 硬盤上的空間。
當(dāng)設(shè)置 Time Machine 以進(jìn)行備份時(shí),將會(huì)備份所有文件,包括那些已經(jīng)使用「優(yōu)化 Mac 存儲(chǔ)」卸載的文件,不過(guò)是用存根文件來(lái)替代取代原始文件。
這也意味著,如果你要從 Time Machine 備份中恢復(fù)你的 Mac,并且「優(yōu)化 Mac 存儲(chǔ)」功能是啟用的,那么任何卸載的文件將不會(huì)包含在恢復(fù)中,需要再次從 iCloud 下載。
值得注意的是,如果卸載了大量的文件,那么 Time Machine 備份可能會(huì)比不使用優(yōu)化 Mac 存儲(chǔ)占用更多的空間,因?yàn)閭浞荽娓募加酶俚目臻g。
簡(jiǎn)而言之,如果你使用「優(yōu)化 Mac 存儲(chǔ)」功能,Time Machine 將會(huì)做不完整的備份,因?yàn)樗粫?huì)備份存根文件,而非已經(jīng)卸載到云端的原始文件。
上面 ChatGPT 的答案是正確的。
總結(jié)
ChatGPT 確實(shí)可以節(jié)省開(kāi)發(fā)和解決 bug 所需時(shí)間。
通常情況下,程序員寫代碼時(shí)需要不斷進(jìn)行調(diào)試,還要進(jìn)行大量的網(wǎng)絡(luò)搜索,從搜索結(jié)果中找到線索,包括閱讀討論和評(píng)論。
當(dāng)然,整個(gè)搜索過(guò)程可以提供很多信息,絕對(duì)比你從聊天機(jī)器人那里得到的信息更多,還可以在評(píng)論區(qū)還可以看到很多隱藏的技巧。
但當(dāng)需要趕時(shí)間或者在一個(gè)關(guān)鍵的最后期限前,大量搜索絕對(duì)是一個(gè)笨方法,借助 ChatGPT 來(lái)解決編程問(wèn)題已經(jīng)被證明是非常有效的。
ChatGPT 和其他的模型一樣,你必須意識(shí)到 AI 的答案并非總是正確,你極有可能會(huì)得到完全錯(cuò)誤的答案,但它確實(shí)是一個(gè)非常出色的工具。
不過(guò),ChatGPT 到底是從哪里得到的這些信息?是否曾經(jīng)有人專門寫過(guò)一篇關(guān)于 extract 或是 create_function 的文章?是否某些人的知識(shí)被用作答案生成的原始素材?
按目前的情況來(lái)看,至少對(duì)于 Google 的作者來(lái)說(shuō),曾經(jīng)還有機(jī)會(huì)讓搜索引擎為文章提供流量,作為分享信息的回報(bào),但是像 ChatGPT 這樣的聊天機(jī)器人直接壟斷了信息獲取渠道,當(dāng)然用戶得到了更高的生產(chǎn)效率。有人會(huì)失去工作的成就感嗎?
問(wèn):當(dāng)你回答一個(gè)問(wèn)題時(shí),你是否接受了其他人貢獻(xiàn)的知識(shí),你是否從原始的人力資源中獲得了工作成果?
ChatGPT, when you answer a question, are you taking knowledge others have contributed and are you taking work and credit away from the original human sources?
ChatGPT 的答案:作為一個(gè)由 OpenAI 創(chuàng)建的人工智能語(yǔ)言模型,我沒(méi)有個(gè)人的觀點(diǎn)或想法。不過(guò)我可以告訴你,用來(lái)生成回復(fù)的信息是基于我所接受的數(shù)據(jù)訓(xùn)練,這些數(shù)據(jù)包括來(lái)自互聯(lián)網(wǎng)的巨量文本。
這段文字是由許多不同的人和來(lái)源寫的,我沒(méi)有能力為我提供的信息歸功于特定的個(gè)人。我的目標(biāo)是提供有用和準(zhǔn)確的信息,以幫助用戶找到他們正在尋找的答案。
重要的是要記住,我的回答是基于我所受訓(xùn)練的數(shù)據(jù)中的模式生成的,可能并不總是完全準(zhǔn)確或最新的。
參考資料:
https://www.zdnet.com/article/im-using-chatgpt-instead-of-google-to-help-me-fix-code-faster-but-at-what-cost/
本文來(lái)自微信公眾號(hào):新智元 (ID:AI_era)
廣告聲明:文內(nèi)含有的對(duì)外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時(shí)間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。