• 沒有找到結果。

Alice程式設計初學者之錯誤類型分析

N/A
N/A
Protected

Academic year: 2021

Share "Alice程式設計初學者之錯誤類型分析"

Copied!
114
0
0

加載中.... (立即查看全文)

全文

(1)國立臺灣師範大學 資訊教育研究所碩士論文. 指導教授:林美娟 博士. Alice 程式設計初學者之錯誤類型分析 An Analysis of Novice Alice Programmers’ Error Types. 研究生:林冠宇. 撰. 中華民國一百零二年二月.

(2) 摘要 Alice 程式設計初學者之錯誤類型分析 林冠宇. 本研究旨在探討程式設計初學者於實作 Alice 程式專案時所遭遇之困難,並將其 進行分析與歸類。研究實施採用質性研究之一對一診斷性訪談,參與者為臺北市 某高級中學一年級的學生共 22 名。研究者設計了涵蓋不同概念、難度漸進的 9 個題目供學生實作,並由訪談者全程觀察學生進行解題的過程,且於學生遭遇解 題困難時,依照「引導式提問」 、 「間接提示」 、 「直接指導」的漸進順序給予提示, 以了解學生在各項程式設計概念的學習困難類型。研究結果歸納出學生於內建方 法、時序控制結構、變數、選擇結構、重複結構、陣列、自訂方法及參數中常見 的錯誤類型,將其分類為連結、定位、使用以及其他四類,並針對學生實作程式 專案時所見之情形,提出使用 Alice 進行程式設計教學時所應注意之事項及相關 建議。. 關鍵字:Alice 程式設計、錯誤類型、診斷性訪談. i.

(3) Abstract An Analysis of Novice Alice Programmers’ Error Types Lin Kuan-Yu. This study aims to investigate the difficulties encountered by novice Alice programmers and categorize the types of errors they make. The researcher conducted one-on-one clinical interviews with 22 freshmen at a senior high school. The participants were offered nine Alice projects with increasing levels of difficulty, each requiring the use of a different set of programming constructs. Each participant was observed closely as s/he worked on the given projects. Whenever an error occurred in his/her program or when s/he did not know how to proceed, the observer would intervene by asking a sequence of questions with increasing specificity, ranging from prompts, hints, to provides, in order to determine the cause of the impasse. This study summarizes the common errors for each of the Alice programming constructs that the participants used in their projects and categorized the errors into four types: connection errors, location errors, usage errors and math-and-other errors. In view of these error types, this study also gave suggestions for teaching Alice programming.. Keywords:Alice programming、Error types、Clinical interview. ii.

(4) 誌謝. 歷經了四年半,中間夾雜了實習和工作,我總算是要從研究所畢業了。 首先要感謝的是我的指導教授美娟老師,除了在研究上的悉心指導外,更要 感謝老師願意包容我的任性和脫線的個性。其次要感謝口試委員吳正己老師與王 佩瑜老師對於論文提出許多精闢的見解與建議,使我的論文更加完善。 從規劃到實際進行實驗的過程中,感謝秋良學姊、慧君學姐和文慧學姊提供 他們的專業知識和經驗,協助我順利完成整個實驗。在整理研究資料及撰寫論文 的時候,感謝舜尹學姐提供我許多寶貴的經驗跟建議,協助我克服許多困難。還 有實驗室的夥伴宗緣學長、宜岑學姊、信育、曉薇、文良、怡雯、孝齊、傑安, 特別是和我一起拚這一個學期畢業的胤廷的鼓勵、打氣和吐槽,讓我在能夠獲得 堅持下去的動力。 最後要感謝父母的不斷催促跟日常的關心,不僅讓我能夠沒有後顧之憂地在 研究領域中鑽研知識;也在我想要放棄時給予我鼓勵,促使我回到校園來完成這 本應早該完成的學業。. 冠宇 謹誌 中華民國 102 年 2 月. iii.

(5) 目錄 附表目錄......................................................................................................................... v 附圖目錄........................................................................................................................ vi 第一章. 緒論................................................................................................................. 1. 第一節 研究背景 ................................................................................................. 1 第二節 研究目的 ................................................................................................. 2 第二章. 文獻探討......................................................................................................... 3. 第一節 程式設計教學 ......................................................................................... 3 第二節 Alice 程式設計 ....................................................................................... 8 第三章. 研究方法....................................................................................................... 11. 第一節 研究方法 ............................................................................................... 11 第二節 實施程序 ............................................................................................... 12 第三節 參與者 ................................................................................................... 15 第四節 資料收集工具 ....................................................................................... 15 第五節 資料處理與分析 ................................................................................... 25 第四章. 結果與討論................................................................................................... 26. 第一節 學生答題情形與困難點分析 ............................................................... 26 第二節 錯誤類型分析 ....................................................................................... 86 第三節 綜合討論 ............................................................................................... 94 第五章. 結論與建議................................................................................................... 98. 第一節 結論 ....................................................................................................... 98 第二節 未來研究方向 ....................................................................................... 98 參考文獻..................................................................................................................... 101. iv.

(6) 附表目錄 表 3.1 診斷性訪談測驗範例提示(第 1 題)........................................................... 14 表 3.2 題目與程式觀念對應表................................................................................... 16 表 4.1 學生遭遇困難以及訪談者給予協助情形-物件的宣告與控制................... 27 表 4.2 學生遭遇困難以及訪談者給予協助情形-內建方法................................... 34 表 4.3 學生遭遇困難以及訪談者給予協助情形-變數的使用............................... 39 表 4.4 學生遭遇困難以及訪談者給予協助情形-選擇結構................................... 46 表 4.5 學生遭遇困難以及訪談者給予協助情形-固定次數的重複結構............... 54 表 4.6 學生遭遇困難以及訪談者給予協助情形-變動次數的重複結構............... 58 表 4.7 學生遭遇困難以及訪談者給予協助情形-陣列........................................... 64 續表 4.7 學生遭遇困難以及訪談者給予協助情形-陣列....................................... 65 表 4.8 學生遭遇困難以及訪談者給予協助情形-自訂方法的宣告與使用........... 76 表 4.9 學生遭遇困難以及訪談者給予協助情形-自訂方法與參數傳遞............... 81 表 4.10 錯誤類別及原因-內建方法.......................................................................... 87 表 4.11 錯誤類別及原因-時序控制 .......................................................................... 89 表 4.12 錯誤類別及原因-內建函式.......................................................................... 90. v.

(7) 附圖目錄 圖 3.1 實驗實施程序................................................................................................... 12 圖 3.2 第一題程式執行示意圖................................................................................... 17 圖 3.3 第二題程式執行示意圖................................................................................... 18 圖 3.4 第三題程式執行示意圖................................................................................... 20 圖 3.5 第四題程式執行示意圖................................................................................... 21 圖 3.6 第五題程式執行示意圖................................................................................... 22 圖 3.7 第六題程式執行示意圖................................................................................... 23 圖 3.8 第七題至第九題程式執行示意圖................................................................... 24 圖 4.1 程式碼範例-物件的宣告與控制................................................................... 27 圖 4.2 程式碼範例-時序控制錯誤情形................................................................... 30 圖 4.3 程式碼範例-時序控制錯誤情形................................................................... 30 圖 4.4 程式碼範例-內建方法................................................................................... 33 圖 4.5 程式碼範例-變數的使用............................................................................... 39 圖 4.6 變數宣告按鈕位置........................................................................................... 40 圖 4.7 變數宣告選單................................................................................................... 40 圖 4.8 程式碼範例-選擇結構................................................................................... 45 圖 4.9 程式碼範例-固定次數的重複結構............................................................... 53 圖 4.10 程式碼範例-變動次數的重複結構............................................................. 57 圖 4.11 視覺化陣列示意圖 ......................................................................................... 61 圖 4.12 視覺化陣列及其元素示意圖......................................................................... 62 圖 4.13 程式碼範例-陣列......................................................................................... 63 圖 4.14 視覺化陣列內容設定畫面............................................................................. 64 圖 4.15 程式碼範例-自訂方法(my first method) ............................................... 74 圖 4.16 程式碼範例-自訂方法(自訂方法 enlarge) ............................................ 75 vi.

(8) 圖 4.17 程式碼範例-自訂方法(自訂方法 shrink).............................................. 75 圖 4.18 自訂方法宣告按鈕位置................................................................................. 76 圖 4.19 程式碼範例-自訂方法與參數傳遞(my first method) ........................... 80 圖 4.20 程式碼範例-自訂方法與參數傳遞(自訂方法 turnAndResize)............ 80 圖 4.21 參數宣告按鈕位置......................................................................................... 82 圖 4.22. resize 設定選單 ............................................................................................ 88. 圖 4.23. loop 指令(複雜版本) .............................................................................. 92. 圖 4.24. loop 指令(簡易版本) .............................................................................. 92. 圖 4.25 變數名稱混淆範例(變數版本)................................................................. 97 圖 4.26 變數名稱混淆範例(常數版本)................................................................. 97. vii.

(9) 第一章. 緒論. 第一節 研究背景 根據教育部於民國100年所修正訂頒的「普通高級中學課程綱要」 ,高中資訊 科技概論課程欲達成的目標之一為培養學生邏輯思維及運用電腦解決問題之能 力,因此課程中「電腦與問題解決」單元之授課重點應為引導學生進行問題分析、 設計解題步驟、及說明解題策略,並透過基礎程式設計與學生日常生活、學習等 相關之實例進行連結,以激發學生學習電腦解題的興趣。 程式設計的過程中,學生除須掌握所使用的程式語言之語法架構及程式設計 技巧外,同時需要具備一般性的問題解決能力,甚至還可能需應用其他領域的知 識(Brooks, 1983);因此對初學者而言,學習程式設計並非是一件簡單的事。許 多研究均發現學生在進行程式設計的過程中經常遭遇到困難,包括對於程式語言 的語法結構及程式概念具有迷思概念、解題方法無法順利轉化為實體程式、無法 構思足以解決問題的演算法、缺乏除錯能力等(SamurÇ ay, 1985; Bonar & Soloway, 1983; Spohrer & Soloway, 1986a; Perkins & Martin, 1986; Ebrahimi, 1994; Lahtinen, Ala-Mutka, & Järvinen, 2005) 。這些困難發生的原因不僅和學生對相關知識的缺漏 有關,也受到學生程式設計風格的影響。Bishop-Clark(1992)以及Lane與VanLehn (2003)皆發現程式設計初學者在面對問題時,通常選擇直接進入編寫程式的階 段,並於編寫程式過程中才同時思考如何解決問題,導致初學者因為無法同時處 理程式語法及問題解決兩種不同層面的知識,而造成錯誤的發生。 另一方面,程式語言本身設計上的差異也在學生學習程式設計時扮演了非常 重要的角色,除了直接反映於學生學習語法及語意的難易度之外,更間接影響學 生將解題方法化為實際程式碼時的表現。Ahmanzadeh、Elliman與Higgins(2005) 發現學生在使用語法結構較為簡單的程式語言編寫程式時除了能降低語法錯誤 1.

(10) 量以外,也因為不需要花過多的心力在處理語法錯誤上,更能夠專心於處理程式 目標及流程,使得邏輯錯誤量亦同時降低。因此,教師可考慮使用操作介面或環 境較為簡單,或能動態顯示演算執行過程(algorithm animation)的程式語言、劇 本語言(script language)或模擬軟體作為學生學習程式設計時的工具。除此之外, 也可以考慮使用可程式化機器人系統、物件導向式語言、函數式語言(functional languages)、網頁程式設計語言或交談式繪圖語言等多元化且生動活潑的電腦解 題工具進行教學。Butler與Morgan(2007)認為若是使用這類能清楚地提供資訊 回饋的教學方式,可以有效地幫助學生學習程式設計。 因此,許多具備上述特色的程式語言被運用於初學者程式設計教學中。其中 Alice 為美國卡內基美隆大學所研發之 3D 程式設計環境,使用者可以透過建構 3D 動畫或遊戲來學習入門的物件導向程式設計概念。同時 Alice 提供使用者拖放式 (drag-and-drop)操作介面,可使學生完全避免語法錯誤(syntax error) ,編寫出 絕對可以編譯執行的程式碼。這兩個特色使得 Alice 符合前段所述「操作介面或 環境較為簡單」,且「能動態顯示演算執行過程」的程式語言之一,被認為適合 用於大學前教導學生程式設計知識的入門語言。. 第二節 研究目的 本研究以台北市某高級中學一年級學生為研究對象,並以 Alice 2.2 版為教學 工具,採質性研究之一對一診斷式訪談研究方法,觀察並協助學生實作程式專 案。研究者試圖從學生在實作 Alice 程式專案時所發生的錯誤中,歸納及呈現程 式設計初學者在各基礎程式設計概念中所可能遭遇的困難狀況及類型供教學者 作為設計教學方法的參考。本研究之具體目標如下: 一、瞭解學生在實作 Alice 程式專案時所遭遇的困難。 二、分析學生在各項程式設計概念中常見的錯誤類型。 三、提出 Alice 教學上的建議。 2.

(11) 第二章. 文獻探討. 根據第一章所提出的研究問題,本章蒐集程式設計教學的相關文獻並做整理 和探討,包含程式設計教學、Alice 程式設計軟體及診斷式訪談。. 第一節 程式設計教學 一、程式設計學習 Brooks(1983)認為程式設計是一個將無形的問題轉化為有形的程式碼的過 程,除了需要組合程式語言本身的語法及結構,還有可能會使用其他領域的知識 方可完成。因此初學者在學習程式時,最重要的是需要學會理解整個程式,包含 程式的功能、程式碼內容、使用目的以及難易程度的差別。這個能力不僅能實際 用於撰寫程式的過程中,亦有助於程式設計者進行除錯、測試以及閱讀其他人的 程式碼。 Linn 與 Dalbey(1985)提出程式設計理想的「認知鏈結」,認為程式設計的 學習成果可以透過下列三方面進行評量:(1)程式語言特性;(2)程式設計技能;(3) 一般性的問題解決能力。一般而言,在入門的課程中學生所學習的程式設計知識 多屬於基本程式語言特性的理解及設計技能的範疇,鮮少觸及問題解決技巧的領 域。 在程式開發過程方面,Shneiderman(1980)將程式設計解題的過程對應至 Polya(1966)所提出的問題解決四階段:(1)理解問題;(2)設計解題策略;(3)執 行策略進行解題;(4)回顧解答,並修改為理解問題需求、規劃與設計、編寫程式 和除錯(引自 Bishop-Clark, 1992): 1. 理解問題需求:理解程式所要完成的工作、呈現的功能。 2. 規劃與設計:針對問題需求找出解決方法。 3.

(12) 3. 編寫程式:將所找出的解決方法透過程式語言實作。 4. 除錯:檢視程式執行成果,並進行修正。 Soloway(1986)認為學習程式設計的重點除了精熟目標程式語言的知識, 更需要學習問題解決的能力。教師除了程式語言的語法及語意之外,還要進一步 的教導要教導程式概念的作用原理、說明、使用目標、計畫、程式論述的規則和 計畫組成的方法等問題解決能力。如果能有效的協助學生將他們的想法轉化為實 際的程式,那程式設計就不單單是一個專業技能,而能成為一個解決問題的工具。 綜上所述,學生在學習程式設計時,除了必須針對程式語言學習語法結構及 規則以外,更重要的是要夠從中培養出分析問題、構思解題策略、透過程式設計 技巧將解題策略實作、並根據測試結果進行調整及除錯的能力。. 二、程式設計的學習困難 程式設計一直被認為是難以學習精熟的學科。Jenkins(2002)認為學生在學 習程式設計的過程中容易產生困難,是由於程式設計這門學科具備以下特性: 1. 需要多種技能:程式設計的範圍包含語法、語意、程式結構、寫作風格等不 同的面向。課本跟課堂通常只有教導語法、語意的部分,其他程式設計技能 必須透過程式設計的過程來學習 2. 具備多個程序:學生必須先自己的想法轉換為有效、可行的演算法,再將演 算法轉化為程式碼,在這些不同的領域轉換的過程中,發生任何微小的錯誤 都有可能導致學生無法順利完成程式。 3. 所使用之程式語言:目前大多數課堂都是選用業界常見的程式語言,而非適 合教學的程式語言。當學生必須花費大量心力於理解和處理語法時,往往難 以分心關注問題解決的技巧。 4. 教學新穎性:對很多學生而言,程式設計是過去從未接觸過的學科領域。學 習的過程必須兼顧指令語法的記憶及解題方法的知識理解兩種不同面向的能 4.

(13) 力,和其他的科目不盡相同。 5. 難以引發興趣:程式語法課程通常十分枯燥,且基礎程式概念程式範例亦較 為單調,難以引起學生興趣。 6. 外在觀感不佳: 「程式設計」普遍被認為是困難的技術,而「程式設計師」也 常給人書呆子的印象。學生可能會因為這些認知而產生排斥感。 7. 課程步調:由於授課時間受制於學制,使得課程進度必須不斷推進,造成學 生若是基本概念有所缺漏,將難以跟上後續進度。 由於在程式設計的過程中不僅需要針對目標問題發展出對應的問題解決方 法,還必須使用「程式語言」這個工具將其實作出來,因此 Spohrer 與 Soloway (1986b)將學生常犯的錯誤統整為程式語言結構以及計畫組織兩大類型。其中 程式語言結構相關的程式錯誤是由於對程式語法的誤解所產生,除了基本的語法 錯誤以外,初學者在編寫程式的過程中,往往會使用較為熟悉的自然語言去解釋 程式碼(Bonar & Soloway, 1983) ,進而導致如邏輯判斷中的「且」及「或」混淆、 重複結構的終止條件設定錯誤等邏輯錯誤的發生;Putnam、Sleeman、Baxter 與 Kuspa(1989)發現學生在面對未完全理解的程式語法時,亦會使用其他領域的 知識進行程式碼的解讀,進而導致迷思概念及錯誤的發生,例如將 BASIC 程式語 言中等號(代入)以一般數學的使用方式解釋為「等於」。SamurÇ ay(1985)更 發現即使核心概念相同,學生在將其他領域的知識轉化為可執行的程式碼的過程 中仍有困難。以重複結構 loop 為例,學生在數學中所學到的代數、等號以及方程 式的知識並不足以協助他們在實作程式題目時建構變數、代入及迴圈概念。 Perkins 與 Martin(1986)認為學生在犯下程式錯誤的原因,並不完全是因為 學生缺乏所需的知識,而可能是有部分缺漏或誤解。他們將其稱之為脆弱知識, 並分為以下四種: 1. 局部知識:學生僅擁有該知識的局部片段。. 2. 惰性知識:學生擁有該知識,但無法在需要時取用。 5.

(14) 3. 錯置知識:學生擁有該知識,但使用在錯誤的地方。. 4. 混用知識:學生將不同的知識混雜在一起。. 另一方面,計畫組織型的錯誤多發生於學生將不同的程式片段整合為完整程 式的過程中,因為缺乏整體性的規劃使得程式有所缺漏無法正常運行,如未進行 邊界錯誤的阻擋。Spohrer、Soloway 與 Pope(1985)將計畫組織目標程式時所需 進行規劃設計的計畫元件(plan components)分為:(1)輸入;(2)輸出;(3)初始值; (4)資料更新;(5)防護措施;(6)語法;(7)整體計畫。並將計畫組織時會發生的錯 誤分為以下四種類型: 1. 缺乏(Missing):未進行計畫元件的實作。. 2. 異常(Malformed):計畫元件未實作完全或有錯誤。. 3. 偽造(Spurious):實作了不屬於計畫中的元件。. 4. 錯位(Misplaced):計畫元件有實作,但位置錯誤。. Spohrer、Soloway 與 Pope(1985);Kopec、Yarmish 與 Cheung(2007)及 Kopec 與 Yarmish(2007)實際統計分析學生在 Pascal 及 C 程式語言中的程式錯 誤發現,學生最常犯的程式組織錯誤多屬於異常及缺乏兩類。Kopec 與 Yarmish (2007)更進一步提出若是能清楚呈現程式題目將有助於學生理解題意及規劃解 題計畫。 Ebrahimi(1994)發現程式語言結構以及計畫組織這兩種類型的錯誤發生量 具有高度相關,意即若學生常犯下語言結構類的程式錯誤,他同時也較容易犯計 畫組織型的錯誤。 另外有部分的迷思概念是源自於學生對電腦的能力具有不切實際的幻想,Pea (1986)將這些與特定程式語法無關的錯誤觀念分為以下三種: 1. 排比型(Parallelism bug):認為程式可以同時執行多段程式碼。 2. 意向型(Intentionality bug) :認為電腦會在執行過程中具有自動完成的能 力。 6.

(15) 3. 心之所向型(Egocentrism bug):認為電腦會自動補足程式設計者遺漏的 部分,或可以正確的將寫錯的序數修正。 Lahtinen、Ala-Mutka 與 Järvinen(2005)針對 559 名學生和 34 名教師所進行 的問卷調查統計結果顯示學生在進行程式設計時最容易遭遇到的困難有(1)設計 程式以處理特定任務;(2)將程式依所需的功能化分為數個程序;(3)從自己的程式 中找出錯誤。在程式概念方面,學生較難理解的概念包括遞迴(recursion) 、指標 與參照(pointers and reference) 、抽象資料型態(abstract data type)及錯誤處理(error handling)。Ragonis 與 Ben-Ari(2005)及 Chen、Cheng 與 Lin(2012)統整學生 使用 Java 學習物件導向程式設計時常見的迷思及迷失概念,發現學生之所以無法 順利解答程式題目,是由於(1)無法記住程式語言語法規定,如無法正確定義靜態 資料成員及常數、建立物件、迴圈、方法的呼叫;(2)缺乏對程式碼實際運作情形 的理解,特別是 for-each 及 for 迴圈的控制及運作流程,以及方法的參數回傳方 式;(3)不了解物件導向概念,如靜態資料成員、方法重載、建構式及常數與變數 的差異等,進而導致未進行宣告、呼叫或誤用;(4)對程式概念未完全理解,如將 建構式與一般方法混淆、資料定義位置錯誤等。 除此之外,由於程式設計教學的過程中教師及教科書皆提供學生「絕對正確」 的程式碼範例,因此造成許多學生在遭遇程式錯誤時缺乏解決錯誤的能力。 Ahmanzadeh、Elliman 與 Higgins(2005)指出,一個好的程式設計者,未必同時 是一個好的除錯者,學生在除錯時需要掌握的能力包含(1)對程式的執行目標;(2) 目前程式的實際狀況;(3)錯誤內容;(4)針對錯誤的處理方法。其中最為重要的是 對程式現況的理解能力,學生不僅需要能夠讀懂程式碼,並且還要能夠透過輸 入、輸出等資訊判斷程式運作情形,藉此找出錯誤進行處理。Vainio 與 Sajaniemi (2007)發現學生在追蹤(tracing)程式碼中的困難包含難以追蹤變數值的變化、 程式結構及函式的混淆、無法有效的使用其他程式表示方式及無法提升至抽象思 考層面,究其原因除了學生缺乏對程式語言語法結構及程式概念上的專業知識, 7.

(16) 還牽扯到程式呈現的方式及相關輔助工具(如流程圖)的使用。教師應該要協助 學生學習及掌握除錯技巧,以增加學生的自信及學習動機。 綜上所述,學生在學習程式設計時,從各語言專屬的語法結構,到共通的問 題解決層面都有可能遭遇學習困難。教學者應透過學生所遭遇到的困難,分析理 解學生在知識上的誤解或缺失,並規劃合適的教學方法,以期培養學生在程式設 計能力的提升。. 第二節 Alice 程式設計 一、Alice 程式語言與特色 Alice 為美國卡內基美隆大學所研發之 3D 程式設計環境,它讓使用者可以輕 鬆的創造和操控一個 3D 的虛擬世界,並用它來述說故事、製作互動式遊戲或是 動畫影片(http://www.alice.org/) 。Brown(2009)認為,作為一個入門程式語言, Alice 具有以下優勢: 1. 情境式設計環境: 在 Alice 中,每一個程式即為一個 3D 的虛擬世界,設計者透過編寫程式來操 控、改變這個世界中的事物。Alice 提供了豐富的物件及控制物件動作的方法 及函式,透過這些,程式設計者可以輕鬆的製作出逼真的 3D 世界。 2. 3D 動畫呈現: 當 Alice 程式執行時,虛擬世界便會依照程式碼產生動作和變化,並以動畫的 形式呈現執行結果。程式設計者可以立即清楚地從動畫觀察到程式的執行狀 況,同時可對應至編寫的程式碼。Ward(2009)認為透過動畫的輔助,可以 將部分抽象的程式概念轉化為實際可以觀察到的現象,有助於學生學習程式 設計概念、進行知識保留及享受程式設計的過程。 3. 拖放式程式設計環境: Alice 使用視覺化程式設計環境(visual programming environment),將程式的 8.

(17) 各種指令、語法及結構,作成模組化的標籤,程式設計者僅需透過「拖曳- 放置標籤」即可編寫程式。透過這種程式編寫方式,學習者除了可以避免語 法錯誤(syntax error) ,更可以將心力集中於了解語意和解決問題的方法(Ko, 2004; Kelleher, Cosgrove, Culyba, Forlines, Pratt, & Pausch, 2002)。 這些優點使得學生在寫程式的過程中,發展出良好的程式設計技巧,如先行 規劃演算法在上機實作、願意嘗試及挑戰錯誤、編寫專用函式等(Cooper, Dann, & Pausch, 2003)。. 二、Alice 程式設計教學相關研究 很多初學者之所以無法順利解題,是由於他們在寫程式的過程中無法將所學 到的程式設計概念對應到所寫的程式碼(Dann, Cooper, & Pausch, 2000)。由於 Alice 讓學生可以看到程式執行的過程,學生得以將程式碼對應至實際執行的結 果,因此可以使學生更容易將發生的問題描述清楚、拆解題目及思考方法處理拆 解後的問題,進而發展出演算法式的思考模式,增進學生問題處理的能力(Cooper, Dann, & Pausch, 2000a)。而「編寫程式即為製作動畫」的這個特性,不僅降低學 生對於程式的排斥感,也增加學生學習的動機。Adams(2007)更發現,Alice 的 3D 動畫呈現使得學生在遭遇程式邏輯錯誤時,會覺得動畫中錯誤的演出看起來 很有趣或好笑,進而降低學生的挫折感。 在動畫製作上的高完成度,使得 Alice 可以將許多抽象的程式概念透過動畫, 以具體的形式呈現,因此相當適合作為教導程式設計概念的入門程式語言。 Zaccone、Cooper 與 Dann(2003)於大學一年級的資訊科學選修課程中,透過 Alice 來教導學生物件導向的程式設計概念,課程內容包含物件、物件方法、參數、 繼承及判斷條件等概念。超過 2/3 的學生可以順利的理解課堂中所學習到的程式 概念,並實作出 Alice 程式。林恬忻(2007)發現在克服英文介面的問題後,國 中的學生也可以順利的使用 Alice 編寫程式及學習程式概念。除此之外, Alice 9.

(18) 獨有的視覺化物件,如視覺化陣列、視覺化串列等,使得 Alice 比起其他類似的 程式語言(如 Scratch、Greenfoot)更能清楚呈現進階的演算法及程式概念(Ward, 2009)。 與傳統的文字式程式語言(如 C++、Java)相比,學生透過 Alice 程式語言 來學習程式設計概念除了更容易理解程式概念,而且在寫程式的過程中,對教師 協助的依賴性相對較低,學生可以用更快的速度完成程式作業,將多餘的時間和 心力花費在解決問題及除錯上。在課堂上的良好表現也使得使用 Alice 的資訊科 學課程的通過率、學習成績都較使用傳統文字語言的課堂為優(Sykes, 2007; Brown, 2008; Mullins, Whitfield & Conlon, 2009; Wang et al, 2009)。 但是 Alice 並非被認為是沒有缺點的,Alice 程式本身有著系統不穩定、資源 佔用過多等缺點。而其所使用的拖放式程式設計環境,雖然能有效降低程式編寫 的難度,但也有著拖放步驟過於繁鎖不夠直觀,以及不易轉換至目前業界慣用的 文字介面程式語言的問題存在。但若以課堂使用的來看,這些問題大多可以透過 課程設計和教師授課方式加以避免(Powers, Ecott, & Hirshfield, 2007; Brown, 2008; Ward, 2009; Wang et al, 2009)。. 10.

(19) 第三章. 研究方法. 第一節 研究方法 本研究旨在探討 Alice 程式設計初學者實際進行程式設計時,對於不同的程 式設計概念所面臨的困難與問題類型,所使用的研究方法為一對一的診斷性訪談 (clinical interview,亦譯為臨床晤談)。根據謝如山(2004)所譯的書中所述, 診斷性訪談是由皮亞傑(Jean Piaget)所發展出來的研究方法。其目的為透過訪 談者與受訪者的互動過程中,訪談者的引導提問及觀察,能夠深入瞭解受試者的 想法、認知過程、心智如何作用及問題解決概念等。 診斷性訪談可視為一種半結構化的訪談方式,實施的步驟為:訪談者事先根 據欲瞭解的主題訂定一些相關的題目,詢問受試者這些題目並觀察其回應,然後 根據這些回應提出更進一步的問題,以釐清受試者的認知內容及思考方式。診斷 性訪談的主要特色如下(引自謝如山,2004,p. 34): . 活動一開始的標準化. . 將活動所圍繞的主題以具體物表示. . 「你是如何做的?」或是「為何這麼做」的問題. . 立刻解讀受訪者的回應. . 現場擬定假設並加以測試。. . 即興發問的自由. 診斷性訪談被應用於許多學習領域上,而本研究欲透過診斷性訪談以深入瞭 解學生在實作 Alice 程式專案實的思考方式,期望找出學生在使用 Alice 學習程式 概念時容易產生的錯誤類型及其成因。. 11.

(20) 第二節 實施程序 本研究共進行三天,分為六個時段,每個時段為 2.5 個小時,單一時段至多 有 4 名參與研究之學生同時進行解題,每位學生均配置一位訪談者坐於其身旁觀 察其解題過程。單一時段之實施程序如圖 3.1。 實驗開始. 實驗目的說明 題意說明. 選擇起始題目. 進行下一題. 否. 進行解題. 完成第九題 或到達限制時間 是 實驗結束 圖 3.1 實驗實施程序. 在學生正式進行解題之前,研究者先對其說明實驗目的、設置訪談者的用 意,並搭配題目動畫影片,說明各題題意。學生可依照自己的能力選擇九題中任 何一題開始解題,並依序完成該題及後續的題目,直到完成最後一題,或是限定 時間 150 分鐘用完為止。學生於實作任何一題時,可反覆觀察研究者錄製的影片, 以了解題目要求。 在每位參與學生身邊均配置一位訪談者,其功能除了實際觀察參與者使用 12.

(21) Alice 進行解題的過程,記錄其於解題過程中所遭遇的困難與迷思概念之外,同時 擔任該生的引導者,於該生解題陷入膠著時視情況介入,適時提供相關的引導提 問或操作指導,助其順利解決問題。以下分別說明訪談者所提供之協助形式及特 性。 當學生初次遭遇問題時,訪談者先使用引導式提問。此種提問屬於解題策略 層面的一般性問題,適用於所有題目,例如: 「你打算如何解決這個問題?」 、 「你 要不要再看一次影片以確認這一題應有的執行結果?」 、 「可以告訴我這一段程式 碼是在做什麼嗎?」 、 「你知道XX指令的功能是什麼嗎?」皆屬引導式提問的範 疇。 若引導式提問無法協助學生順利解題,訪談者會根據學生所遭遇的困難提供 進一步的提示,試圖將學生導向正確的解題方向。這種類型的提示我們稱之為「間 接提示」,例如「你知道有哪個控制結構是用來讓動作同時執行的嗎?」、「這個 重複結構的判斷條件該怎麼寫才能讓迴圈重複執行 3 次?」 、 「使用者輸入的數值 該怎麼做才能將它保留起來?」 、 「resize 這個方法的作用是改變這個物件的大小, 後面的值是它的縮放倍率,這裡的倍率該填多少呢?」等等。 若訪談者給予學生若干引導提示後仍無法協助其正確解題,訪談者將進行 「直接指導」,意即將所需使用之程式指令或修改方法直接告知參與者,或進行 示範操作以幫助學生完成解題,例如「將控制結構 loop 拖曳至程式中,並設定後 面的重複次數為 3」、「將設定變數值的那一行程式碼移到第一行」等等。訪談者 於提供直接指導時,會針對該指令或作法進行概念解說,幫助學生理解相關概 念,以利學生順利進行後續的解題。 在一般情形下,訪談者將會依照「引導式提問」、「間接提示」、「直接指導」 的順序在學生遭遇困難時進行協助,但訪談者亦得視學生的個別狀況,直接使用 「間接提示」、甚至「直接指導」以協助學生克服解題困難。. 13.

(22) 表 3.1 診斷性訪談測驗範例提示(第 1 題) 觀察者:. 被觀察學生:. 開始時間:. 結束時間:. Q1、在場景中建立一隻兔子,在執行階段讓兔子做以下動作:. . 1. 兔子說「Jump 1.」,持續 2 秒。. 2. 讓兔子作以下動作(2.1 與 2.2 同時發生) 2.1. 兔子 2 秒內由白色變成其它顏色(例 brown). 2.2. 兔子 2 秒內完成跳躍的動作(2.2.1 及 2.2.2 兩個動作依序發生) 2.2.1. 兔子 1 秒內往上跳 1meter. 2.2.2. 兔子 1 秒內往下跳 1meter. 3. 兔子說「Jump 2.」,持續 2 秒。. 4. 讓兔子作以下動作(4.1 與 4.2 同時發生) 4.1. 兔子 2 秒內變成另外一種顏色. 4.2. 兔子 2 秒內完成跳躍的動作(4.2.1 及 4.2.2 兩個動作依序發生) 4.2.1. 兔子 1 秒內往上跳 1meter. 4.2.2. 兔子 1 秒內往下跳 1meter. 本題建議使用的提示內容 1.. 引導式提問:請說出這一題要求你做什麼?. 2.. 引導式提問:請觀察那些動作先後發生?那些動作同時發生?. 3.. 間接提示:什麼樣的控制結構可以讓兩個以上的動作同時發生?. 4.. 間接提示:什麼樣的控制結構可以讓兩個以上的動作依序發生?. 5.. 間接提示:如何選取適當的指令讓人物可以跳躍?. 6.. 間接提示:如何選取適當的指令讓人物可以說話?. 7.. 間接提示:如何選取適當的指令讓人物可以改變顏色?. 8.. 直接指導:若經過以上提示後,學生仍無法解決問題,就直接告訴學生該用什麼指 令. . 本題實際使用的提示內容 型態. 序 號 1. 直接使用以上第 引導式提問. 提示內容. 個提示. 經過提示後,是否有解決問題. 是. 否. 經過提示後,是否有解決問題. 是. 否. 間接提示. 直接指導 2. 直接使用以上第 引導式提問. 個提示 間接提示. 直接指導. 14.

(23) 第三節 參與者 本研究以臺北市 N 高中一年級的 22 名學生為研究對象,其中包含男生 10 人、女生 12 人,這些學生皆為自願參加。這 22 名學生來自三個不同的班級,他 們在一年級的資訊概論課程中皆已學過 Alice 程式設計的基本知識與實作技巧。 這三個班級的資訊概論科授課教師以及授課內容都相同,同時因該校學生之基測 成績相近,且學校採取常態編班,因此學生的先備知識與能力分布可視為近似。 在訪談者的部分,本次研究中共有四人擔任訪談者,其中兩位為高中、職電 腦教師;另一位任教於大專資訊管理系,教授程式設計課程,皆具有豐富的教學 經驗;最後一位訪談者即研究者本人。以上四人皆對於程式設計的技巧與實作, 以及 Alice 的操作有著相當程度的精熟。另外,研究者於實驗前召開會議向訪談 者說明實驗方法、實驗工具、提示類別及範例,以確保訪談者介入學生解題過程 以及觀察記錄上的一致性。表 3.1 為實驗前會議中,研究者所提供之第一題實作 題目內容及該題範例提示。. 第四節 資料收集工具 本研究設計了 9 題實作題目供研究對象進行解題以收集研究資料,同時以 軟、硬體記錄研究對象的解題過程,以下分別詳述之。 一、實作題目: 研究者根據學生過去的學習經驗與電腦課程內容,列舉出初學 Alice 程式設 計者應學會的程式設計概念,包含物件、內建方法(built-in methods) 、運算式、 內建函式、變數、選擇結構、重複結構、陣列、自訂方法(user-defined methods) 和參數,再針對這些概念設計了 9 個複雜度漸進的 Alice 程式設計題目,並由三 位現任高中職電腦科教師進行審閱,再根據其意見進行修正與調整。 每個實作題目均包含複數的程式概念,題號越大的題目所包含的程式設計概 念越多,並且涵蓋之前的題目所使用的概念。如此安排的目的為若是學生依照題 15.

(24) 號順序進行實作的話,每一題基本上都只需要增加一個程式概念,方便研究者觀 察學生於個別概念中所犯的錯誤;若是學生直接自較複雜的題目開始實作,亦可 觀察到他在之前題目中所包含的程式概念中犯錯的情形。. 表 3.2 題目與程式觀念對應表 程式構句 (Programming Constructs). 第 一 題. 第 二 題. 第 三 題. 第 四 題. 第 五 題. 第 六 題. 第 七 題. 第 八 題. 第 九 題. 物件. V. V. V. V. V. V. V. V. V. 內建方法. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. V. 時序控制結構 運算式及內建函式 變數 選擇結構 重複結構(固定次數) 重複結構(不定次數) 陣列 自訂方法 參數. V. 基於 Alice 適於製作動畫的特性,上述題目之輸出結果均為動畫,因此我們 並未提供文字敘述的題目,而是將各題的執行結果錄製成影片,由參與研究的學 生於解題前播放,藉由觀察影片了解各題的要求。參與者必須寫出完整的 Alice 程式,以輸出各題所要求的結果。以下分別描述各題所需呈現之執行結果與該題 所欲測試之程式設計核心概念。 第一題:物件、內建方法及時序控制結構 本題(圖 3.2)要求程式設計者在場景中建立一個任意物件,於程式執行時 改變它的顏色,並使其進行跳躍的動作。換言之,程式設計者必須能宣告物件、 修改物件屬性(properties)以調整物件狀態,並使用方法(methods)使物件進行 16.

(25) 動作。此外,本題亦須使用控制結構 Do in order 和 Do together 來控制物件動作發 生的時序。. 在場景中建立一個任意物件。. 按下執行後,依序執行以下動作 1. 3. 物件說「Jump 1.」。. 2. 物件說「Jump 2.」。. 4. 讓物件同時執行動作 2.1 與 2.2。 2.1. 物件 2 秒內變成其它顏色。. 2.2. 物件 2 秒內完成跳躍的動作。. 讓物件同時執行動作 4.1 與 4.2。 4.1. 物件 2 秒內再次變成其它顏色。. 4.2. 物件 2 秒內完成跳躍的動作。. 圖 3.2 第一題程式執行示意圖. 第二題至第六題為一連續的題組,以內建方法 resize 為主題,每題依序加入 不同的程式設計概念。 第二題:內建函式 本題(圖 3.3)要求程式設計者在場景中建立任兩個身高互異的物件,於程 式執行時,改變矮物件的大小,使其與高物件同高。程式設計者必須使用物件的 17.

(26) 函式(functions)進行數學運算,並將其設定為物件內建方法所接收的參數。此 題依然需要使用第一題中運用內建方法與控制結構的技巧。. 在場景中建立兩個身高相異的物件(以下以身高較高的物件為物件 1,較矮的為物件 2). 按下執行後,依以下順序執行動作 1. 物件 2 同時執行動作 1.1 與 1.2: 1.1. 物件 2 說「Resize as high as (物件 1 之名稱).」 。. 1.2. 透過物件內建方法 Resize 來進行物件大小的改變,使得物件 2 放大至與物件 1 相同 身高。. 圖 3.3 第二題程式執行示意圖. 第三題:變數 本題(圖 3.4)要求程式設計者在場景中建立任兩個身高互異的物件,於程 式執行時,改變矮物件的大小,使其與高物件同高後,再恢復為原本身高。延續 前一題所使用的方法,本題新增之程式設計概念為變數(variable)的宣告與使用。 由於矮物件增高至與高物件同高後,必須再恢復為原身高,程式設計者必須使用 一個變數來儲存矮物件原本的身高,才能順利將矮物件縮小為原來的身高。. 18.

(27) 第四題:選擇結構 本題(圖 3.5)要求程式設計者在場景中建立任兩個身高互異的物件,於程 式執行時,先要求使用者輸入一個數字,並根據使用者輸入的數字進行動作。若 使用者輸入的數字為正數,則改變矮物件的大小,使其與高物件同高後,再恢復 為原本身高;若使用者輸入的數字為負數,則改變高物件的大小,使其與矮物件 同高後,再恢復為原本身高。本題加入選擇結構(if/else)的使用,程式設計者必 須能理解判斷條件的設定方法,並能依條件判斷結果執行相對應的動作,方能完 成此題。. 第五題:重複結構(固定次數) 本題(圖 3.6)要求程式設計者在場景中建立任兩個身高互異的物件,於程 式執行時,先要求使用者輸入一個數字,並根據使用者輸入的數字進行動作。若 使用者輸入的數字為正數,則重複改變矮物件的大小三次,使其與高物件同高 後,再恢復為原本身高;若使用者輸入的數字為負數,則重複改變高物件的大小 三次,使其與矮物件同高後,再恢復為原本身高。本題必須使用重複結構(loop) 進行實作。若程式設計者並未使用 loop,而是以複製目標動作程式碼三次作為解 題方法,訪談者將介入提問,以確保程式設計者使用重複結構進行解題。. 第六題:重複結構(不定次數) 本題(圖 3.7)與第五題相似,差別僅在於重複執行的次數乃是由使用者於 程式執行時輸入之數字所決定;換言之,本題著重於透過變數來控制重複結構的 執行次數。程式設計者必須正確處理變數並運用於重複結構之中,程式方可正確 執行。. 19.

(28) 在場景中建立兩個身高相異的物件(以下以身高較高的物件為物件 1,較矮的為物件 2). 按下執行後,依以下順序執行動作 1.. 物件 2 同時執行動作 1.1 與 1.2 1.1. 物件 2 說「Resize as high as (物件 1 之名稱).」 。. 1.2. 透過物件內建方法 Resize 來進行物件大小的改變,使得物件 2 放大至與物件 1 相同 身高。. 2.. 物件 2 同時執行動作 2.1 與 2.2 2.1. 物件 2 說「Resize to former height.」。. 2.2. 透過物件內建方法 Resize 來進行物件大小的改變,使得物件 2 恢復原來的身高。. 圖 3.4 第三題程式執行示意圖. 20.

(29) 在場景中建立兩個身高相異的物件(以下以身高較高的物件為物件 1,較矮的為物件 2). 按下執行後,依以下順序執行動作 1.. 要求使用者輸入一個數字 N。. 2.. 若 N > 0,則依序執行動作 2.1 與 2.2。 2.1. 物件 2 同時執行動作 2.1.1 與 2.1.2。. 2.2. 2.1.1 物件 2 說「Resize as high as (物. 2.2.1 物件 2 說「Resize to former. 件 1 之名稱).」 。. height.」。. 2.1.2 改變物件 2 的大小,使得物件. 2.2.2 改變物件 2 的大小,使得物件. 2 的放大至與物件 1 相同身高。. 3.. 物件 2 同時執行動作 2.2.1 與 2.2.2:. 2 恢復原來的身高。. 若 N < 0,則依序執行動作 3.1 與 3.2。 3.1. 物件 1 同時執行動作 3.1.1 與 3.1.2。 3.1.1 物件 1 說「Resize as high as (物 件 2 之名稱).」 。. 3.2. 物件 1 同時執行動作 3.2.1 與 3.2.2: 3.2.1 物件 1 說「Resize to former height.」。. 3.1.2 改變物件 1 的大小,使得物件 1 的縮小至與物件 2 相同身高。. 3.2.2 改變物件 1 的大小,使得物件 1 恢復原來的身高。. 圖 3.5 第四題程式執行示意圖 21.

(30) 在場景中建立兩個身高相異的物件(以下以身高較高的物件為物件 1,較矮的為物件 2). 按下執行後,依以下順序執行動作 1.. 要求使用者輸入一個數字 N。. 2.. 若 N > 0,則重複執行動作 2.1 與 2.2 三次。 2.1. 物件 2 同時執行動作 2.1.1 與 2.1.2。. 2.2. 2.1.1 物件 2 說「Resize as high as (物. 2.2.1 物件 2 說「Resize to former. 件 1 之名稱).」 。. height.」。. 2.1.2 改變物件 2 的大小,使得物件. 2.2.2 改變物件 2 的大小,使得物件. 2 的放大至與物件 1 相同身高。. 3.. 物件 2 同時執行動作 2.2.1 與 2.2.2:. 2 恢復原來的身高。. 若 N < 0,則重複執行動作 3.1 與 3.2 三次。 3.1. 物件 1 同時執行動作 3.1.1 與 3.1.2。 3.1.1 物件 1 說「Resize as high as (物 件 2 之名稱).」 。. 3.2. 物件 1 同時執行動作 3.2.1 與 3.2.2: 3.2.1 物件 1 說「Resize to former height.」。. 3.1.2 改變物件 1 的大小,使得物件 1 的縮小至與物件 2 相同身高。. 3.2.2 改變物件 1 的大小,使得物件 1 恢復原來的身高。. 圖 3.6 第五題程式執行示意圖 22.

(31) 在場景中建立兩個身高相異的物件(以下以身高較高的物件為物件 1,較矮的為物件 2). 按下執行後,依以下順序執行動作 1.. 要求使用者輸入一個數字 N。. 2.. 若 N > 0,則重複執行動作 2.1 與 2.2 N 次。 2.1. 物件 2 同時執行動作 2.1.1 與 2.1.2。. 2.2. 2.1.1 物件 2 說「Resize as high as (物. 物件 2 同時執行動作 2.2.1 與 2.2.2: 2.2.1 物件 2 說「Resize to former. 件 1 之名稱).」 。. height.」。. 2.1.2 改變物件 2 的大小,使得物件. 2.2.2 改變物件 2 的大小,使得物件. 2 的放大至與物件 1 相同身高。. 3.. 2 恢復原來的身高。. 若 N < 0,則重複執行動作 3.1 與 3.2 |N|次。 3.1. 物件 1 同時執行動作 3.1.1 與 3.1.2。 3.1.1 物件 1 說「Resize as high as (物. 3.2. 物件 1 同時執行動作 3.2.1 與 3.2.2: 3.2.1 物件 1 說「Resize to former. 件 2 之名稱).」 。. height.」。. 3.1.2 改變物件 1 的大小,使得物件. 3.2.2 改變物件 1 的大小,使得物件. 1 的縮小至與物件 2 相同身高。. 圖 3.7 第六題程式執行示意圖 23. 1 恢復原來的身高。.

(32) 在場景中建立視覺化陣列(ArrayVisualization),並在上面放置任意五個身高互異的物件. 按下執行後,依以下順序執行動作 1. 要求使用者輸入一個數字 N。. 2. 若 N > 0,則依序使陣列上的每個物件同時 執行動作 2.1、2.2。 2.1. 2.2. 3. 若 N < 0,則依序使陣列上的每個物件同 時執行動作 3.1、3.2。. 透過物件內建方法 Resize 來進行物. 3.1. 透過物件內建方法 Resize 來進行物. 件大小的改變,將該物件的身高調. 件大小的改變,將該物件的身高調. 成和最左邊的物件一樣高。. 成和最右邊的物件一樣高。. 讓該物件右轉 1/4 圈。. 3.2. 讓該物件左轉 1/4 圈。. 圖 3.8 第七題至第九題程式執行示意圖. 第七題至第九題的程式執行結果皆相同,僅使用方法不同。因此在每題開始 前,訪談者將直接說明該題所需使用之程式設計概念,確保程式設計者使用符合 要求之概念進行解題。 第七題:陣列 本題(圖 3.8)要求程式設計者在場景中建立五個身高互異的物件,並將其 放置於視覺化陣列中。程式執行時,先要求使用者輸入一個數字,並根據使用者 輸入的數字進行動作。若使用者輸入的數字為正數,則陣列中所有物件依序改變 24.

(33) 物件大小與最左邊的人同高,並右轉 90 度;若使用者輸入的數字為負數,則陣 列中所有物件依序改變物件大小與最右邊的人同高,並左轉 90 度。本題要求程 式設計者正確地宣告視覺化陣列,並理解物件在陣列中位置與陣列索引值的對應 關係,方能順利對目標物件進行動作。. 第八題:自訂方法 本題的程式執行結果如第七題(圖 3.8) ,但要求程式設計者必須於程式中宣 告兩個自訂方法(user-defined methods) ,分別包裝輸入數字為正數或負數的兩種 對應動作。程式設計者必須理解如何宣告自訂方法,並於程式呼叫使用該方法。. 第九題:參數 本題的程式執行結果如第七題(圖 3.8) ,但程式設計者於此題中須將程式包 裝成一個自訂方法,並透過傳遞參數的方式,將使用者輸入的數字傳入自訂方法 中,以作為選擇結構判斷的依據。本題的重點在於如何宣告、傳遞與使用參數。. 二、資料收集工具: 本次實驗採用螢幕錄製軟體 PowerCam(http://www.powercam.com.tw)將參 與者的解題過程以錄影的形式進行記錄,同時運用軟體功能,搭配外接麥克風將 參與者與訪談者的問答及對話內容同步記錄。. 第五節 資料處理與分析 研究者將實驗過程中所錄製之影片進行逐字稿之謄錄,並根據訪談者與學生 在解題過程中的對話內容與行為,分析並歸類學生在各題中所遭遇之解題困難, 及訪談者所提供之協助。. 25.

(34) 第四章. 結果與討論. 本章共分為三節:第一節探討學生答題過程中所遭遇的困難,以及訪談者引 導及協助學生解題的情形;第二節整理訪談過程中發現的學生迷思概念;第三節 為綜合討論。本章所引用的逐字稿中,皆以 T 代表訪談者,S 代表學生。. 第一節 學生答題情形與困難點分析 本節說明研究者將螢幕錄影與對話錄音,在排除檔案損壞及錄音不清的資料 並轉換為逐字稿後,共取得男生 7 人、女生 6 人,合計 13 份資料中統整分析而 得之各題答題情形,包含學生答題過程中所遭遇的困難,以及訪談者如何提供協 助使學生能順利完成解題。. 第一題:物件、內建方法及時序控制結構 本題主要目標為測試學生使用 Alice 程式語言的基本能力,需要學生正確地 宣告物件,並透過使用物件內建的方法(method)和屬性(property)來操作該物 件,以及透過不同的時序控制結構來控制物件進行動作的順序。本題程式碼範例 如圖 4.1,此程式讓一個物件(如程式範例中的 rabbit)依序執行說話、改變顏色 及跳躍的動作,其中變色與跳躍動作須同時進行。 在本次實驗中,13 名學生在第一題中所發生的錯誤類型如表 4.1 所示。. 1. 新增動作物件 所有學生在新增動作所需的物件時,皆可順利完成「按下 Add Object 按鈕」、 「選擇並新增物件」這一連串新增動作物件的操作。. 26.

(35) 圖 4.1 程式碼範例-物件、內建方法及時序控制結構. 表 4.1 學生遭遇困難以及訪談者給予協助情形-物件、內建方法及時序控制結構. 解題目標. 遭遇的困難. 得到此協. 遭遇此 困難的. 訪談者給予的協助. 學生數 新增動作物件 控制物件動作. 助後順利 解決問題 的學生數. 所有學生皆能正確作答 無法使用 move 實作. 學生反問確認操作是否正. 2. 物件跳躍動作. 1. 確 提示跳躍動作是由移動上. 1. 及移動下構成 無法自屬性欄中拖曳. 7. color 進行顏色設定 動作時序控制. 提示應搜尋物件顏色. 2. 告知物件顏色位於屬性區. 5. 未取用同時控制結構. 2. 提示有動作需同時執行. 2. 未取用循序控制結構. 8. 學生反問確認操作是否正. 1. 確 提示應使用特定控制結構. 1. 告知應使用 do in order 控制. 6. 結構 無法正確組合同時及. 9. 詳細告知動作順序. 9. 10. 提示學生應設定時間. 10. 循序控制結構 未進行動作時間控制. 27.

(36) 2. 控制物件動作 在使用物件方法(method)及屬性(property)來控制物件進行動作時,所有 學生皆能理解並正確使用內建方法 say 來實作說話動作。但在實作物件跳躍動作 時,有 2 名學生無法立刻反應需使用兩個移動方法(move)來組合出跳躍動作。 其中 1 名學生無法確定自己的動作是否正確,向訪談者反問進行確認: S01_Q01 S:(完成新增物件 bunny) S:老師,是 move 嗎? T:你先看第一個動作是什麼? S :(開啟 Q1 題目影片) S:要說話。 S:(將 bunny say 拖曳至主程式區,並設定說話內容為 jump1) S:跳是這個吧?(指 bunny move) T:對啊。. 另外 1 名學生則需訪談者更進一步,提示跳躍動作是由 move up 及 move down 兩個動作構成: S02_Q01 T:他的第一個動作是什麼,你要不要再看影片確認一下? S:(開啟 Q1 題目影片) S:(將物件區 rabbit 拖曳至主程式區,並在選單選擇 say 後設定說話內容為 jump1) S:(將左上方 rabbit 拖曳至主程式區,並在選單選擇 move 後,在 move 設定選單上猶疑) S:跳的話是這個嗎? T:跳的動作是不是先上再下? S:(選取 up 0.5 meter,完成 rabbit move 設定) T:那個高度你自己設。 S:(複製 rabbit move up 0.5 meter 並修改為 rabbit move down 0.5 meter). 約半數的學生(7 名)不知道改變物件顏色的做法為從物件屬性區(properties) 中拖曳顏色屬性至程式中,或是直接將物件拖曳至程式後,於選單中選擇 set color to 選項便可進行改變顏色設定。其中有 2 名學生在訪談者提示需尋找物件顏色之 後,可以找到並進行顏色設定,例如: 28.

(37) S11_Q01 S:老師,變色怎麼做? T:你覺得顏色會是什麼東西?會是動作嗎? S:他應該是一個 function。 T:顏色的英文是什麼? S:Color。 T:那就去找 color 。你現在選的是 head,你要選整支兔子。 S:(點選左上方物件區 rabbit) T:這是動作,methods 都是動作 S:(點選 properties 標籤) S:(將 color 拖曳進主程式區,並設定為 bunny set color to red). 另外 5 名學生在訪談者明確告知物件顏色位於屬性區後,方能找到並拖曳顏 色屬性至程式中進行設定,例如: S12_Q01 T:兔子有顏色,它會放在哪裡? S:(右鍵點擊物件區 bunny,瀏覽選單) S:兔子的顏色應該在… S:(右鍵點擊主畫面中 bunny2,瀏覽選單後,點擊 bunny2 upper body 選擇兔子的上半身) T:像身高是兔子的一部分,顏色也是兔子的一部分,所以它會放在哪裡? S:他會放在哪裡… T:如果先不要管變色的話,你覺得兔子的身高、位置、顏色,會放在哪裡? S:儲存檔案裡。 T:就是這邊(指 properties),這邊有兔子的顏色 S:(將 color 拖曳進主程式區,並設定為 bunny2 upper body set color to red). 3. 動作時序控制 在本題中,需要使用同時控制結構 do together 及循序控制結構 do in order 來 控制物件動作的發生順序,以下先分別討論學生取用此兩種控制結構所遭遇的困 難,再討論學生在組合兩者完成題目時所遭遇的困難。 有 2 名學生在操作過程中,未注意到有特定動作需要同時執行,但在訪談者 提示後,便可正確取用同時控制結構 do together,例如:. 29.

(38) S12_Q01 T:你覺得這樣跟影片一樣嗎? S:讓我比對一下。 S:(開啟 Q1 題目影片) T:你覺得一樣嗎? S:嗯。 T:你做的是兔子跳到半空中之後,再變顏色。 S:喔,他是邊跳邊變。 S:(將 Do together 拖曳進主程式中,並將兔子跳上及變色的程式碼拖曳至 Do together 中). 在使用同時控制結構 do together 時,有部分學生(8 名)會將跳躍(move up 及 move down)及改變顏色(set color)的程式碼全部放置於同一個 do together 結構中,以致因為向上移動及向下移動兩個動作彼此抵銷,使得物件無法產生跳 躍動作,僅改變顏色(如圖 4.2 所示) 。也有學生僅將向上移動及改變顏色程式碼 放置於同一個 do together 結構中,使得物件顏色改變,卻未與整個跳躍動作同時 執行結束(如圖 4.3 所示) 。這些學生會發生這樣的錯誤,乃是因為未取用循序控 制結構 do in order 來協助控制物件處理順序。. 圖 4.2 程式碼範例-時序控制錯誤情形 1. 圖 4.3 程式碼範例-時序控制錯誤情形 2. 30.

(39) 其中有 1 名學生在比對執行結果及題目影片後向訪談者反問確認是否需要取 用控制結構 do in order: S04_Q01 T:它是整隻變紅以後才跳下來嗎?你再看一下影片。 S:(開啟 Q1 影片) S:是要用這個(指 do in order)嗎? S:(將 do in order 移入 do together 中). 另有 1 名學生由訪談者提示應取用控制結構中的其中一個後,猜測應選用 do in order,訪談者於學生取用後向學生講解 do in order 的用途: S11_Q01 S:(按下 PLAY 進行測試,發現 bunny 跳上同時變色完再跳下) S:(打開 Q1 題目影片) T:在下面這些控制結構裡面…有沒有哪些你學過的控制結構你現在還沒用到的? S:(將 do in order 拖曳至主程式區) T:好,這是什麼? S:Do in order。 T:Do in order 是什麼? S:不太記得,他應該跟這個(指 do together)差不多吧? T:Together 是… S:一起。 T:In order 就是依序。 S:依序。. 其餘 6 名學生則需要訪談者直接告知需使用 do in order 控制結構來處理依序 執行的動作,例如: S09_Q01 T:你想想看,跳上跟跳下要依序發生還是同時發生? S:依序。 T:依序,對。那下面有哪一個控制結構是依序的? S:(尋找結構控制列約 30 秒) T:就是 do in order。 S:那不是「另外做」嗎?. 31.

(40) 即便在順利取用兩種時序控制結構後,仍有 9 名學生因無法順利將其組合, 而無法完成目標動作,這些學生皆由訪談者詳細講解物件動作,並告知兩種時序 控制結構的組合方式後方能解題,例如: S06_Q01 T:你想想看這邊變顏色這個動作應該跟誰同步? S:跳上跟跳下。 T:就是跳上跟跳下,變顏色要跟這兩個同步。那跳上跟跳下這兩個動作要怎麼樣? S:要有先後。 T:又要有先後,那你想想看這要怎麼拉? S:(將 do together 拖曳至主程式區,並 do in order 移入 do together) S:(按下 PLAY 進行測試,發現兔子仍依序執行跳上、變色、跳下的動作) T:你這樣這(do in order)裡頭三個(rabbit move up、rabbit set color、rabbit move down) 還是循序不是嗎? S:(將 do in order 移出 do together 後刪除 do together) S:(將 do together 拖曳至 do in order 中) T:你是 do together 裡頭應該要有 do in order,do together 裡頭先一個變顏色的動作… S:(將 do together 移出 do in order) T:然後再用一個 do in order 分別做… S:(將 do in order 中的 rabbit set color to red 移入 do together 中) S:(將 do in order 移入 do together). 完成上述動作後,大多數的學生(10 名)未能注意到變色動作與跳躍動作並 非同時執行完畢,需要更進一步修改動作執行時間加以控制,需要訪談者提示學 生進行指令執行時間的設定,例如: S12_Q01 T:還差一點點,你仔細觀察一下他變色的情況。 S:(開啟 Q1 題目影片) S:漸層。 T:就是他是他跳下來才變色完成。 S:(調整物件 cat 的大小和位置) S:(按下 PLAY 進行測試) S:跳下來才變完…時間嗎? T:嗯。 S:時間… 32.

(41) S:(點擊 cat set color 的 more 選單,將 duration 設成 0.5 sec) S:(按下 PLAY 進行測試,發現貓還沒跳到最頂就變完顏色) S:(將 setcat set color 的 duration 調整為 0.25 sec) S:(按下 PLAY 進行測試,發現貓還沒跳到最頂就變完顏色) S:(將 setcat set color 的 duration 調整為 2 sec) S:(按下 PLAY 進行測試,發現貓變顏色過程與整個跳躍動作同步). 第二題:內建函式 本題需要學生在宣告兩個身高互異的物件後,使用物件內建方法 resize 來改 變其中較矮的物件大小,使其放大至與較高物件同樣高度。學生必須了解方法 resize 的功能,並且取用物件內建的函式 height(身高)用於倍率計算,進行正確 的縮放倍率設定,方可完成本題。本題程式碼範例如圖 4.4,此程式讓一較矮物 件(如程式範例中的 plato)透過方法 resize 來改變大小為和較高物件(如程式範 例中的 aliceLiddell)同樣高度,同時在放大過程中說話。 本題共有 13 名學生作答,學生答題所遭遇到的困難及訪談者給予的協助統 整於表 4.2 中。. 圖 4.4 程式碼範例-內建函式. 1. 取用物件方法 resize 參與實驗的學生中,有 6 名學生不知道必需取用方法 resize 來改變物件大小。 其中 2 名學生在訪談者詢問改變大小是什麼動作以後,即可自行找到並選用方法 resize,例如: S07_Q02 T:你現在要做的動作是什麼? S:讓它變得跟它一樣大。 33.

(42) T:變大是什麼動作? S:這個(指向方法 resize)。 T:嗯。. 另外 4 名學生則需要訪談者直接告知需要取用方法 resize 以進行縮放的動 作,例如: S05_Q02 S:(將 dancer stand up 拖曳至主程式區,並點選 more 檢視選項,但未做任何設定) S:(按下 PLAY 進行測試,發現無任何改變) S:這一行(dancer stand up)是什麼啊? T:就是站起來阿,所以你知道有什麼指令可以用來做改變大小的嗎? S:(刪除 dancer stand up) S:(尋找 method 及 function 約 20 秒). 表 4.2 學生遭遇困難以及訪談者給予協助情形-內建函式. 解題目標. 遭遇的困難. 使用方法. 不知道如何取用方法. resize 使目標. resize 實作改變大小. 訪談者給予的協助. 助後順利 解決問題 的學生數. 提問「改變大小」是什麼動. 6. 2. 作. 物件縮放 不知道方法 resize 後. 得到此協. 遭遇此 困難的 學生數. 13. 方數字意義. 告知須使用方法 resize. 4. 提問是否知道 resize 用法. 2. 告知 resize 後方數字為比例. 11. 或倍數 無法正確計算身高比. 11. 例. 無法正確取用物件身. 動作遺漏或時. 9. 提問兩物件比例如何計算. 2. 舉例說明比例計算方式. 7. 告知正確比例計算方式. 2. 學生反問確認操作是否正. 2. 高函式用於比例計算. 確. 式. 提問物件身高應如何取得. 4. 告知物件身高函式位置. 3. 提示觀看影片補齊缺漏動. 4. 說話動作缺漏. 4. 序錯誤. 作 未使特定動作同時執. 提示觀看影片有動作須同. 1. 行. 時執行 34. 1.

(43) S:不知道。 T:OK,那這邊往上拉,有個 resize。這個可以用來改變大小,它的功能是把東西變成… S:(將 dancer resize 拖曳至主程式,但未設定縮放倍率) T:…幾倍大?. 2. 理解方法 resize 的使用方式 所有學生在使用方法 resize 進行操作時,皆因不了解方法 resize 後方所接受 參數為縮放倍率,而無法順利完成目標動作。其中 2 名學生在訪談者詢問時可正 確回答後方數字代表倍數,例如: S09_Q02 S:(將 joey’s resize 拖曳至主程式區,將縮放倍率設為 2) S:是要用他的高度嗎? S:(拖曳 joey’s height) T:你想想看,他要跟企鵝一樣高。 S:(放棄拖曳的 joey’s height) S:(點擊左上方物件區 penguin) S:(拖曳 penguin height) T:他要跟企鵝一樣高。你想想看 resize 後面這個數字代表的意義是什麼,比如說 2,2 是… S:他的倍數 T:對,倍數。那所以你 resize 後面的數字應該怎麼算?. 其餘 11 名學生則皆由訪談者說明方法 resize 後方數字所代表的意義為比例或 倍數,例如: S07_Q02 S:(按下 PLAY 進行測試,發現 Euripides 放大至比 Alice 大) S:嗯? T:好,我們在來看一下 resize 這個動作,你回到 method,把 resize 拉出來看一下。 S:拉出來看一下? S:(將 Euripides resize 拖曳至主程式區) T:好,放開,你看一下他(指向放開產生的選單)…twice as big 就是兩倍大,所以說你現 在給他的值是多少倍大。如果照你現在程式這樣寫的話,就是告訴它要放大到 Alice 身 高的這麼多倍。 S:(取消用來解釋的 Euripides resize) T:你現在是要把他放大,用 Alice 的身高當作倍數,放大那麼多倍。但是它是要放這麼多 35.

(44) 倍嗎? S:不是。 T:那它應該要放多少倍?. 3. 縮放倍率之計算 13 名學生中,在知道方法 resize 後方數字為縮放倍率後,有 11 名仍因無法 正確計算兩物件身高比例而使執行結果發生錯誤。其中 2 名學生於訪談者提問比 例如何計算後即可拖曳正確比例計算式,例如: S01_Q02 T:你現在要做什麼動作? S:跟它(Alice)一樣高。 T:跟它一樣高,那這個比例要怎麼算? S:(點擊 resize 後方清單,將 Mana resize 設定為 Mana resize aliceLiddell’s height / 0.5) T:要除以誰? S:它(指 Mana)。. 有 7 名學生則在訪談者舉例說明比例關係後,能順利進行計算,例如: S04_Q02 T:你是不是要計算它比它大幾倍? S:嗯。 T:那要怎麼算? S:不知道。 T:好,那我問你 5 是 3 的幾倍大? S:5/3 倍。 T:是 5 去… S:除以 3。 T:除以 3 嘛,所以現在是要變成 Alice 的身高是… S:它(Alice)去除以它(Plato)。. 其餘 2 名學生由訪談者直接告知比例計算方式: S06_Q02 T:你先想想看這個縮放的比例要怎麼算? S:(在 pj resize howMuch = object only 的 more 清單中尋找) 36.

(45) S:(修改 pj resize howMuch = object only 為 pj resize howMuch = object and parts) T:其實就是 Alice 的身高除以小孩的身高啊!. 4. 物件身高函式的取用 在知道應使用物件身高比例作為縮放倍率後,有 9 名學生無法順利取用物件 的身高函式用於比例計算。其中 2 名學生對於自己的選擇有所疑問,向訪談者提 問確認,例如: S12_Q02 S:(瀏覽物件 aliceLiddell 的函式庫) S:Depth 是什麼? T:深度,就是你的這個(比畫身體厚度) S:高度是 height? T:對啊!高度是 height。. 另外 4 名學生在訪談者詢問物件身高如何取得後,即可自物件函式庫中拖曳 物件身高用於運算,例如: S06_Q02 T:你知道怎麼樣取小孩的身高嗎? S:(將左上方 pj 拖曳至 pj resize(pj.opacity / pj.opacity)的分母部分) T:你現在要選的是小孩子的身高,所以是物件資訊區。要選小孩還是 Alice? S:小孩。 S:(點擊左上物件區 pj) T:對,然後呢? S:(將 pj height 拖曳至縮放倍率分子). 其餘 3 名學生需訪談者直接告知物件身高函式的取得方式,例如: S11_Q02 T:你一個、一個看那個函數裡面有哪些東西可以讓你用的。 S:(尋找 Plato 函式庫約 15 秒) T:身高的英文叫什麼? S:身高?沒學過。 T:沒學過嗎?那你看一下這個是 size 嘛,size 裡面有什麼? S:體重(指 width) T:不是,這個是寬度,那這個(指向 Plato’s height)就是身高。 37.

(46) S:這個。 S: (將 Plato’s height 拖曳至 Plato resize 縮放倍率中). 5. 動作遺漏或時序錯誤 在完成物件縮放動作後,有 4 名學生未實作物件說話動作即認為程式完成。 在訪談者提示觀看影片確認是否完全完成後,4 名學生皆順利補上動作,例如: S05_Q02 S:(按下 PALY 進行測試,發現 dancer 放大至跟 Alice 同高) S:這樣嗎? T:對啊,那你要不要檢查一下影片看你還有沒有漏什麼? S:(開啟 Q2 題目影片) S:(將 do together 拖曳至主程式區) S:(將 dancer say 和 dancer resize 程式碼移入 do together 中). 另 1 名學生有實作物件說話動作,但未將其與縮放動作同步。該生於訪談者 提示有動作需要同時執行後,加入控制結構 do together 完成程式,例如: S01_Q02 T:你再回去看 QUICKTIME 的影片。 S:(開啟 Q2 題目影片) T:它有沒有邊說邊放大? S:有。 T:那這兩個動作要同時發生怎麼做? S:(將 do together 拖曳至主程式區) S:(將 Mana say 和 Mana resize 程式碼移入 do together 中). 第三題:變數 本題目標是為了測驗學生是否了解變數的宣告方式及使用方法。本題延續第 二題的程式,在較矮物件放大至與較高物件同高之後,再將它縮回原本的大小。 具體而言,學生需要宣告一個變數以儲存較矮物件改變前的身高,方可於第二次 resize 中順利將其縮為原始身高。本題程式碼範例如圖 4.5,此程式讓一較矮物件 (如程式範例中的的 plato)透過方法 resize 增高至與較高物件(如程式範例中的 aliceLiddell)同樣高度,並同時進行說話動作;完成後再復原,並同時說話。 38.

(47) 本題所有學生均有作答,其中 1 位學生不需訪談者給予任何提示即可正確作 答,其餘 12 名學生答題所遭遇到的困難及訪談者給予的協助統整於表 4.3 中。. 圖 4.5 程式碼範例-變數. 表 4.3 學生遭遇困難以及訪談者給予協助情形-變數. 解題目標. 新增變數. 遭遇的困難. 不知道必需使用特定. 得到此協. 遭遇此 困難的 學生數. 訪談者給予的協助. 解決問題 的學生數. 學生反問確認操作是否正. 12. 助後順利. 1. 物件(變數)儲存原. 確. 始身高. 提問如何儲存原身高. 2. 告知需使用變數來儲存原. 9. 始身高或比例 不知如何宣告變數. 學生反問確認操作是否正. 10. 3. 確 使用變數儲存. 未設定變數值. 10. 資料. 告知變數宣告方式. 7. 詢問要將何者指定給變數. 2. 告知設定變數值方式及儲. 8. 存對象 設定變數值程式碼位. 5. 告知應於改變前設定. 5. 7. 詢問應如何計算. 1. 詢問應使用何者進行計算. 6. 置錯誤 使用變數進行. 未將變數使用於縮放. 計算. 倍率計算. 39.

(48) 1. 新增變數 在 Alice 中,新增變數的方式為按下程式編輯區右上方的「create new variable」 按鈕,如圖 4.6 框線所示,在按下「create new variable」按鈕後會出現如圖 4.7 的 變數設定畫面,可在此進行變數名稱、類別等相關設定,設定完成後按下 OK 按 鈕即可完成變數宣告。. 圖 4.6 變數宣告按鈕位置. 圖 4.7 變數宣告選單. 在 12 名遭遇困難的學生中,其中 1 名學生在發現第二次使用 resize 時,無法 直接使用身高函式作為比例,順利將目標物件縮回原大小後,向訪談者確認是否 需要使用變數儲存,例如: S09_Q03 S:這邊需要用變數存嗎? T:這邊的確需要用到變數。那為什麼需要用到變數? S:因為它這邊會變掉(指第一次 resize). 40.

參考文獻

相關文件

聽、說、讀、寫,以 及分析、評價等能力 例:設計課業,讓學生 應用所學,並運用各

「僅僅靠事件的順序本身並不能構成情節。」「因

進而能自行分析、設計與裝配各 種控制電路,並能應用本班已符 合機電整合術科技能檢定的實習 設備進行實務上的實習。本課程 可習得習得氣壓-機構連結控制

 可利用 HTML 控制項 中的 Table 控制項進 行排版動作.  (最好將 Table

高中課程會多元化;讓學生有第二次機會而設計的其他教育 課程(例如毅進計劃及在中學試行的類似計劃),會因應新學

 是時舍利弗  偏袒而合掌   隨順轉法輪  請求最勝說   勸請於世尊  今正是其時 

將產出鍊輸入後,各訂單會依其最有利的時間排定 其生產順序,因此會發生個訂單擠在同一天等產能不足

住宅選擇模型一般較長應用 Probit 和多項 Logit 兩種模型來估計,其中以 後者最常被使用,因其理論完善且模型參數之估計較為簡便。不過,多項