筆者從事資訊服務業,小時候初嚐程式設計,單純出於好奇和興趣,那時候我國小五年級,時間是1991年,時光回到2017年的此刻,筆者已是家有兩名男娃兒的父親,大兒子六歲半,幾個禮拜前剛上小一,小兒子快滿五歲,就讀幼稚園中班。
筆者對於政府想在國中小學階段導入程式設計教育,感到非常欣慰與緊張。欣慰的是,軟體揚眉吐氣獲得了鎂光燈注目,緊張的是擔心降低學習年齡可能揠苗助長。
程式終究是為了解決某個問題,若要教學,初期應該著重在邏輯訓練、興趣啟發與創意思考的培養,否則容易跟數學等升學科目一樣,輕則流於背誦公式,重則提早把兒童對於程式的興趣消磨殆盡。
因此,如何讓寫程式變得跟繪畫或組合積木一樣創意又有趣?如何使用一支畫筆或一塊積木般平易又實惠的程式設計教具?將會是培養兒童寫程式興趣的關鍵。從陪伴孩子在家自行設計玩具開始吧!逐步融入程式的基本元素,強化解決問題的邏輯能力。
如何設計平易又實惠的程式設計教具?
兒子們某天跟我要了日曆紙,在背面空白處畫了火箭及發射台的設計圖,以大兒子小一、小兒子中班的小孩來說,他們最關心的是玩具新不新奇。
當他們說要在中秋節烤肉的夜晚發射火箭的時候(我小時候只有玩過沖天炮,不過這就是兒童的創意,雖然天馬行空,但是趣味橫生),我們便著手利用三個關卡來進行這個專案:規劃→實作→查核。必要時,稍微修改一下,從頭再來一遍。
在第一個關卡的規劃階段,請孩子們花一週的時間畫好設計圖(線條雖然歪歪斜斜的,但是請他們說明,藉機訓練表達能力),並且討論可行性,要做出把福衛五號衛星送上外太空的那種火箭,當然不可能,於是修改設計,變成比較安全沒有火花的水火箭,並且創意加碼能彈出降落傘的裝置。
從程式設計的觀點來看,水量是變數,多則火箭飛得高,少則火箭飛得低;彈出降落傘的功能是函式,動作包括先射出、再開傘;條件是判斷火箭是否已經飛抵至高點;假使有一群小朋友排隊輪流玩,那麼火箭發射了三次或五次,則是一種迴圈概念。
設計原理探秘
所謂訓練邏輯,其實就是訓練如何解決問題,因為在解決問題的過程當中,需要經歷分析、判斷與歸納等步驟,很常聽人家說起,學習程式設計是為了訓練邏輯,因為寫程式就是這樣的分析過程,而程式本身就是由這些判斷元素組合而成的。
舉例而言,小明在上學的途中,發現前方有一隻兇狠的野狗,小明可以選擇繞路或跟野狗正面交鋒。這時候小明遭遇的問題就是「如何安然到校上課?」,而繞路也許會多花兩分鐘,但是在這個情境當中,卻不失為一個好的解決方案。然而如果小明選擇的是與野狗正面交鋒,結果卻被咬了一大口,那麼很可能就是因為邏輯思考不夠周密所導致的。
如果把問題換成放學回家途中遇到了某個東西,這個東西可以是野狗、小貓或兔子,是可替換的,在程式的概念當中,這個叫做變數(Variable )。如果(If)遇到的是野狗,那麼(Then)就爬樹;如果遇到小貓,那麼就繼續走;如果遇到兔子,那麼就摸摸牠的毛。
有三種可能性,對應到三種作法,這個叫做條件( Condition)判斷式。以遇到野狗為例,爬樹的動作是先腳蹬再手抱,但是為了爬得夠高,所以重複腳蹬手抱的動作五次,這個叫做迴圈(Loop )。而重複的動作基本上每次都是一樣的,假使把動作獨立出來成為一個功能,每次需要的時候再拿來呼叫套用,就叫做函式(Function)或者方法(Method)。
假使換了一個題目,有沒有辦法透過變數、條件判斷式、迴圈、函式等程式基本元素來製作出能夠解決問題的程式呢?這一連串分析問題、思考解決方案的過程,本身就是非常好的邏輯訓練。
今年的中秋節烤肉之夜,真令人期待呀!話說回來,以今年106年度入學的小一新生為例,他們都是數位原生族群,打從懷孕那天起,他們的父母大部分就都持有智慧型手機和平板了。所以軟體的核心,也就是程式,早已無所不在於他們的生命當中。
《數位時代》長期徵稿,針對時事科技議題,需要您的獨特觀點,歡迎各類專業人士來稿一起交流。投稿請寄edit@bnext.com.tw,文長至少800字,請附上個人100字內簡介,文章若採用將經編輯潤飾,如需改標會與您討論。
(觀點文章呈現多元意見,不代表《數位時代》的立場。)