Adrian 在小學時期對程式設計沒有任何興趣,即使他的父親是資訊領域的佼佼者,也曾試著教他程式,但他覺得寫程式是很無聊的事。因此在小學時期,和多數的孩子一樣,Adrian 只是「電玩遊戲」的愛用者。
Adrian 在其他才藝上表現傑出。他曾參加公視節目「加油!小廚師」,製做料理時表現出沈穩與精緻度,得到了冠軍。他也在新唐人亞太電視台舉辦的「兒少盃鋼琴大賽」全國賽得到第二名。
在升國中一年級的暑假有了學習 Scratch 的機會。他父親在上課前直覺的反應是:「他應該不會喜歡的!」
這是我們第一次以 ScratchEd 的課程來嘗試教學。這個教學以創意為出發點,不給孩子限制與框架,並且藉由好玩的活動來啟發孩子對程式的觀念。所以和班上多數孩子的一樣,Adrian 也創作了自己的程式,開啟了他對程式的熱情。
第一個進行的專案是「自我介紹」。Adrian 回憶,當初他被 Scratch 吸引的原因是,「角色可以飛來飛去,超酷的!」他花了兩天,為這個專案設計動畫,打籃球、彈吉他,腳還會打拍子,也在專案中放進了自己喜歡的音樂做襯底音樂。
Adrian的第一個程式—— 自我介紹。
之後每個星期的課程,更讓他愛上寫程式。他也在 Scratch 網站上探索有趣的專案,他形容:「雖然剛開始時,不曉得別人的程式是如何寫的,但是試著改變程式裡的數字,發現角色亂飛或變得很奇怪,都覺得非常好玩。」「每次上課分享作業時,很享受那種炫耀的感覺。所以,每次都會花上更多時間來寫程式。」
期末作品。這是一個模仿「馬力歐」的遊戲。
在學完 Scratch 之後,Adrian 開始學習 Udacity 的電腦入門課 CS101:「Introduction to Computer Science:Building a Search Engine」,由美國維吉尼亞大學的 Dave Evans 教授主講,他曾獲得維吉尼亞州大學教師的最高榮譽。課程內容包括電腦硬體、軟體、以及網路的運作方式。其中軟體的部分,以製作搜尋引擎為目標,使用Python程式語言作教學,帶領學生進入程式設計的殿堂。
這個課程有別於一般的課程,甚至與其他 MOOCs 的進行方式也很不一樣。課程分割成許多小單元,每個小單元以 1 ~ 6 分鐘的影片進行教學,中間穿插著許多的小測驗(如下圖)。
學生在瀏覽器中寫程式,「提交作業」(submit),執行結果馬上秀在右上角。如果答對了(Correct),進度表上的白點就會變成深藍色,學生可以自行檢視上課進度。遇到不會做的習題怎麼辦呢?只要點選「繼續回答」(Continue to Answer),老師會在影片中做詳細的解說。因為是線上課程,所以學生可以反覆點閱影片自我學習,適合學生在任何時間上網自學。
這樣的學習方式對 Adrian 來說真是太好玩了,就像玩闖關遊戲,當進度表的藍線向右不斷地增長,一個一個的白點變成藍點,是充滿動力與成就感的。萬一遇到問題,每週還能透過 Skype 與小組討論,很快地,大約三個月 Adrian 就拿到了第一張 Udacity 的證書。
Udacity CS101 證書
在這期間,Adrian 對程式充滿了狂熱。白天要去學校上學,所以早上五點起來學程式,甚至養成了早睡早起的習慣。因為在這之前,上學可是常遲到的!
Udacity 是以英文教學,為了讓學生在學習初期降低來自英文的壓力,所以筆者為 CS101 翻譯了中文字幕。Adrian 回顧這個學習過程:「當我看到比較有趣的內容,我會多看幾次。第一次會先看中文字幕,第二次看英文字幕,第三次再把字幕拿掉,聽老師用英文講解。」
就這樣,Adrian 逐步地克服了英文,英文能力不斷地進步,讓他在後續的課程中可以直接以英文來學習。
Udacity 的課程強調實作,即使是理論課程,也是透過寫程式來確認學習成效。雖然我們給了 Adrian 一些學習的方向,但在 Udacity,他探索到許多吸引他的課程,所以在短短第一年三個月內又收集到這些課程的證書:
- Web Development: How to Build a Blog (2013/4/2)
- Programming Languages: Building a Web Browser (2013/7/17)
- HTML5 Game Development: Building High Performance Web Applications (2013/8/1)
- Interactive 3D Graphics: Creating Virtual Worlds (2013/8/17)
- Artificial Intelligence for Robotics: Programming A Robotic Car (2013/9/24)
- Design of Computer Programs: Programming Principles (2014/4/11)
了解資訊領域的讀者可能會感到訝異,一個國二的孩子竟然有這個能力完成這些課;有些課程甚至到了資訊系大學三年級的程度。
Adrian 國三時選擇了自學,有更多的時間投入程式設計領域。他已經會寫這些語言:Python、JavaScript、CoffeeScript與R。也積極的參與社群:Taipei.py、Taipei Javascript Enthusiasts、PyData、Taiwan R User Group / MLDM Monday、和 Meteor Taipei。也與社群中的朋友一同創業。
Adrian 在 2015 的 PyCon APAC/Taiwan 會議中,還以英文主講「The Implementation of Rubik's Cube Formula in PyCuber」,以 Python 語言自動解魔術方塊,JavaScript 來做動態顯示。
Adrian 現在高一自學,寫程式累了就彈鋼琴,完全沈浸在程式與音樂的樂趣中。目前也是我們「摳頂俱樂部」的大將,負責引領學弟妹的程式學習呢!