第一式:必殺-剪刀石頭布

日本動漫獵人的小男主角之一:小傑,在思考要如何練成個人獨特的必殺技時,在比吉司的教導下,利用剪刀、石頭和布的手型,來發動個人專屬的攻擊必殺技。這和運算思維有什麼關係呢!別急別急。

不知道你是否曾和一、二歲的小小朋友玩過剪刀石頭布的遊戲,這些第一次接觸的小小朋友通常會看著你的手勢,做出和你一樣的動作,我最喜歡出剪刀,因為可以看著他很努力的想要控制每個手指,捏了老半天才做出剪刀這個動作!等到再大一點,學會了手勢動作之後,再接著學習贏或輸的規則!等到再大一點,他開始會思考出拳的時間和出什麼拳!這個那個,這和運算思維有什麼關係啊!

其實,這就是運算思維最最底層的核心,預測與邏輯判斷!

沒學過程式語言沒關係,先看一下底下的python3程式碼!

a = input('請輸入一個數字:')
b = 10
if a < b:
    print('輸入的數字小於10')
else:
    print('數入的數字大於或等於10')

程式執行時,我們請使用者輸入任何一個數字,然後判斷(if a < b)是不是對的,如果是對的就顯示小於10,如果是錯的(else)就顯示大於或等於10。這就是預測與邏輯判斷。

雖然你看到的是一個短到不行而且好像沒什麼用的程式碼,但是這觀念確是所有程式設計的最底層核心,也是運算思維最重要的一環。

回應最前面的剪刀石頭布的例子,預測和邏輯並非天生具有,而是必須要有足夠的『知識』,而這些知識套句教育術語,就是所謂的起點行為,這也是Bloom的認知領域六層結構中的最底層:記憶。再舉一個簡單的例子,在作文教學上,我們常指導學生大量閱讀、字詞練習、佳句模寫等等,最主要的目的就是讓學童能夠擁有大量的詞彙與佳句,然後才能把所知所見所聞所感,用這些『記憶知識』表達出來!如果沒有經過這些訓練,小朋友寫作文時,面對著作文簿半天擠不出幾個字,這除了是小朋友不知道寫什麼之外,更重要的是不知道怎麼寫(表達)。

這種預測與邏輯的訓練,不一定要利用程式語言或是電腦也可以進行教學。事實上,數學本身就是最好最棒的預測與邏輯訓練。相信大家都知道,新的資訊教育藍圖裡,國小是不單獨設科的,也就是說,在國小階段,並沒有程式設計甚至是傳統的電腦課(當然學校可以利用彈性時間來進行),但是從我的學習經驗中發現,要學好運算思維與程式設計,是需要大量且長時間的思維訓練方得以畢竟其功,那怎麼辦呢?偷偷的把國、英、數、社、自等課程減少時數來上程式設計?喔!不!千萬不要這樣做!這有二個非常重要的理由:

其一:每個人的資質不同,不是每個小朋友都適合進行這種抽象的程式訓練,如果他沒有興趣或學起來痛苦,就不要強迫他學吧!教育的本質是啟發與引導,而不是用大人對未來的思維,然後強加到這些幼苗上。

其二:這裡要再次強調強調再強調基礎知識的重要,就以數學為例,一位加減乘除都不會的小朋友,別期望他會用電腦來設計程式;不知道月形變化的學生是無法設計出依月形自動判斷日期的程式!基礎知識不管是運算思維或是程式設計或是其它更多更複雜的學習,就像是大地一樣,支撐著未來可能的所有一切!

因此,要教運算思維並進而引導至程式設計的最佳方法,就是在不影響現有的課程與進度之前提下,將部份課程略為修改並融入其中,這樣的作法是當課程教完之後,原有學生應該學到的知識可以習得,同時也習得運算思維與程式設計的能力!

接下來讓我們來看看,要讓學生學會預測與邏輯判斷的可能與可行實例!

可能的教學實例之一(以小一數學為例):

爸爸有一個箱子叫做A,裡面有6個蘋果,拿走了3個,裡面還有幾個?

說明:

  1. 一般題目是長成這樣的『爸爸有6個蘋果,拿走3個還有幾個?』為什麼我們要增加『有一個箱子叫做A』,這是因為在程式設計裡有一個絕對重要的基礎:指定敘述,讓小朋友能在無意中學會是最重要的一件事。
  2. 老師在黑板上寫 A=6,但是在書寫時要說箱子A『裡面有』6個蘋果,為什麼我們不說『等於』,一方面太小的小朋友可能還無法建立這個等於的抽象概念,更重要的是,在程式設計裡,A=6其實是一個指定敘述,『=』符號其實不是等於。
  3. 在黑板上列出程式語法,箱子A=6, 算出A-3的答案。
  4. 將這個概念融入在日常的數學教學中,未來學生可以很輕易的轉化為標準的程式語法
  5. 在時間許可下,可以帶學生到電腦教室,利用Python或是Scratch來進行程式教學,切記初期不可以太強調『程式語法』,會嚇倒學生的,就算不教也無坊,但老師利用一分鐘展示是絕對必要的(不一定要到電腦教室)。
  6. 未來可以加深加廣,例如『被拿光了之後,要提醒爸爸再去買』諸如此類的判斷,事實上這就是sencer感知器的基礎訓練。
  7. 『莫以善小而不為』,或許對程式高手而言這不值一提,但是對於國中小的日常基礎訓練,讓學生在有意無意間學會這個基礎才是最重要的。這只是一個最小的例子,如果教學者能掌握這個觀念,可以將許多數學轉化為程式訓練。(所以,教學者會不會程式設計是很重要的前題)

完整的python語法如下:

A=6
print(A-3)

備註:其實不用擔心學生看不懂英文,不用強迫學生背誦記憶,這會造成他們痛苦而逃避學習,在日常課程中多多展示,邊展示邊念,學生可以很快看懂並學會的。

可能的教學實例之二(方向與距離):

以幼兒的發展來說,就肢體部份有二個重要的定律:「頭足定律」(由頭至尾)及「近遠定律」(由中心到邊緣),因此二至三歲的幼兒就具有方向和距離的概念(可能還分不出上下左右),因此在預測和邏輯上的訓練,可以從方向和距離開始著手,讓幼兒學習從A點到B點的預測和邏輯訓練。

事實上,你不難發現,不管是Code.orgCodeCombatCodeMonkey海龜學院等,透過遊戲方式訓練小朋友程式概念的工具網站,都是從方向和距離著手,因為它非常的視覺化、生活化,同時可以達到訓練預測和邏輯能力。

在國小低年級認識校園的課程中,學童經由校園實地觀察來認識各場所與教室之相對位置與距離,因此,教師可以預先繪製校園平面圖,然後把它放到Scratch裡面當做背景,接下來就可以口頭出題,例如從教室要圖書館要怎麼走呢?接下來就交給學生自由的去控制那隻貓吧!(PS:同時指導學生基本的積木方向控制,讓他們具有先備能力)

可能的教學實例之三(改變計算題出題型式):

通常來說,一般的計算題都會是類似『 12 + 5 = 』這樣的出題型式,可以修改成為底下的型式:

A=12
B=5
C=A+B
C是多少?

說明:

  1. 在運算思維裡,以上述的例子中,預測C值是很重要的能力,在未來的深入訓練中(接下來的說明,如果你不會任何的程式語法,請先跳過這段),這個C值有可能是IF或是SWITCH的判斷依據,有可能是FOR或是WHILE的迴圈進入或終止點,所以透過日常生活中,讓學生能夠熟悉這種寫法
  2. 讓數值由變數取代是好程式的習慣,假設使用者可以玩三次遊戲,比較底下二種寫法:
    if times > 3:
    結束遊戲
    
play_times = 3
if times > play_times:
  結束遊戲

或許你會覺得,有差嗎?是的,有差,設計程式時盡量避免使用固定數值的原因是,假如未來要修改為4次,或是在遊戲過程中,打怪的成績很好,可以再多玩一次,也就是說固定寫3,就等於把程式寫死了,沒有彈性與擴充性,改用常數或變數,會讓程式有更多的彈性與維護性。

當然這些說明,只是讓你預先了解預測和邏輯的重要,而不是要馬上教給學生,這些觀念還是等學生基礎功札實了,而且有些實戰演練之後才來進行,甚至到國中再教也不遲,但是讓學生能從每天改變的題型中,慢慢的習慣這種寫法與預測思維卻是很重要的基礎訓練。

任何偉大的程式,都是從一行程式開始

別認為預測和邏輯訓練很簡單,它是所有運算思維及程式設計的基礎,把它融入到日常的課程中而不須獨立出來,讓學生能夠在一般的課程中,日復一日年復一年的反覆訓練(無形中無意中),才能讓學生能夠『直覺的反應』,這樣才能具備將問題程式化的能力。