Nemo 的 三門編程語言之旅
1. LEGO
Nemo他爹幼年時曾經得到過一套積木,那年頭有個帶包裝的玩具可不容易,自然是很喜歡的,但是天資有限,怎麼也搭不出什麼好玩的來,後來也就扔一邊了。同樣遭遇的還有魔方,沒人教也沒有資料,完全不知道怎麼搞,死活也就能拼出一個面了,後來,一怒拆成散件了……
Nemo 有了積木之後,非常高興的讓我不停的搭東西給他玩,這可苦嘍。所以很早就給 Nemo 報了樂高教育的課程,有人帶著玩,還省得一套一套的買了。
得寶、科技(9686)、WeDo、NXT、EV3 一路玩過來。WeDo、NXT 和 EV3 帶有圖形化的編程環境,實質上是畫流程圖,驅動感測器、馬達機等已經做成非常簡單的程序塊,拖進去點幾下滑鼠就行,這樣讓機器人完成一些簡單的任務非常直觀。
(WeDo)EV3 基於 LabView 的圖形編程系統其實是具有完整表達能力的,不過實際用下來,複雜到一定程度之後,就很難用了。比如下面這個顏色篩選器,
LEGO 課程不是單純的編程,以玩為主,自然而然地動手動腦還得運用想像力,設計得非常好。不過要循序漸進的玩過來,Nemo 的 LEGO 學習經歷從大顆粒的結構和造型入手,頭開得不錯;中間平面拼圖形部分不知道是課程設計的問題還是老師不夠有趣,孩子們普遍不喜歡,上了兩次就跳過了,動力機械和WeDo部分上得略有點早,其實應該接一段故事啟發套裝課程,這樣做的東西就能活起來,更有趣味,做的東西也能更充分的玩一玩,略遺憾。幸運的時,後來趕上 StoryGames 比賽,好歹補上了一點:
編程課程就上得太早了,小學高年級再學這個會輕鬆很多,也更容易領略到編程的樂趣,不過也因為這個,小傢伙多玩到了 NXT,現在再學的話都是 EV3 了。儘管 J. PAUL GIBSON 表示 5 歲的孩子就能理解演算法和計算的概念了(Forget Foreign Languages and Music. Teach Our Kids to Code),我早些年也試過在給 Nemo 整理卡片時給他講堆排序確實能接受,但是這跟完整的進行編程意義建構,進而能形式化的用程序解決問題,是兩回事兒。
從編程的角度看,LEGO 優勢在於真實,孩子們可以把想像搭建出來,並按自己的想法控制它,這能帶來巨大的成就感。缺點則是過於真實,一定程度上掩蓋了編程的抽像本質,就我在兩個樂高活動中心看到的情況,低年齡段孩子很少由此對編程很上心的,大家還是對搭東西更來上心。到高年級再開始學 LEGO 編程的話,入境的可能性會更大一些。
LEGO 的另一個優勢是,有很多競賽活動,孩子真熱愛的話,有很多機會參加國際比賽。
2. LOGO
由於我生活習慣不好,經常熬夜,成了程序員的壞榜樣,家人禁止我教小傢伙編程。沒成想三年級的時候,人自己混進了少年宮的 LOGO 班,每周六上午跑去學2小時。
LOGO 是專門為孩子學習編程而設計的,興趣班用教材是基於 PC-LOGO 的,算是比較古老的版本,為了在家用起來,很是折騰 (見:一場 PC-LOGO 引發的穿越之旅 - 父母心 - 知乎專欄)。LOGO 是用指令控制一個圖龜在屏幕上移動、作圖的系統,以前沒認真學總覺得是太玩具了,這回才發現其語言能力是完整的,變數、條件語句、子程序、遞歸一應俱全。
Nemo 學了這個課程之後,熱情很高,下課回來就趕緊寫作業趕緊交。頭幾次課回來,除了作業,還試著自己做了不少練習。我感覺大部分孩子都喜歡塗鴉,LOGO 提供了比較簡單的繪圖原語,讓孩子們可以拿它在屏幕盡情塗抹,這個切入點選得真是妙。
LOGO 兼顧了趣味性和抽象度,唯一的缺點就是需要的平面幾何知識有點多,小學階段都還沒怎麼學過呢。實際教學裡,老師會把一些轉動角度之類的關鍵數據直接給出來,這樣倒也能順利進行下去,換個角度看,也算是潛移默化地體驗了一下幾何之美了。
LOGO 也有一些競賽活動,比如上海市「六·一」小學生計算機創新活動,建議積極向學校、少年宮的興趣班靠攏。
LOGO 也可以用教學機器人,可以輸入程序,控制行走轉向等,幾年前聽過一次用 LOGO 機器人的課,演示的老師課堂掌控能力很強效果不錯,但授課人多機少畢竟不如直接電腦一人一機實在。孩子在學 LOGO 的話,搞一個放家裡還是不錯的。
3. Scratch
Scratch 比較新,是 MIT 專門為兒童學習編程設計開發的。國內 2012 年以後逐漸普及,Nemo 是這個學期中間在學校的信息課上接觸到的。
Scratch 針對的是 8 歲以上學生,操作上有一點小複雜。孩子們要用媒體元素和程序腳本編寫一個舞台劇,編程採用模塊化的圖形組件。Nemo 非常喜歡這個舞台,一有空就打開 Scratch 開始塗抹編寫。
Scratch 採用圖形化的編程語言,但表達方式跟流程圖或者說一般程序語言編程時語句排列的方式更接近,編寫複雜一點的程序時,比 LEGO 的要方便,比 LOGO 的文字形式要更形象一點。
就是 Scratch 離線版的界面文字顯示得太丑了,完全沒做抗鋸齒字體還小,還不如20多年前的 PC-LOGO 看著舒服。
這審美也是沒誰了……
Scratch 的國際社區非常活躍,國內活動也越來越多。另外 Scratch 2.0 可以連接 LEGO WeDo 及一些專門為 Scratch 開發的硬體設備,也有第三方開發者做了輔助程序讓它可以控制 MindStorm EV3。
MIT 在與 Google 聯手開發 Scratch 3.0,本來期望還蠻高的,但是今年 Google I/O 上演示了的 Scratch Blocks 怎麼看怎麼像是山寨 LEGO 的嘛。機器人連接這塊倒是進展很不錯,Google I/O 2016 製作能看會說機器人講座演示用的硬體 Dexter GoPiGo,基於樹莓派打造的,能夠連接 LEGO 部件,並且可以用 Scratch 編程。
上圖硬紙板盒裡的 GoPiGo 會說出看到的物體,識別在雲端完成,演示代碼是用 Python 寫的。不過 Scratch 2.0 的 Extension 機制加個對應的組件並不麻煩。可見 Scratch 是眼下最火熱的青少年程序學習環境,發展前景也很樂觀。
作為一個已經寫了 20 多年程序的職業程序員,我感覺 Nemo 學過這三門語言里,單純說學編程的話,還是 LOGO 最好。Scratch 有點花哨過頭的感覺,LEGO 那邊編程只是整個樂趣的一小部分。
Nemo 還在上幼兒園的時候,我就想過怎麼教他寫程序。想來想去,還是覺得要選 JavaScript,參照 LOGO 的玩法,在瀏覽器里做一個互動式的環境,用語句操控預置的圖形對象,有了編程的概念之後,再擴展一點 HTML/CSS 的入門知識,就可以做網站了嘛,好玩又實用。 可惜在家裡被禁止了,也就只是想想……
推薦閱讀:
※用 Python 將歌單里的歌詞保存成圖片
※給編程初學者的幾點建議
※【新手向】從零開始配置Windows下Rust開發環境圖解
※學編程入門看什麼書好?
※零基礎學習OpenCL,有哪些好的建議?