第二章 文獻探討
第一節 機器人與程式設計教學
壹、程式設計教學的問題
程式設計是一項需要邏輯推理能力的認知活動,在學習的過程中能夠培養 學生高層次思考以及邏輯推理的能力(Cañas, Bajo, & Gonzalov, 1994; Costelloe, 2004)。在撰寫程式的過程中學生必須經歷兩個階段,首先必需了解題目想出解 題的方法 (演算法),就是問題解決的階段;再來將問題的解法轉換為程式碼,
意即所謂的程式撰寫與實踐的階段(Costelloe, 2004)。在問題解決階段對初學 程式設計的學生而言是相當困難的,Soloway(1986)認為以往程式設計教學太 過著重語法而忽略教導問題解決能力的重要。Costelloe 所提出的程式撰寫與實 踐階段,學生必需將各種程式的概念組織起來才能完成程式,但教師們常因為 學生不明白某些特定的程式概念而感到沮喪。Manila、Peltomaki 及 Salakoski
(2006)認為目前主流的程式語言,雖然功能強大但卻非專為教學設計,過於 複雜龐大的語法結構並不適合初學者。概括上述學者們所提初學者在學習程式 設計時,常面臨的困難有三:(1)問題解決能力不足、(2)某些程式設計的概念難 以學習、(3)程式語言的語法結構過於龐大;因此以下針對學者們如何解決此三 種困難做探討。
一、問題解決能力不足
Linn & Clancy(1992)認為學生已具備一般問題解決的能力,但並不能將 其運用在程式設計的解題方面,因此在教學上應教導學生如何將一般問題解決 能力應用在程式設計方面,而過去的程式教學過於著重程式語法的教學,忽略
了規劃程式的技巧。他們採用「個案研究(case study)」的方式,將專家解題 的範例程式分成好幾個重要的區塊,然後加上文字說明、虛擬碼、演算法、概 念圖、範例程式、除錯及測試技巧等,稱之為「板型(template)」,加以整理之 後教给學生。讓學生研讀專家的個案,從各式板型中學習程式語法及用法,更 重要的是學到如何規劃的技巧,並希望能用以解決更高難度的程式問題。
Soloway(1986)也認為應該教導學生如何規劃程式的技巧,他認為程式設計的 專家,在解題時能夠靈活運用其知識與策略。因此他建議可以採取goal/plan 的 教學策略,讓學生以top-down 的方式學習規劃程式。開始解題時依題目的要求 來確立目標(goal),然後細分有哪些已學過的策略(plan)可以達成目標,再 逐步精化、合併每一個策略,就可以順利解題。Soloway(1986)認為程式設計 的專家在閱讀程式時是以程式的區塊來記憶,專家會將程式碼區塊的功能抽象 化以方便記憶,這和初學者記憶程式是以逐行記憶不同。所以他認為在教程式 策略的時候也應該將每種策略的抽象概念以直接的方式教给學生。從上述內容 可以發現,學者們認為程式設計教學中教導學生如何規劃程式相當重要。
二、特定程式概念難以學習
Astrachan(1998)認為 C++中的參數傳遞、鏈結串列、指標等概念,初學 者學習效果不佳,他採用生活化的道具呈現程式設計概念,讓學生可以動手操 作,親自體會這些概念。他在傳統的課堂上,運用便利貼、飛盤、繩索、紙卡 等道具,這些和學生過去經驗相關的具體道具,讓學生能夠將新的概念與舊有 的經驗相連結,學習這些對初學者較難學習的抽象概念。例如:以貼上便利貼 的飛盤做為要傳遞的參數,當飛盤從一位學生手中丟到另一位學生的手中,即 完成了參數的傳遞;以帶有黏性的繩索喻為指標,一端握在學生手上,另一端 黏到寫有資料的紙卡(比喻為物件),代表有指向物件的指標,反之若另一端沒 有黏紙卡,代表指向空物件(NULL)。這種結合生活化及動手操作的教學方式,
不但能表現出抽象的程式概念,也能幫助初學者加深學習的印象及學習效果
(Astrachan, 1998)。有些學者認為使用視覺化的方式呈現一般初學者較難學習 的概念,有助於他們瞭解程式。Myers(1986)以視覺化方式呈現資料結構的 概念,他以畫在黑板的圖像呈現程式的資料結構,結果能更有效幫助學生理解 程式。
三、程式語言的語法結構過於龐大
有些學者認為目前主流的程式語言(如:C++、Java)功能強大,然而其 龐大的語法結構並非專為教學而設計(Manila, Peltomaki, & Salakoski,
2006)。Manila 等人認為若是採用比較簡單的程式語言(如:Python),會讓學生 學得更輕鬆。但是對於教簡單的程式語言也有許多批評,認為初學者入門的程 式語言如果是比較簡單的,可能會造成日後在學習其他程式語言的阻礙。因此 Mannila 等人(2006)以行動研究的方式針對高中生學習兩種不同的程式語言,
Java 及 Python,在程式中出現的錯誤分析與比較,以及追蹤 8 位學習 Python 的學生未來就讀大學學習不同程式語言的情形。程式的錯誤不論是在語法與邏 輯上的錯誤或是例外處理方面,採用Python 的錯誤都比 Java 少很多。入門程 式語言學習Python 的學生,日後在學習新的程式語言方面,受訪的 8 位追蹤學 生中,只有一位表示在學習新的程式語言有困難。
在高中階段程式設計的教學目標是:(1)學習基本的程式設計及演算法式思 考,(2)為學生未來的學習做準備。而高中的授課時數相當有限。在短時間內要 教程式語言,若是採用比較簡單的程式語言,如Python,可以省去許多繁雜的 語法,也就能夠讓學生有比較多的時間專注在演算法的思考上。而且經由 Mannila 等人(2006)的研究證明,大部分先學 Python 的學生在未來學習其他 的程式語言也可以學得很好。
Papert(1980) 在 Mindstorms 一書中以 LOGO 這套視覺化的程式語言,
以及所謂「微世界(microworlds)」的觀念。LOGO 程式語言運用簡單的語法 操控螢幕上的小海龜完成指定的任務,可以用以學習數學、物理等各種學科的
觀念。他以學習牛頓運動定律為例說明,「動者恆作等速度運動」這個定律學生 一開始學習時很難接受,因為在現實的情境之中的經驗相違背,我們在搬桌子 時要用力推桌子才會動,當停止施力時桌子就停下不動了,幾乎沒有辦法觀察 到物體一推就動而要停下來還要再反向施力的現象,這和學生過去的經驗沒有 辦法聯結,學習上也比較困難。因此,透過LOGO 建造一個單純的微世界,在 這個微世界中除去了一些在現實世界可能存在的磨擦力、空氣阻力等的干擾,
只有教學者希望學生學習的新知識內容,例如:將操控小海龜前進、轉彎等的 指令,視為力學中的力,讓學生透過操縱小海龜前進、轉彎,學習牛頓的運動 定律,因為只有在學生對小海龜下達前進或轉彎的指令時,小海龜才會做出動 作,在這個LOGO 構成的微世界中免除不必要的干擾,能夠讓學生更能夠專注 在學習及解題上。
貳、機器人與模擬軟體
本小結所討論之機器人為具有實體可讓使用者操控,而模擬軟體為不具實 體僅呈現在電腦螢幕上者。以下分為二部份:實體機器人、機器人模擬軟體討 論。
一、實體機器人
在程式設計教學亦有整合微世界與視覺化觀念的教學設計,1990 年代美國 麻省理工學院電腦教育學者們,設計出一套可程式化的實體積木(tangible programming bricks),並可以結合感應器讓可程式化的積木和外界的環境互 動,也就是後來的Lego Mindstorms(McNerney, 2004)。採用實體的機器人於 程式設計的教學,Fagin 等人(2001)採用 Lego Mindstorms 於程式設計導論的 課程中,教學生循序、變數及常數的概念。首先要運用機器人教學生循序的概 念,只要將要機器人執行的程式碼依序寫好,當機器人執行的時候自然就會依 照先前寫好的順序執行;而在變數的概念,採取一個會讓機器人會根據某些狀
況變動的變數來教學生,會是比較好的策略;要讓學生學習常數的概念,是以 讓機器人轉九十度為例,要讓機器人轉彎是只讓其中一個輪胎繼續轉動,另一 個輪胎不動一段時間,來達到轉彎的動作,在此要讓輪胎不動的那段時間就是 一個常數的概念。要教學生這三個概念運用機器人是直覺的,因為當學生在解 機器人的問題時,學生會把他們看到的問題先設想成機器人的動作,再對應到 動作應該有的程序是如何,然後寫下程式碼,而且學生們的程式可以表現在機 器人的行為上,讓學生可以實際看到程式的運作使Design-write-run-redesign 的 循環能流暢進行。採用機器人於程式設計教學,因為其具有實體的特性,學生 能藉由撰寫程式操控機器人,除了可以讓學生有動手實作的經驗之外,也富含 趣味性(Fagin, 2001)。
Klassner(2002)讓學生以 LEGO Mindstorms 為基礎來設計人工智慧的專 題,因為Mindstorms 套件包括了觸碰、光線兩種感應元件,以及直流馬達及燈 泡可做為輸出,所以能夠做到與環境互動的功能適合做為人工智慧專題的教學 工具。在Klassner 的課程當中,讓學生充份應用各種零件組裝發展出符合老師 要求的專題,從評量的結果也顯示採用機器人的教學方式的確增進學生對於人 工智慧概念的瞭解,以及發覺學生採用機器人之後對多執行緒(mulithreading)
的程式設計方式比較有自信。但是在文中也指出採用Mindstorms 有不足之處,
例如多數的學生指出感應器可能不準確,以及Mindstorms 套件本身並沒有包含 轉角感應器(angle sensor),使用馬達控制轉角較不便,須要另外添購,但是這 種感應器可以用來設計許多有趣的專題。
二、機器人模擬軟體
以機器人為比喻輔助學生學習問題解決能力、演算法式思考已經不是新的
以機器人為比喻輔助學生學習問題解決能力、演算法式思考已經不是新的