歡迎來到計算思維(Computational Thinking)的世界!
你有沒有曾經對龐大的問題感到不知所措?或許面對一個巨大的程式設計專案或複雜的數學方程式時,你完全不知道從何入手。計算思維就是你的「秘密武器」,它能幫你將這些巨大的難題拆解成易於管理的組件。
在本指南中,我們將專注於抽象化(Thinking Abstractly)。這是解決任何電腦問題的第一步。別擔心,雖然聽起來有點「學術」,但你其實每天都在使用抽象化,甚至你自己都沒察覺!
1. 什麼是抽象化?
簡單來說,抽象化就是刪除不必要的細節,只保留那些有助於解決特定問題的重要部分。
想想你所在城鎮的地圖。它會顯示每一根草葉、路面的裂縫,或是每個人家大門的顏色嗎?當然不會。如果真的這樣做,地圖的尺寸會跟城鎮一樣大,而且根本無法閱讀!相反,它使用符號來代表道路、公園和建築物。這就是抽象化的運作方式。
抽象化的兩大重點:
1. 刪除細節:移除任何對解決任務沒有幫助的資訊。
2. 簡化:用簡單的模型來呈現複雜的事物(例如用一條藍線來代表一條巨大且流動的河流)。
快速回顧:
抽象化 = 專注於重要事物 + 忽略無關事物。
2. 為什麼需要抽象化?
為什麼我們費心做這件事?為什麼不直接包含所有細節?在電腦科學中,我們的資源有限,例如記憶體 (RAM)、處理器效能 (CPU),以及最重要的一點——我們自己的時間。
抽象化的好處:
• 降低複雜度:讓人更容易理解問題。
• 節省時間:當程式不被無用的數據干擾時,編寫速度更快,且更容易除錯 (debug)。
• 效率:電腦處理數據的速度會快得多,因為需要處理的數據量較少。
• 專注力:它讓開發者能專注於解決方案的邏輯,而非糾結於硬體的微小細節。
比喻:開車
要開車,你需要了解方向盤、踏板和排檔桿。你不需要了解內燃機如何運作,也不需要知道燃料的化學成分。汽車的儀錶板就是一個抽象介面,讓你輕鬆控制複雜的機械。
關鍵總結:
我們需要抽象化,是因為它能讓複雜的問題變得可解決且易於管理。
3. 抽象化與現實的區別
理解抽象模型與現實之間的區別非常重要。在 OCR 考試中,你可能會被問到它們有何不同。
現實:實際的、物理上的物體或情況。它充滿了無窮的細節,且非常複雜。
抽象化:為了特定目的而創造的、對現實的簡化「版本」或「模型」。
例子:倫敦地鐵圖
倫敦地鐵的「現實」包含彎曲的隧道、相隔數英里的車站,以及起伏的軌道。然而,地鐵圖(抽象化)將所有線路顯示為直線或完美的對角線,所有車站的間距也是均勻的。
這張地鐵圖能完美呈現現實嗎?不能。
它能幫你從 A 站到達 B 站嗎?當然能!
事實上,如果地圖顯示了真實的曲線和確切距離,反而會變得難以使用。
避免常見錯誤:
學生常誤以為「細節越多越好」。在電腦科學中,過多的細節反而有害。這會導致程式運作緩慢,並產生沒人能看懂的「義大利麵式代碼」(spaghetti code)。
4. 設計一個抽象模型
你該如何實際進行「抽象化」?當你收到一個場景並被要求建立抽象模型時,請按照以下步驟:
第一步:確認目標
程式要達成什麼目標?(例如:是要計算路線,還是模擬天氣?)
第二步:確認需求
為了達成目標,哪些資訊是絕對必要的?
第三步:捨棄其餘部分
找出那些「知道也不錯」但實際上不影響結果的細節。把它們刪掉!
現實案例:飛行模擬遊戲
如果你正在設計一款飛行模擬器,你的抽象模型應包含:
• 重要:風速、燃油量、高度和飛機重量。
• 無關(刪除):乘客行李箱的顏色、飛行員午餐吃了什麼,以及機艙地毯的品牌。
你知道嗎?
像 Pong 這樣的早期電子遊戲就是抽象化的傑作。一個正方形塊代表「球」,兩條線代表「球拍」。它看起來一點都不像真實的網球,但其機制卻在那裡,這就是它好玩的原因!
記憶小撇步:「過濾器」技巧
想像你的大腦是一個咖啡濾網。現實是咖啡渣(雜亂且佔空間)。抽象化就是過濾後流出來的咖啡液——醇厚、精華,且正是你真正想要的結果。
快速總結檢查表
在進入下一章之前,請確保你能回答以下問題:
• 我能定義抽象化嗎?(刪除不必要的細節)。
• 為什麼需要它?(為了減少複雜度並節省資源)。
• 抽象化與現實有什麼區別?(現實是全部的細節;抽象化是簡化的模型)。
• 我能識別場景中哪些是重要的嗎?(只專注於有助於達成目標的資訊)。
如果這對你來說還顯得有點抽象,別擔心。抽象化是一種思維方式。你練習觀察問題並問自己「在這裡我可以忽略什麼?」的次數越多,這就會變得越簡單!