互動測驗

十題場景題,測你對四原則的反應
答錯沒關係——每一題的回饋都會帶你回到對應的課程重讀
教學解說:測驗的目的

這個測驗不是要考你「四個原則是什麼」——而是測你在真實場景中會怎麼反應。每題都是一個真實的開發場景,你會看到使用者需求和 AI 的回應,然後判斷這是不是好的做法。

答錯沒關係。每題的回饋會帶你回到對應的課程頁,讓你深入了解為什麼那個做法是錯的。學習的重點不是記住規則,而是在看到反模式時能立刻察覺。

常見錯誤:測驗中的陷阱
測驗前的準備清單
進階單元 · Round 1 Deepening
進階 Worked Example:手把手拆解一道陷阱題
真正的挑戰不是「答對」,而是看懂「題目為什麼設計成這樣」。以下示範如何系統性分析任何一道場景題。
題目範例:「加入使用者偏好設定儲存功能」
選項 A:class PreferenceManager(含 cache、validator、merge、notify)
選項 B:def save_preferences(db, user_id, preferences)(6 行)

—— 這題的陷阱在於:A 看起來比 B「專業」一百倍。
分析步驟
步驟 1:找「需求的最小核心」
  需求是「儲存」——一個 UPDATE 就完成。
  步驟 2:把 A 的每個元件跟需求對齊
  - cache        → 需求沒提效能問題 → 猜測性功能
  - validator    → 需求沒提錯誤資料 → 猜測性功能
  - merge        → 需求沒提合併語意 → 猜測性功能
  - notify       → 需求沒提通知    → 猜測性功能
  步驟 3:確認「沒有反模式」的選項是否真的沒問題
  B 只有 6 行,但行為清楚、可測試、可追溯——完全合格。
  步驟 4:留意「題目本身」的引導
  題目如果描述「使用者抱怨設定常常被覆蓋」→ merge 就是需求;
  題目如果只是「儲存」→ merge 就是反模式。
  → 場景題的答案,永遠藏在題目的情境細節裡。
為什麼這個分析順序有效
  • 先定錨最小核心,再檢查擴充:先知道「最少是什麼」,才能判斷「多出來的是不是必要」——否則會被 A 的專業外觀帶著走。
  • 把「外觀」當變數、把「需求」當常數:審查的座標永遠是需求,不是品質。A 的元件每個都「很好」,但它們共同違反了需求。
  • 提醒自己題目會引導:測驗與真實需求一樣,細節決定一切。多一句情境描述,就能讓「反模式」變成「必要功能」。
深入原理:為什麼「看起來專業」會騙過我們的判斷?

測驗陷阱之所以有效,是因為它利用的是人類的認知偏誤,不只是模型的:

  • 確認偏誤(Confirmation bias):看到策略模式、完整錯誤處理、工整命名,大腦就「確認」這是好設計,然後為這個結論找理由——而不是先問「需求是什麼」。
  • 表面特徵捷徑(Surface heuristic):人類評斷程式碼常用「長得像不像教科書範例」當快捷鍵。這在平常很省力,但在「需求匹配」的題目上正好是反指針。
  • 負面空間盲點(Blindness to absence):反模式往往是「該問的沒問、該省的沒省」——它們是缺席的東西。人類大腦對「缺席」的偵測力遠低於對「過量」的偵測力,所以「沒列假設」比「列了一堆錯誤假設」更難被抓到。
  • 對模型的投影:我們容易把自己的「好意圖」投影到輸出上——「模型一定是有考慮到才寫這麼多」。事實是:考慮周到 ≠ 寫得多,寫得多常常就是沒考慮到需求。
案例:大家以為遵守原則,其實違反了

學員答題時選了 B(正確答案),但理由寫的是「因為 B 比較短」。這看似對了、其實沒懂:如果需求是「需要防止設定被併發覆蓋」,B 根本不夠,正確答案會是帶 lock 或版本欄位的方案。用「短」當判斷標準,等於把「簡潔優先」誤讀成「越短越好」——下次遇到需要一點複雜度的需求,就會答錯。判斷的座標必須是需求,不是長度。

診斷式疑難排解:答錯之後的自我診斷
症狀可能原因解決方案
選了「看起來專業」但需求不符的選項表面特徵捷徑壓過需求分析先寫下需求的最小核心,再逐項核對選項
因為「比較短」而選了正確答案把「簡潔」誤讀成「越短越好」用「哪個選項最貼合需求」取代「哪個選項最短」當標準
沒看出選項裡「多出來的元件」負面空間盲點——只看到有,沒看到「需求不需要」強迫自己為每個元件問一句「哪個需求需要它?」
被題目的情境引導偏離漏讀情境細節,把「需求」想成「一般情況」圈出題目中描述問題的字句,把它們變成檢查清單
對不確定的題目用「猜」沒有可操作的判斷框架使用速查表六步流程+「每行可追溯」作為固定框架
進階挑戰題
  1. 出題者思維:以「精準修改」為主題,自己出一道場景題:需求一句、情境三句、選項三個(一個明顯過度、一個明顯不足、一個剛好)。並寫出解析。
    提示:先在情境裡埋一個「讓過度選項看起來合理」的細節——那正是陷阱的機關。
  2. 負面空間練習:下面這個「正確做法」其實違反了原則 1。找出它「沒做」的事:
    def save_preferences(db, user_id, preferences):
        db.execute("UPDATE users SET preferences=? WHERE id=?",
                   (json.dumps(preferences), user_id))
    提示:它沒問「偏好要怎麼合併?是覆蓋還是合併舊值?」——如果需求是「累加」,這就是 bug。
  3. 判斷框架移植:把你在本測驗學到的「需求 → 元件 → 可追溯」框架,移植到一個真實情境:評估你目前專案裡最近一次「讓你不舒服」的 PR。寫下你重新分析後的結論,以及如果重來你會怎麼 review。
    提示:不舒服感通常來自「直覺覺得不對但說不出來」——那個說不出來,往往就是反模式的藏身處。