黃佑仁:前資訊奧林匹亞選手的程式教育心法

黃佑仁過去是國際資訊奧林匹亞台灣種子選手、推薦進入臺灣大學資訊工程學系,在體制內曾於成功高中實習期間帶了半年高一資訊課,體制外也在程式教育補習班教了五年 Scratch、指導學生參加 APCS(大學程式設計先修檢測)。除此之外,他還自己編製了一套公開的「C++ 與演算法」教材,曾經在臺北光復國小的社團課教授,讓六年級學生在兩個學期內學完。科班出身,又兼具體制內外的教學經歷,使他對於臺灣未來的程式教育,有著獨到的想法。

運算思維:用程式設計解決問題

黃佑仁觀察到一個有趣的現象:在他父母輩的年代,小孩難以接觸到電腦;在他成長的年代,小孩人手一臺電腦;到了現在,則是小孩人手一臺手機,然而當手機變得對使用者更「友善」,小孩對於操作電腦反而又變得不熟悉。與此同時,隨著程式設計產生的產品在日常生活中變得日益普遍,基礎的程式設計素養,卻似乎已成為新時代資訊教育所必須涵蓋的範疇。

黃佑仁認為,資訊領域新課綱其實相當能因應這樣的發展趨勢。他把新課綱的主軸「運算思維」界定為「用程式設計解決問題」,這樣「實作」為核心的思考,將能擺脫過去資訊教育只教「怎麼使用軟體」與「手機世代」孩童只是資訊產品消費者的現況,而能夠進一步用軟體解決問題、成為資訊產品的生產者。

這樣的理念,正與黃佑仁數年來所秉持的核心教學理念不謀而合。舉例來說,在成功高中帶資訊課的過程中,黃佑仁在學期的前三分之一教授二進位等資訊科學原理,後三分之二則結合他的「C++ 與演算法」教材開始進行 C++ 程式語言的實作,他認為這樣的教學配合即將上路的新課綱,可說是「完全沒問題」。

「只會理論不會實作,跟只會實作不會理論,我覺得都是沒有用的,所以應該擺在一起教。」他強調,理論與實作應該並重,但教學上應從實作導入理論:「在實作的過程中,自然而然會把理論學會。」不過,當老師不再統一授課,如何確保學生仍會努力學習呢?高慧君說,有別於許多學校使用的 moodle 以老師為中心、學生看不到彼此的學習情形,學生只要登入這個教學網站,便能看到其他同儕的作業繳交情形,由此形成必須追上彼此進度的同儕壓力。

在 Scratch 之後,還有哪些選擇?

那麼,透過目前推廣最普遍的 Scratch「實作」,是否足夠達成「理論與實作並重」的目標呢?黃佑仁認為,Scratch 就是一個讓初學者「初體驗」的程式學習軟體,然而想要達到較完整的學習成果,便像是「樂高蓋出大樓」,比起正規的文字語言,終究較為困難。

當然,黃佑仁清楚知道,從「會動會飛會發光」的 Scratch 直接進入文字語言,學生「一開始會嚇死」。因此,他也曾經嘗試 CodeCombat 等介於積木式語言與文字語言之間的教學軟體。不過他後來卻發現,這些教學軟體反而可能牽涉物件導向等更複雜的程式概念,對學生而言反而可能更為困難。

「現階段還是要回歸到 C++、python」,在這幾年的嘗試後,黃佑仁認為在國小階段教完 Scratch 之後,國中階段還是要進入文字語言,先從基礎開始教起。他說,這樣「雖然有點硬」,但因為沒有適當的銜接方案,也無可奈何。

至於實際上要選擇哪種語言?黃佑仁分析,目前教學上最常見的三種文字語言是 C++、javascript 與 python,其中,C++是最難的,但也可以學到最多基礎原理;javascript 則是可以明確地結合網頁應用,但相對而言邏輯較為雜亂,很多東西都要「先打馬虎帶過」;python 則也可與應用結合,但因為已經包裝好幾層,電腦原理的學習又更少。

黃佑仁建議,在教學現場中要使用何種語言,可以依照教學老師的專長來決定。舉例來說,若老師擅長數學解題、邏輯思考,可選擇 C++;老師若是物理背景,可善用 python;如果有架設網站的經驗,則可考慮 javascript。

菁英教育與普及教育的難題

待過補習班、也待過公立高中,黃佑仁觀察到,相對於補習班的學生多半較有興趣,義務教育的高中裡會有較多學生不想學、或是背景較弱勢,導致學習進度較為落後。與其他科目一樣,此處存在著提拔少數優秀人才的「菁英教育」與普及基礎知識的「普及教育」之間的潛在矛盾。

面對這樣的矛盾,黃佑仁說,在最理想的情況下,應該讓落後學生獲得補救教學,厲害的學生則依照能力與興趣分流。但以他在教學現場的經歷而言,高中班級編制每班三、四十人「還是太多」,且程式教育相當需要一對一指導,因此他只能在設定一定進度的情況下,盡量在上課時間把後段的同學帶上來。他坦言,任何科目都會有跟不上的學生,而這也不見得是非常嚴重的事情,畢竟「很多人生活到現在不會程式設計,還是活得好好的」。

至於菁英教育方面,黃佑仁則從自身的學習經歷中發現,若想要成為頂尖的程式教育人才,最後仍需要透過自學。他自己能進入國際資訊奧林匹亞,主要便是因為在成功高中加入電子計算機研究社,透過自學網站習得這樣的能力。「老師比較像是人體的 Google」,對黃佑仁來說,老師不必過度著重於「拔尖」、「教會你一切」,而只要能知道各個資源在哪邊、提供有興趣的學生粗略的指引。

最後,黃佑仁也特別提到,C++、javascript 與 python 的共通特色是都是自由軟體,它們無償使用的特性對於新課綱上路後的資訊教育而言非常重要:「如果 python 不是自由軟體,根本就沒辦法教學生,回家安裝一套不知道要多少錢」。因此,他也希望在程式教育成為主流之餘,在推廣自由軟體上,教育部還是可以繼續努力。