讓ChatGPT來當你的開發助手

想必大家近期在開發的時候都會搭配 chatGPT 吧?許多瑣碎的工作都能交給它,可以說是工程師的最佳幫手,今天想要分享我都會使用 chatGPT 來做哪些事情?以及我認為 ChatGPT 還有待加強的地方有哪些

使用技巧

先註冊一個帳號,註冊成功後點選畫面左下角的大頭貼,選擇自訂指令

這邊有點像是告訴 ChatGPT 你的偏好是什麼,像是我詢問程式類的問題,ChatGPT 預設都會用 python 回應我(暗示 python 正夯?),這時我就必須要多下一個指令  — 「請用 javaScript 實作…」,假設有設定自定指令,ChatGPT 就能預設使用 javaScript 回答了,再來就是很常看到答案裡夾雜的簡體中文,如果希望 ChatGPT 能以繁體中文回答也能在這邊一併做設定

清楚明暸的提問

描述的越清晰,生成的回答就會更加精準

👎 不好的提問:請幫我寫一個生成隨機亂數的 function

👍 好的提問:請用 python 幫我寫一個生成隨機亂數的 function,範圍是 1–100

想知道不同觀點的答案

可以請 chatGPT 角色扮演,回答的內容會根據角色的背景不同有所差異,下面是一般的提問

請 chatGPT 扮演十年經驗的前端,會發現回答的內容比較偏向「長期的發展目標」,還蠻有趣的

當 ChatGPT 的回答太過艱澀難懂..

請 ChatGPT 來解釋 javaScript 中比較抽象的閉包是什麼?如果是 javaScript 的初學者肯定會對以下的說明一知半解

覺得 ChatGPT 回答的問題過於艱澀,可以改用以下的問法

「如果我是五歲小孩,你會怎麼跟我解釋 xxx」

五歲小孩的版本 ChatGPT 幾乎都會用玩具來做舉例,雖然有人可能覺得更加抽象 😂

ChatGPT 能做什麼事?

程式語言翻譯機

請 ChatGPT 重構程式碼,像是把以前用 jQuery 的 code 翻成 Javascript,一下子就寫好了,如果想把原本是 Javascript 寫的程式碼轉換成其他語言 ex. PHP、Java 也沒問題,當然本身也必須對轉換後的語言有一定的基礎,才有辦法識別出這段轉換過的程式碼是不是有問題

假設在做框架升級,要把 React class component 翻成 functional component 也是綽綽有餘的,還會貼心的提醒你 component 命名的問題

重構

以經典的 Fizz Buzz 面試題來舉例,題目的敘述如下

有一個 function 會跑迴圈判斷 1~100 的數字,並按照以下規則進行輸出:

  1. 如果數字是 3 的倍數,輸出”Fizz”。
  2. 如果數字是 5 的倍數,輸出”Buzz”。
  3. 如果數字同時是 3 和 5 的倍數,輸出”FizzBuzz”。
  4. 如果以上條件都不滿足,則輸出該數字本身。

相信很多人一開始都是這樣寫

我們可以請 ChatGPT 幫我們重構成可讀性更高的版本

不過,在工作實務上想要全部靠 chatGPT 重構是不可行的,它沒辦法知道整個 codebase,所以重構出來 code 無法滿足我們的需求,請它重構單一個 function 是比較合適的,像是有些 utils function 我覺得自己寫的不夠漂亮,就會想看看 chatGPT 會怎麼寫

指令查詢

年紀大了記性就變得越來越差了,很多指令都記不住,像是我想要砍掉 8080 port 的 process,這時候就可以問 chatGPT 了

Debug

相信大多數人會使用 ChatGPT 來除錯,像是餵 dev tools 的錯誤訊息給它,詢問原因,或是 function 的 output 不如預期,請 ChatGPT debug

而我個人最常使用 ChatGPT 的場景是,這個 bug 是我從來沒遇過的,而且所有的除錯方式都試過了,但依然無法定位問題才會詢問 ChatGPT(走投無路的概念

最後 ChatGPT 一共列了四個可能的原因給我,但有趣的是我最後找到的 bug 原因並不在這四個其中,其實像這樣的情況其實佔了一半左右,ChatGPT 給的 bug 成因都沒有命中,但確實有給我一些靈感,讓我知道能往哪幾個方向去除錯,也是有所幫助

學習一門新技術的好幫手

像是最近我想學習 CI CD,ChatGPT 可以很快的幫我生成一段 CI CD yml,並且詳細的解釋給我聽,讓我能夠快速掌握部分知識點,雖然說這個 yml 直接貼到 Github Action 的話根本不能運作 😂,接下來就是我自己的課題了,俗話說的好:『師父領進門,修行在個人』,ChatGPT 僅能提供脈絡,剩下的得靠自己鑽研

解釋程式碼

假設有一段 code 抽象到你完全看不懂,也可以試著餵給 ChatGPT 試試 ,請他解釋給你聽

翻譯文章

雖然說 ChatGPT 的英文翻譯已經比 google 好了,但還是覺得翻成中文,辭不達意,期望之後 ChatGPT 的翻譯能夠更加的口語化

維基百科

我很少會用 ChatGPT 查專有名詞,除非我能找到的資料太少或是這個名詞相當艱澀難懂,才會求助於 ChatGPT

雜事小幫手

  • 翻譯 i18n,如果翻譯內容沒有專有名詞的話,翻得還算 ok

  • 亂數生成假資料

  • 生成正規表達式

  • 寫一些轉換資料格式的 help function

(族繁不及備載…

面試小幫手

先描述你要面試的職位,ChatGPT 就能協助出題,這些問題我在面試當中還真的有被問過!

如果覺得自己的弱項是行為問題的話,也可以這麼問

ChatGPT 有哪些缺點

  1. 正確率不是百分之百,ChatGPT 給的答案務必要親自驗證過,我自己曾經測試請 ChatGPT 寫幾個 helper function,看起來寫得有聲有色,但實際 output 出來的結果根本就是錯誤的
  2. ChatGPT3.5 的資料庫只到 2021 9 月,因此給的回覆有時候已經是過時的了,像是有些框架或工具迭代的速度很快,api 每年都有變動,這時候單仰賴 ChatGPT 給的資料就行不通了,不過這也有解法,只要付費升級到 ChatGPT4 就可以了,4 支援瀏覽器查詢功能,應該能給予最新版本的答案,但因為我也沒用過 ChatGPT4,不確定查詢到的結果正確率為何,若有朋友有使用過的經驗,也歡迎留言分享
  3. 範例程式碼有瑕疵,像是先前有請 ChatGPT 寫一個 factory design patten 的範例,但實際上發現有一個 a 變數宣告了卻從頭沒用,詢問它 a 變數的用途為何?它還很誠懇的道歉 😆,馬上修正一個新的版本給我

因此對於 chatGPT 的答案別全盤接受,ㄧ定要抱有存疑

結語

對於初階工程師來說,當自己沒有前輩或是同儕可以求救的狀況下,ChatGPT 可以說是一根救命稻草,大大小小的問題,都能求助於 ChatGPT,但也會發現一個殘酷的事實,ChatGPT 只能解決你部分的問題,有些問題還是必須要仰賴自己,但 ChatGPT 確實可以讓你速成的有一些結果的產出

對於中高階的工程師來說,ChatGPT 就是你的助理,可以請他做一些雜事,能夠提升工作效率,當然有人可能會有疑慮說,這樣會不會過度仰賴 ChatGPT,而造成自身能力下降?我覺得是不會,好比說工程師是水電師傅的角色好了,ChatGPT 就是工具箱的角色,會提供各式各樣的工具,水電師傅必須判斷哪個場景會用到的工具是哪些,也必須判斷出工具本身有沒有沒問題,因此對於 ChatGPT 的使用,我個人是開放的心態,擁抱 AI,讓自己的程式開發擁有更多的可能性