初學程式語言-先學個大概,再求精細
| 2011/10/28 | 留言
因為最近時間還算許可,所以兼了一門基礎的程式設計課程。先前的教學主題,比較是放在大二、大三生稍微進階一點點的程式設計,但這學期要教的學生大多都是第一次接觸程式語言的朋友。
雖然在備課上較為輕鬆,但每每回想起自己初次學習程式語言時的那種身處迷霧般的感受,不免還是會一直思考如何調整上課的方式,也因此產生了一些想法。本篇是討論如何提供程式設計初學者適當的教學內容,是我個人想法,也歡迎討論。
自然語言也是這樣
試想小朋友剛學說話時,我們通常不會教他一堆修飾詞、形容詞,而是希望他講出重點,即是先讓句子的實用性出現。例如:「媽媽,我想要溜滑梯,可以嗎?」,第一次教他當然不能期望他說得完整,而是先讓他從會說「溜」開始,當他指著滑梯說「溜」時,通常大人就知道怎麼回事了。
當大人理解小朋友的想法,並作出正確的回應,小朋友也獲得了成就感,擁有了再次學習的動力。而我認為,一開始學習程式語言也應該要如此。
傳統課堂上的教學
通常的情況是,老師在檯上照本宣科,拿一本書從頭講解,也許在一開始談變數,就把所有它的形態、所佔容量都講完(甚至還要求背起來,考試拿來考);其他章節也是,一開始就照著書本,把主題談得很詳細,老師本人覺得講得很完整,很有快感,但聽得人卻很痛苦,覺得還沒開始寫程式,就要記憶一堆不知為何物的知識,很複雜。
為何這樣情況會很常見?我猜部份的原因是,這樣的教學方式,老師最輕鬆。
這種情況下,對少數幾個原本就非常有興趣的同學來說,也許反而更加好奇,然後增加自修的時間去研究;不過往往我們最常見到的是,大多數有點興趣的同學會深深覺得「自己不是寫程式的料」,然後整個學期靠用「背」的來過關,然後從此放棄學習程式設計。
「資管系學生,是不是都該跑去寫程式」,這個問題很有爭議,但若問題改為「資管系學生,是不是都該對程式有一定程度的認識」,我就覺得是必要的。
先學個大概,再求精細
也因為如此,這學期我只列了幾本參考書目,但沒有選定一本書。我覺得書是參考用的,很少能拿來依其目錄編排來作為主要的學習流程。因為每個人的學習狀況不太相同,最好的方式還是由老師動態調整路線。
我上過某程式課,第一堂在電腦教室上課,卻都在解說課本上的東西,直到下課都沒讓我們實際操作玩一下,真的相當解High。為了避免一開始談一大堆無聊的東西浪費時間,這學期的策略是,先講最少最基礎的東西,讓學生前幾堂課就能一直寫程式。談到程式語言裡的「變數」,儘管VB裡有超過十幾個型態,但我只講Integer跟String,一開始學副程式也不會講到Call By Value 或 Call By Reference。我只求先讓它動,寫得很醜很隨便都沒差。
前半個學期學的東西,都是以「最低可用」的標準來介紹,然後再依同學的問題開始發展之後的教學路線,除了依能力來學習,問得多的就學得多,老師也不用無謂的趕進度,因為我的目標不是注滿指定容量的水,而是試圖點燃火苗。也許整個學期下來,能講到的主題不會像傳統方式那麼多元,但卻是最依同學能力,最切合需求的初階課程,未來對程式這麼排斥的同學也就不會太多。至於原來就很有興趣同學,就更不必去擔心了。
一堂課的學習成績
依興趣、態度、智力,每個人的程度都不會相同,我不會作齊頭式的要求,而是看立足點。我這樣教,只是想讓入門的門檻低一點,讓更多同學不再害怕學習寫程式,而不是想把學不會或寫不好程式的人當掉。我完全允許學生「混」過關,只要乖乖參與課程、不作弊、有交作業、有來考試,通常我不會當人。但我更想做的是鼓勵學的好或學習態度好的同學。
學的好,當然是高分,不過學得不怎麼樣的同學,如果態度非常好,而且有建立起興趣,我通常會給很大的鼓勵性加分。也許學生會問,配分不是一開始學期初就談好了嗎?是的,但是作業、期中、期末、平時這些都是可以動態調整的,而且老師想要它多動態就有多動態。
有時我覺得,成績在我看來佔最重的是「印象分數」。「教學」是人的活動,我們在教育的是「人」不是「機器」,人的變數很多,這些變數是構成印象的要素,在我看來這比分數更適合評斷學習成效,我不會在乎你多背了幾個語法,但卻很在意你是如何解決問題,或是不是積極去學習。分數是死的,它代表的意義很少,硬要說的話,也許分數高可以讓一個人的機會變多,如果是這樣,那我願意把機會多給一些具備更多可能性的同學。
分類:修課需知
本文作者是Audi Lu