卷首語
上禮拜沒寫完,但又不想匆匆上稿所以這週把文章寫的更完整一點。
這週訂閱人數破 4000 人,一樣非常感謝支持的朋友們。
越來越喜歡用 Perplexity 了,繼 ChatGPT 以來第二個訂閱的產品,推薦用看看!
不知不覺 2024 年第一個月又要過完了,大家開始往今年的目標邁進了嗎
本文適用於不善於使用 AI,但想透過 AI 來寫程式、提升自己寫程式能力的人。
去年才開始透過 ChatGPT 開始練習寫程式,如果你本身是寫程式的老手或已經很會善用 LLM 的話,可能會覺得這篇內容比較淺,還請見諒。
p.s. 本篇標題的 AI 主要以大型語言模型(LLM)為主。
0. 基本知識
如果不知道自己要從哪開始,可以從 Python 開始學,找一堂 Python 課程上過一輪,甚至不用全部上完,大概看得懂程式在幹嘛就好了,像是:
變數與資料類型(Variables and Data Types):變數用於儲存資料,而資料類型定義了這些資料的類型,如整數、浮點數、布林值等。
控制結構(Control Structures):這包括決策製作結構(如
if
、else
語句)、循環(如for
、while
循環)等,用於控制程式的流程。函數(Functions):函數是一段可以重複使用的程式碼塊,用於執行特定任務。它們可以接受輸入(參數),並可以返回輸出(返回值)。
陣列與集合(Arrays and Collections):這些結構用於儲存和操作一組資料。陣列是基本的資料結構,而集合(如列表、字典)提供了更複雜的資料管理方法。
錯誤處理(Error Handling):涉及到偵測、處理和回應程式中的錯誤情況,通常透過
try
、catch
、finally
結構實現。
因為要在實戰中來應用(不一定要學到很深入),只要能解決問題就是第一優先。
一開始懵懵懂懂的,只會記得一些 Python 常見語法、電腦的終端指令怎麼用(切資料夾、執行程式)、會看 GitHub 的專案。
沒關係,這樣就可以上了,不用一定要上完什麼完整的課程,開始實戰最重要。
1. 把 AI 工具融入日常
沉浸式翻譯
首先推薦使用沉浸式翻譯,閱讀英文文章必備,在閱讀跟解決問題時,找到的大部分資料一定都會是英文文件,語言不該是知識的隔閡,善用該工具許多國外第一手知識也能輕鬆閱讀。
OpenAI Translator
另一款則是 OpenAI Translator,這款軟體的功能是用來即時翻譯特定段落的文字,可以透過選取文字來進行翻譯。
但是除了基本翻譯外,我們還能針對自己的需求自定義許多不同的 prompt。
例如二次翻譯或是總結文字:
目的是開始訂製專屬於你自己的 Prompt 並解決特定需求。
不要只是簡單的總結、翻譯、擴寫,嘗試根據自己的工作需求或學習去練習寫更好更實用的 Prompt,記得,『Prompt 不一定要很厲害,但一定是要自己優化過的。』
然後選擇幾個語言模型機器人的部分,我最常用的是以下三個:
ChatGPT(GPT-4)
ChatGPT 的能力最強,但是在資料檢索及整合上,並不如 Perplexity 及 devv 強大,這兩個 LLM 在檢索及整合資料上都特別做過強化,可以看『裝了 LLM 的 Google SGE 將如何演變,使用者行為又會如何改變』第三小節 demo 效果。
devv 在檢索資料時一樣非常實用,他雖然是免費版但速度上非常快速,效果也有一定的可靠性。
寫程式的話我會用 Cursor,它是專門用來搭配 LLM 寫程式的編輯器,你可以透過對話詢問的方式修改程式碼:
以上幾個工具都會有替代品跟差不多功能的工具,不一定都要用,掌握好核心就是:
把 LLM 融入日常,每天用,用爆。
然後開始針對自己的需求寫程式。
2. 從哪裡切入
寫程式一開始最怕不知道怎麼切入,馬上寫程式可能也會陷入不知道寫甚麼的困境,提供幾個漸進讓大家參考。
JavaScript 書籤
我們一般看到的網頁都是有 HTML 及 CSS 所組成,大部分頁面都會含有 JavaScript 讓頁面有不同的效果。
想像一下,你正在建造一座房子。這座房子的結構(牆壁、地板、屋頂)就像是網頁的 HTML,它決定了房子的基本形狀和結構。然後,房子的裝飾(油漆顏色、壁紙)就像是 CSS,它讓房子看起來更漂亮、更有風格。最後,JavaScript(JS)就像是讓房子變得有趣且實用的電子設備,比如自動門、感應燈,或是智慧恆溫系統。
在網頁設計中,JavaScript 是一種讓網頁可以與使用者互動的程式語言。它可以讓網頁做出回應,比如當你點擊某個按鈕,JavaScript 可以讓一些事情發生,像是顯示更多資訊或頁面特效。你可以把它想像成網頁的“魔法師”,能夠給予網頁動態的生命力和互動功能。
所以,當我們要在『網頁上有需求』時,就能透過 JS 書籤來實現。
舉例來說,前陣子當我在用 Claude 的時候,發現標點符號全部都是半形很難受,於是我請 ChatGPT 寫一個 JS 書籤,Prompt 類似『請幫我寫一個 JS 書籤,把網頁上所有的半形標點符號改成全形的。』
以下是用 JS 書籤實現的效果:
只需要把該 JS 語法放到書籤網址,點擊就會直接執行該 JS 語法,出現我們想要的效果。
因為我本業是 SEO 顧問,所以分享幾個 JS 標籤案例:
第一個是快速高亮網頁中的 H 標籤,也就是那些大小標題的部分;第二個則是『site:網域』,目的是查看該網域的索引數量;最後兩個是快速查看頁面一些跟 SEO 相關的元素。
JS 書籤真的很方便,可以想像它是簡易版的瀏覽器擴充外掛,但是不用等別人實現,自己就可以針對自己的需求去實現。
Apps Script
現在大部分文書工作都會涉及 Google 雲端文件,像是 Google Slides、Google Sheets、Google Docs 等,在擴充功能下可以找到 Apps Script:
這個東西就是專門幫我們針對 Google 雲端文件寫程式解決需求用的,舉例來說,我們在工作上需要大量針對 Google Slides 的文件去整理大綱,然後貼到 Google Sheets 中。
可是手動複製需要非常大量的時間,所以我在 Google Sheets 寫了個 Apps Script 的程式,可以讀取 Google Slides 的網址然後抓出母片模板預設標題,然後加入一些判斷式來判斷哪個是主要標題跟次要標題。
這樣子就能將許多高度重複的項目自動化處理,或是將繁瑣的工作流程程式化後變的更省時。
JS 書籤跟 Apps Script 都不能滿足需求的時候,就能考慮使用 Python 來寫程式,個人推薦透過 Streamlit,寫好的簡單 Python 程式可以部署在上面,不用另外寫前端,同時這個程式也能開始讓許多人使用。
其它像是 Google Sheet 的公式撰寫、GPTs 機器人設定等,只要可以解決自己的需求就嘗試去建構一些東西來自動完成任務,雖然標題寫的是程式經驗,但個人認為:
只要可以透過程式來解決高度重複、繁瑣冗長的任務,就應該動手去做。
這樣我們才能成為 AI 取代不了的人才。
3. 核心:解決問題的思考方式
這個部分是最核心也最難訓練的方式,通常一個問題可以有無數種解法,而一個大問題涉及多個問題相扣,進而提高解題難度。
遇過一些工程師,說一就是一,沒有深入的想法或延伸思考,那跟 ChatGPT 差異並不大,如果要透過 LLM 來解決問題,一定要鍛鍊解決問題的能力,幾個要點很重要。
第一,是否清晰定義問題及解決路徑。
以『營業額下降』這個問題為例,我們看到的是這個系統最後的結果,直覺上解決的辦法是提升銷售額,這樣可能變成單純加大廣告成本來提高銷售額。
結果可能導致營業額上升幅度不及成本成長的速度,很可能營業額下降的原因是『疫情影響下的結構性影響』,那麼要解決的問題就不是營業額下降,如果公司當前策略是讓公司在疫情下仍能生存,問題就應該調整成『疫情造成的大幅銷售量下降,如何保證收支平衡』為出發點思考。
第二,刻意留心自己的工作流程
很多時候我們習慣了固定的工作模式後,很難意識到這個工作流程仍然具備優化空間,所以『記錄』的重要性就出現了,把自己平常完成任務的流程梳理寫出來,然後記錄時間,找到最耗時的任務時間塊以及最不會用到腦的時間塊。
這兩塊絕對有很多可以透過程式優化的部分。
第三,思考他人如何思考
這塊是幫助自己學習最重要的部分,當我們經驗不足時,我們應該多去思考他人如何解決問題的思路,如果對方有文件記錄或文章最好,沒有的話也可以深入詢問對方為什麼這樣想。
對方分解大問題成多個小問題時,一定也會根據各自的小問題有不同的解決方案,如果是自己有沒有辦法想到這些分解後的問題及解決方案,並且能想出更好的解決方案。
但是一定要自己先想過一輪之後再來看對方的答案,這個過程很像學生時期,數學/物理題我們先絞盡腦汁後再來看解法,這時候知識才會根深蒂固的長在我們腦中。
有個理論叫必要難度理論(Desirable difficulty),簡單來說就是我們要記到腦中的東西,經過的難度越高,能在腦中記憶的時間越長。
透過思考能提升我們解決問題的能力及深度,看其它人的思考答案有助於增加我們思考的多元性及經驗,久而久之思考能力就會越來越強。
思考真的是很難教授的能力,只有『刻意練習』才能日趨強大。
小技巧
分享幾個使用 LLM 解決問題的小技巧
第一,多個模型一起使用
這個前面介紹模型時提過了不多贅述,核心在於『理解不同 LLM 機器人的局限性,切換選擇合適的機器人來解決問題』。
devv 跟 perplexity 拿來檢索最新資訊,ChatGPT 可用來完善整個程式碼。
第二,比對資訊來源
胡言亂語(幻覺)真的是目前 LLM 最可怕的事之一,它可能會瞎掰不存在的函數、功能等,所以記得問問題時,要比對問題來源的資料。
檢索功能做的再好,也可能有找不到匹配資料的時候,更何況有時候可能是我們自己的問題太爛🤣。
第三,英文搜尋
LLM 的答案品質一部分取決於參考資料,很多時候英文資料往往比中文資料更好,而且像 Perplexity 的搜尋資料來源可能來自 Bing,用英文搜尋就更重要。
下面是我結合 OpenAI Translator 功能跟 Perplexity 的快速搜尋,順便展示一下一些快捷組合設定:
我在 Raycast 設定了快捷鍵,只要我打 ppp 就會自動跳成 Perplexity 的單字,然後我按 tab 就能切換成 Perplexity 搜尋模式。
接著我把我的問題用中文打上,直接接快捷鍵『Ctrl + L』該段文字會直接用 OpenAI Translator 翻譯成英文,這樣我的答案品質才會更好。
第四,不要重複造輪子
太累了,我們要解決的問題很多,除非真的很想要練功,不然有些功能 GitHub 上大多都有,把它提取出來組合才是關鍵。
第五,搭配 GPT-4V 來解決問題
視覺理解功能真的很棒,有時候我遇到問題時我會直接截圖放到 ChatGPT 詢問,不過如果你沒有 Plus 帳號可能就無法了。
另外需要注意的一點是,ChatGPT 看不太懂中文,所以截圖內容以英文為主準確率會更高。
第六,每個功能寫一個簡單的小函數測試,並且不求一步到位
我試過好幾次想要程式一步到位,但最後反而更多麻煩,因為多個問題要一起解決時,程式發生問題反而更難找到哪裡有 bug,所以建議下個 ptompt『請列印所有中間過程的結果』這樣我們可以抓到哪裡出現了問題。
然後完善每個不同功能的 function 後再往下一個 function 來弄,最後才能建出一個實用的程式。
小結
2023 年以前,寫程式對我來說真的太困難,門檻高沒人帶,但是如今 LLM 真的是人類的好朋友,我用這個寫了好多小程式、Apps Script、Streamlit 給自己或是同事使用,時間也能用在更有價值的事物上。
為什麼說 AI 取代人力,就是因為 AI 的出現讓『工作過程的努力』重要性變的越來越低,『只看結果』變的越來越現實,花多少時間工作、產出多少效益,全看數字說話,所以為什麼人會被取代,因為『成果沒辦法幫你說服別人,有人能用更短更有效的時間做你的工作』。
謝謝分享!正準備踏入學習程式語言的世界!既期待又怕受傷害😍
> 不用一定要上完什麼完整的課程,開始實戰最重要。
很有共鸣,弄脏手是快速成长的第一步。