谷歌陣地失守!ChatGPT又準又快,改bug完全不需要搜

上一波圖像生成模型大火,讓藝術家們十分焦慮,并開始聯合抗議Stable Diffusion等模型侵犯自己的版權,而這次ChatGPT帶來的文字革命則是讓各行各業都產生了危機感。

尤其是程序員群體,更是瑟瑟發抖,親手把自己的飯碗整沒了,未來只能淪為「代碼審核專員」。
但ChatGPT改代碼的能力真有想象中那麼強嗎?

可能還真就有那麼強!
用上ChatGPT,完全不需要從浩如煙海的文檔中尋找一個有價值答案了,只需要一個問題,直接就能返回大機率是正確的答案,并且還有諸多示例,從依賴庫版本更新到MacOS技術支持無所不能。
ChatGPT出馬,一個能頂倆,老闆直呼省錢...
理解編程語言的版本更新「版本匹配」絕對是最讓程序員們掉頭髮的問題,每次碰到tensorflow不兼容、各種依賴庫版本互斥、語言版本特性等問題都要耗費大量的精力來調試和修改。
大部分人都不會關注每次版本更新到底都有哪些內容變動,但ChatGPT把它們都記下來了。
比如老闆給你一個需求,把所有網站從非常過時的 PHP 7.4版本遷移到最新的PHP 8,這個問題可能就頭疼了。

PHP是WordPress和許多其他網絡管理工具所依賴的網絡編程語言,其中會涉及到大量的插件,而其中某些插件并不兼容PHP 8,如果想讓升級后的網站成功運行,就必須找到并修復其中的代碼。
一般的解決流程是,先到PHP.net上搜索問題,然后再在StackExchange上查找一些相關評論,確定具體該如何修改,整個過程非常混亂且耗時。
現在可以把問題的細節直接輸入給ChatGPT,就能快速得到一個解決方案,并且回答中還會包括一些演示代碼。
問:我在用PHP的時候,在沒有傳入數組的情況下,extract函數返回了一個fatal error,代碼在 PHP 7.4中就正常運行,但在 PHP 8中有錯誤。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()函數的行為變得更加嚴格。在以前的 PHP 版本中,如果沒有傳入數組,extract ()函數只會返回 false;但是在 PHP 8中,如果沒有傳入數組,則會拋出一個致命錯誤。此修改是為了提高函數的健壯性,并防止意外輸入引起的潛在錯誤。
你可以通過使用 is_array() 函數檢查傳遞給函數的變量是否是數組,然后再調用extract ()

還可以使用 array_key_exists() 函數檢查傳入的變量是否為數組。

或者使用... 運算符將數組解構為多個變量。
事實證明,根據ChatGPT的答案幾分鐘內就可以修完bug,其中很大一部分原因是知道去哪里找到答案,并且ChatGPT也說明了在不同版本的 PHP 中函數的行為是如何變化的。
問:當把代碼從 PHP 7.4遷移到 PHP 8時,哪些 PHP 函數可能會出問題?
What PHP functions are likely to break when moving from PHP 7.4 to PHP 8?
ChatGPT回答:當從 PHP 7.4遷移到 PHP 8時,有一些函數和特性可能會無法運行或具有不同的行為。以下是一些可能引發問題的主要變化:
如前面答案中所提到的,如果沒有傳入一個數組,則extract()函數會拋出一個致命錯誤; PHP 8.0中刪除了foreach , array_keys()和current(); PHP 8.0中刪除了 create_function() 函數,建議使用匿名函數; list()構造,在與 foreach 一起使用時,現在會將鍵和值作為單獨的變量返回,而非單個數組; 在 PHP 8.0中已經刪除了__autoload() 函數; $php_errormsg 變量在 PHP 8.0中已被刪除; 一些棄用(deprecations)函數已經被刪了,包括create_function(),each()、__autoload()和 ()和$php_errormsg
這些只是從 PHP 7.4遷移到 PHP 8時可能會發生問題的一些更改示例,在升級之前徹底測試您的代碼和應用程序是一個好主意,以確保一切都按預期運行。

在這份回答中,ChatGPT同時還說了「如前面答案中所提到的」,讓人感到既驚訝又惶恐。
在正在修改的代碼中,原來的開發人員(已經離職很久了)經常使用create_function,當時我不知道該函數已經被棄用了,但根據ChatGPT提供的修改列表,只需要搜索代碼,找到需要更新和重寫的內容。
然后,繼續要求 ChatGPT 展示替換該函數的方法。
問:在 PHP 中使用 create_function 重寫代碼的好方法是什麼?給我一個使用 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 中已棄用的函數,用于創建匿名函數。官方不再推薦使用這個函數,PHP 8.0 中已經刪除了它。現在可以使用 function 關鍵字創建匿名函數(也稱為閉包)。
下面是一個示例:

下面是使用匿名函數的等價代碼:

此外,還可以使用 use 關鍵字將變量傳遞到閉包中:

這個回答相當清晰,看了解釋以后很快就可以重寫完代碼。
MacOS技術支持假設在研究Mac上的優化存儲(Optimize Storage)時也有一些問題,為了縮小研究范圍可以直接問ChatGPT。
問:使用 MacOS 功能Optimize Mac Storage時,Time Machine是否會因為一些文件只表示為本地機器上的存根而進行不完整的備份?
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 中的「優化 Mac 存儲」功能使用 iCloud 將很少使用的文件從 Mac 卸載到云中,同時在本地機器上保留一個「存根」(stub)文件來表示原始文件。這樣可以節省 Mac 硬盤上的空間。
當設置Time Machine以進行備份時,將會備份所有文件,包括那些已經使用「優化 Mac 存儲」卸載的文件,不過是用存根文件來替代取代原始文件。
這也意味著,如果你要從Time Machine備份中恢復你的 Mac,并且「優化 Mac 存儲」功能是啟用的,那麼任何卸載的文件將不會包含在恢復中,需要再次從 iCloud 下載。
值得注意的是,如果卸載了大量的文件,那麼Time Machine備份可能會比不使用優化 Mac 存儲占用更多的空間,因為備份存根文件占用更少的空間。
簡而言之,如果你使用「優化 Mac 存儲」功能,Time Machine將會做不完整的備份,因為它只會備份存根文件,而非已經卸載到云端的原始文件。
上面ChatGPT的答案是正確的。
總結ChatGPT確實可以節省開發和解決bug所需時間。
通常情況下,程序員寫代碼時需要不斷進行調試,還要進行大量的網絡搜索,從搜索結果中找到線索,包括閱讀討論和評論。
當然,整個搜索過程可以提供很多信息,絕對比你從聊天機器人那里得到的信息更多,還可以在評論區還可以看到很多隱藏的技巧。
但當需要趕時間或者在一個關鍵的最后期限前,大量搜索絕對是一個笨方法,借助ChatGPT來解決編程問題已經被證明是非常有效的。
ChatGPT和其他的模型一樣,你必須意識到AI的答案并非總是正確,你極有可能會得到完全錯誤的答案,但它確實是一個非常出色的工具。

不過,ChatGPT到底是從哪里得到的這些信息?是否曾經有人專門寫過一篇關于extract或是create_function的文章?是否某些人的知識被用作答案生成的原始素材?
按目前的情況來看,至少對于 Google 的作者來說,曾經還有機會讓搜索引擎為文章提供流量,作為分享信息的回報,但是像 ChatGPT 這樣的聊天機器人直接壟斷了信息獲取渠道,當然用戶得到了更高的生產效率。有人會失去工作的成就感嗎?
問:當你回答一個問題時,你是否接受了其他人貢獻的知識,你是否從原始的人力資源中獲得了工作成果?
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的答案:作為一個由 OpenAI 創建的人工智能語言模型,我沒有個人的觀點或想法。不過我可以告訴你,用來生成回復的信息是基于我所接受的數據訓練,這些數據包括來自互聯網的巨量文本。
這段文字是由許多不同的人和來源寫的,我沒有能力為我提供的信息歸功于特定的個人。我的目標是提供有用和準確的信息,以幫助用戶找到他們正在尋找的答案。
重要的是要記住,我的回答是基于我所受訓練的數據中的模式生成的,可能并不總是完全準確或最新的。


[圖擷取自網路,如有疑問請私訊]

本篇
不想錯過? 請追蹤FB專頁!    
前一頁 後一頁