看到很多人提出「不插電、不寫程式,也能學運算思維」,個人覺得混倄視聽,在此簡單表達一下想法。

先講結論:

要,教運算思維一定要教程式

運算思維 (Computational Thinking) 本身就是運用電腦來解決問題的思維,“computaional” 就是指「可運算的」,為什麼強調可運算?因為電腦的本質就是一台計算機,所以我們必須先將問題定義為電腦可運算的形式,運用它強大的運算能力來幫我們解決問題。這點很重要,請先記著。

最早提出運算思維這個觀念的人是 Wing, J. M.,發佈在 ACM 的期刊,裡面提到:

運算思維是運用電腦科學的概念基礎之上,牽涉了解決問題、設計系統、理解人類行為

Computational thinking involves solving problems, designing systems, and understanding human behavior, by drawing on the concepts fundamental to computer science.

從這段我們可以了解到:運算思維不只是單純的程式設計,還涉及到了更高層次的問題解決、人機互動。當運算思維程式去掉了程式設計,基本上就只是古早就有的 問題解決 (Problem-solving) 思維罷了。怎麼說呢?在探討這個問題之前,我們要先來解構一下運算思維。

解構運算思維

其實運算思維目前並沒有被明確地定義,不同學者、組織對於運算思維的定義都有些許不同。我認為目前較為嚴謹、完整的框架,是由 Google Education 所提出的:

  • Abstraction: Identifying and extracting relevant information to define main idea(s)
  • Algorithm Design: Creating an ordered series of instructions for solving similar problems or for doing a task
  • Automation: Having computers or machines do repetitive tasks
  • Data Analysis: Making sense of data by finding patterns or developing insights
  • Data Collection: Gathering information
  • Data Representation: Depicting and organizing data in appropriate graphs, charts, words, or images
  • Decomposition: Breaking down data, processes, or problems into smaller, manageable parts
  • Parallelization: Simultaneous processing of smaller tasks from a larger task to more efficiently reach a common goal
  • Pattern Generalization: Creating models, rules, principles, or theories of observed patterns to test predicted outcomes
  • Pattern Recognition: Observing patterns, trends, and regularities in data
  • Simulation: Developing a model to imitate real-world processes

仔細理解這些內容,不難發現其中不少的觀念屬於比較高的設計/規劃層次、有些屬於程式的實作層次,並非完全彼此獨立。有些觀念甚至經常性出現在我們的生活之中,如:abstraction, algorithm design, decomposition, pattern recognition。這些觀念其實跟程式設計並沒有什麼關係,舉例來說,“pattern recognition” 的本質在於「找出規律」,但是這件事其實在長久以來經常性地被人類所使用,並不是什麼新的概念。

老早就有的「模式辨別 (pattern recognition)」概念

舉例來說,古人為了解決稻穗中夾雜大量穀殼的這個問題,藉由歸納出穀殼的特徵 — “比一般的稻穗要輕”,進而發展出用風力來將較輕的穀殼吹掉的方法,來挑選稻穗。過程中並無借重電腦強大運算能力的特點。

古早的脫殼機,用人力轉動風箱,產生風,運用風力將較輕的稻殼與稻米分開。

舉另一個例子,假設今天我們要解決的問題是找出資料中有幾個高風險名單,以便提供輔導、協助。當我們發現了高風險名單幾乎都有「低收入」、「單親」的狀況,這個過程便是 “pattern recognition”。當我們在系統中依據這個規律撰寫程式,讓電腦知道如何篩選出高風險名單,這個過程就是 “pattern generalization”,也就是真正將模式辨別的方法用電腦可執行的程式給實作出來。

從上面的兩個例子就能知道:

如果不牽涉程式的實作,叫做運算思維實在有點太牽強。
(不然照這樣的定義,其實幾千年以前就有運算思維了)

其實探討演算法,也未必等於運算思維

再舉一個例子,公認最早的演算法是「歐幾里得算法」,也就是俗稱的「輾轉相除法」,但是歐幾里得在創造這個演算法時,並無考慮到如何被電腦執行,進行「自動化 (Automation)」,因此這個過程也不能稱作是運算思維。

Algorithm 在大陸與台灣的稱呼有些微不同,叫做「算法」,個人認為比「演算法」更直觀。「算法」顧名思義,就是「計算的方法」。其他還有劉徽的割圓術,其實就是計算圓周率的方法,但是一樣稱不上是運算思維。

劉徽的割圓術原理圖解

沒有程式、沒有運算思維

到了這裡,我們應該能夠理解「運算思維 (Computaional Thinking)」以及「問題解決 (Problem Solving)」的差異。

重新歸納一下:

當解決問題的流程是建立在電腦可運算的基礎上,這種思考模式才叫運算思維。

公認最早的程式 — 白努利方程式

舉例來說,最早的程式是由 Ada 所開發的,但其實根本沒有機會被執行,因為那時電腦(嚴格講起來是蒸汽推動的計算機)還沒誕生。但是這個程式的確是基於當時的計算機 — 分析機的設計所開發的,按理說只要分析機存在,這個程式便能「自動」運行,所以我們確實能夠說 Ada 的確具備了運算思維 (至少有 Algorithm, Automation, 或許還有 Data Representation)。

蒸汽驅動、機械式、十進位的「電腦」 — 分析機

結論

有些教師希望能用不插電的方式教學生運算思維,但是產出的教法卻往往完全失去了「運算」,只剩 Problem Solving,這是個不太好的狀況,這篇文章是希望能夠提供教學者一個不一樣的思考面向,或許能避免誤導學生。


後記

如果還是想用不插電的方式教運算思維呢?

可以,但是絕對不能脫離程式的本質:流程 & 資料。
必須具備以下兩點:

  1. 有程式語言(圖形、符號也行),以及能夠執行的機器 (通常由人扮演)
  2. 用可量化的方式模擬資料儲存的機制 (如:token、數字、紙牌,但是不能包含繪畫這種不容易被儲存的方式,除非是點陣)

orangeapple

在數位世界培養孩子的創造力

Kevin Shu / 束凱文

Written by

coder, teacher, student for life. 對有興趣的事物追根究底,熱愛解決問題。目前在研究的課題是「兒童科技教育」,努力培養出更多具有數位創造力的孩子。

orangeapple

在數位世界培養孩子的創造力

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade