第二章 文獻探討
第一節 程式設計教學
第二章 文獻探討
本章第一節說明程式設計教學的內涵,並針對較常被使用在課堂上的程式設 計教學活動之相關文獻進行概述;第二節說明系統性文獻分析法的重要性及研究 流程,並說明何謂敘述性分析(narrative synthesis)。第三節為探討自 2000 年以來 與程式設計教學相關的系統性文獻分析。
第一節 程式設計教學
一、初學者學習程式設計的內涵
程式設計是一個複雜的學習領域,包含了許多知識及技能。Linn and Dalbey (1989)曾指出學生學習的程式設計學習的知識為:
(1) 程式語言的語法及語意特性。
(2) 設計模式、計畫、除錯…等設計能力和程式語言的特性。
(3) 將程式語言的特性與設計方法整合,發展出問題解決的能力。
Winslow(1996)認為教導學生程式設計時,應該著重在如何幫助學生解決問題;
而解決程式問題的流程,可以分割成下列幾個步驟:
(1) 了解問題:分析並找出問題的需求。
(2) 如何解決問題:針對問題需求設計。
(3) 將解題方法轉換成程式:將設計的解題步驟及流程轉換為程式。
(4) 測試及除錯:執行程式碼,檢測是否滿足問題需求,若程式有錯則需要 找出錯誤部分進行修正。
Bishop-Clark (1992)則建議教學者教導程式設計初學者,只需要教導初學者足 以解決程式問題的語意及語法,無須教導其他額外的語意及語法知識。教學者應 將教學重心放在如何讓初學者學習如何解決問題,並且教導初學者使用虛擬碼、
流程圖…等解題工具及方法輔助教學,而教學者設計範例及練習時,應避免讓學
5
生認為可以使用完全相同的解題模式套用到不同的問題結構上。
依據以上各學者的結論分析,不論是在大學院校培養出優秀的程式設計師,
或是培養高中以下學生基礎程式設計能力,教學者都必須設法讓學生學習到多方 面的知識及能力。學習者除了學習程式語言的特性,也必須能夠分析問題,將解 題策略活用在程式問題中。
二、初學者程式設計教學的相關研究
Pears et al. (2007) 針對程式設計教學的研究進行分析,指出程式設計教學不 僅與問題解決息息相關,認為程式設計教學也必須考量程式語言的選擇及教學工 具的使用,才能設計出對學習者有益的課程。Robins, Rountree and Rountreey(2003) 指出教學者必須設法引起學生的學習動機,並可運用視覺化的程式設計環境、合 作學習等方式加強學生的問題解決能力。與初學者相關的教學研究大略可以分類 為以問題解決為主的教學、教學語言的選擇、合作學習、運用教學工具等四種方 式。
(1) 以問題決解為主的教學研究
問題導向學習法(problem based learning)是一種為了解決與現實世界相關問 題的教學法,學生須要在課堂中培養各種不同的問題解決能力。問題導向學習法 在電腦科學中,常被用在初學者程式設計課程,或是人工智慧、軟體工程等需要 完成大型專案的課程(Kay et al., 2000)。
Nuutila, Törmä, and Malmi (2005)曾經在課堂上先教導學生解決程式問題必備 程式設計概念,接著讓學生使用分組合作討論的方式,讓學生檢視問題個案,找 出問題的解決方法。學生藉由討論的方式,將課堂所學的程式設計的概念與解題 方法結合,藉此加強問題解決能力。
除了問題導向學習法之外,近年來由於程式設計環境與工具的發展,也衍生 出許多能夠加強學生解題能力的教學方式。例如讓學生在課堂中,透過遊戲設計 的方式學習程式設計(Van Eck, 2006),或是使用機器人作為教學媒介(Portsmore &
Rogers, 2004),上述兩種教學方法均能讓學生培養問題解決的能力。
6
(2) 探討教學程式語言選擇之相關研究
根據研究調查指出,Java、C++、C 等程式語言在大學院校中,最常被用於程 式設計導論的課程(Mason, Cooper, & de Raadt, 2012; Siegfried, Greco, Miceli, &
Siegfried, 2012)。但是 McIver and Conway (1996)則指出 C++、C 這類型的程式語 言,其語法、語意對初學者來說太過困難,尤其是有多種語法可以表達出同一種 程式架構的情況,容易混淆初學者的學習。
Brusilovsky, Calabrese, Hvorecky, Kouchnirenko, and Miller (1997)則提出迷你 語言(mini-language)的概念,指出程式語言要有簡單的語法,以及將程式碼執行的 結果以視覺化呈現的方式,能夠有助於初學者學習程式設計。符合此類型的程式 語言包含 1980 年代的 Logo,而近年 Scratch 及 Alice 程式語言也同樣符合迷你語 言的概念,而 Scratch 及 Alice 程式語言中拖放指令的特色,讓學生更能有效降低 學生學習程式設計時的認知負荷,有助於學習演算法等解題概念(Lister, 2011)。
(3) 合作學習用於程式設計教學之相關研究
合作學習是學生在課堂上以討論、相互教學、合作完成工作的方式學習,藉 此增進學習成就及提升學習動機(Slavin, 1991)。Bower and Richards (2006)指出合 作學習用於程式設計教學時,除了對學生提升學習成效及興趣有所助益之外,學 生更可藉由合作學習的經驗,培養出溝通及社交的技巧。對學生在未來軟體工程 相關課程中,或是從事軟體工程相關的行業,有正面的助益。
例如 Williams, Wiebe, Yang, Ferzli, and Miller (2002)曾在程式設計教學導論
(CS1)課程使用配對程式設計(pair programming)教學方法,檢視學生使用配 對程式設計以及學生單獨完成程式的學習成效差異。研究發現配對程式設計有助 於學生成績的提升。
Hundhausen, Agrawal, Fairbrother, and Trevisan (2009)則將學生進行分組,要求 每一位學生單獨完成程式之後,讓同組的學生針對程式的錯誤、風格、解題方式 進行審查。研究結果發現程式碼審查能夠提升學生程式的品質,並改善學生語法 學習及提升問題解決能力。
7
合作學習並非只能藉由課堂上的活動完成。例如麻省理工學院在設計 Scratch 程式語言後,便設置網路平台讓使用者上傳專案。使用者能夠下載他人的專案進 行再製,並針對專案發表評論,甚至有少數來自不同國家孩童藉由網路平台一起 創作各式不同的專案,彼此互相交換自己所學的知識,而網路平台因此成為了最 佳的合作學習平台(Monroy-Hernández, 2009)。
(4) 工具輔助程式設計教學之相關研究
Valentine (2004)曾經調查 1984 年至 2003 年之 SIGCSE 研討會論文集的研究 主題進行調查,Valentine 將文獻的教學對象鎖定在 CS1 和 CS2 課程。結果發現 有 22%的文獻的主題為教學工具研究。Pears et al. (2007) 進一步將教學工具區分 為視覺化工具、自動評量工具、程式設計環境等三個工具。由於自動評量工具多 用於減輕教學者為應付龐大的註冊學生所造成的負擔,並非以為了教學者為目標 設計的工具,因此本研究不探討自動評量工具的用途。
常見的視覺化工具,例如 Jeliot、jGrasp 能作為程式設計開發環境使用,使用 者能在編譯程式碼的過程中透過軟體觀察類別、物件之間的關係,可以直接觀察 每一個步驟的執行結果(Cross, Hendrix, & Umphress, 2004; Moreno, Myller, Sutinen,
& Ben-Ari, 2004)。
程式設計開發環境相關的研究主要以 BlueJ、JPie 等輔助初學者學習的程式設 計環境為主。其中 BlueJ 的特性和 Jeliot、jGRASP 相同,能夠對使用者提供視覺 化的回饋,降低學生的學習負擔(Kölling, Quig, Patterson, & Rosenberg, 2003)。JPie 則是拖放式(drag and drop)的程式設計環境,可讓學生專注在問題解決的學習上,
而不會耗費過多的心力學生語法及語意(Goldman, 2003)。