自從美國國家科學基金會(NSF)在 2016 年開始推廣跨領域科學教育後,STEM 學習就變成一個很熱門的名詞。STEM 四個字母分別代表了科學(Science)、技術(Technology)、工程(Engineering)和數學(Mathematics)。現代個人電腦和手機如此普及,隨著時代潮流「程式教育」好像逐漸變成一個「外文學習」一樣的熱門名詞。

Apple 在 2016 年推出的《Swift Playgrounds》就是一款充滿教育意義的「寫程式遊戲」。遊戲中有個可愛的生物,玩家必須透過簡單的程式編寫方法來解開謎題,引導這個可愛的生物往目標前進。

run_my_code_large

因為這種解謎類型的遊戲通常都是目標導向,往往玩家們學到的是解決某些固定的問題。例如「走兩步、向右轉、重複四次」這樣的指令來達到目標,雖然能夠讓玩家理解一些基本的程式邏輯(例如 If, loop, fuction, paramter 等)、也讓玩家體會了「寫程式」的過程,但往往因為太目標導向,反而限制了玩家的想像力發揮空間。如果用畫圖來比喻,就像是美術老師教我們畫一顆蘋果,教會我們光影、色彩、比例,然後要求讓我們用同樣的方法畫出一顆一樣的蘋果。雖然學到了技巧,卻限制了想像力。

麻省理工學院媒體實驗室教授 Mitch Resnick 在他的著作《Lifelong Kindergarten》中提到,覺得學習寫程式是一種表達,並能夠提供一種「創意學習體驗(Creative Learning Experience)。他與媒體實驗室所開發出來的 Scratch 程式語言更貼近他的想法,就像樂高(Lego)積木一樣,學習者能夠在玩 Scratch 的過程中體會到「創意學習」的幾個重要階段:想像、創造、玩、分享、反饋。在收到反饋之後,學習者會再次想像要如何修正我們所打造出來的東西,並重新想像新的版本,如螺旋般往上提升。

Scratch_3.0_Prototype

Resnick 在 2012 的 Ted 演講裡提到:「一個 13 歲的男孩用我們的 Scratch 去創作一個大魚吃掉小魚的遊戲,他希望計分 … (中略) … 但他不懂得怎樣做,所以我向他示範可以怎樣做,在Scratch 裏面, 你可以建立一個物件叫做「變量」 我將它取名為「分數」 … (中略)… 當他看到這裡,他非常地興奮他向我伸出手,不斷地說: 『謝謝,謝謝,謝謝』」

同時,Resnick 也在《Lifelong Kindergarten》中比喻了「Playground(遊樂場)」與「Playpen(作者案:我找不到適當的中文翻譯,意思是供幼兒在內玩耍的遊戲圍欄,有點像大型的嬰兒床)」的概念。許多設計師在設計提供給玩家學習程式語言的遊戲時,採用的是 Playpen 的概念,提供一個圍欄和目標,讓玩家們只能在裡面按照遊戲規則玩耍。以樂高來比喻,就好像我們買了一個「太空船樂高組合」,然後按照說明書指示,一步一步地建造出包裝封面的太空船。而 Scratch 所提倡的 Playground 概念,更像是我們把一堆樂高零件按照我自己的想像力,打造出我們小時候才能想像出的宇宙交通工具。

Playground 與 Playpen 的概念並不是互斥的,他們相輔相成。我們有時候需要 Playpen 來協助我們建構知識體驗;有時候需要 Playground 來激發我們的想像力,讓我們透過程式語言、文字、繪畫或其他任何媒材來表達自我。

最近由開發商 Kunpo 所推出的遊戲《[Exception]》是一款非常有趣的產品。《[Exception]》的故事主角是一個程式設計師,在他負責的世界裡,有幾個小程式出了一例外狀況(Exception,程式專業用語),而玩家的任務則是要協助這些小程式慢慢闖關。

yichanghome

玩家在遊戲中所擁有的程式撰寫界面,幾乎和 MIT 創造 Scratch 時所使用的程式語言更相近,模塊的組合方式更貼近一般人的理解,也更像是樂高一般可以自己排列組來達到各種可能性。

643x0w

與《Swift Playgrounds》不同的是,雖然《[Exception]》的過關目標明確(通常是打倒某個敵人、或前往指定地點),但方法卻千變萬化。你可以透過自己的想法和排列組來完成任務。比起《Swift Playgrounds》,我覺得《[Exception]》在遊戲的過程中,更有讓玩家發揮創意與想像力的空間,也有更難的挑戰。

當然,也許《[Exception]》不是完美的作品,早期的教學數量少導致遊戲難度有點高,所以有點讓人剛開始進行遊戲時感到挫折。也許如同樂高一般,剛開始提供一些說明書,再附上幾個不同的組合方法(樂高玩具的盒背總是有著幾個組合變體讓你嘗試),應該可以大幅減輕上手難度。

儘管市面上雖然已經有許多「程式教育」相關的遊戲與軟體,但目前只有少數幾個產品能夠突破既定框架:「除了教會我們技巧,也教會我們發揮想像力的方法。」我想,也許程式教育就跟語言教育一樣,將會成為一個基礎教育者所面臨的挑戰。「如何把他們變得有趣?」會是一個非常值得我們深度思考的問題。


References:
[1] Let’s teach kids to code, Mitch Resnick, TED2012
[2] Lifelong Kindergarten, Mitch Resnick, 2017
[3] Swift Playgrounds, Apple, 2016
[4] [Exception], Kunpo, 2018
[5] Scratch, MIT