歡迎來到計算思維的世界!

你有沒有試過面對一個巨大的難題——比如興建一座摩天大樓,或是編寫下一個熱門電子遊戲——然後心想:「我到底該從哪裡開始?」別擔心,即使是世界上最頂尖的程式設計師也有過這種感覺!
計算思維(Computational Thinking)是一套像「大腦工具」一樣的方法,能幫助我們像電腦一樣解決複雜的問題。在本章中,我們將探討其中兩個最重要的工具:分解(Decomposition)抽象(Abstraction)。讀完這些筆記後,你會發現你其實每天都在運用這些技巧!


1. 分解(Decomposition):化整為零

分解就是將一個龐大且複雜的問題,拆解成若干較小且更易於處理的部分。
把它想像成一個巨大的拼圖。你不會試圖一次拼好所有 1,000 塊碎片;你會把工作拆成較小的任務,例如「找出角落的碎片」、「挑出天空的藍色碎片」以及「拼好邊框」。

為什麼分解很有用?

  • 減少壓力:解決幾個小問題遠比處理一個超級大難題容易得多。
  • 團隊合作:不同的人可以同時處理問題的不同部分。
  • 可重用性:一旦你解決了其中一個小部分,你可能可以在另一個問題中重複使用該解決方案。

現實生活中的例子:策劃生日派對

如果你只說「策劃一個派對」,很難知道從何入手。如果你運用分解,你會得到一張檢查清單:
1. 擬定賓客名單。
2. 選擇場地。
3. 預訂食物。
4. 發送邀請函。
處理這些細項可比直接面對「整個」派對簡單多了!

快速複習:分解

定義:將問題拆解成較小的子問題。
核心重點:它能讓複雜的任務更容易管理、測試及分配給他人處理。


2. 抽象(Abstraction):專注於重點

抽象就是移除不必要的細節,讓你能夠專注於問題中最關鍵的部分。
在電腦科學中,我們運用抽象來建立一個現實世界的「模型」,這個模型只包含我們程式運作所必需的部分。

地圖的類比

想想看倫敦地鐵(Tube)的地圖。
它能 100% 準確地呈現倫敦嗎? 不能!它沒有顯示樹木在哪裡、天氣如何,也沒有顯示路軌實際的彎曲程度。
這就是抽象的實際應用。製圖者移除了「不必要」的細節(如建築物和山丘),只保留了核心資訊(車站和路線),以協助你從 A 點到達 B 點。

為什麼要使用抽象?

  • 降低複雜度:忽略無關緊要的細節,問題就會變得更簡單。
  • 節省時間:你不必浪費精力去編寫不必要的程式碼。
  • 提高效率:當程式不會被無用的數據拖累時,運行起來會更順暢。

避免常見錯誤

學生經常會混淆分解與抽象。只需記住:
- 分解 = 將大東西拆解成更小的部分
- 抽象 = 移除額外的細節

快速複習:抽象

定義:移除不必要的細節,以專注於核心特徵。
核心重點:它讓我們能為複雜的系統建立簡化的模型。


3. 子程式(Subprograms):迷你程式的力量

在編程時,一旦我們將問題分解成較小的部分,我們通常會使用子程式來編寫這些部分的代碼。這些是能執行特定任務的獨立代碼塊。

使用子程式的好處

對程式設計師來說,使用子程式是一種「專業級操作」。原因如下:
1. 避免重複:不需要將同樣的 10 行代碼寫五次,你只需寫一次子程式,然後在需要時「呼叫(call)」它即可。
2. 更易於測試:你可以一次測試一個子程式,確保它完美運作後,再將其加入主程式中。
3. 提升可讀性:閱讀寫著 calculate_score() 的程式,肯定比閱讀中間隱藏了 50 行複雜數學運算的程式容易得多。

你知道嗎?

你會用到兩大類主要的子程式:
- 程序(Procedures):執行一項任務(例如「在螢幕上顯示文字」)。
- 函數(Functions):執行計算並回傳(return)一個值(例如「計算總金額」)。

核心重點:子程式

子程式協助我們實現已分解的解決方案。它們使代碼更具模組化(modular),意味著代碼是由獨立且可重用的「組塊」所構建的。


章節總結與記憶小撇步

如果這些術語起初讓你覺得有點「學術感」,別擔心。只要記住這個簡單的記憶技巧:
「建築師法則」
- 分解:建築商將「房屋項目」拆解為「水管工程」、「電路工程」和「砌磚工程」。
- 抽象:建築師關注藍圖(核心線條),而不是花園裡花的顏色。
- 子程式:水管工每次看到水槽時都會使用標準的「管道連接」技術,而不是每次都發明一種新的連接方法。

考試快速檢核表:
  • 你能定義分解嗎?(將問題拆解)。
  • 你能定義抽象嗎?(移除不必要的細節)。
  • 你能說出子程式的一個好處嗎?(可重用性/可讀性)。
  • 你能解釋地圖如何作為抽象的例子嗎?(專注於路線,忽略建築物)。