台大大氣陳維婷副教授負責大一必修的程式設計課程,不僅是以解說、示範、練習到挑戰進階程式設計的教學原理在安排課程內容,還串連學生未來會面對到的其他必修課內容,提早把大學四年都要用到程式來解決的問題,設計在課程的作業和考試裡面。這樣的課程設計讓學習變得按部就班、有系統、有效率、而且馬上就有用,提高了學生的學習動機和學習成果,為學生在大氣系接下來四年的學習奠定重要的基礎。
第一次聽到陳維婷副教授談他的課程設計,已經是好幾年前的事了。我常常跟其他老師提到他的課程設計,也曾經辦過幾位大學教授一起討論課程設計的研討會。一直想把他的課程設計寫成清楚的介紹,希望能提供其他大學教授做為系所必修課程設計的參考。今天趁著陳教授回臺中過農曆年的機會,再把他課程設計的細節問了一遍,想要更深入瞭解他設計課程的理念和實際操作方法,以及學生出現的各種反應和狀況,並寫成文章來介紹。
讓課程的重要性更具有說服力
很多大學教授都覺得自己的課很重要,也可以頭頭是道地解釋這門課為什麼重要。即使學生也認同這門課很重要,為什麼學生還是不願意認真學習或不感興趣呢?我認為關鍵的因素之一,就是這門課的內容現在還用不到,甚至在可見的未來也不知道哪裡可以用得到,所以學生的學習動機很低。
以陳教授任教的課程來說,程式設計當然很重要,老師還需要花心力去說服學生嗎?當然要。就像我們都知道英文很重要,但很多人還是可以從幼稚園到大學還是學不好英文一樣。程式設計到底哪裡重要,老師應該怎樣來說服學生呢?
情境一,老師告訴學生,程式設計未來每個地方都會用到。
情境二,老師告訴學生,程式設計未來每個地方都會用到,並舉例。
情境三,老師告訴學生,程式設計在你下學期的必修課OOO就會用到,並舉例。
大家覺得,上述三個情境,哪位老師的說明最能夠說服學生呢?以下是陳教授的「說明」方式。
陳教授先訪問了系上大一到大四幾位負責必修課的教授,問他們會希望學生在修習到他們的課程時,具備怎樣的程式設計能力,可以解決怎樣的問題。以大一下學期的大氣熱力學課程為例,教授希望學生能夠以電腦程式畫出大氣特徵的垂直剖面,並且利用程式判斷,將大氣垂直剖面中具有特殊性質的不穩定層找出來。於是,大一下必修課教授的需求,就變成大一上程式設計課的某一次作業。
其實,即使陳教授不去問其他教授的需求,他的程式設計課程本來就具備解決上述問題所需要的內容。但如果我們把學生實際上很快就會遇到的問題拿來,讓學生練習剛剛學會的程式設計技巧,這就是讓課程的「有用」可以更清楚被呈現出來。相較於前面三個情境,老師「解釋」這門課有什麼用。陳教授是直接將這門課有用的地方,而且是很快就要用到的地方,設計到課程裡面,我認為這樣的課程設計非常具有說服力!
符合學習原理的教學流程
要讓學生達到有效的學習,教學的流程理論上包含以下步驟:
- 基礎知識與理論的講解(老師)
- 應用的示範(老師)
- 簡單應用的練習(學生)
- 練習時遇到問題的解決與檢討(老師及學生)
- 進階應用的練習(學生)
- 練習時遇到問題的解決與檢討(老師及學生)
- 延伸的應用練習(老師及學生)
陳教授的課程教學設計是以教學影片來完成步驟1和步驟2,因為基礎知識及原理的講解與應用的示範,是學生未來可能需要回頭重複觀看或學習時必備的素材,所以老師如果能夠錄製完整的教學影片,對學生的學習來說相當重要。除此之外,每一門課程的內容對學生來說,都有難易度的差別,有些學生對某個主題學習速度快,但某些主題可能就需要花時間重複看幾遍教學影片。所以線上教材正好可以讓不同特性的學生,在開始學習基礎概念的重要階段,可以自己掌握學習的節奏。
陳教授以每週大約需要2小時左右事先完成課程教學影片觀看與練習的份量,設計教學影片的內容與課前練習題。課前練習題的題目從簡單的填空和改錯開始,到最後會有一個要實際上電腦完成的程式設計練習題。題目的設計從簡單到複雜都有,就是為了提升學生願意自行作答的比例。加上作業分段給分的設計,即使寫的程式跑不出結果,學生還是會根據程式內容得到分數。所以有非常高比例的學生都會在課前繳交練習題的答案,完成前面教學流程步驟3的任務。
每一次正式上課期間,陳教授會先針對課前作業進行檢討,讓同學提問,並說明同學容易犯錯的環節,完成步驟4的教學流程。
接著陳教授會根據本週影片教學進度所講解的基礎知識及原理,在課堂上提出一個進階的程式設計題目。這個題目的內容就是前面所提到,會根據大氣系學生未來真實需要處理研究數據時的任務所設計。所以教授會在課堂說明這個題目的大氣科學背景與程式設計重點,讓同學在課堂上完成這個任務。課堂中同學之間可以彼此討論,教授和三位助教會在教室中協助同學解決問題,並在本週課程結束前講解完成任務的方法和解答。
這樣的上課內容是為了再加強一次原理的應用練習,相當於步驟3到步驟4的教學流程。
課程結束前,教授會再出一題難易度相當的題目,需要運用到的程式設計概念相同,但卻是應用在不同大氣科學主題的任務當作回家作業,並在下一次上課開始時進行檢討。這就是教學流程的步驟5到步驟6,屬於比較進階的應用練習。
陳教授除了規劃每週2節這樣的正課,還在正課之後另外安排1節選修的實習課,提供學生更多類型的應用練習,也讓學生可以針對課後作業進行討論和發問。陳教授說,這是讓學生和教授(以及助教)比較有1對1討論機會所設計的課,如果學生在完成作業的過程有過不去的關卡,這個實習課就是最好的學習機會。大約有8到9成的學生會選修實習課,除了完成步驟7更廣泛的應用練習之外,順便把作業寫完也是很重要的動機。
回顧每一週課程的內容,設計合適的應用練習並且有層次的進行之外,陳教授在課程的進行中,除了安排3位助教同時指導以外,還刻意讓同學之間可以互相討論的機會,使得這門課同學之間或同學和教授、助教之間的討論相當頻繁,成功讓許多原本畏懼或不擅長程式設計的同學願意嘗試。所以每年這門課大約40位修課同學中,最後會被當掉的人數都只有3個人上下,是學習效果很好的一門課程。
但是相對的,陳教授發現有些同學就是不願意發問,也不願意和同學討論,即使教授親自關心也改變不了他的學習態度時,學習的成效就會相當低落。惡性循環的結果就是這些同學其他科目的學習成果也不好,重修時和同年級同學更加疏遠,可能就會畢不了業。對於這樣的學生該怎樣提供協助,是我們目前還力有未逮的地方。
課程設計引發的正向回饋
因為程式設計課程在大氣科學的領域中屬於工具類型的課程,並不是知識領域的基礎課程。但是當陳教授把大氣科學的應用融入作業和練習題之後,同學也無形中開始接觸基礎的大氣科學知識,有助於他們未來進入其他必修課程時預作準備。所以程式設計課程不僅讓學生具備未來學習所必需的工具,也提升他們對其他系上課程的學習動機,對大氣系學生往後的學習幫助相當大。
此外,因為作業與練習題是其他課程真實必須解決的問題,所以程式設計這門課「真的有用」的評價會在學長姐和學弟妹之間傳遞,也間接提升學生在修習這門課程之初就會認真以赴的心態。
有些同學在大一修課時就展現出程式設計的天分,同時還兼具善於指導其他同學的能力時,陳教授就會在大四到碩一的階段邀請這些同學來課堂上擔任助教。助教的工作不僅是改作業或協助回答問題而已,很多時候助教也參與設計作業的過程。因為參與了作業的設計,助教會更能掌握程式設計應該注意的地方。加上經過批改作業的過程,上課時助教也會很清楚應該幫助同學釐清哪些概念,協助作業的檢討。
所以雖然學校發給助教的薪水非常微薄,但是這些學生都是教授實際觀察整整一個學期所挑出來的人選,本身就是喜歡程式設計又喜歡教人的人。這些助教通常都會樂此不疲地在課堂上協助學弟妹,也是陳教授推動課程進行的重要助力。
未來的展望
關於這門程式設計的課程,陳教授希望未來可以把預習作業更加「線上化」,建立基本題的題庫,讓有需要的同學就自己進行重複練習,減少助教人工批閱的時間,讓人工可以運用在解決更進階的問題和討論上頭。
目前陳教授負責的課程除了大一必修的程式設計之外,還有大三必修的天氣學和氣候變遷學程的氣候變遷科學。不同的課程屬性和不同的學生組成,課程設計的方式自然還是有所不同。難免有人會質疑,這是因為台大學生的學習能力較佳才行得通的教學方式。但反過來說,台大的老師也不是每一位都會認真思考課程設計,都能夠為學生的學習付出這麼多的心力。
至於程度沒有像台大學生這麼好的情況下,教授可以怎樣來進行課程設計呢?下次我會想辦法訪問文化大學大氣系的另一位教授,他同樣是費盡心機在設計與嘗試課程設計的教授。相信他的經驗,會是另一種不同類型的學習與教學設計,值得期待。
參考資料
陳維婷副教授「程式設計」課程線上教學影片及講義(http://homepage.ntu.edu.tw/~weitingc/fortran_lecture/index.html)