前言:為什麼程式閱讀能力更重要?
在AI輔助開發的時代,程式設計的核心能力已經轉變:
- 過去:從零開始寫出正確的程式
- 現在:看懂AI生成的程式,判斷是否符合需求,並準確描述修改方向
關鍵概念:只有看懂程式,才能發現問題、驗證邏輯、提出精確的修改需求。
因為你懂需求, AI會寫程式, 如何指揮AI寫程式, 取決於你的程式閱讀力。
學習路徑:從閱讀到精通
第一階段:建立閱讀框架(1-2週)
1. 先問「這段程式在做什麼?」
拿到任何Python程式時,先用AI幫助你建立整體理解:
實戰練習:
Python
def calculate_average(numbers):
total = sum(numbers)
count = len(numbers)
return total / count
scores = [85, 92, 78, 90, 88]
result = calculate_average(scores)
print(f"平均分數: {result}")
向AI提問的方式:
- 「請用一句話說明這段程式的目的」
- 「這段程式的輸入和輸出分別是什麼?」
- 「請列出程式執行的步驟流程」
學習重點:建立「功能→資料→流程」的閱讀思維。
2. 逐行拆解理解
選擇3-5行的小片段,深入理解每一行:
實戰練習:
Python
data = [x ** 2 for x in range(10) if x % 2 == 0]
向AI提問的方式:
- 「請把這行程式拆解成多個步驟解釋」
- 「
x ** 2是什麼意思?」 - 「
if x % 2 == 0在這裡的作用是什麼?」 - 「請用for迴圈改寫這段list comprehension」
學習重點:從簡化版本理解複雜語法,掌握語法糖的本質。
3. 識別程式結構
學習辨認常見的程式模式:
常見結構清單:
- 循序結構(一行行執行)
- 條件判斷(if-else)
- 迴圈(for, while)
- 函數定義與呼叫
- 資料結構(list, dict, tuple)
實戰練習:
Python
def find_max(numbers):
if not numbers:
return None
max_value = numbers[0]
for num in numbers[1:]:
if num > max_value:
max_value = num
return max_value
向AI提問的方式:
- 「這個函數使用了哪些程式結構?」
- 「為什麼要先檢查
if not numbers?」 - 「可以畫出這個函數的執行流程圖嗎?」
第二階段:深化理解能力(2-4週)
4. 追蹤變數變化
理解程式就是理解資料如何變化:
實戰練習:
Python
nums = [3, 1, 4, 1, 5]
for i in range(len(nums)):
nums[i] = nums[i] * 2
print(nums)
向AI提問的方式:
- 「請列出每次迴圈後
nums和i的值」 - 「請用表格顯示變數在每步的變化」
- 「如果初始值是
[2, 7],結果會是什麼?」
學習技巧:養成「腦內執行」的習慣,預測結果後再驗證。
5. 理解函數互動
現實程式常包含多個函數協作:
實戰練習:
Python
def clean_text(text):
return text.strip().lower()
def count_words(text):
cleaned = clean_text(text)
words = cleaned.split()
return len(words)
sentence = " Hello World "
result = count_words(sentence)
向AI提問的方式:
- 「請追蹤
sentence變數經過每個函數的變化」 - 「
clean_text的回傳值如何被count_words使用?」 - 「請畫出函數呼叫關係圖」
6. 識別常見陷阱
學習發現程式中的潛在問題:
實戰練習:
Python
def divide_numbers(a, b):
return a / b
result = divide_numbers(10, 0)
向AI提問的方式:
- 「這段程式有什麼潛在問題?」
- 「在什麼情況下會出錯?」
- 「應該如何改進這段程式?」
- 「請展示加入錯誤處理的版本」
常見陷阱類型:
- 除以零
- 空串列/字典存取
- 索引超出範圍
- 類型不匹配
- 邏輯錯誤(邊界條件)
第三階段:實戰應用(持續進行)
7. 閱讀完整專案
從簡單專案開始,建立系統性閱讀能力:
專案範例:簡易待辦事項管理
Python
tasks = []
def add_task(task):
tasks.append({"name": task, "done": False})
print(f"已新增: {task}")
def complete_task(index):
if 0 <= index < len(tasks):
tasks[index]["done"] = True
print(f"已完成: {tasks[index]['name']}")
def show_tasks():
for i, task in enumerate(tasks):
status = "✓" if task["done"] else "○"
print(f"{i}. [{status}] {task['name']}")
向AI提問的方式:
- 「這個程式的整體架構是什麼?」
- 「資料是如何組織的?為什麼用dict而不是string?」
- 「如果我要新增『刪除任務』功能,應該怎麼設計?」
- 「這個設計有什麼優缺點?」
8. 對比不同實作方式
理解同一功能的多種寫法:
任務:找出串列中的偶數
向AI提問的方式:
- 「請提供3種不同方法找出串列中的偶數」
- 「請比較這些方法的優缺點」
- 「在什麼情況下應該選擇哪種方法?」
學習重點:沒有絕對最好的寫法,要看具體情境(效能、可讀性、簡潔性)。
9. 偵錯練習
故意引入錯誤,練習發現問題:
實戰練習:
Python
def calculate_discount(price, discount):
final_price = price - price * discount
return final_price
# 想要打8折(20% off),但結果不對
result = calculate_discount(100, 20)
print(result) # 期望80,實際得到-1900
向AI提問的方式:
- 「請幫我找出這段程式的問題」
- 「為什麼結果是-1900而不是80?」
- 「請逐行說明
discount變數的影響」 - 「正確的
discount應該傳入什麼值?」
與AI協作的最佳實踐
提問技巧進階
層次性提問法
- 概觀層:「這段程式的主要功能是什麼?」
- 結構層:「這段程式用了哪些控制結構?」
- 細節層:「第5行的
enumerate是做什麼的?」 - 變化層:「如果輸入是空串列會怎樣?」
具象化請求
- ❌ 不好:「解釋這段程式」
- ✅ 好:「請用比喻說明這段程式在做什麼」
- ✅ 好:「請舉3個實際輸入輸出的例子」
- ✅ 好:「請把這段程式改寫成更容易理解的版本」
驗證理解的方法
1. 自我測試清單
看完程式後,問自己:
2. 教學法驗證
嘗試向AI說明:
- 「我認為這段程式是這樣運作的...[你的理解],請確認是否正確」
- 「我覺得可以這樣改進...[你的想法],這樣做可行嗎?」
3. 變形練習
- 「如果把這個list改成dict,程式需要怎麼調整?」
- 「如果要處理100萬筆資料,這個寫法會有問題嗎?」
實戰練習計畫(6週)
Week 1: 基礎語法閱讀
- 每天閱讀5-10行的簡單程式
- 重點:變數、運算、print、基本資料型態
- 練習:用AI解釋每個語法元素
Week 2: 控制流程
- 閱讀包含if-else、for、while的程式
- 重點:理解程式執行路徑
- 練習:畫流程圖,預測執行結果
Week 3: 函數與模組化
- 閱讀多函數協作的程式
- 重點:參數傳遞、回傳值、作用域
- 練習:追蹤函數呼叫鏈
Week 4: 資料結構
- 閱讀使用list、dict、set的程式
- 重點:資料組織方式與存取
- 練習:畫出資料結構示意圖
Week 5: 綜合應用
- 閱讀50-100行的完整小專案
- 重點:整體架構理解
- 練習:寫功能說明文件
Week 6: 偵錯與改進
- 閱讀有問題的程式並找出bug
- 重點:批判性思維
- 練習:提出改進建議並與AI討論
常見問題與解答
Q1: 看不懂程式時,第一步該做什麼?
A: 不要逐字理解,先問AI:「請用日常語言說明這段程式在做什麼」,建立概念框架後再深入細節。
Q2: 如何知道自己真的看懂了?
A: 試著用自己的話重新實作類似功能,或向AI描述你的理解請它驗證。
Q3: 遇到不認識的函數或語法怎麼辦?
A: 直接問AI:「enumerate是什麼?請舉例說明」,並要求AI展示2-3個使用範例。
Q4: 應該花多少時間在閱讀程式上?
A: 初期建議每天30-60分鐘,重質不重量。深入理解一段程式比匆匆看過十段程式更有效。
Q5: 如何建立閱讀程式的直覺?
A: 持續練習+反思。每次閱讀後問:「這段程式用了什麼模式?我以前見過嗎?」
進階技能:與AI高效協作
場景1:需求澄清
當你看懂AI寫的程式,發現不符需求時:
低效對話:
- 你:「這個不對,改一下」
- AI:「請問哪裡需要修改?」(浪費一輪對話)
高效對話:
- 你:「我看懂了第15-20行是在做資料排序,但我的需求是要『由大到小』排序,現在是『由小到大』。請把第17行的
sort()改成sort(reverse=True)」
關鍵:精準指出程式邏輯與需求的差異。
場景2:效能優化
當你理解程式邏輯,想改進效能時:
低效對話:
- 你:「程式太慢了」
高效對話:
- 你:「我注意到第10-15行用了雙層迴圈,當資料量大時會有O(n²)的時間複雜度。我想改用dictionary來實作,讓時間複雜度降到O(n),可以幫我重構這段嗎?」
關鍵:指出瓶頸位置並提出優化方向。
場景3:擴充功能
當你理解現有架構,要新增功能時:
低效對話:
- 你:「我要加一個搜尋功能」
高效對話:
- 你:「目前程式在第30行的
tasks串列中儲存所有任務。我想新增一個search_task(keyword)函數,傳入關鍵字後,回傳所有name欄位包含該關鍵字的任務。請參考現有的show_tasks()函數風格來實作」
關鍵:說明如何整合進現有架構。
總結:閱讀力就是你的超能力
在AI輔助開發的時代:
✅ 會看程式 → 能理解AI的產出 → 能指出問題 → 能獲得正確結果
❌ 不會看程式 → 只能盲目接受 → 發現錯誤但無法描述 → 陷入無效溝通
記住:你不需要成為比AI更強的程式寫手,但你需要成為程式的「品質檢查員」和「需求翻譯者」。
立即行動:找一段5-10行的Python程式,用本指南的方法向AI提問,開始你的閱讀力訓練!
附錄:快速參考
閱讀程式的黃金問題清單
- 這段程式的輸入和輸出是什麼?
- 程式分成幾個主要步驟?
- 哪一行是關鍵邏輯?
- 有沒有特殊情況需要處理?
- 如果輸入改變,程式會如何反應?
- 有沒有可能出錯的地方?
- 這樣寫有什麼優點和缺點?
- 能用更簡單的方式達成同樣效果嗎?
向AI提問的句型模板
- 「請解釋第X行的[程式碼片段]是什麼意思」
- 「這段程式如果輸入是[具體例子],會輸出什麼?」
- 「請用[比喻/圖表/表格]說明這個邏輯」
- 「請把這段程式改寫成更容易理解的版本」
- 「這段程式有什麼潛在問題?」
- 「請列出[變數名]在每步的值變化」
- 「請比較這兩種寫法的差異」
- 「如果要實現[新需求],應該修改哪裡?」