歡迎來到程序化思維!

你好!今天我們將探討程序化思維(Thinking Procedurally)。這是 OCR AS Level 課程中「計算思維要素(Elements of Computational Thinking)」的重要一環。別被這個名稱嚇倒了——這其實是你每天都在做的事情!

無論是沖一杯茶、規劃上學路線,還是在電子遊戲中升級,你都在運用程序化思維。在電腦科學中,這意味著將一個龐大且複雜的問題,拆解成電腦能夠執行的邏輯指令集合。讓我們深入了解吧!

1. 識別問題的組成部分

在寫下第一行程式碼之前,我們需要先了解自己到底要解決什麼問題。這就是所謂的分解(Decomposition)——將一個大問題拆解成更小、更易於管理的部分。

類比:想像有人叫你去「籌辦一個音樂節」。這聽起來簡直是不可能的任務!但如果你將它拆解,就能找出各個組成部分
1. 預訂樂團。
2. 租用場地。
3. 聘請保安。
4. 銷售門票。
突然間,「不可能」的任務就變成了一連串較小的工作清單。

在電腦科學中:如果你被要求建立一個「登入系統」,你需要識別的組成部分包括:獲取用戶名稱、獲取密碼、檢查它們是否與資料庫中的資料相符,以及處理「忘記密碼」的請求。

快速複習:程序化思維始於分解。如果一個問題太大而無法一次解決,請繼續將其拆解,直到每個部分都變得簡單為止!

2. 識別解決方案的組成部分

一旦掌握了問題的組成部分,你需要決定解決方案的組成部分是什麼。這包括識別所需的數據,以及處理這些數據的過程。

逐步解釋:
1. 輸入(Inputs):程式啟動時需要什麼數據?(例如:用戶名稱)。
2. 過程(Processes):程式需要對這些數據什麼?(例如:檢查名稱是否在清單中)。
3. 輸出(Outputs):程式在最後應該向用戶顯示什麼?(例如:「存取權限已授權」)。

你知道嗎?即使是最複雜的人工智慧模型或電子遊戲,也只是由這些簡單的「輸入-處理-輸出」組件所組成的龐大集合!

重點總結:解決方案不僅僅是一大塊程式碼;它是為了共同解決整體問題而協作的一系列具體任務。

3. 確定步驟順序

電腦速度極快,但也非常死板。它們會嚴格按照你指示的順序執行任務。確定步驟順序(通常稱為序列 Sequence)至關重要。

類比:想像一個「機器人廚師」在做吐司。如果你這樣告訴它:
1. 將吐司放在盤子上。
2. 把麵包放進多士爐。
3. 開啟多士爐。
機器人會先把兩片冷麵包放在盤子上,然後空轉多士爐!因為順序錯了,導致邏輯也錯了。

別擔心,起初這看起來可能有點棘手!一個好方法是在紙上進行「預演(Dry run)」。想像自己是電腦,逐一審視每個步驟。這樣順序還合乎邏輯嗎?

應避免的常見錯誤:在計算出結果之前嘗試使用該結果。例如,在將稅款(Tax)加到小計(Subtotal)之前,就嘗試列印出總價格(Total_Price)

4. 識別子程序

當你拆解解決方案時,你會發現有些任務足夠獨立,可以分開處理。這些就是子程序(Sub-procedures)或稱子常式(Sub-routines)

為什麼要使用子程序?
- 可重用性:只需編寫一次程式碼,即可多次使用。
- 可讀性:閱讀一個寫著 "CalculateTax()" 的程式,比閱讀隱藏在主程式碼中間、長達 50 行的複雜算式要容易得多。
- 測試:你可以測試一個小的子程序,確保其運作完美,再將其加入主程式中。

現實生活例子:想想你的智慧型手機。「相機應用程式」是一個主程式,但「儲存相片到相簿」就是一個子程序。許多不同的應用程式(如 Instagram、WhatsApp、相機)都使用同一個子程序來儲存相片,它們不需要每次都「重新發明輪子」!

記憶法:D.R.Y.
這代表 Don't Repeat Yourself(不要重複自己)。如果你發現自己在寫重複的程式碼,那可能就應該將其變成一個子程序

重點總結:子程序是主程式內的「微型程式」。它們能讓程式碼更有條理且易於重複使用,從而讓你的工作更輕鬆。

總結檢查清單

當你在運用程序化思維時,試著問自己這四個問題:
1. 組件(Components):我是否已將大問題拆解成最小的部分?
2. 解決方案(Solution):解決這些部分需要哪些具體任務(輸入、處理、輸出)?
3. 順序(Order):邏輯順序是什麼?(什麼必須先發生?)
4. 子程序(Sub-procedures):我可以將這些任務歸納為可重用的「微型程式」嗎?

做得好!你已經掌握了像程式設計師一樣思考的基礎。只要學會拆解問題並保持邏輯順序,就沒有解決不了的難題!