B.1 計算思維:明確界定問題與成功準則
歡迎來到這一章!你有沒有試過按照一份只寫著「焗至熟透」,卻沒有說明焗爐溫度或所需時間的食譜來烘焙?這樣一來,你幾乎不可能知道自己到底會成功還是失敗。在電腦科學中,我們也面對完全相同的挑戰。在編寫任何一行程式碼或設計演算法之前,我們必須確實知道自己要解決甚麼問題,並且精確掌握衡量成功的標準。
本章是整個計算思維過程(computational thinking process)的基石與第一步。掌握這些概念,不僅能助你在卷二(Paper 2)(屬於課題 B:計算思維與問題解決)中奪取高分,對於你的校本評核:計算解決方案(internal assessment: the computational solution)同樣至關重要。
註:計算思維過程的後續階段,例如將問題拆解(見「分解與抽象化」)、設計逐步執行的程序(見「演算法思維與演算法設計」),以及檢查運作結果(見「測試與評估解決方案」),全部都直接依賴你在本階段所訂立的規格與成功準則。
---1. 計算思維過程概覽
根據 IB DP 電腦科學課程大綱,計算思維過程包含四個環環相扣的實踐階段:
1. 根據計算背景明確界定問題並訂定成功準則(Specifying problems in terms of their computational context and determining success criteria)(即是本章內容!)
2. 將複雜的現實世界問題分解為更易於管理的小問題(Decomposing complex real-world problems into more manageable problems)
3. 將問題抽象化並進行泛化,以支援演算法思維並建構解決方案(Abstracting problems and generalizing them to enable algorithmic thinking and to develop solutions)
4. 測試並評估解決方案以作持續改進(Testing and evaluating solutions for improvements)
請留意,所有事情都是從明確界定問題開始。如果基礎不穩固,最終的解決方案便無法按預期運作。
---2. 在計算背景下明確界定問題
在現實世界中,問題往往混亂、模糊,而且通常只是隨口描述。客戶可能會說:「我們學校圖書館的借還書系統太慢、太混亂了。」這只是一句日常的抱怨,並不是一個可以直接著手處理的電腦科學問題。
要從計算的角度界定問題,你必須將模糊的人類需求轉化為具體的技術現實。你需要釐清三個核心計算元素:
• 輸入(Inputs):哪些數據必須進入系統?涉及甚麼格式、資料類型和來源?(例如:以整數形式輸入的學生證編號、以字串形式輸入的書籍條碼)。
• 處理程序(Processes):必須對這些數據執行甚麼運算、操作或邏輯判斷?(例如:檢查學生是否有逾期罰款、更新資料庫記錄、計算歸還日期)。
• 輸出(Outputs):系統必須產生或顯示甚麼結果?(例如:更新後的帳戶狀態、確認收據、錯誤訊息)。
理解限制條件與計算背景
計算背景所涵蓋的不僅僅是輸入和輸出;它還包括系統必須在其內部運作的限制條件(constraints)與環境(environment):
• 硬件限制:系統是在低功耗的手提條碼掃描器、手提電話,還是專用伺服器上運行?
• 數據限制:需要處理的數據量有多大?是否有特定的數值範圍或格式要求?
• 時間限制:該程序必須實時(real-time)運行,還是可以在夜間批次(batches)處理?
• 使用者環境:誰會使用這個系統?他們是否需要無障礙、簡單易用的使用者介面?
生活比喻:想像一下你叫承辦商「幫我起一間靚屋」。最後你可能會得到一間小木屋,或者是一座摩天大樓!明確界定問題的意思就是具體告訴承辦商:「建造一間雙睡房的木屋,最高 6 米,配備自來水和太陽能供電。」這樣他們才會清楚項目的範疇、材料以及界線所在。
重點複習:界定問題是指清楚定義其輸入、處理程序、輸出以及限制條件,好讓電腦能夠有系統地解決該問題。
---3. 訂定成功準則
當你明確界定問題後,你怎樣才知道系統何時才算大功告成?你又如何證明你的計算解決方案確實有效?這正是成功準則(success criteria)發揮作用的地方。
成功準則是用來判斷計算解決方案是否已成功解決問題的具體、可量度之標準。
甚麼是良好的成功準則?
成功準則必須具備可量度性(measurable)且明確無誤(unambiguous)。如果準則帶有主觀色彩,兩個不同的人審視同一個程式時,就可能會在它究竟是「通過」還是「失敗」上產生分歧。
讓我們比較一下模糊的陳述與可量度的成功準則:
• 模糊:「程式運作應該要快。」
• 可量度:「搜尋演算法必須在 1.0 秒內從包含 10,000 筆記錄的數據集中返回結果。」
• 模糊:「系統必須能處理錯誤的使用者輸入。」
• 可量度:「如果使用者在年齡欄位輸入負數,系統會顯示錯誤訊息『年齡無效』並提示重新輸入,而不會發生程式崩潰。」
• 模糊:「程式應該要計算成績。」
• 可量度:「系統會計算出介乎 0 至 100 之間的整數最終百分比分數,並根據預設的成績等級分界表評定相應的等級字母,同時在畫面上顯示兩者。」
記憶法:成功準則的 3 大「必備」檢查
無論在考試還是撰寫校本評核時,每當你擬定或評估一項成功準則,都要問問自己:
1. 是否可觀察(Must it be observable)? 你能否親眼看見、讀取或截取到該結果?
2. 是否可測試(Must it be testable)? 你能否使用測試數據編寫具體的測試案例來驗證它?
3. 是否精確(Must it be precise)? 它是否明確指出了確切的數值、閾值或結果,而不是定性的主觀意見?
核心要訣:成功準則絕對不能使用「容易」、「良好」、「快速」或「美觀」等字眼。請以具體數字、特定行為模式和可驗證的結果來取代它們。
---4. 將問題規格與解決方案連結
起初擬定精確準則時覺得要求嚴格?不用擔心!設定清晰的規格與成功準則,實際上會直接引導你後續的所有開發工作:
• 指導演算法設計:當你的輸入、處理程序和輸出都界定清楚後,編寫演算法或選擇邏輯結構就會變得輕鬆得多。
• 建立測試策略:每一項成功準則都會轉化為測試計劃中的一個項目。如果準則列明「系統接受 8 個或以上字符的密碼,並拒絕較短的密碼」,你的測試計劃便會立即衍生出兩個測試案例:一個 7 字符的字串和一個 8 字符的字串。
• 評估最終成果:當解決方案完成後,你便可以直接對照這些初始準則進行評估,從而找出系統的不足之處或需要改進的地方。
5. 應避免的常見錯誤
• 混淆「解決方案」與「問題」:指稱「問題是我們需要一個 Python 字典(dictionary)」是錯誤的。字典只是潛在解決方案中會用到的一種數據結構。真正的問題是現實生活中的困難(例如:「現有系統透過學生唯一的學生證編號來查閱緊急聯絡人記錄時耗時過長」)。
• 撰寫主觀的準則:寫下「使用者介面看起來很吸引」是無法進行客觀測試的。相反,應該寫成:「介面在單一選單畫面上顯示所有導覽選項,並採用高對比度的文字顯示。」
• 忽略限制條件:忘記列明硬件、軟件或數據邊界,會導致解決方案在實際部署到目標環境時運作失敗。
本章總結與複習
• 課題 B 背景:明確界定問題與訂定成功準則是整個計算思維過程的起始階段。
• 界定問題:包括定義計算背景——具體識別出清晰的輸入、必要的處理程序、預期的輸出以及運作上的限制條件。
• 成功準則:客觀、可量度的指標,用以確立解決方案必須達到甚麼要求才算成功。
• 在評估中的角色:清晰的成功準則是計算解決方案所有結構化測試及最終評估的重要基礎。