情境開場
上週你收到一份 Python 作業:寫一個計算 BMI 的程式。你打開 ChatGPT,輸入「寫一個計算 BMI 的 Python 程式」,三秒鐘得到一份完美的程式碼。你複製貼上、執行成功、交出作業。
這週,老師要求你修改程式,加入 BMI 分級(過輕、正常、過重、肥胖)。你盯著上週的程式碼,發現自己看不懂 if-elif-else 是怎麼串起來的,也不知道該在哪裡加新條件。
你又問了 AI,又得到一份新程式碼。但下次呢?再下次呢?
問題很清楚:複製程式碼跟學會程式設計是兩件事。AI 可以是很好的老師,但前提是你要用對方法。這篇教學會帶你建立一套「用 AI 學程式,但真的學會」的流程。
完成後你將能做到
- 拿到程式題目時,先自己分析再找 AI 協助
- 請 AI 給提示而不是直接要完整答案
- 讀懂 AI 產出的程式碼,逐行解釋每一行在做什麼
- 不看 AI 的版本,自己重寫一次來驗證理解程度
- 用 AI 產生變形題,持續練習到熟練
- 建立一份錯題本,追蹤自己的知識缺口
- 獨立解決從未見過的新題目
學習地圖
| 步驟 | 名稱 | 時間 | 完成的成果 |
|---|---|---|---|
| Step 1 | 先自己試,再找 AI | 5 分鐘 | 你的第一版嘗試(即使不完整) |
| Step 2 | 請 AI 給提示,不是給答案 | 5 分鐘 | 一組「求提示」的 Prompt 模板 |
| Step 3 | 讀懂程式碼,不是直接複製 | 5 分鐘 | 逐行註解版程式碼 |
| Step 4 | 自己重寫一次 | 5 分鐘 | 你的獨立版本 + 差異紀錄 |
| Step 5 | 請 AI 出變形題 | 4 分鐘 | 三道變形練習題 |
| Step 6 | 建立錯題本 | 3 分鐘 | 錯題本模板 + 第一筆紀錄 |
| Step 7 | 驗證你真的學會了 | 3 分鐘 | 獨立完成的新題目 |
預計總時間:30 分鐘。每一步你都會得到一項具體成果,不會只是「看完一段文字」。
Step 1:先自己試,再找 AI
情境
你收到一道練習題:
「寫一個 Python 函式 calculate_cart_total,輸入是一個商品清單(每個商品有名稱和價格),輸出是購物車的總金額。」
你的第一反應可能是打開 AI,貼上題目,拿到答案。但在這之前,請先停下來。
你的任務
在紙上或編輯器裡,寫下你目前想到的解法。不需要完整,不需要能跑,只需要把你知道的部分寫出來。
開始前先想一想
拿到程式題目後,最好的第一步是什麼?
操作內容
試著寫出你的版本。可能長這樣:
def calculate_cart_total(items):
total = 0
for item in items:
# 不確定怎麼從 item 拿到價格...
total = total + ???
return total
寫不出來也沒關係。寫出「我知道要用迴圈,但不知道怎麼取得每個商品的價格」就是一種進步,因為你已經明確知道自己的知識缺口在哪裡了。
如果你寫出了部分程式碼(即使有錯),恭喜。你剛才做的事情叫做「主動提取」(active recall)。研究證明,先嘗試回想再學習新知識,記憶效果比直接閱讀答案好兩到三倍。
如果你什麼都沒寫就直接想找 AI,請問自己:「我連函式的第一行 def 都不會寫嗎?」通常你知道的比你以為的多。哪怕只是寫出函式名稱和 return,都算是起點。
學程式的核心是建立「問題 → 解法」的神經連結。每次你自己想過一遍,這個連結就加強一次。直接看答案會讓你產生「我懂了」的錯覺,但那是辨認(recognition),不是回想(recall)。考試和實際工作要的是回想能力。
跳過自己嘗試的階段,就像看別人游泳來學游泳一樣。你可以看到動作,但下水後身體不知道怎麼動。
本步驟產出
Step 1 完成確認
Step 2:請 AI 給提示,不是給答案
情境
你在 Step 1 卡住了。你知道要用迴圈,但不確定怎麼從商品清單中取得每個商品的價格。現在你要請 AI 幫忙,但方式很重要。
你的任務
寫一個「求提示」的 Prompt,而不是「求答案」的 Prompt。
好問法 vs 壞問法
不好的問法
「幫我寫一個計算購物車總金額的 Python 函式」
好的問法
「我想寫一個計算購物車總金額的函式,我知道要用迴圈,但不確定怎麼從 dict 取出價格。能給我提示嗎?不要直接給完整程式碼。」
操作內容
請用以下結構來寫你的 Prompt:
「Python 的字典可以用方括號加上 key 來取值。比如你有一個字典 fruit = {"name": "蘋果", "price": 30},那麼 fruit["price"] 就會得到 30。試著在你的迴圈裡,對每個 item 做一樣的事情看看。」
這個提示沒有給你完整程式碼,但告訴你關鍵概念。你可以自己把它組裝進你的函式裡。
學習科學裡有個概念叫「最近發展區」(Zone of Proximal Development)。你靠自己做不到,但在適當提示下能完成的區域,就是學習效果最好的地方。直接給答案讓你跳過了這個區域;只給提示則把你留在裡面。
本步驟產出
Step 2 完成確認
Step 3:讀懂程式碼,不是直接複製
情境
經過前兩步,你可能已經寫出了一個能跑的版本,也可能最後還是請 AI 給了完整範例。不管哪種情況,現在有一份程式碼在你面前:
def calculate_cart_total(items):
total = 0
for item in items:
total = total + item["price"]
return total
cart = [
{"name": "蘋果", "price": 30},
{"name": "牛奶", "price": 65},
{"name": "麵包", "price": 45}
]
print(calculate_cart_total(cart))
你的任務
逐行寫下每一行在做什麼。用你自己的話,不是複製 AI 的解釋。
以下這行程式 total += item['price'] 做了什麼?
操作內容
在每一行旁邊加上你的理解:
def calculate_cart_total(items): # 定義一個函式,接收一個叫 items 的參數
total = 0 # 建立一個變數 total,起始值是 0
for item in items: # 把 items 清單裡的東西一個一個拿出來
total = total + item["price"] # 把這個商品的價格加到 total 裡面
return total # 迴圈跑完後,把總金額回傳出去
如果某一行你寫不出解釋,那就是你的知識缺口。把那一行單獨拿去問 AI:
程式設計師每天花大量時間「讀」程式碼,不只是「寫」。能讀懂別人(或 AI)的程式碼是一項獨立技能。逐行註解是訓練這項技能最有效的方法之一。當你能解釋為什麼每一行存在,你也就能修改它、擴充它、除錯它。
本步驟產出
Step 3 完成確認
Step 4:自己重寫一次(不看 AI 的版本)
情境
你已經讀懂了購物車程式的每一行。現在是最關鍵的一步:關掉 AI 的回答,自己從零寫一次。
你的任務
不看任何參考,憑你的理解,重新寫出 calculate_cart_total 函式。
開始前先想一想
- 你記得函式的架構嗎?(定義 → 初始化 → 迴圈 → 回傳)
- 你記得怎麼從字典取值嗎?
- 你記得怎麼累加總和嗎?
操作內容
關掉所有參考資料。打開一個空白檔案,開始寫。寫完之後,打開 Step 3 的版本來比對。
def calculate_cart_total(items):
total = 0
for item in items:
total += item['price']
return total
如果你的版本跟這個不同,不代表你錯了。只要邏輯正確、能跑出對的結果就是好程式。
例如你可能用了 sum 而不是 total,用了 product 而不是 item,用了 += 而不是 total = total +。這些都是合理的不同寫法。
如果你能獨立寫出正確的版本(即使命名不同),代表你真的學會了。這不是看著食譜做菜,而是自己已經記住步驟了。
注意:sum 在 Python 裡是內建函式名稱。雖然你可以用它當變數名,但這會覆蓋掉內建功能。像這種細節就是實際寫程式會碰到的坑,AI 通常會避開,但你自己寫就可能踩到。把它記進錯題本。
認知心理學把這個方法叫「提取練習」(retrieval practice)。每次你不看答案、從記憶中提取知識的時候,記憶就會變得更強。這比重複閱讀同一段程式碼有效很多。差異比對則幫助你發現「以為懂了但其實沒有」的盲區。
本步驟產出
Step 4 完成確認
Step 5:請 AI 出變形題
情境
你已經能寫出基本的購物車總金額計算了。但一道題會做不代表這個概念學會了。你需要在不同的情境中反覆運用同一個概念,才能真正內化。
你的任務
請 AI 幫你出三道變形題,然後自己嘗試解答。
操作內容
題目一:計算購物車中「單價超過 50 元」的商品總金額。
題目二:每個商品多一個 quantity 欄位,計算含數量的總金額。
題目三:加入折扣機制。如果購物車總金額超過 500 元,打九折。回傳折扣前金額、折扣金額、實付金額。
學習科學裡這叫「交錯練習」(interleaving)和「變化練習」(varied practice)。同一個概念在不同情境中出現,你的大腦會抽取出「核心模式」,而不是只記住特定題目的步驟。這樣你碰到新題目時才能靈活應用。
本步驟產出
Step 5 完成確認
Step 6:建立錯題本
情境
經過前面五步,你已經碰到了好幾個「不會」的時刻:可能是不知道怎麼從字典取值、可能是忘記初始化變數、可能是用了內建函式的名字當變數名。這些都是寶貴的學習素材。
你的任務
建立一份錯題本,把你在學習過程中犯的錯誤和不確定的地方記錄下來。
操作內容
用以下格式建立你的錯題本:
## 錯題本
### 紀錄 1
日期:2026-07-11
題目:計算購物車總金額
我的錯誤:用 sum 當變數名,覆蓋了 Python 內建函式
正確做法:用 total 或 cart_total 等不會衝突的名稱
背後概念:Python 的內建函式名稱可以被覆蓋,但會導致後續程式碼出錯
我的理解:命名變數時要避開 Python 關鍵字和內建函式名稱
相關練習:列出 5 個常見的 Python 內建函式名稱
錯題本必填項目
遺忘曲線告訴我們,學過的東西如果不複習,一週後只記得 20%。錯題本讓你有系統地回顧最容易忘記的部分。而且每次你重新解釋一個概念,理解就加深一層。
不要把錯題本當成懲罰紀錄。它是一份學習地圖,標示著「這裡有寶藏」。三個月後回頭看,你會發現自己進步了多少。
Step 7:驗證你真的學會了
情境
你已經從「看不懂程式碼」走到「能獨立寫出來並解釋為什麼」。最後一步是真正的測試:面對一個全新的、你從沒見過的題目,在不使用任何 AI 協助的情況下解決它。
你的任務
獨立完成以下題目,不開 AI、不看筆記、不查資料。限時十分鐘。
題目:寫一個函式 count_expensive_items(items, threshold),輸入是一個商品清單和一個價格門檻,回傳「價格超過門檻」的商品數量。
cart = [
{"name": "蘋果", "price": 30},
{"name": "牛奶", "price": 65},
{"name": "牛排", "price": 350},
{"name": "麵包", "price": 45}
]
print(count_expensive_items(cart, 50)) # 應該印出 2
現在開始寫。十分鐘後回來看下面的內容。
def count_expensive_items(items, threshold):
count = 0
for item in items:
if item["price"] > threshold:
count = count + 1
return count
檢查你的版本:
- 函式有接收兩個參數嗎?
- 有用迴圈跑過所有商品嗎?
- 有用
if條件判斷價格是否超過門檻嗎? - 回傳的是數量(整數)而不是金額嗎?
你能不看任何參考,獨立寫出「計算清單中所有偶數的平均值」嗎?
最終測試的意義是確認你從「有輔助能做到」進步到「獨立能做到」。很多人在有 AI 協助時覺得自己都懂了,但一旦獨立面對新問題就卡住。這個測試幫你誠實面對自己的程度。
如果通過了,你就可以帶著信心進入下一個主題。如果沒通過,你也知道該複習哪裡。兩種結果都有價值。
最終挑戰
用你在這篇文章學到的完整流程,獨立處理這個新題目:
題目:寫一個函式 calculate_grades(students),輸入是學生清單,每個學生有 name 和 score。函式回傳一個新清單,每個學生多一個 grade 欄位:90 分以上是 A,80-89 是 B,70-79 是 C,60-69 是 D,60 以下是 F。
最終挑戰流程
不提供答案。你已經有方法了。
你完成的成果
- AI 輔助程式學習流程(7 步循環)
- 「求提示」Prompt 模板
- 逐行註解練習法
- 錯題本模板與第一筆紀錄
- 獨立完成的驗證題
- 一套可重複使用的學習系統
重點整理
AI 可以是很好的程式學習夥伴,但前提是你把它當作「教練」而不是「代寫服務」。
- 先想再問:每次都先自己嘗試,哪怕只寫出一行
- 要提示不要答案:讓 AI 引導你思考,而不是替你思考
- 讀懂才算數:能逐行解釋的程式碼才是你的
- 重寫驗證:不看參考能寫出來,才是真的學會
- 反覆變形:同一概念在不同情境中練習
- 紀錄錯誤:錯題本是最有效率的複習工具
- 獨立測試:最後要能獨力面對新問題
如果你發現自己每次寫程式都離不開 AI,退一步想想:你是在用 AI 學習,還是在用 AI 代勞?答案通常在「你能不能用自己的話解釋你寫的每一行」。
知識檢測
讀完文章後,測試一下你對這個主題的理解。
延伸練習
選一個你正在學的程式主題(例如:檔案讀寫、API 呼叫、資料庫操作),用今天學到的七步流程來練習。特別注意:
- 你是不是跳過了「先自己試」的步驟?
- 你有沒有真的不看參考自己重寫過?
- 你的錯題本有沒有持續在記?
一週後回顧你的錯題本,看看有哪些錯誤反覆出現,那就是你最需要加強的概念。
知識檢測
讀完文章後,測試一下你對這個主題的理解。