^

運算思維 Computational Thinking

HiThink-logo
海獅程式團隊
Nov 21,2019

運算思維Computational Thinking(簡稱CT)是一種用來將複雜的問題,運用相關步驟來達到解決問題的思考方法。CT是一種抽象思維所以大部分介紹都以文字敘述為主,比較無法實際感受到運用在開發上有哪些差異?有什麼優點? 2020/3/11(修)

chess
Photo by Pixabay

...

如何以運算思維來設計程式?

這篇文章將會介紹「什麼是運算思維?」和「如何用運算思維!」,探討如何以運算思維(CT)方法來進行程式設計開發應用。第一步就先從認識CT概念開始,有了基礎概念後再舉一個遊戲專案來當開發範例說明,一步步的講解運用CT設計方法及實作程式設計。

運算思維定義

引用google發表的 Computational Thinking

開發流程階段: 理論 > 思考 > 規劃 > 編程

Decomposition
—breaking down a complex problem or system into smaller, more manageable parts

Pattern recognition
—looking for similarities among and within problems

abstraction
—focusing on the important information only, ignoring irrelevant detail

algorithms
—developing a step-by-step solution to the problem, or the rules to follow to solve the problem

scratch1
Photo by google

運算思維實作

使用程式工具為MIT開發Scratch程式語言。選擇用Scratch來講解CT,雖然不能完全呈現CT優點,但卻是最容易被理解的。

開發流程階段: 理論 >思考 > 規劃 > 編程

PoPo想要用Scratch設計一款射擊遊戲創作,遊戲內容是「當角色被紅色靶擊中將會消失,擊中角色時可以得到分數並累計到遊戲結束」。

ct-example-game
Photo by MIT

以一般方法來設計

討論重點在邏輯思維,僅列出遊戲專案(作品)內其中一個角色老鼠的積木(程式碼)。程式碼中Score是一個變數功能,用來紀錄當角色被擊中時可以得到的分數。

老鼠角色程式碼
老鼠角色程式碼

以運算思維方法來設計

開始使用運算思維方法來設計程式前,再一次來了解CT的概念,並運用各步驟開始來規劃架構及進行實際的程式開發說明。

1.問題分解(Decomposition)

設計一個系統時,將需求拆開成多個小系統,讓程式碼容易閱讀及維護管理

分析需求後依不同功能來拆解成各種的系統模組

ct-example-MindMap
運算思維系統化設計

2.模式識別(Pattern recognition)

在要解決的問題中尋找出共同性

每個角色都不一樣的部分:移動速度,得分數
每個角色都一樣的部分:復原方式(程式邏輯完全相同,用函式來設計)

3.抽象化(abstraction)

建構重要的資訊,忽略不重要的細節

不同的角色但計分邏輯是相同,設計模式如下:

  • 「初始系統」上設定新增一個變數名稱﹝角色種類﹞,不同等級角色指定不同編號
  • 「擊中系統」中當角色被靶擊中將執行”復原系統和得分系統”流程
  • 「得分系統」將依傳入的﹝角色種類﹞來判斷所得到的分數,若是”1"可得1分、若是”2"可得3分

4.演算法設計(algorithms)

開發解決問題的步驟、規則

PoPo使用運算思維方法來重新設計的老鼠程式碼

ct-1
(1) 初始系統
ct-2
(2) 移動系統
ct-3
(3) 擊中系統
ct-4
(4) 複原系統
ct-5
(5) 得分系統

...

你可能會好奇在想:「用運算思維方式來設計程式,那有什麼好處?」,上面程式範例只是小遊戲專案,重新設計後的優點是「程式碼變得容易閱讀」及「程式碼容易維護」。關於容易維護部分來補充說明,假設遊戲中有5種不同角色時,當想要重新指派每個角色的分數時,只需要找出「得分系統」模組,就能修改全部角色分數。

初學者為了達到設計目標,程式碼常會一直增加而造成後續修改很容易就會少改到其中一個而錯誤。用運算思維方法來分析系統、重複運用等設計規劃,除了程式可讀性提高(團隊開發時這非常重要)、降低維護成本(避免改錯)、加快程式開發速度、改善程式執行效率及最重要能提升自己的程式思維能力

這篇文章只是一個開始,希望閱讀完能幫助到你對運算思維有更進一步的認識。下次寫程式就來動動腦、動動手使用新方法來設計開發,慢慢就會發現原來並不難,我也會「運算思維 Computational Thinking」。

大家都能愛編程、愛思考、愛創造