回顧:我為什麼開始寫教學文
曾經,我把部落格當作知識的載體。
早期的我寫 C 語言教學、講平台相容性、貼上我一行一行測出來的 debug log。那是一種寫給人看的說明書,也是一種知識自我確認。但時代變了。現在一個錯誤訊息貼到 ChatGPT,它比我還快貼出可能的解法,還順便幫我改參數。
這不代表我該停止寫作。只是角色變了。
我從「說明事情的人」,變成「使用工具的人」。我寫的不是知識本身,而是我怎麼和知識互動。
所以,這篇文章,不會教你怎麼用某個套件,也不會整理十個 CLI 工具讓你變成終端機魔法師。我想談的是:我怎麼用 ChatGPT 寫程式,怎麼避免它讓我退化,又怎麼靠它變強。
ChatGPT 很強,但硬知識不能丟
雖然 ChatGPT 很方便,硬知識還是要有。
真正的程式學習,還是得回到文件、官方網站、知名教學平台,自己寫過幾個小型專案。這些過程提供的是背景知識,也是一種敏感度 —— 當你看見一段範例,就能快速知道它適不適合你現在的架構。
ChatGPT 會直接丟出一段看起來完美的範例程式碼,甚至比 Stack Overflow 還好用。用過的人都知道,它的答案不只是「這樣寫可以」,而是「這樣寫我幫你寫好了」。這確實節省時間,但也容易誤導。
因為,程式設計者還是要做最後的決策:這段程式碼要不要放進專案裡?風格和我原本一致嗎?效能有問題嗎?有潛在記憶體洩漏或平台相依性嗎?
要判斷這些問題,前提是你得懂這個語言 —— 懂得夠深,才能看出 AI 給的東西是不是陷阱。
自己動手,才是寫程式:起手式決定風格主控權
雖然 ChatGPT 會自動生成程式碼真的很方便,但它產生的架構,不一定是我想要的。
比較老派但穩定的做法,是我先自己寫一些初步的架構或函式雛形,再讓 ChatGPT 幫我補齊、改進、或優化。這樣做的優點是:風格是我定的,AI 只是來幫我填空。
另一種做法比較快:直接讓 ChatGPT 生一段範例程式碼,再自己手動改成符合我習慣的寫法。這比較適合趕時間的時候,但改起來有時會花得更久,尤其是它用了我不喜歡的函式名稱或資料結構。
不管哪一種方式,「自己動手」這一步是跳不掉的。不是因為 AI 不夠強,而是因為程式風格是一種選擇,一種個人語言。你不參與這個過程,就永遠寫不出「自己的程式」。
而且,有初始資料餵給 ChatGPT,它也比較能產出貼近你邏輯與偏好的程式碼。太依賴它從零生成,你得到的只是「大眾語言」 —— 常見範式、常見錯誤,甚至是過度一般化的處理邏輯。那些東西不是你的,下次要寫還是記不住。
ChatGPT 不是完美的,我們不是它的測試員
用 ChatGPT 生成程式碼很方便,但它不是萬能的。如果 ChatGPT 真的那麼強,初階工程師早就被炒光了。
它產生錯誤的原因很多:有時是模型本身還不夠成熟、有時是它根本不了解上下文(尤其是跨多檔案或平台設定)、有時則是語言太冷門,資料量不夠支撐正確回答。
有個常見現象是「鬼打牆」:你不斷補充說明,ChatGPT 卻一直在同一個錯誤邏輯裡打轉。這時候的最佳解法不是繼續解釋,而是直接開一個新的聊天視窗,讓它重新整理上下文。這招我已經救過自己很多次。
如果試過幾次都沒用,就放棄吧。那段就自己寫,不要浪費時間當它的除錯員。
記得,我們是在「使用 ChatGPT」,不是在幫 ChatGPT 除蟲。真正的主導者是你。問題能不能解,AI 可以幫忙,但最後還是得靠你出手。
給得準,才拿得到準:有效使用 ChatGPT 的方法
如果你想讓 ChatGPT 幫你寫程式碼,最好控制在一個函式,或者是一組明確相關的小函式。不要妄想讓 ChatGPT 一次幫你寫完整個系統,那只會寫出一團看起來合理、實際上無法維護的東西。
一個好的 ChatGPT 問題,通常會包含:
- 明確的輸入/輸出格式(Input / Output)
- 使用的資料結構(例如:陣列?鏈結串列?字典?)
- 明確的任務目標(排序?過濾?資料轉換?)
- 是否考慮邊界條件(空資料、極端值、重複鍵)
- 是否考慮效能、多執行緒、同步/非同步等限制
有時候,你甚至可以先請它「幫這個函式包一個小型測試程式」,這樣可以初步驗證程式碼至少能編譯、不會爆錯、基本功能跑得起來。這不是單元測試,但比無頭蒼蠅亂試來得有效。
與其說 ChatGPT 是會寫程式的夥伴,不如說它是你的 Pair Programmer:你問得精準,它就能補得漂亮。你給得模糊,它只能給你常見套路,甚至根本無法執行。
所以,寫出你自己的 prompt,其實就是你邏輯能力的延伸。
ChatGPT 可以幫你 Review 程式碼,但你要先說清楚你想幹嘛
ChatGPT 是個很好的程式碼搭檔,但你要讓它知道你現在要它幹嘛。
如果你要它幫忙 review 程式碼,請一開始就明確告訴它你想做的事情,例如:
- 幫我找 bug(debug)
- 幫我簡化這段邏輯(refactor)
- 幫我加一段特定功能(extend)
- 幫我對齊某個 coding style(format / cleanup)
一次只做一件事,一次只貼一段程式碼,這樣雙方才有辦法「對焦」。你貼一整包檔案過去,它會卡住,也會亂猜你想幹嘛,最後得到的不是 review,而是一鍋炒雜菜。
更有效的做法是:像在追蹤程式碼一樣貼,一段一段問、一段一段看。你會發現,ChatGPT 在這種節奏下,其實就像一個會幫你畫圖、補註解、改變數名的智慧助理,會跟你互動、會做決策建議,甚至幫你預想 edge case。
但記得,它不是你的奶媽。它不會全自動幫你把亂七八糟的 code 變乾淨,更不會自動看出你心裡真正想做什麼。你還是得思考、得指揮、得動手。
這才是「用 ChatGPT 寫程式」,而不是「把程式丟給 ChatGPT」。
最後決定的是人,不是機器:真正的價值是節省,而非取代
自從 ChatGPT 和其他聊天機器人問世之後,很多人開始使用這些工具來寫程式、處理工作、規劃流程。不可否認,整體生產力確實提升了,而且不只在寫程式這件事上,它們也正在改變我們完成任務的方式。
所以我不認為應該完全拒絕這些工具。完全不用 ChatGPT、堅持全手刻的老派寫法,在某些情境下反而成為落後的一種。
但這不代表 ChatGPT 能取代工程師。因為最後會不會 commit,那一行程式碼能不能進到 production,不是由 AI 決定,而是由你決定。
ChatGPT 的真正價值,不是幫你偷懶、幫你代工,而是幫你節省那些機械、單調、重複的工作。你可以把時間省下來,去處理真正困難、真正值得你花腦力的東西。
這才是我願意持續使用它的原因。