遊戲化學習程式教育程式語言

程式初學者的失落之鑰 - "運算思維"

2015-06-02

瀏覽次數:18859

運算思維是什麼?Computational Thinking(CT)是「用電腦的邏輯來解決問題的思維」。Google 定義了四大核心能力:①拆解問題、②找出規律、③歸納與抽象化、④設計演算法。這不是程式語言的問題,而是思考方式的問題——很多人學不好程式,真正的癥結就在這裡。好消息是,CT 可以後天訓練,從 Scratch 課程開始,孩子就能建立這種思維。

Computational Thinking,在華文地區普遍被翻譯為「運算思維」,但是聽起來還是很抽象,到底什麼才是 Computational Thinking(以下簡稱「CT」)呢?

Computational Thinking — 用電腦解決問題的思維

計算性思維,是一種用電腦的邏輯來解決問題的思維。美國知名的電腦科學家 Jeannette M. Wing,曾經寫了一篇很有名的文章:《Computational thinking and thinking about computing》,詳細敘述了何為 CT。而 Google 這間極度重視資訊人才的軟體巨擘,也不遺餘力地推動 CT 教育,並提出了四個 CT 核心能力:

  1. 拆解(Decomposition):將一個任務或問題拆解成數個步驟或部分。Breaking a task or problem into steps or parts.
  2. 找出規律(Pattern Recognition):預測問題的規律,並找出模式做測試。Make predictions and models to test.
  3. 歸納與抽象化(Pattern Generalization and Abstraction):找出最主要導致此模式的原則或因素。Discover the laws, or principles that cause these patterns.
  4. 設計演算法(Algorithm Design):設計出能夠解決類似問題並且能夠被重複執行的指令流程。Develop the instructions to solve similar problems and repeat the process.

一個具有 CT 的人,總是可以運用既有的知識或工具,找出解決艱難問題的方法。這麼講還是太玄了,那我們舉一個例子:「如何教小學五年級學生,在不查表的情況下求平方根?

CT 在數學領域的情境運用 — 開根號

照理來說,開根號是國中二年級的數學範圍。
但是如果今天我們要求一個小學五年級程度的孩子,想辦法運用既有的知識,盡量精準地求出「100 以內任意正整數的平方根」,這樣做得到嗎?可以的,讓我們來看看怎麼做。

【先備知識】:如何比較數字的大小、小數的乘法。

  • 首先,瞭解到:「任意正整數都可以看作是『另一較小數與自己的乘積』,而此數即為該數之平方根」(拆解)
  • 再來,觀察出:「任意正整數的平方根,必定會在 0 與該數之間」(找出規律)
  • 接著,定義:「用 X 來代表所求數之平方根」(抽象化)、「只要盡量求到精準即可,X 與 X 的乘積與所求數相差 0.1 以內即可」(歸納)

接著,他只要設計一個「從 0 開始慢慢找出 X」的流程(設計演算法),如下:

  1. 先寫下「輸入=17」、「答案=0」、「位數=1」
  2. 把「答案」乘以自己,看看有沒有超過「輸入」:
    1. 是:將「答案」減「位數」,跳到第 3 步
    2. 否:將「答案」加「位數」,跳回第 2 步
  3. 看看「答案」乘上「答案」的結果與「輸入」是否相差 0.1 以內:
    1. 是:跳到第 4 步
    2. 否:將「位數」除以 10,跳回第 2 步
  4. 此時「答案」即為「輸入」的平方根近似值,流程結束

用 Scratch 來呈現大致就是這樣(請按綠旗執行):

從這個例子就能知道,「計算」跟「解題思維」是兩個不同的概念
上面提出的流程其實就是「解題思維」,而「計算」會影響的是速度與正確性。

過去我們會非常看重「計算」,是因為人類的計算能力有限,但有時又沒有一個更好的替代方案,所以人類會透過背九九乘法表或諸多公式來提升自己的計算速度與準確性。但是在這個過程中,我們也慢慢地失去了「分析問題」、「拆解問題」的能力,而慢慢地失去了 CT 的基礎。

現在的孩子生在一個充滿運算能力的時代,手機、平板、筆電、電腦充斥著孩子的生活,「計算」的重要性早已慢慢消失。全球知名的技術專家 Conrad Wolfram 就曾經在一場 TED 演講中提到:「我們該使用電腦教導小孩們真正的數學

(其實 CT 曾經進入國小課程,但是水土不服罷了……還記得「建構式數學」嗎?)

讓「生而不知者」,也能學會程式設計

從前,有不少工程師的確是「生而知之者」,好像他們腦袋的迴路就是與常人不同。
而這些生而知之者,也難以將自身的經驗複製,畢竟他們的學習過程是跳躍式的,根本無法與常人解釋自己是如何學會程式設計。這些絕頂聰明的工程師常說:「我一開始是看 XXX 書,寫寫 OOO 專案,在 ### 網站上找一些經典的練習題來做,我想你也行

錯,通常是不行的!

如果你仔細觀察,這些成功的工程師往往有個特點:「很會拆解問題,能夠一步步的組出解決方案」

他們的超能力,就是「拆解(Decomposition)」能力。而這項能力,是許多工程師與生俱來的,也是許多人之所以學不會程式設計的關鍵點!常人在學習程式的時候,往往因為不知道從何拆解問題,而將問題想得太龐大,一開始就備受挫折,也難以堅持下去。但是只要能好好掌握 CT,不只是程式設計,連生活中的許多問題都能迎刃而解。

不只是程式設計,它無所不在

訓練 CT 的過程中,其實就養成了學生用不同角度、以及既有資源解決問題的能力。
其實在教學現場,我看過太多的孩子,即便經過多次的習題練習,一旦題型改變了就只好束手待斃,因為他們已經習慣了「面對任何問題,我都應該要先學會對應的解法」這種思維。

傳統而死板的教育體制,再加上現在都市的孩子生活單一、缺乏刺激,可以說是雪上加霜,更加扼殺了孩子的思考靈活度,也因此越來越多孩子成了一個個的生活白痴。

程式設計,不是養成問題解決能力的唯一途徑,卻是最經濟、快速、靈活,並且符合當下趨勢的一條路。
因此,無論孩子未來是否會走上工程師這條路,具備了計算性思維,無論是對他學業或生活,絕對是百利而無一害的。

Reference

運算思維常見問題

運算思維和程式語言,哪一個先學比較好?

先建立運算思維,再學程式語言的語法,學習曲線會平滑很多。道理就像廚師先要有廚藝(解題邏輯),才去學食譜寫法(程式語法)。橘子蘋果的 Scratch 課程設計,正是讓孩子在視覺化環境中先練習「拆解問題→設計步驟→執行測試→修正」這個循環,再進入文字語法學習。

108 課綱說要培養「運算思維」,學校課程夠用嗎?

2019 年起推行的 108 課綱將運算思維列入國小資訊課程,這是重要的進步。但學校課程時數有限,加上班級人數多,真正讓孩子「用 CT 解決開放式問題」的機會仍然不足。校外的程式課程可以作為補充——不是補習,而是提供更多動手解題的空間與即時回饋。

不學程式,也能培養運算思維嗎?

可以。下棋、解邏輯謎題、規劃旅遊行程、拆解一道料理的步驟,都在訓練 CT。但程式設計是「最即時有回饋」的 CT 訓練——電腦不接受模糊指令,孩子犯了邏輯錯誤,程式馬上跑不起來,立即得到反饋並修正。這種高頻率、低成本的錯誤修正循環,是其他活動很難複製的。

AI 時代,運算思維還重要嗎?

比以前更重要。AI 工具(ChatGPT、Copilot 等)能幫你生成程式碼,但「告訴 AI 要解決什麼問題、怎麼拆解需求、如何驗證結果是否正確」——這些仍需要運算思維。使用 AI 的人,CT 能力越強,得到的結果越好。換句話說,AI 放大了 CT 的價值,而不是取代它。

孩子幾歲開始培養運算思維最合適?

6 歲以上就可以開始,透過 Scratch 的視覺化積木環境。這個年齡的孩子已有足夠的邏輯概念理解「如果…就…」的條件邏輯,加上圖形化介面大幅降低操作門檻。橘子蘋果的 Scratch 課程從小學一年級起開放,每個階段都以「做出一個完整可玩的作品」為驗收標準,讓孩子在成就感中自然建立 CT。

文理組的孩子,都需要學運算思維嗎?

需要,而且適用方式不同。理組孩子可以用 CT 解數學題、做科展專案。文組孩子可以用 CT 拆解寫作架構、分析議題、設計研究方法。CT 本質上是「把複雜問題拆成可操作步驟的能力」,這在任何領域都是競爭力。未來不是只有工程師需要 CT——所有需要解決複雜問題的職業,都需要這個能力。

讓孩子從「運算思維」開始,真正學會解決問題

  • 橘子蘋果課程不只教語法,更訓練孩子「拆解問題、設計方案、除錯修正」的思維循環
  • Scratch → Python → JavaScript → HTML5,每階段都有完整作品驗收
  • 免費試聽一堂,讓孩子親身體驗 CT 的力量