歡迎來到「展望未來」(Thinking Ahead)!

在本章中,我們將探討運算思維 (computational thinking) 中最重要的一環。在程式設計師動手編寫程式碼之前,他們必須先進行規劃。展望未來的精髓在於預視程式的發展,釐清它需要什麼才能啟動、它將產生什麼結果,以及如何提升其效率。

如果起初覺得這些概念有些抽象,別擔心!其實你日常生活中已經在運用這些思維,只是自己沒察覺而已。讓我們深入了解吧!

1. 識別輸入與輸出

每個電腦程式本質上都是一個「處理機器」。它接收一些東西、進行處理,最後吐出結果。

輸入 (Inputs):這是系統解決問題所需的數據。它們可以來自使用者(例如輸入密碼)、感應器(例如溫度計)或其他檔案。

輸出 (Outputs):這是系統處理完輸入後,最終產生的結果或資料。

現實生活中的比喻:製作水果冰沙

想像你正在為一部果汁機「編寫程式」來製作冰沙:
輸入:香蕉、牛奶、冰塊,以及按下「開始」按鈕的訊號。
處理:刀片旋轉並攪碎食材。
輸出:一杯冰涼的液體冰沙,以及完成後的「嗶」聲提示。

逐步教學:如何識別輸入與輸出

在考試遇到問題時,試著問自己這兩個問題:
1. 「電腦在開始執行前需要知道什麼資訊?」(這就是你的輸入)。
2. 「使用者在最後期望看到或收到什麼?」(這就是你的輸出)。

例子:貨幣轉換器
輸入:金額、目前的匯率。
輸出:轉換後的金額。

快速回顧:
輸入 = 進入系統的資料。
輸出 = 從系統產出的資訊。

重點總結:在開端清晰地識別輸入與輸出,能防止你開發出的程式「忘記」索取關鍵資訊,或是無法提供使用者所需的結果。

2. 確定前置條件 (Preconditions)

前置條件是指在程式或特定函數成功執行前,必須滿足的需求。如果前置條件未達到,程式可能會崩潰或產生錯誤的結果。

可以這樣想:在開車之前,一個「前置條件」是你必須擁有車鑰匙和有效的駕駛執照。如果這些條件不滿足,駕駛這個「過程」就無法進行。

為什麼要使用前置條件?

安全性:確保程式不會嘗試執行不可能的任務(例如除以零)。
效率:如果程式知道前置條件已滿足,就不必在主程式碼中不斷浪費時間檢查錯誤。
清晰度:清楚告知其他程式設計師,程式運作所需的基本條件。

例子:計算平方根

如果你編寫了一個函數來計算數字 \( x \) 的平方根:
前置條件: \( x \geq 0 \)(在大多數基礎程式設計中,你無法求負數的平方根)。
• 如果使用者輸入 \(-5\),則違反了前置條件,程式應該在嘗試計算之前就處理這個錯誤。

要避免的常見誤區:不要混淆輸入前置條件。輸入是你給予程式的資料;而前置條件則是該資料必須遵守的規則

重點總結:前置條件就像一份「契約」。它們的意思是:「只要你給我正確類型的輸入,我就保證給你正確的輸出。」

3. 可重複使用的程式組件

在計算機科學中,我們討厭做白工!展望未來意味著要識別出程式中未來,或在目前專案的其他部分中可以再次使用的部分。

可重複使用的組件 (Reusable components) 是指設計用來在許多不同程式中使用的程式碼區塊(例如函數、程序或函式庫)。

重複使用的好處:

節省時間:你不必為常見任務(如排序清單或驗證電子郵件地址)重複編寫程式碼。
更容易測試:如果一個組件之前已經使用過且運作良好,你就不需要再次除錯。
可靠性:熱門的函式庫(例如 Python 中的 math)已經過成千上萬人的測試,非常可靠。

「樂高」比喻

將可重複使用的組件想像成樂高積木。你不會每次想蓋城堡時都重新製作一塊塑膠磚;你會使用標準化的積木,因為你知道它們能完美契合。之後,你還可以用這些相同的積木來蓋一艘太空船!

記憶法:重複使用的「T.E.D.」原則

可重複使用的程式碼應該是……
Tested(已測試:你知道它能運作)。
Efficient(高效率:節省編碼時間)。
Distinct(明確:它能出色地執行一個清晰的任務)。

你知道嗎?現代大多數軟體中,高達 70% 到 80% 的程式碼都是使用函式庫中可重複使用的部分!專業的程式設計師很少「從零開始」。

重點總結:透過「展望未來」並建立模組化、可重複使用的程式碼,你會讓工作變得更輕鬆、更快速,也更專業。

總結檢查清單

在進入程序化思維 (Thinking Procedurally) 之前,請確保你能夠:
• [ ] 列出簡單情境(如自動提款機)的輸入輸出
• [ ] 解釋什麼是前置條件並舉例說明。
• [ ] 解釋為什麼使用可重複使用的組件(函式庫/子程序)比從零開始編寫更好。

做得好!你現在已經具備運算規劃者的思維了。繼續加油!