張靜華
文章編號(hào):1672-5913(2009)08-0072-03
摘要:本文以“C++程序設(shè)計(jì)”課程為對(duì)象,探討了大學(xué)編程語(yǔ)言課的實(shí)例教學(xué)方法,進(jìn)行了C++程序?qū)嵗O(shè)計(jì),并提出構(gòu)建一個(gè)基于Web的程序?qū)嵗詫W(xué)系統(tǒng),彌補(bǔ)了課堂教學(xué)實(shí)例數(shù)量不足的問(wèn)題,同時(shí)在系統(tǒng)中提供了自適應(yīng)實(shí)例學(xué)習(xí)控制策略作為學(xué)生實(shí)例學(xué)習(xí)的指導(dǎo)。
關(guān)鍵詞:實(shí)例教學(xué);實(shí)例設(shè)計(jì);自適應(yīng);實(shí)例學(xué)習(xí)策略
中圖分類號(hào):G642
文獻(xiàn)標(biāo)識(shí)碼:B
1引言
在編程語(yǔ)言課的教學(xué)中,程序?qū)嵗哂蟹浅V匾囊饬x。好的實(shí)例設(shè)計(jì)有助于學(xué)生對(duì)內(nèi)容的理解;大量實(shí)例的累積可以達(dá)到量變到質(zhì)變的作用,使學(xué)生從看懂到領(lǐng)悟。在教學(xué)過(guò)程中,實(shí)例的選擇和對(duì)學(xué)生實(shí)例學(xué)習(xí)的指導(dǎo)都將對(duì)編程語(yǔ)言課的學(xué)習(xí)有很大幫助。本文以“C++程序設(shè)計(jì)”課程為例探討了實(shí)例教學(xué)方法。首先確定基于實(shí)例教學(xué)的總的思想和方法,然后重點(diǎn)探討實(shí)例的設(shè)計(jì)和一個(gè)基于Web的自適應(yīng)實(shí)例自學(xué)系統(tǒng)。
2基于實(shí)例的教學(xué)
C++課程基于實(shí)例的教學(xué)從兩方面入手。其一為教學(xué)中恰當(dāng)?shù)膶?shí)例選擇運(yùn)用;其二為課余時(shí)大量的實(shí)例提供與自學(xué)指導(dǎo)。具體包括:
(1) 實(shí)例運(yùn)用上注意實(shí)例的連貫性,若知識(shí)點(diǎn)相關(guān),則采用同一系列實(shí)例進(jìn)行擴(kuò)展,即題目?jī)?nèi)容相近,但針對(duì)不同知識(shí)點(diǎn)做局部改變擴(kuò)展,使能快速理解實(shí)例,并專注于教學(xué)點(diǎn)。
(2) 適當(dāng)采用實(shí)例的歸納、對(duì)比、類比等方法。如窮舉法,通過(guò)多種實(shí)例類比,說(shuō)明什么問(wèn)題可以用窮舉法解決;又如面向?qū)ο蟪绦蚣軜?gòu)與程序設(shè)計(jì)思想,通過(guò)對(duì)同一問(wèn)題進(jìn)行結(jié)構(gòu)化設(shè)計(jì)和面向?qū)ο笤O(shè)計(jì)的對(duì)比。
(3) 伴隨教學(xué)進(jìn)度分解一個(gè)復(fù)雜的綜合實(shí)例,逐步講解程序設(shè)計(jì)方法思想。采用問(wèn)題引導(dǎo)的方法,由綜合實(shí)例的某個(gè)步驟提出問(wèn)題,引出新知識(shí)點(diǎn),改進(jìn)程序,層次推進(jìn)至最終完成問(wèn)題。
(4) 每講完一次課程后,為學(xué)生總結(jié)本次課程的語(yǔ)法知識(shí)點(diǎn)和程序設(shè)計(jì)思想。提示下堂課將會(huì)涉及的前序知識(shí)點(diǎn),以及與下堂課有直接關(guān)系的前序?qū)嵗?,并提出預(yù)備問(wèn)題。布置與課堂實(shí)例的算法相似的程序作業(yè),學(xué)生能通過(guò)知識(shí)的直接遷移來(lái)完成作業(yè)。
(5) 要求學(xué)生在課余根據(jù)相應(yīng)知識(shí)點(diǎn)通過(guò)實(shí)例自學(xué)系統(tǒng)學(xué)習(xí)并練習(xí)相應(yīng)實(shí)例來(lái)達(dá)到進(jìn)一步的練習(xí)和提高,系統(tǒng)會(huì)根據(jù)學(xué)生在實(shí)例庫(kù)中的學(xué)習(xí)情況進(jìn)行相應(yīng)的控制指導(dǎo)。
3C++程序?qū)嵗O(shè)計(jì)
程序?qū)嵗脑O(shè)計(jì)是實(shí)例教學(xué)的重點(diǎn),通過(guò)對(duì)領(lǐng)域知識(shí)點(diǎn)的分析總結(jié),有針對(duì)性的進(jìn)行實(shí)例設(shè)計(jì)。同時(shí)實(shí)例之間并不是孤立的,有意識(shí)的設(shè)計(jì)了有聯(lián)系的各種實(shí)例組,形成系統(tǒng)的全面的實(shí)例庫(kù)。
3.1領(lǐng)域知識(shí)點(diǎn)總結(jié)
對(duì)于“C++程序設(shè)計(jì)”課程,領(lǐng)域知識(shí)點(diǎn)涉及兩個(gè)方面,其一為C++語(yǔ)法理解與應(yīng)用,其二為如何應(yīng)用程序設(shè)計(jì)思想解決實(shí)際問(wèn)題。
首先從語(yǔ)法角度開(kāi)始,每個(gè)語(yǔ)法考察點(diǎn)都是一個(gè)領(lǐng)域知識(shí)點(diǎn)。如:各種基本數(shù)據(jù)類型的長(zhǎng)度、文字常量表示、符號(hào)常量表示、變量定義和類型轉(zhuǎn)換等。
從程序設(shè)計(jì)角度講,程序設(shè)計(jì)相關(guān)理論方法技巧都是一個(gè)領(lǐng)域知識(shí)點(diǎn)。程序設(shè)計(jì)思想涉及遞歸、迭代、窮舉和分治等。程序設(shè)計(jì)方法與技巧包括數(shù)據(jù)設(shè)計(jì)、算法設(shè)計(jì)和程序架構(gòu)設(shè)計(jì)。數(shù)據(jù)設(shè)計(jì)包括簡(jiǎn)單數(shù)據(jù)設(shè)計(jì)、數(shù)組數(shù)據(jù)結(jié)構(gòu)應(yīng)用和結(jié)構(gòu)體應(yīng)用等;算法設(shè)計(jì)包括分支算法、循環(huán)算法、循環(huán)嵌套和循環(huán)與條件語(yǔ)句的嵌套等多種程序設(shè)計(jì)技巧;程序架構(gòu)設(shè)計(jì)包括函數(shù)設(shè)計(jì)和程序架構(gòu)組織。面向?qū)ο蟪绦蛟O(shè)計(jì)思想包括類的抽取與設(shè)計(jì)(屬性設(shè)計(jì)、方法設(shè)計(jì)、構(gòu)造方法設(shè)計(jì)、訪問(wèn)控制設(shè)計(jì))、應(yīng)用類屬性與類方法解決問(wèn)題,應(yīng)用類的聚合解決相應(yīng)問(wèn)題和應(yīng)用類間的消息連接解決相應(yīng)問(wèn)題等。
3.2基于領(lǐng)域知識(shí)點(diǎn)的實(shí)例設(shè)計(jì)
將C++程序?qū)嵗譃槿齻€(gè)層次:
(1) 純語(yǔ)法實(shí)例:用于演示基本語(yǔ)法,可以沒(méi)有實(shí)際含義;
(2) 算法實(shí)例:有一定實(shí)際意義的算法思想實(shí)例,用于演示程序設(shè)計(jì)思想和方法技巧;
(3) 綜合實(shí)例:需要多個(gè)知識(shí)點(diǎn)的綜合設(shè)計(jì)實(shí)例,重點(diǎn)演示解決問(wèn)題的思維方式和程序架構(gòu)。
純語(yǔ)法實(shí)例設(shè)計(jì)中,為每個(gè)語(yǔ)法知識(shí)點(diǎn)都設(shè)計(jì)若干相應(yīng)的語(yǔ)法實(shí)例程序,一個(gè)實(shí)例會(huì)涉及多個(gè)語(yǔ)法知識(shí)點(diǎn),但會(huì)有重點(diǎn)演示的語(yǔ)法知識(shí)點(diǎn)。將設(shè)計(jì)好的程序進(jìn)行題目設(shè)計(jì),通過(guò)總結(jié)學(xué)生作業(yè)、考試中的問(wèn)題,找出相應(yīng)語(yǔ)法容易出錯(cuò)的形式,設(shè)計(jì)了相應(yīng)的問(wèn)題形式,如讀程序?qū)懡Y(jié)果,程序填空,錯(cuò)誤辨析等。
算法實(shí)例一般都是解決實(shí)際問(wèn)題的題目,針對(duì)每個(gè)程序設(shè)計(jì)方法知識(shí)點(diǎn)設(shè)計(jì)算法實(shí)例。每個(gè)實(shí)例涉及一個(gè)或多個(gè)重點(diǎn)演示的設(shè)計(jì)知識(shí)點(diǎn)。如雞兔同籠問(wèn)題,水仙花數(shù)問(wèn)題應(yīng)用的是雙重循環(huán)技巧,也是窮舉設(shè)計(jì)思想。
綜合實(shí)例都是有一定意義的較復(fù)雜的實(shí)際問(wèn)題,如我們?cè)O(shè)計(jì)的學(xué)生成績(jī)分析系統(tǒng),模擬停車場(chǎng)輔助系統(tǒng),模擬選課系統(tǒng)等。綜合實(shí)例只給出問(wèn)題描述,而不是具體要求設(shè)計(jì)哪些類,哪些函數(shù),鍛煉學(xué)生對(duì)復(fù)雜問(wèn)題的整體分析設(shè)計(jì)能力。每個(gè)實(shí)例都盡量將多個(gè)知識(shí)點(diǎn)應(yīng)用進(jìn)來(lái)。如學(xué)生成績(jī)分析系統(tǒng)涉及類、對(duì)象、類的組合、模板、排序算法、文件操作和運(yùn)算符重載等。模擬停車場(chǎng)系統(tǒng)也涉及類對(duì)象、繼承、多態(tài)、類的組合、數(shù)組和搜索算法等。并且將每個(gè)綜合實(shí)例分解為若干階段,多個(gè)子問(wèn)題,隨著教學(xué)進(jìn)度不斷擴(kuò)展引入新問(wèn)題,通過(guò)不斷修改程序來(lái)解決新的問(wèn)題。
3.3實(shí)例的組織
在實(shí)例設(shè)計(jì)中,每個(gè)知識(shí)點(diǎn)都設(shè)計(jì)若干個(gè)實(shí)例。除了針對(duì)知識(shí)點(diǎn)外,還根據(jù)知識(shí)點(diǎn)之間的相關(guān)關(guān)系,遞進(jìn)關(guān)系,有意識(shí)的設(shè)計(jì)有各種聯(lián)系的實(shí)例,創(chuàng)建多種形式的實(shí)例組。如:類比實(shí)例組(題目不同,算法相同);對(duì)比實(shí)例組(題目相同,算法不同);擴(kuò)展實(shí)例組(基于知識(shí)點(diǎn)的遞進(jìn)關(guān)系,不斷擴(kuò)展的系列實(shí)例)等。
4基于Web的自適應(yīng)實(shí)例自學(xué)系統(tǒng)
課余時(shí)大量的實(shí)例提供與自學(xué)指導(dǎo)是實(shí)例教學(xué)設(shè)計(jì)的一個(gè)重點(diǎn)。如何能達(dá)到這個(gè)目的,我們探討了一個(gè)基于Web的實(shí)例自學(xué)系統(tǒng),根據(jù)目標(biāo)知識(shí)點(diǎn),教學(xué)進(jìn)度,實(shí)例的難易程度,實(shí)例之間的關(guān)聯(lián),以及學(xué)生的學(xué)習(xí)情況為學(xué)生選擇實(shí)例,指導(dǎo)學(xué)生對(duì)實(shí)例的學(xué)習(xí)。
實(shí)例學(xué)習(xí)的指導(dǎo)策略為:由語(yǔ)法到算法,由易到難;根據(jù)學(xué)習(xí)情況優(yōu)先選擇擴(kuò)展實(shí)例,若當(dāng)前實(shí)例不理解則選擇類比實(shí)例,若還不理解選擇前序知識(shí)點(diǎn)實(shí)例,若實(shí)例理解選擇知識(shí)點(diǎn)的其他實(shí)例,適當(dāng)選擇對(duì)比實(shí)例,達(dá)到一定程度增加難度;追蹤一個(gè)綜合實(shí)例。保證選擇的任何實(shí)例都不含未學(xué)習(xí)的知識(shí)點(diǎn)。
4.1創(chuàng)建程序?qū)嵗龓?kù)
實(shí)例庫(kù)不是實(shí)例的簡(jiǎn)單集合,為了與教學(xué)順序和教學(xué)目標(biāo)配合,并且在學(xué)生進(jìn)行實(shí)例學(xué)時(shí)時(shí)提供相應(yīng)的控制,需要設(shè)計(jì)實(shí)例庫(kù)的組織形式。
首先保存設(shè)計(jì)好的所有實(shí)例。三種程序?qū)嵗枰幚淼膬?nèi)容不同,故分別構(gòu)建語(yǔ)法實(shí)例表(實(shí)例編號(hào),題目描述,題目?jī)?nèi)容,問(wèn)題講解,難度等級(jí))、算法實(shí)例表(實(shí)例編號(hào),題目描述,分析,程序,講解,難度等級(jí))、綜合實(shí)例表(實(shí)例編號(hào),題目描述,實(shí)例分解步驟)以及綜合實(shí)例步驟表(實(shí)例編號(hào),步驟編號(hào),問(wèn)題描述,程序,講解,難度等級(jí))。
保存總結(jié)出來(lái)的領(lǐng)域知識(shí)點(diǎn)。由語(yǔ)法知識(shí)點(diǎn)表(知識(shí)點(diǎn)編號(hào),標(biāo)題,語(yǔ)法描述)和設(shè)計(jì)方法知識(shí)點(diǎn)表(知識(shí)點(diǎn)編號(hào),標(biāo)題,算法思想描述)描述。
構(gòu)造實(shí)例與領(lǐng)域知識(shí)點(diǎn)之間的關(guān)系。每個(gè)實(shí)例都涉及一個(gè)或多個(gè)語(yǔ)法知識(shí)點(diǎn),語(yǔ)法實(shí)例一般會(huì)有一個(gè)(或多個(gè))主語(yǔ)法知識(shí)點(diǎn),算法實(shí)例與綜合實(shí)例的分步實(shí)例會(huì)有一個(gè)(或多個(gè))主設(shè)計(jì)知識(shí)點(diǎn)。建立實(shí)例與知識(shí)點(diǎn)之間的關(guān)系表(實(shí)例類型,實(shí)例編號(hào),相關(guān)知識(shí)點(diǎn)編號(hào),相關(guān)知識(shí)點(diǎn)類型,是否主知識(shí)點(diǎn)),標(biāo)識(shí)出實(shí)例涉及的所有語(yǔ)法知識(shí)點(diǎn),并標(biāo)出語(yǔ)法實(shí)例的主語(yǔ)法知識(shí)點(diǎn),和其他實(shí)例的主設(shè)計(jì)知識(shí)點(diǎn)。表結(jié)構(gòu)為。
建立實(shí)例之間的關(guān)系。由實(shí)例關(guān)系表(關(guān)系類型,關(guān)系編號(hào),實(shí)例編號(hào),備注)構(gòu)建不同的實(shí)例組。
一般教學(xué)領(lǐng)域知識(shí)點(diǎn)間有固定的前序關(guān)系。但程序?qū)嵗g卻沒(méi)有先序關(guān)系,每個(gè)實(shí)例都是獨(dú)立的。但一個(gè)實(shí)例一般會(huì)涉及多個(gè)語(yǔ)法知識(shí)點(diǎn),雖然許多語(yǔ)法之間是沒(méi)有先序關(guān)系的,但教學(xué)進(jìn)度卻使這些知識(shí)點(diǎn)有了先序關(guān)系。故實(shí)例使用的先后順序與教學(xué)順序有關(guān)。為了能正確的提供學(xué)生適宜的實(shí)例,除盡量提供一些僅涉及當(dāng)前知識(shí)點(diǎn)的實(shí)例外,還要將每個(gè)實(shí)例涉及的知識(shí)點(diǎn)都詳細(xì)指出,同時(shí)構(gòu)建教學(xué)進(jìn)度表,在學(xué)生自主學(xué)習(xí)過(guò)程中屏蔽沒(méi)學(xué)過(guò)內(nèi)容的相關(guān)知識(shí)點(diǎn)。教學(xué)進(jìn)度表將相應(yīng)的學(xué)習(xí)目標(biāo)知識(shí)點(diǎn)表的知識(shí)點(diǎn)按教學(xué)進(jìn)度標(biāo)識(shí)出順序關(guān)系,可直接在教學(xué)目標(biāo)相關(guān)的兩個(gè)表中增加一個(gè)字段標(biāo)識(shí)順序號(hào)。
4.2學(xué)生信息庫(kù)
課程的每個(gè)學(xué)生都是系統(tǒng)允許的用戶,為每個(gè)學(xué)生提供學(xué)習(xí)狀況記錄,這里稱為學(xué)生模型。學(xué)生模型由三個(gè)表組成,分別記錄學(xué)生的能力程度、學(xué)習(xí)過(guò)程和學(xué)生當(dāng)前追蹤的綜合實(shí)例及當(dāng)前步驟。根據(jù)學(xué)生的學(xué)習(xí)過(guò)程情況浮動(dòng)學(xué)生的能力值。學(xué)習(xí)過(guò)程記錄所學(xué)的實(shí)例編號(hào),實(shí)例類型,實(shí)例難度等級(jí),實(shí)例關(guān)系編號(hào),學(xué)習(xí)狀況。學(xué)習(xí)能力程度記錄當(dāng)前的能力,用一個(gè)0~100之間的數(shù)表示。
4.3自適應(yīng)學(xué)習(xí)控制策略
學(xué)生學(xué)習(xí)過(guò)程中,若讓學(xué)生隨意選擇實(shí)例學(xué)習(xí),那么眾多的實(shí)例會(huì)使學(xué)生無(wú)所適從,故系統(tǒng)設(shè)計(jì)了自適應(yīng)學(xué)習(xí)控制策略,其結(jié)合教學(xué)順序,教學(xué)目標(biāo),實(shí)例難度,實(shí)例關(guān)系,并根據(jù)學(xué)生的學(xué)習(xí)狀況提供適于學(xué)生的實(shí)例建議。其控制流程如圖1所示。根據(jù)學(xué)生模型選中恰當(dāng)實(shí)例,學(xué)生學(xué)習(xí)一個(gè)實(shí)例時(shí),學(xué)習(xí)完后由學(xué)生選擇對(duì)實(shí)例的學(xué)習(xí)情況:不理解,理解,能編程。記錄學(xué)生模型,從新計(jì)算學(xué)生能力值,然后根據(jù)學(xué)生能力和學(xué)生在當(dāng)前實(shí)例的學(xué)習(xí)情況,根據(jù)約定的策略推薦下個(gè)實(shí)例(屏蔽掉當(dāng)前不適于學(xué)習(xí)的實(shí)例)。
圖1 自適應(yīng)學(xué)習(xí)控制流程
(1) 實(shí)例選擇策略。
將學(xué)生能力分為5個(gè)等級(jí),分別為(bad,lower,low,middle,high)。若學(xué)生能力為lower則選擇語(yǔ)法實(shí)例,否則進(jìn)入算法實(shí)例與綜合實(shí)例;若學(xué)生能力為low,則選擇初級(jí)實(shí)例;若學(xué)生能力為middle,則選擇中級(jí)實(shí)例;若學(xué)生能力為hign,則選擇高級(jí)實(shí)例;若學(xué)生能力為bad,則回溯?;厮莘椒椴榭串?dāng)前所有不理解的實(shí)例,根據(jù)實(shí)例包含的知識(shí)點(diǎn),找出使用最多的知識(shí)點(diǎn),選擇其教學(xué)實(shí)例,若有與本實(shí)例呈系列的實(shí)例優(yōu)先選擇。
若學(xué)生當(dāng)前實(shí)例學(xué)習(xí)狀況為不理解,且能力沒(méi)降級(jí),則選擇類比實(shí)例,若能力降級(jí)則選擇低一級(jí)難度實(shí)例。若當(dāng)前學(xué)習(xí)狀態(tài)為理解,則選擇類比實(shí)例(并專注設(shè)計(jì)程序),若能力升級(jí)也可選擇高一級(jí)實(shí)例。若學(xué)習(xí)狀態(tài)為會(huì)編程,且能力沒(méi)升級(jí),則進(jìn)入其他實(shí)例,否則提供更高一級(jí)實(shí)例。
(2) 學(xué)生能力計(jì)算。
學(xué)習(xí)過(guò)程中,初次進(jìn)入系統(tǒng)學(xué)習(xí)能力程度設(shè)為50,每學(xué)習(xí)一個(gè)實(shí)例,若狀況為不理解則能力程度降低,若為理解則能程度上升,若為可編程則上升幅度更大,能力程度升降分值具體如表1所示。依據(jù)量變到質(zhì)變的原理,能力值累積到一定程度,在學(xué)生的能力進(jìn)入新的等級(jí)。學(xué)習(xí)能力值與能力等級(jí)的關(guān)系通過(guò)一個(gè)映射關(guān)系描述:<50,能力等級(jí)為bad,50~60之間lower,60~70直接low,70~90之間middle,90以上為high。
系統(tǒng)當(dāng)然也允許學(xué)生自主控制策略選擇。尤其在課程學(xué)完進(jìn)行總復(fù)習(xí)的時(shí)候。提供了多種查詢方式。如查詢包含某知識(shí)點(diǎn)的所有實(shí)例??梢园床襟E查看綜合實(shí)例,按系列查看相關(guān)實(shí)例等。
5結(jié)束語(yǔ)
在編程語(yǔ)言課教學(xué)中很多學(xué)生反映,課堂上的有些例子來(lái)不及細(xì)想就過(guò)去了,有些內(nèi)容僅用了一個(gè)例子講解印象不夠深刻,多數(shù)學(xué)生表示希望多看一些實(shí)例,只是沒(méi)有來(lái)源,也有些學(xué)生看了很多參考書(shū)的實(shí)例,但反映還是不懂或不會(huì)編程序。程序?qū)嵗詫W(xué)系統(tǒng)的形式可以提供大量實(shí)例,并指導(dǎo)學(xué)生慢慢體會(huì),逐步深入。在有限的學(xué)時(shí)下,課堂教學(xué)實(shí)例需要精心設(shè)計(jì),同時(shí)要提供大量實(shí)例供學(xué)生課下自學(xué),本文正是針對(duì)此問(wèn)題探討的解決方法。
參考文獻(xiàn):
[1] Yuji Yoneyamaa,Kotaro Matsushitab,Kenneth J. Mackinb, et al. Puzzle Based Programming Learning Support System with Learning History Management[A]. 16th International Conference on Computers in Education[C],2008, 623-627.
[2] 程靜,楊明,邱玉輝. 基于知識(shí)點(diǎn)對(duì)象的個(gè)性化學(xué)習(xí)系統(tǒng)實(shí)施[J]. 西南師范大學(xué)學(xué)報(bào),自然科學(xué)版,2006,31(5):120-123.
[3] 劉偉,付璐,余英良. 個(gè)性化CAI中教學(xué)策略的設(shè)計(jì)與實(shí)現(xiàn)[J]. 河南科技大學(xué)學(xué)報(bào),自然科學(xué)版,2007,28(2):44-49.
[4] Natalia Stash,Alexandra Cristea,Paul De Bra. Learning Styles Adaptation Language for Adaptive Hypermedia[A]. AH 2006[C],2006.323-327.
Discussion about Example Teaching for Programming Language Course
ZHANG Jing-hua
(School of Computer Science of Technology, North China Electric Power University, Baoding, 071003, China)
Abstract: This paper based on C++ Program design course, discussed the example teaching method for programming language course, gave the program example design method and designed a web based program example self-learning system, which remedied the shortage of example in classroom teaching, and instructed the students studying examples on the system by providing a adaptive learning control strategy.
Key words:example teaching; example design; adaptive; example learning strategy