中學「程式語言教育」理想與現實的距離
這幾天看到新的 107 課綱出來,有些網友在討論接下來會發生什麼事情;筆者就覺得有種感慨:為什麼我們的資訊教育會弄成這樣?
確實,「資訊教育」很重要、會「寫程式」是一個很棒的技能;在此撇開 107 課綱不談,先討論我們所期望的資訊教育是什麼、是否教寫程式就算資訊教育?
不如從最根本的問題開始談起:「為什麼我們要學程式」。其實,筆者完全不懂為什麼高中要教程式。對,完全不懂。
中學生一定要學程式語言的六個原因
筆者覺得,會認為程式很重要、一定要教的,大概都脫離不了下述原因:
學生要瞭解電腦是怎麼運作的,這很重要!
你瞭解過稻米是怎麼生長的嗎?那你為什麼要吃白米?雖然「瞭解本質」是教育所追求的,但現實就是,這絕對不可能,我們沒有那麼多的資源、也沒有那麼多時間。
義務教育要給學生的,其實是每一個領域的表層。真正要學精深的東西,應該是放在大學;高中的學科,只是作為一個進入進階領域的跳板。
而進入資訊科學以外的領域,需要的絕對不是讓學生能把 TCP/IP 的過程背出來、或是會寫一個 Binary Tree ,而是會使用工具。
不教程式,難道要教應用程式?
所以,用 Markdown 寫文件、用 Latex 排版、要好強的特效就用 HTML + CSS 來寫文件,這樣就好厲害?重點是在於如何生出作品,至於用什麼工具,其實並不重要。
筆者從來都不反對教導應用程式的使用,但很反對只教導 Microsoft Office 等商業軟體。教導使用應用程式絕對是有必要的,因為並不是每個人都可以看著書、Google 一下就可以自己找出解答。如果大家的自學能力都超強,那我們就不必辦教育了。
要培養學生的邏輯思考能力
筆者覺得「培養學生邏輯思考能力」這個理由是最荒謬的。
為什麼程式就是邏輯思考?光是要學生了解指標(pointer)怎麼運作、為什麼「=」和「==」不一樣、「pass by reference」與「pass by value」是什麼,就足以把人搞死了。到頭來我們只會發現,學生只是一直背,所以這樣有達到邏輯教育的效果嗎?
「邏輯教育」其實應該是一個「跨領域」的教育。寫一篇議論文、解一題數學題、分析一題物理、瞭解化學式的反應過程,這些都運用了大量的邏輯。問題並不是我們沒教導學生邏輯,而是我們過度強調了「有效率」與「背誦」,而不是「瞭解」與「推理」。
當一篇以「歪腰郵筒」發想的作文題目,大家都在寫「謙遜」,偶爾有點大腦的就是寫「盲從」,文章寫得陳腔濫調;我們無法讓學生從作文題目與生活經歷分析出什麼是「值得寫的」、什麼是「沒必要的垃圾」。我們無法讓學生把思緒用邏輯化的方式表達出來,那麼這就是失敗的邏輯教育。
如果我們不從根本去解決整個台灣的教育思維,邏輯教育就只是說好玩而已。至於程式可以教導邏輯,或許可以啦,但我不認為效率會好到哪裡去。
未來電腦是很重要的技能
筆者個人蠻討厭聽到這種言論的,這就像是「英文好棒非常重要」。沒錯,英文很重要,但真的什麼地方都需要英文嗎?沒有英文活不下去嗎?或許英文可以在職場帶來優勢,但真的是必須的嗎?如果只要能帶來優勢就要在學校教,那我們可能要辦 45 年國民義務教育了。
同樣的道理,電腦與程式設計在未來的重要性誰都不能否認,但是否有重要到需要花費整個國家的教育資源去教導呢?
程式教育可以幫助弱勢
教煮飯也可以幫助弱勢,弱勢族群可以去當廚師,所以以後高中全面加開烹飪課。等等,如果教特技也可以幫助弱勢,若是弱勢族群可以去馬戲團,以後全面加開特技課程。歡迎 45 年國民義務教育正式開辦!
喔對了,再等等;誰跟你說過程式教育可以幫助弱勢了,你確定弱勢族群負荷得了一台電腦的價格嗎?
利用遊戲學寫程式
你搞錯了,我們並沒有要碰程式碼,而是要在遊戲中教導!
筆者記得在國小時,很多英文補習班都號稱可以「在遊戲中學英文」,我還補了六年;但現在我的英文連及格都很困難。「玩中學」不是不可以,但現實就是,這是給小朋友一個入門與引發興趣的方式,你把一個給小朋友學習的方式轉用在高中生身上,效果可能會好嗎?就算理論效果真的很好,實際呢?
講個故事,筆者在國二(相當九年國教的七年級)的時候,學校教了 Scratch ,老師覺得好棒棒,大家都會寫程式,但真實狀況呢?不過就是我旁邊的都在看我寫,然後依樣畫葫蘆的做他的作業,這樣他有可能學會嗎?很顯然不可能。
遊戲終究是遊戲,把它放進教學場合時,有太多太多的障礙要突破了。更何況,你真的要用 Scratch 教演算法和資料結構嗎?
真的需要全民寫程式碼?
程式教育本質上不是不好,但我們要先搞清楚,有這個必要嗎?
再者,台灣的教育環境真的適合嗎?相信大家都很清楚現在台灣的教育風氣是怎樣,我也就不多說了。但除了風氣,我們有足夠的師資嗎?我們有足夠的資源嗎?我在這個議題上的觀點比較務實,完全不認為現今台灣的狀況是可以推行程式教育的。
當然,我也期望有那麼一天,台灣的教育體制可以成熟到把資訊領域的課綱編好編滿;但很顯然,現在的跛腳課綱不是一個好答案。當然,資訊教育中的程式設計也只是剛起步,沒有剛起步就做得很好的東西。
任何好體制都是由錯誤中不斷修正而成的,讓我們去期盼著體制完善的那天;但是在那天來到之前,就不要好高騖遠,覺得程式教育多棒,而是應該帶給學生真正需要的技能。
然而不可否認的,程式對有些人來說是必要技能,對有些人來說卻是毫無用處的東西。我們不能說,因為並不是大家都用得到,所以就不把這些知識教給學生。那麼,我們要怎麼帶給學生必要的技能?
「資訊教育」重要的理由
容我述說一下程式教育課綱的路程。
有人以為,程式教育課綱是 107 課綱才出現的,但事實上並不然,程式教育一直都在課綱當中,只是現在我們把選修改成必修罷了。以往當它是選修科目時,可以由校方或是師生共同決定要不要上程式設計課程,因此,可以確保只有「真正需要這些技能」的學生會接受程式設計教育(在此先不考慮現在台灣許多學校是升學主義的狀況)。
但如今我們改成必修制度之後,不意外的,一定會發生師資問題、壓縮其他課程時間、把程式也學科化等等的問題。當然,教育部也提供了培訓相關師資的計畫;但是只能說,現在的課綱真的是一個烏托邦課綱,一切都很完美,認為一定會是一套一路順暢,大家都會支持、沒有阻礙的課綱,非常的理想化。
但現實是如此嗎?絕對不是。既然如此,為什麼仍然會有人認為,資訊教育中的程式教育很重要?不妨看看教育部是給出什麼理由好了:
運算思維與問題解決:能具備運用運算工具輔助思維之能力,藉以分析問題、發展解題方法,並進行有效的決策。
資訊科技與合作共創:能利用資訊科技與他人合作並進行創作。
資訊科技與溝通表達:能利用資訊科技表達想法並與他人溝通。
資訊科技使用態度:能建立康健、合理與合法的資訊科技使用態度與習慣,並樂於探索資訊科技。
所以,請問上述理由,哪一個是真的需要程式來完成的?或是應該說更白一點,哪一個需要會演算語法和資料結構了?
程式教育應該是什麼樣子?
當然,我並不是否定程式教育,但是我認為,應該要讓程式教育課程維持選修,並且讓學生有權利選擇自己要不要參加(不論是沿用以往的選修制或社團化都可以,反正就是不可以具有強制性)。我們只需要培養真正需要用到程式的學生;至於用不到程式的學生,不如拿這些時間與資源去给他真正需要的教育資源。
我並不是要阻擋程式教育的發展。身為一名開發者、同時也是高中生,我也認為程式教育是個勢在必行的趨勢;未來需要程式的範圍只會越來越廣,所以我們應該抱持著開放的態度去面對。
上面講了那麼多,其實我真正想表達的很簡單:在考慮到現有教育資源與師資的匱乏,以及程式的知識真的不是所有領域都需要用到的。我們不應該強制要求學生要會程式或是演算法、資料結構,而是把程式教育資源投注在真正需要這些教育資源的學生。
當然,那麼長的一篇文章,充滿了理想狀況,但現實世界中的升學主義與唯有讀書高,又是另外一回事了。
台灣的教育體制已經被各式各樣的事情搞得烏煙瘴氣了,我們還禁得起下一次的錯誤嗎?我也不知道,但我想我也是醉了。