這陣子玩EV3機器人、Scratch、Arduino等題材,一方面是基於個人興趣,另一方面則是特意選擇圖形化語言作為工具,以實際瞭解這陣子以來,從小就學程式設計的推廣者,拼命鼓吹的這類工具,是否真的神奇,能為那些有潛在天份的孩子們,打開程式設計之路的大門,而且,對身在程式設計領域的我來說,認真使用這些工具,又會有什麼樣的想法。

啟蒙程式設計的Scratch

只要談到從小學程式設計,Scratch是幾乎都會提到的工具,大概也都會再提到Mitch Resnick在TED的〈Let's teach kids to code〉演講,Scratch名稱來自英文「Start from scratch」,也就是從頭開始、從無開始的意思,這意謂著Scratch的定位,是給完全沒有程式基礎的孩子使用,採用積木圖像式的語言,是它最大的特色!

從我的使用經驗來看,使用圖形式語言會上癮,因為不會出現語法錯誤的問題,拖拖、拉拉,就可以組裝好想要的程式邏輯,如此就可專心在程式邏輯的構築上,有時我想使用文字式程式語言來做相同事時,反而覺得有點麻煩了。

當然,真要從程式設計的眼光來看,Scratch少了許多元素,也有許多限制,然而有時這些限制會引發不同設計,我先前專欄〈透過視覺化語言傳達設計概念〉就有些相關討論。

不過對於圖形化語言,或許好就好在,它少了真正程式設計時必要的元素,只留下孩子可接受的東西,看過有些推廣程式設計的教師,其目標之一,就是在國小時能在不接觸到C語言下,讓孩子們接觸程式設計,在PyCon APAC 2015上,出現了一位國中三年級的講者,他也談到小六升國一時接觸程式設計,是使用Scratch,並說到:「如果當時是學C的話,我現在可能會走上音樂路」。

我實際讓家中女兒(當時六歲)玩過Scratch,正確來說,是ScratchJr。Jr是指Junior,顧名思義,就是給更年幼的孩子,在平板上玩Scartch,ScratchJr可用的設計元素更少,直接使用觸碰方式來組裝程式,我除了第一次打開時,告訴她幾個積木可以幹嘛之外,後續並沒特意教她什麼,完全任由她去搞破壞,過了一些日子,我看看她做出來的東西,基本上只能用「會動會發出聲音的塗鴨」來形容,或者是說,展現了小孩天馬行空的想法。

不過,她大概知道了「程式設計」這四個字代表什麼意義,除了會開口問:「我可以玩貓咪嗎?」之外,也知道我的工作就是「程式設計」,也就是知道「程式可以用來控制電腦」,不過,也許是除了作些會動、會發出聲音的塗鴨之外,她沒有太多控制電腦的理由,相較之下,她更熱衷於在紙上塗鴨,或者是研究彩虹圈編織,去控制些實體世界中的東西。

控制實體的EV3、S4A、S2A、mBlock

想讓孩子控制實體世界的話,其實也有不少選擇,例如EV3是樂高生產的第三代積木機器,前一代的產品則是還滿多人在玩的NXT。

這些實體積木組裝之後,可以使用圖形化程式加以控制,我在完全基於自己想玩的心態下,敗了兩套EV3,也才實際發現這並不只是玩具。不少人拿它來開發機器人原型,也有人設計出實用性產品,像是六軸機器手臂、繪圖機,甚至是3D印表機。

EV3的圖形化程式設計使用Mindstorms,包括更多程式設計元素,在跟一個孩子解釋某些元素的作用時,會花費比較多功夫,跟一般圖形語言比較不同的地方是,它採用資料線(Data wire)方式代表資料傳遞。

從我的觀點來看,若將每個程式積木當作電路模組,資料線就像是電線了,這讓資料傳遞比Scratch的參數方式更直覺一些,不過缺點是資料傳遞過多時,一堆資料線就會顯得紊亂。EV3與Scratch都可以自訂程式積木,不過,Scratch自訂的程式積木,無法匯出給其他程式共用,EV3的倒是可以,使用上會比較方便些。

另一個例子,是基於Scratch的S4A、S2A或mBlock(原名ScratchBot),近來被推廣的力道也越來越大。

S4A是Scratch for Arduino,是基於Scratch 1.4,可用來控制Arduino及其連接的相關感應器,S2A則是指Scratch to Arduino,基於Scratch 2.0,mBlock也是基於Scratch 2.0,比較特別的是,它可以將程式轉換為Arduino IDE使用的Sketch,直接上傳至Arduino板子,也可直接開啟Arduino IDE修改程式。我喜歡這個功能,因為可藉此讓使用者瞭解到,對應的Sketch大概是如何撰寫。

談到了控制實體,除了知道怎麼用EV3、S4A、S2A、mBlock這些東西之外,還得對想控制的實體有更多認識。

以EV3本身來說,積木組裝絕對是門學問,要讓積木能正確作動,有時跟程式的關係並不大,反而要理解許多機器作動的原理,就算只是讓簡單小車能正確轉動90度,也得用些數學,而不是只是靠程式。

我認為這是最重要的部份,這能讓孩子們成長過程中將學到的知識活用,而不只是作大量相似的練習(作測驗卷),就算是我,也因為這樣,而重新複習了不少過去學校裡教過的東西。

家裡女兒的反應呢?看到積木會去玩是孩子的天性,至於太複雜的數學或程式,我會包裝成左轉或右轉這類的自訂程式方塊,這樣她就能用ScratchJr中學到的方式來玩。

比較有趣的是,我透過Scratch結合Arduino時,她看我插電路板久了,竟然也要求玩玩看,我靈機一動,拿了個七段顯示器,接好電源與共陰腳位,就叫她隨便接線,看看哪個燈會亮,然後她就自己高興地拿起電線,從0到8每個數字都點亮一遍,接著要求我接上另一顆七段顯示器,玩起兩個位數顯示來了。

不只小小程式設計師適用

Linus Torvalds從小就跟在祖父身邊玩電腦,翻開《黑客列傳》,不少黑客都是從小就開始接觸電腦,當年必須是環境允許,這些黑客們才有從小接觸電腦的機會,而現在電腦普及,小孩子有更多能接觸電腦的機會,若能從小培養出程式設計能力,這孩子的未來是不是有很多的期待呢?我並沒有對有這樣的期待,對她來說,好玩才是最重要的!

程式設計並不是一門才藝課,自己實際接觸這類工具時,著實體會到的,並不是培養程式設計能力的重要性。就我從女兒身上看到的,是她透過模仿,接觸與瞭解到我在做些什麼事;而就我本身而言,這類工具反而令我有機會跳出程式設計的世界,發現還有哪些工具能解決身邊的問題,而過去學到的哪些知識,其實是能夠應用得上的。

能瞭解這點,工具簡單與否,對孩子或任何人來說,都不會是問題。畢竟Linus Torvalds等黑客們,當年可沒有Scratch等簡單好上手的工具,但這並不妨礙他們,反而令他們以克服工具難以使用為樂!

如果想瞭解這一切是如何發生的,最好的方式是,無論你現在對程式設計有多瞭解,也一起認真地來接觸這類所謂小小程式設計師適用的工具,親手用它們做些東西,這會更能清楚判斷知道從小學程式設計這類口號正確與否,進一步地,也能接觸到更多東西,從而體會到科學、科技、工程、藝術、數學的重要性。

就我本身來說,這段日子的接觸以來,體會到數學的重要性,以及試著重拾電子電路的知識,之前專欄中多少都談過一些了。而一向對手機程式不感興趣的我,因為透過mBlock接觸了Arduino,這陣子也開始動手寫些Android手機程式了,不過,並不是用最熟悉的Java寫,反倒是研究起圖形化語言的App Inventor來了。

這不是小小程式設計師在用的嗎?我現在並不這麼覺得了!或許也能夠帶給我更多不同事物的接觸與想法!

專欄作者

熱門新聞

Advertisement