• 沒有找到結果。

第二章 文獻探討

第二節 程式設計的心智模型

以下就心智模型、程式理解之心智模型、程式概念之心智模型,三方面做 討論。

壹、心智模型與程式設計

心智模型是存在人們心中可以運作用來解釋事物或是預測現象的一種表徵

(Johnson-Laird, 1983)。Johnson-Laird 所述和皮亞傑所提的認知發展論有相當 類似的程度,心智模型一詞源自於知識建構理論,認為人透過觀察、思考建構 出自己的知識。心智模型運用在教學上,必須有四點要釐清:

1 學習者所要學習的「標的系統(target system)」

2 標的系統的「概念模型(conceptual model)」

3 學習者心中存有對標的系統的「心智模型(mental model)」

4 科學家所認為的學習者心中的心智模型

這四者間互相關聯,學習者所要學習的標的系統,透過科學家、專家設計 的概念模型輔助,與標的系統互動、學習得到自己對標的系統的心智模型,而 科學家心中也會想像學習者所可能會具備的心智模型。也可以用函式的方式來 解釋,若將標的系統設為t,則 M(t)代表學習者心中的心智模型,C(t)代表概念 模型,在使用者學習標的系統的同時,科學家為了要加強學習的效果也會揣測 使用者所形成的心智模型以改進教學效果,C(M(t))就代表科學家所認為學習者 所具有的心智模型;M(t)和 C(M(t))之間是有區別的,若透過觀察或實驗得到的 C(M(t))能較貼近使用者真正產生的心智模型,這對於設計概念模型 C(t)會有幫 助。

科學家和專家設計出的概念模型,主要目的就是為了讓使用者能形成科學 家或專家所希望的心智模型,特別是像程式語言這類的人造知識,這種知識的 特色就是人為創造出來的,所以知識本身就是專家的心智模型,若是能夠在學 習之初就產生和專家一樣的心智模型,在這方面的知識就能順利學習。

許多學者將心智模型的概念運用在程式設計教學上,因為程式語言本身也 是一種人造的知識,若學習者在學習程式語言的概念和專家相同時,在往後的 程式語言學習方面會有較佳的表現。Dehnadi (2005)測驗學生對變數及參數 傳遞的概念,用測驗的結果來預測學生在程式設計課程的成就,他認為了解初 學者所具有的心智模型將會是預測學生學習程式設計之成就的關鍵。所以探討 程式語言中的重要概念可能隱含的心智模型,有助於了解學生所可能碰到的困 難之外,也可以藉由了解學生可能具有的心智模型來改進教學時的策略(Ma, Ferguson, Roper, & Wood, 2007)。程式語言有許多重要的基本概念,能否建立起 初學者對程式語言基本概念,如:變數、參數傳遞、遞迴等,正確的心智模型,

決定了學習者未來在程式語言學習的成敗。

Lui 等人(2004),以知識建構及心智模型的觀點,認為程式設計課程中成 就比較弱的學生,他們在初學程式設計時會碰到五種困難:(1)沒有自信、(2) 缺乏抽象思考能力、(3)不熟悉程式編輯環境、(4)先備知識不足、(5)易落入無法 重新建構知識的情況。為改善他們的學習情況,Lui 等人在教學上採取以下六 種策略:(1)直接呈現程式的行為,不用類比、(2)先教程式概念,再教術語,(3) 不斷重覆重要的概念、(4)確保學生具備足夠的先備知識、(5)建立關鍵程式(key program)讓學生可以藉此複習重要的概念、(6)先用紙筆寫程式,避免電腦的 程式編輯環境所帶來的壓力。這種方式他們將之取名為Perform 的方式,Perform 的教學策略施行在大學程式設計課程,以變數的概念為例,得到了很好的效果,

學生覺得這樣的教學方式有幫助,該課程的不及格的比例也較往年有顯著改善。

貳、程式理解之心智模型

Pennington(1987)探討專家研讀程式文本(program text)來理解程式的 心智模型。他認為程式的文本中隱含有兩種訊息,一是控制流(control flow)

泛指程式文本中的文句順序或關鍵字,能指出程式如何進行者;另一是資料流

(data flow)指的是程式中變數的改變與否及變數和程式中各物件之關係。透

過將程式文本中的訊息抽象化粹取出來就可以理解程式,他將訊息粹取的技巧 分為功能(function)、資料流(data flow)、控制流(control flow)、調節行為

(conditionalized action),四種。他認為人們在理解程式會運用到程式的知識主 要有文字結構的知識和規劃的知識兩種。文字結構的知識是指將文句的細節、

文法結構組織起來以瞭解程式。規劃的知識是將程式設計者已理解的程式片段 組織起來以完成某些功能。

Pennington(1987)讓具有三年以上程式設計經驗的專家 80 位,40 位專家 使用的程式語言為COBOL、另外 40 位專家使用的是 FORTRAN,讓專家們閱 讀總計8 個簡短的小程式,然後回答六個程式理解的問題,包含前述的四種訊 息抽象化的類型以及順序性(sequence)及詳細操作(detailed operation)共六 種類型,藉此了解採用這兩種不同語言的程式理解方式的差別。研究的結果發 現二組的參與者在回答程式理解的問題時,對控制流及操作這兩類的問題所花 費的時間及正確率的表現都比資料流及功能這二類的題目好。跟據研究的結果 Pennington 歸納出二種不同的程式理解的方式,第一種就是由訊息抽象方式的 資料流及功能二方面組成,另一種是以控制流和操作組成。Pennington 認為若 能具備這二種程式理解的方式就能有最好的程式理解。

Wiedenbeck 及 Ramalingam(1999)將 Pennington(1987)所歸納出來的第 一種類型稱為「領域模型(domain model)」,第二種稱為「程式模型(program model)」。Widenbeck 採取類似 Pennington 的分類方式,研究初學者對於小程式 的理解是否會因為程式設計的派典不同而有所不同,他們比較程序性的程式

(procedural)和物件導向(object-oriented)的程式。他們將參與者分為程序性 和物件導向兩組,讓參與者研讀三個小程式,研讀完之後再回答五個程式理解 的問題,這五個問題別分為:操作(operations)、控制流(control flow)、資料 流(data flow)、狀態(state)、功能(functions)。實驗進行時,他們將程式分 別列印在紙上讓參與者閱讀,一次閱讀一個小程式2 分鐘,隨後有 1 分 15 秒時 間回答上述五個程式理解問題,回答時不可再看程式,依照參與者回答的正確

率,來區別學習兩種不同程式語言派典在程式理解的心智模型的不同。結果發 現以物件導向學習程式設計的初學者比較傾向以領域模型的方式理解程式,而 以程序性方式學習程式的初學者則比較傾向以程式模型來理解程式。

參、程式概念之心智模型

程式設計是一門人造的知識,許多的概念對初學者而言是比較難學習的,

因此也有許多學者對比較難學的程式概念之心智模型做討論。以下就以變數及 遞迴的心智模型做討論。

一、變數的心智模型

Ma 等人(2007),採用 JAVA 做為教學用的程式語言,探討初學者對於 JAVA 語言變數的心智模型,學生在一學期二十堂課約五十小時的課程結束後,接受 一次以考試方式進行的問卷調查以了解學生對JAVA 中「定值(value

assignment)」及「定址(reference assignment)」觀念的心智模型。問卷分為兩 部份,第一部份為選擇題,主要測驗學生預測一段程式執行的結果,選擇題的 選項包含有正確的答案以及事先預想好學生可能會具有的不正確的心智模型;

第二部份是開放式的問答題,讓學生運用他們自己的方式(用文字或是圖示)

描述一段程式的執行過程。從開放式問卷得到的結果,Ma 等人(2007)將初學者 對於Java 中「變數的指派(value assignment)」所可能形成的不適當

(inappropriate)的心智模型分成以下幾種:

1. 由左指派到右(assign from the left to right)

這類的學生將等號左邊的值指派到右邊,如a=b 會以為是將 a 的值指派給 b。

2. 將等號視為是「比較」的運算符號(compare operator)

學生將原本是指派的意思的等號誤解為「比較」,b=a 就成為「b 等於 a」

3. 將等號視為是繼承的概念(inheritance & instance of)

也有學生將b=a 解釋為「b 為 a 的一個子集(subclass)」,或是「a 為 b 的

一種(a instance of b)」。這類的學生似乎是因為對 JAVA 語言的概念僅有 零碎的了解,像是對指派(assignment)、物件(object)、繼承(inheritance)

的觀念不清,因此具備了很模糊的心智模型。

另外在「reference assignment」方面,reference 是 Java 常用的資料型態,

其概念類似於C++中的指標(Pointer),宣告時是以 ClassName VarableName 的 方式,例如:String s = “John”其意義為以 s 來指向存有”John”的 String 的位址。

但是這個概念在Ma 等人的研究中,學生能正確表達這個概念的很少,大多都 是具有以下錯誤的心智模型:

1. ”Stored at” model

具有這種模型的學生在解釋a = new Person(“Jack”)時,誤將 a 這個 reference variable 視為是存放 Person 物件的記憶體空間,而事實上 a 只存放了一個 記憶體的位址而已。

2. “Is” model

這是最多人存有的錯誤的模型,認為只是為物件命名而已,忽略reference 本身只是代表一個位址的意義,所以a = new Person(“Jack”)會被解讀成 是:產生一個新的Person 物件,並將它命名為 a。

3. “Assign” model

受到先前變數指派的概念的影響,這一類的學生認為reference variable 也 只是把物件複製一份傳給它而已,因此會把a = new Person(“Jack”)解釋為 產生一個新的物件,給予”Jack”的值,然後複製一份傳給 a。

4. “Set equals to” model

具有這類模型的學生也相當多,而這個模型也和”Assign”相當類似,他們 將a= new Person(“Jack”)解釋為:產生一個新的 Person 物件,然後把 a 設 定成等於這個新的物件。

5. “Component assignment” model

具有這種模型的學生將b = a 解釋為:具有某些屬性的物件 a,將其所有的

屬性取代了原本物件b 所有的屬性。

Ma 等人所討論的初學者的心智模型,是針對於特定的程式語言 JAVA 中特 定的概念「定值」與「定址」以及一些其他的概念的結果,另外也有探討遞迴 的心智模型。

二、遞迴的心智模型

遞迴的概念,有許多研究都指出遞迴對初學者而言是很難學習的,但是它 卻是在程式設計當中是相當重要的概念(Götschi, Sanders, & Galpin, 2003;

Haberman, 2004; Zmuda & Hatch, 2007)。Kahney(1983)假設初學程式設計的 學生和專家具有對遞迴的心智模型是不同的,他假設學生所擁有的是looping

Haberman, 2004; Zmuda & Hatch, 2007)。Kahney(1983)假設初學程式設計的 學生和專家具有對遞迴的心智模型是不同的,他假設學生所擁有的是looping