上一波圖像生成模型大火,讓藝術家們十分焦慮,並開始聯合抗議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時,有一些函數和特性可能會無法運作或具有不同的行為。以下是一些可能引發問題的主要變化:
#這些只是從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 locals?ine?
##ChatGPT回答:MacOS 中的「最佳化Mac 儲存」功能使用iCloud 將很少使用的檔案從Mac 卸載到雲端中,同時在本地機器上保留一個“存根」(stub)檔案來表示原始檔案。這樣可以節省 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 創建的人工智慧語言模型,我沒有個人的觀點或想法。不過我可以告訴你,用來產生回應的資訊是基於我所接受的資料訓練,這些資料包含來自網路的巨量文字。 這段文字是由許多不同的人和來源寫的,我沒有能力為我提供的資訊歸功於特定的個人。我的目標是提供有用和準確的信息,以幫助用戶找到他們正在尋找的答案。 重要的是要記住,我的回答是基於我所受訓練的資料中的模式生成的,可能並不總是完全準確或最新的。
以上是谷歌陣地失守! ChatGPT又準又快,改bug完全不需要搜的詳細內容。更多資訊請關注PHP中文網其他相關文章!