本課程的核心 - Computational Thinking
Computational Thinking (翻譯為 : 計算性思維【運算思維】),是一種用電腦的邏輯來解決問題的思維。我們的目標不僅是教會學生使用電腦,抑或是在計算上的速度與精準度,而是在學習Scratch的過程中,建立基礎概念,從實作中學習,訓練學生「表達」、「溝通」 、「提問」的能力。
Scratch是一個免費編寫程式的軟體,學生可以使用他盡情發揮創意,創建屬於自己獨特的故事、互動性遊戲和動畫,讓學生在學習Scratch的同時,也建立起程式設計的基礎概念。而Scratch的開發始祖 - 麻省理工多媒體實驗室 (MIT Media Lab),在2011年提出了一套Computational Thinking的架構,分為 “Concepts”, “Practices”, 及 “Perspectives” 三個層面。
程式設計概念 Concepts
在學生學習程式設計的過程中,可區分為七個非常基本的大概念,以下將講述七個概念,並提供範例。學生學習了這幾個概念後,不只適用於Scratch,未來用於其他的程式語言也非常有幫助。
Sequence(序列)、
Loops(迴圈)、
Parallelism(平行)、
Events(事件)、
Conditionals(條件)、
Operators(運算子)、
Data(資料)
● Sequence(序列):
一個特定的動作能被細分並表示成各個步驟或指令,依序執行,例如轉一圈後說Hello!,可由下圖所示的指令達成。
Identifying a series of steps for a task.
● Loops(迴圈):
對同一個序列或動作重複執行,我們將上述旋轉一圈的指令利用重複4次表示,可將原本的八行指令縮減為三行,使指令更簡潔。
Running the same sequence multiple times.
● Parallelism(平行):
電腦可以一邊播放音樂,一邊瀏覽社群網站,多個程式同時被進行。
平行就是多個指令同時被執行。以下範例是同時移動、改變特效及發出聲音,同時執行使角色有跳舞的感覺。
Making things happen at the same time.
● Events(事件):
事件,指的就是一件事觸發一個/多個應對機制,例如:當角色被點下時,觸發「說 Hello 兩秒」。
舉個實務上的例子:當要登入facebook時,輸入完帳號密碼後,按下登入,就會觸發將帳號密碼送出。
One thing causing another thing to happen.
● Conditionals(條件):
當電腦在播放音樂時,如果暫停鍵被按下,音樂就會暫停,等到播放鍵被按下才會繼續播放。
程式會依據設定的條件式,做出判斷(例如:如果...否則...)。
Making decisions based on conditions.
● Operators(運算子):
當我們在計算機上依序按下 , , ,最後再按下 時,計算機就會進行數學式的計算,並得到結果 13 顯示在畫面上。
運算子即是做數學運算(例如:+、-、*、/)或邏輯運算(例如:<、=、>)。
Support for mathematical and logical expressions.
● Data(資料):
當我們在玩遊戲時,會有時間倒數、得到的分數、獲得的寶物...等,用來記錄遊戲過程中的資料。可以是單一個數值,如「剩餘時間」,也可以是放在一起的多個資料,如「寶箱內的寶物」。
Data 就是用來記錄,可做儲存及修改。Scratch可用變數(用來儲存單一數字或字串)以及清單(可以儲存多個數字或字串)來存資料。
Storing, retrieving, and updating values.

程式設計技巧 Practices
在帶領學生實作Scratch專案,我們設計了四種活動,利用活動進行的過程,來提高學生的參與度、激發創造力、訓練主動思考。未來不只是在用在開發程式專案,各個領域的發展皆會有幫助。
Experimenting and iterating(實驗和迭代):
「迭代」在程式設計的過程中,扮演了舉足輕重的角色。在面對難解、複雜的需求時,我們往往無法一次到位,一下就做出期望的功能。但是我們可以透過一種漸進開發、逐步測試的過程,有系統、有方法地一步步邁向目標功能。
在 Lesson 7 的教案中,我們會先拋出一個想法 "jump",問學生該如何讓角色跳呢?再讓學生去嘗試,慢慢的實驗,找出方法,待有初步的結果(角色能向上移動再向下移動),接著再引導學生開發更多,如讓角色有重力的感覺。
Developing a little bit, then trying it out, then developing more.
Testing and debugging(測試和除錯):
當程式執行時,出現問題或是沒按照預想中的執行,試著發現和解決它,可以依循著以下的步驟。
Making sure things work — and finding and solving problems when they arise.
發現問題
閱讀並了解所有指令的意思
實驗看看
嘗試寫出正確的指令
找到正確的答案
Reusing and remixing(重用和混合):
在已有的專案中進行加強或是加入更多的想法,我們可以在Scratch的網頁上找到許多有創意的專案,這可以幫助學生發想,引用他人的專案再加入自己的點子,改造成一個新的專案。
Making something by building on existing projects or ideas.

Abstracting and modularizing(抽象化和模組化):
將大的區塊,切開成多個小的模組,模組化讓他人方便閱讀與理解,在測試除錯上也更好管理。如下範例,第一個模組設定時間由60秒倒數,第二個模組設定分數,第三個模組則是設定造型的改變。
Exploring connections between the whole and the parts.

程式設計觀點 Perspectives
學習此套課程後,我們希望學生在表達、溝通以及提問上有更顯著的進步。透過學習Scratch,更為了解自己、增進團隊合作的能力。
Expressing(表達):
生活中有越來越多能夠具體發揮創意及想像力的工具,例如修圖軟體 Photoshop,可以將照片中的人物修得美美的,再加上創意文字,讓圖片更加吸引人。
透過學習Scratch,讓學生了解到電腦是創造的媒介,能利用電腦表達出自己的想法。
Realizing that computation is a medium of creation, "I can create."
Connecting(溝通):
子曰:「三人行,必有我師焉」,讓學生透過與團體的溝通互動,多多學習他人的優點,汲取他人的意見,有助於創造出更棒的作品。
Recognizing the power of creating with and for others, "I can do different things when I have access to others."
Questioning(提問):
更能精準、明確的提出問題,幫助個人或團隊快速鎖定目標並解決問題。
Feeling empowered to ask questions about the world, "I can (use computation to) ask questions to make sense of (computational things in) the world."
Reference: