歡迎來到「設計與編寫程式」!

你有沒有想過,你最喜愛的電子遊戲是怎樣知道你得了分數的?或者機械人是怎樣知道該往哪邊轉彎的?這一切的背後全靠編程(Programming)!

在這一課中,我們將會探索程式編寫員如何規劃、製作和修正電腦程式來達成特定目標。如果一開始覺得有點難,千萬不用擔心——寫程式就像玩一個有趣的解謎遊戲,我們會一步一步慢慢學!


1. 演算法與程式:有甚麼分別?

在我們動手按鍵盤之前,首先要明白兩個非常重要的詞彙:演算法(Algorithm)和程式(Program)。

甚麼是演算法?

演算法是一套清晰、精確且循序漸進的步驟指示,用來解決問題或完成一項任務。演算法是寫給人類閱讀和規劃用的。你可以用日常語言文字、流程圖(Flowchart)或故事板(Storyboard)來編寫演算法。

生活小比喻:試想想焗蛋糕的食譜,或是拼砌樂高(Lego)積木的說明書。如果你遺漏了其中一個步驟,蛋糕就無法順利烤好!

甚麼是程式?

程式是轉譯成代碼(Code)的演算法,好讓電腦或數碼裝置能夠執行它。在第二學習階段(KS2),你可能會使用圖形化積木程式語言(例如 Scratch),或是文字基礎的程式語言(例如 LogoPython)來編寫程式。

你知道嗎? 電腦是沒有常識的!它們不會猜測你想表達甚麼。如果你的指令不夠精確和明確,電腦只會盲目照著你給的指令去做——即使那是錯的!

核心重點: 演算法是按部就班的計劃;程式則是將這個計劃轉化成電腦代碼。


2. 計算思維的超能力

為了設計出優秀的程式,電腦科學家會使用三種特別的思考工具:

1. 拆解(Decomposition,把問題化整為零)

拆解是指將一個龐大而複雜的問題,分解成較小、較容易處理的部分。

例子:想像一下要設計一個電腦遊戲。與其一次過處理所有事情,不如將它拆解為:

• 第 1 部分:玩家角色如何移動。
• 第 2 部分:如何計算得分。
• 第 3 部分:遊戲結束時播放甚麼音效。

2. 抽象化(Abstraction,只聚焦於重要事項)

抽象化是指移除不必要的細節,讓你可以全神貫注於問題中最關鍵的部分。

例子:如果你正在編寫程式控制一輛賽車在跑道上行駛,你只需要關心它的速度和轉向方向。你完全不需要為賽車安全帶的顏色或車載收音機的牌子來編寫代碼!

3. 邏輯推理(Logical Reasoning,有條理地理清思緒)

邏輯推理是運用逐步的規則來預測程式會做出甚麼行為、解釋演算法如何運作,以及找出問題出在哪裡。

核心重點: 運用拆解將難題化整為零,運用抽象化忽略無關細節,並運用邏輯推理來預測和解釋代碼的運作方式。


3. 編程的四大核心基石

世界上幾乎所有電腦程式都是由四大核心概念構建而成的:順序選擇重複變數

A. 順序(Sequence,次序非常重要!)

順序是指指令由上至下、一項接一項執行的精確先後次序。

如果你改變了指令的順序,整個程式的運作結果就會徹底改變!

例子:想像一下早上起床穿衣服:
1. 先穿上襪子。
2. 再穿上鞋子。
如果你顛倒了順序,先穿鞋子再穿襪子,那可就大有問題了!

B. 選擇(Selection,作出決策)

選擇讓程式能夠根據某個條件是真(True)還是假(False)來作出決定。我們會使用 如果……那麼(if... then)如果……那麼……否則(if... then... else) 積木來做到這一點。

例子:
如果 角色碰到金幣,那麼 得分增加 \(1\)。
如果 計時器歸 \(0\),那麼 顯示「遊戲結束」,否則 繼續進行遊戲。

C. 重複(Repetition,迴圈與迭代)

重複(又稱為迭代 Iteration 或迴圈 Loops)是指重複執行同一組指令,而不需要將它們重複寫很多次。

迴圈主要分為兩大類:

次數控制迴圈(Count-Controlled Loops): 指令會重複指定的次數(例如:「重複 \(4\) 次:向前移動 \(10\) 步,向右轉 \(90\) 度」來畫出一個正方形)。
條件控制迴圈(Condition-Controlled Loops): 指令會一直重複執行,直到某些條件改變為止,或是永遠重複(例如:「重複執行直到碰到邊緣」「重複無限次」迴圈)。

D. 變數(Variables,多變的儲存盒)

變數是電腦記憶體中一個已命名的儲存空間,用來保存可以在程式運行期間改變的資料(數值)。

記憶小貼士:想像它是一個貼了標籤的紙盒。你可以隨時打開盒子,換掉裡面裝著的數字!

在 KS2 專題研習中常見的變數例子包括:

得分(Score): 由 \(0\) 開始,每次你收集到道具時增加 \(1\)(\(score = score + 1\))。
計時器(Timer): 由 \(60\) 開始倒數至 \(0\)。
生命值(Lives): 由 \(3\) 開始,每次撞到障礙物時減少 \(1\)。

核心重點: 順序是步驟的先後次序;選擇用來作出決定;重複用來迴圈執行動作;變數用來儲存會改變的數值。


4. 輸入、輸出與實體系統

程式不僅僅留在電腦螢幕裡面——它們還可以與現實世界互動!

輸入與輸出(I/O)

輸入(Inputs)是傳送進入程式的訊號或資訊。例子包括按下鍵盤按鍵、點擊滑鼠、對著麥克風發出聲音,或按下實體裝置上的按鈕。
輸出(Outputs)是程式發送出來的訊號或動作。例子包括螢幕上的角色移動、揚聲器播放聲音、LED 燈亮起,或馬達開始轉動。

控制與模擬實體系統

你可以使用代碼來控制真實的實體裝置(例如 micro:bitCrumble 控制板),或在螢幕上模擬(Model)真實世界的系統。

日常生活例子:

交通燈: 運用順序與計時器,將燈號依序切換:紅燈 \(\rightarrow\) 紅黃燈 \(\rightarrow\) 綠燈 \(\rightarrow\) 黃燈 \(\rightarrow\) 紅燈。
自動閘道器: 運用輸入感應器(偵測到有車輛接近)來觸發輸出馬達(升起閘桿)。
機械探測車: 運用傾斜感應器或光線感應器,引導探測車避開障礙物。

核心重點: 程式透過輸入接收數據,使用代碼處理這些數據,並透過輸出產生動作。


5. 軟件開發過程與除錯

要成功創作一個程式,需要經歷三個重要階段:

第 1 階段:設計(Designing)

千萬不要一開始就隨意亂拼代碼積木!首先,要用圖表、流程圖或文字步驟來規劃你的演算法,並運用拆解法將目標分解。

第 2 階段:編寫(Writing / Coding)

在你的編程環境中(例如 Scratch),將規劃好的演算法轉化為真正的代碼。一步一步慢慢建立你的代碼,切忌妄想一次過完成整個龐大的程式。

第 3 階段:除錯(Debugging,捉拿程式錯誤!)

演算法或程式中的錯誤稱為 Bug(程式漏洞)。而除錯(Debugging)就是找出、隔離並修正這些錯誤的過程。

如何成為除錯專家:

切勿胡亂猜測: 隨意搬動積木通常只會製造更多錯誤!
運用邏輯追蹤(Logical Tracing): 就像電腦一樣,從最頂部開始逐塊積木由上而下仔細閱讀代碼。
檢查你的變數: 確保點擊綠旗時,所有變數都已經設定好正確的初始值。
逐步進行測試: 在把各部分連接起來之前,先分開單獨測試程式的每個小部分。

核心重點: 先規劃設計,分步編寫代碼,並保持冷靜運用邏輯推理來除錯,切勿靠猜測。


6. 常見錯誤與避免方法

以下是同學們最常遇到的一些陷阱——以及你可以如何避免它們:

「沉睡的 If」積木: 如果單獨放置一個 如果……那麼(if... then) 積木,電腦只會在程式一開始的一瞬間檢查條件一次。如果你想讓電腦持續不斷地檢查(例如:「我現在有沒有碰到迷宮的牆壁?」),請把 如果 積木放進重複無限次迴圈(Forever Loop)裡面!

混淆變數與靜態文字標籤: 變數不單純是螢幕上顯示的文字;它是記憶體中的一個容器,裡面的數值可以被代碼改變(例如增加 \(+1\) 或減少 \(-1\))。

忽略了順序: 電腦是由上至下執行代碼的。如果你的角色在播放音效之前就隱藏了,請確保這真的是你想要的順序!

以為電腦擁有直覺: 電腦無法猜測你的心思。如果你的代碼指示角色移動 \(1000\) 步衝出螢幕邊緣,它就會百分之百照做!


7. 快速溫習總結

演算法(Algorithm): 為解決問題而編寫的清晰、循序漸進之步驟指示。
程式(Program): 用代碼編寫、可由電腦執行的演算法。
拆解(Decomposition): 將大任務分解成較小、易於處理的細小部分。
順序(Sequence): 嚴格由上至下按先後次序執行指令。
選擇(Selection): 使用 如果……那麼……否則 來作出判斷決策。
重複(Repetition): 使用次數控制迴圈或條件控制迴圈來重複執行指令。
變數(Variables): 電腦記憶體中已命名的儲存盒,保存著可以改變的數值。
除錯(Debugging): 運用邏輯推理找出並修正程式中的錯誤。