摘要:本文針對(duì)當(dāng)前編程語(yǔ)言教學(xué)實(shí)踐過(guò)程中出現(xiàn)的問(wèn)題,以QDeV過(guò)程為基礎(chǔ),結(jié)合迭代式、漸增式開(kāi)發(fā)和軟件重構(gòu)的思想,嘗試一種漸增式驗(yàn)證序列IVS方法。
關(guān)鍵詞:QDeV;IVS;編程語(yǔ)言教學(xué);漸增式;迭代式
中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:B
1 引言
編程語(yǔ)言在計(jì)算機(jī)專業(yè)課程中占很大比重,學(xué)生要學(xué)習(xí)匯編語(yǔ)言、C/C++、Java、數(shù)據(jù)庫(kù)SQL、J2EE等多門課程。但是在教學(xué)實(shí)踐過(guò)程中出現(xiàn)了諸多問(wèn)題,“重結(jié)果、輕過(guò)程”是一個(gè)普遍存在的問(wèn)題。教師往往直接拿出事先準(zhǔn)備好的程序進(jìn)行演示,并不解釋設(shè)計(jì)過(guò)程的細(xì)節(jié),這導(dǎo)致學(xué)生理解困難、難以及時(shí)求證、缺乏興趣。另一方面,教師考核學(xué)生往往僅檢查程序運(yùn)行的結(jié)果,而對(duì)學(xué)生設(shè)計(jì)過(guò)程缺乏了解,導(dǎo)致教師難以對(duì)求解過(guò)程進(jìn)行深入指導(dǎo)。“重理論解析、輕實(shí)踐指導(dǎo)”也是一個(gè)普遍的問(wèn)題。在教師看來(lái),每個(gè)語(yǔ)言元素的語(yǔ)義、語(yǔ)法和語(yǔ)用都有必要解析清楚,‘而且這種重復(fù)解析簡(jiǎn)單輕松。實(shí)際上,能使學(xué)生將。編程語(yǔ)言作為問(wèn)題求解的有效工具才是我們的目標(biāo)。要達(dá)到此目標(biāo),實(shí)踐是必不可少的重要環(huán)節(jié),而且應(yīng)達(dá)到一定的比例。西方一些知名院校的實(shí)踐考核比例高達(dá)60%,而我們的實(shí)踐比例普遍低于25%。編程語(yǔ)言學(xué)習(xí)實(shí)踐中應(yīng)該融入開(kāi)發(fā)方法的指導(dǎo)和訓(xùn)練,使學(xué)生能應(yīng)對(duì)將來(lái)的激烈競(jìng)爭(zhēng)。
敏捷方法學(xué)提倡極限編程、迭代式漸增式開(kāi)發(fā)、軟件重構(gòu)、測(cè)試優(yōu)先、結(jié)對(duì)編程等新方法,我們能否提早引入到編程語(yǔ)言學(xué)習(xí)實(shí)踐過(guò)程中,盡早培養(yǎng)學(xué)生良好的思維和實(shí)踐習(xí)慣,這是一個(gè)值得探討的問(wèn)題。
以上問(wèn)題對(duì)目前的編程語(yǔ)言教學(xué)實(shí)踐提出了挑戰(zhàn),本文嘗試一種漸增式驗(yàn)證序列IVS方法,希望有助于改進(jìn)當(dāng)前的編程語(yǔ)言教學(xué)實(shí)踐。
2 漸增式驗(yàn)證序列IVS
2.1 QDeV過(guò)程
先簡(jiǎn)單介紹QDeV過(guò)程,結(jié)合迭代式、漸增式開(kāi)發(fā)和軟件重構(gòu),介紹漸增式驗(yàn)證序列IVS(Incremental Verification Sequences),并探討多個(gè)IVS之間的關(guān)系。針對(duì)一個(gè)問(wèn)題的求證,QDeV過(guò)程包含4個(gè)環(huán)節(jié):Question質(zhì)疑、Design設(shè)計(jì)、execution執(zhí)行和Validation確認(rèn)。此過(guò)程貫穿于每個(gè)關(guān)鍵性語(yǔ)言元素所涉及的每個(gè)問(wèn)題,即對(duì)一個(gè)問(wèn)題貫穿如下4個(gè)環(huán)節(jié):
1.“質(zhì)疑”:明確提出一個(gè)問(wèn)題。
2.“設(shè)計(jì)”:根據(jù)問(wèn)題需要,給出簡(jiǎn)單編程,也可能重構(gòu)已有設(shè)計(jì)或更改配置。
3.“執(zhí)行”:運(yùn)行程序以得到可觀察結(jié)果。
4.“確認(rèn)”:對(duì)該問(wèn)題給出結(jié)論。
QDeV(隱含著快速開(kāi)發(fā)Quick Development之意)特色是質(zhì)疑驅(qū)動(dòng)、以驗(yàn)證性設(shè)計(jì)為核心、個(gè)性化和實(shí)踐性。
2.2 IVS表
在QDeV實(shí)踐過(guò)程中我們進(jìn)一步認(rèn)識(shí)到,對(duì)一個(gè)問(wèn)題給出結(jié)論之后又會(huì)引出新問(wèn)題。此時(shí)添加少量新設(shè)計(jì)(稱之為漸增increment),或者少量改進(jìn)已有設(shè)計(jì)(稱之為重構(gòu)refactoring),就能很容易地驗(yàn)證新問(wèn)題或更復(fù)雜的問(wèn)題,如此周而復(fù)始(稱之為迭代iteration)。當(dāng)教師和學(xué)生都不能提出新問(wèn)題,或者已有設(shè)計(jì)不能再改進(jìn),或者到達(dá)學(xué)生當(dāng)時(shí)能理解的極限時(shí),迭代暫停。而當(dāng)學(xué)習(xí)過(guò)新元素之后,這樣的過(guò)程還可再繼續(xù)。這種迭代式漸增的過(guò)程可描述為圖1的螺旋曲線。

經(jīng)實(shí)踐,我們總結(jié)如下規(guī)律:
· 持續(xù)改進(jìn)已有設(shè)計(jì)具有更好的教學(xué)效果。
· 迭代式漸增可驗(yàn)證多個(gè)相關(guān)問(wèn)題,具有更高效率。
· 漸增式驗(yàn)證和求解能表達(dá)更多的過(guò)程細(xì)節(jié),簡(jiǎn)化了復(fù)雜性。
· 作為一種良性循環(huán),是對(duì)當(dāng)前軟件工程的一些新方法的實(shí)踐。
為了推廣應(yīng)用這種教學(xué)實(shí)踐方法,本文嘗試IVS來(lái)改進(jìn)編程語(yǔ)言的教學(xué)和實(shí)踐,表示為一種IVS表的形式,如表1所示。

IVS表由兩部分組成:表頭和表體。表頭主要描述編號(hào)、目標(biāo)和前提。
編號(hào):一門課程需要一系列的IVS表,按教學(xué)過(guò)程對(duì)每個(gè)IVS表確定一個(gè)序號(hào),以確定該表的教學(xué)次序,也方便其他表的引用。
目標(biāo):用簡(jiǎn)短文字描述要達(dá)到的目的。通常是一個(gè)具體的實(shí)例,例如,“如何用模板類設(shè)計(jì)一個(gè)單向鏈表”,“如何用模板類實(shí)現(xiàn)一個(gè)堆棧/隊(duì)列”等。也可能是一個(gè)教學(xué)單元的描述,例如“數(shù)組如何定義與應(yīng)用”、“函數(shù)/方法如何定義與應(yīng)用”等。一個(gè)IVS目標(biāo)往往是一個(gè)較“大”或者較“抽象”的問(wèn)題,解決此問(wèn)題要求進(jìn)行多輪的QDeV過(guò)程。
、
前提:即“前繼目標(biāo)或問(wèn)題”。要達(dá)到本目標(biāo)需利用前面已實(shí)現(xiàn)的目標(biāo)或已解決的問(wèn)題,以明確已有的條件和基礎(chǔ)。此處可引用其他IVS表的編號(hào)或表編號(hào)加序號(hào),可說(shuō)明多個(gè)前提。在表頭,教師可按需擴(kuò)展新內(nèi)容,如“難易程度”、“時(shí)間安排”等。
表體包含由多輪QDeV構(gòu)成的序列,一行表示一輪QDeV過(guò)程。
序號(hào):從1開(kāi)始按序排列,以確定每一輪QDeV的次序,也方便引用。被引用的方式是“表編號(hào):序號(hào)”。一般來(lái)說(shuō),后一輪以前一輪為基礎(chǔ)。如果前后兩個(gè)QDeV之間沒(méi)有嚴(yán)格的前后次序,可加小寫字母來(lái)區(qū)分,如2a、2b,表示兩者之間無(wú)嚴(yán)格次序。
問(wèn)題:用簡(jiǎn)短文字描述一個(gè)問(wèn)題。
設(shè)計(jì):文字說(shuō)明設(shè)計(jì)要點(diǎn),僅需以提示方式來(lái)說(shuō)明添加或重構(gòu)的要點(diǎn),避免大幅源碼出現(xiàn)。如果需要的話,可用超鏈接來(lái)關(guān)聯(lián)一個(gè)或一組文件。
執(zhí)行確認(rèn):說(shuō)明執(zhí)行效果和結(jié)論。表中將執(zhí)行和確認(rèn)合并為一欄,原因是“確認(rèn)”描述往往很簡(jiǎn)單。
備注:主要用于教師擴(kuò)展新的內(nèi)容。例如,總結(jié)當(dāng)前驗(yàn)證的結(jié)論、引出下一個(gè)問(wèn)題、引用另一個(gè)更具體的IVS表或引用教材中的相關(guān)章節(jié)等等。
2.3 IVS間的關(guān)系
一門課程需要多個(gè)WS表,多個(gè)IVS表之間可能存在多種關(guān)系。明確表示這種關(guān)系,可使學(xué)生的知識(shí)技能的體系更趨完善,也可方便教師備課和實(shí)施。IVS表之間主要有3種關(guān)系:“表序”表示課序前后;“前提”表示基礎(chǔ)與條件;“細(xì)化”表示具體實(shí)施。下面分別介紹這3種關(guān)系。
表序。多個(gè)IVS表的序號(hào)從小到大表示了多個(gè)課程單元的大致前后次序,這樣將一門課的多個(gè)IVS表形成一個(gè)序列,這類似我們的教學(xué)實(shí)施計(jì)劃。
前提。每個(gè)IVS表都可說(shuō)明要實(shí)現(xiàn)本目標(biāo)所需要的若干相對(duì)重要的條件和基礎(chǔ),這往往依賴于已實(shí)現(xiàn)的目標(biāo)或者一已解決的問(wèn)題。前提關(guān)系表明了知識(shí)和技能的脈絡(luò)結(jié)構(gòu),從簡(jiǎn)單到復(fù)雜,從低級(jí)到高級(jí),給出一個(gè)清晰的漸增過(guò)程。例如在C/C++課程中,一個(gè)IVS目標(biāo)是“如何用函數(shù)實(shí)現(xiàn)一個(gè)單向整數(shù)鏈表”,應(yīng)說(shuō)明“函數(shù)”、“結(jié)構(gòu)”、“指針”作為其前提,而像變量說(shuō)明、循環(huán)語(yǔ)句就不適合作為其前提。
細(xì)化。一個(gè)抽象描述的IVS表可細(xì)化為多個(gè)具體表。對(duì)于一個(gè)IVS表,如果有一個(gè)問(wèn)題不能簡(jiǎn)單用一輪QDeV過(guò)程來(lái)解決,那么這個(gè)IVS表就是一個(gè)“抽象表”,它需要將一項(xiàng)QDeV細(xì)化為一個(gè)具體的IVS表。例如,在J2EE課程中建立一個(gè)抽象的IVS表,目標(biāo)是“如何構(gòu)建Jt2EE應(yīng)用系統(tǒng)”,第1個(gè)問(wèn)題是“如何搭建一個(gè)J2EE基礎(chǔ)平臺(tái)”,而要解決此問(wèn)題,并非一輪QDeV能完成。一種合理的方法是細(xì)化:以此問(wèn)題為目標(biāo),另建一個(gè)具體的IVS表,用幾輪QDeV來(lái)說(shuō)明如何逐步安裝、配置、驗(yàn)證數(shù)據(jù)庫(kù)、Java虛擬機(jī)、Web服務(wù)器等過(guò)程。表示這種細(xì)化關(guān)系是在抽象表中的“備注”中引用具體的IVS表。
除了上述3種關(guān)系之外,多個(gè)IVS表之間還可能存在其他關(guān)系,但建議不要將關(guān)系復(fù)雜化。
3 IVS應(yīng)用及特色
應(yīng)用IVS的目標(biāo)是“將學(xué)生納入良性循環(huán)的軌道,推一把,讓學(xué)生自己去做”,具體如下:
1.“將學(xué)生納入良性循環(huán)的軌道”:對(duì)一個(gè)IVS表確定一個(gè)中等難度的目標(biāo),并給出前3個(gè)問(wèn)題。
2.“推一把”:教師對(duì)第1個(gè)問(wèn)題給出設(shè)計(jì)、執(zhí)行和確認(rèn)全過(guò)程,對(duì)第2個(gè)問(wèn)題僅給出設(shè)計(jì),讓學(xué)生執(zhí)行和確認(rèn)。第3個(gè)問(wèn)題由教師提出。
3.“讓學(xué)生自己去做”:對(duì)第3個(gè)問(wèn)題由學(xué)生自行設(shè)計(jì)、執(zhí)行和確認(rèn),而后要求學(xué)生提出第4個(gè)問(wèn)題,自行設(shè)計(jì)、執(zhí)行和確認(rèn),如此循環(huán)下一個(gè)問(wèn)題。
在編程語(yǔ)言教學(xué)實(shí)踐中應(yīng)用IVS,應(yīng)注意以下幾個(gè)問(wèn)題:
1.在課程開(kāi)始時(shí),向?qū)W生說(shuō)明這種新的教學(xué)實(shí)踐方式,使學(xué)生能理解IVS表和QDeV過(guò)程,使多數(shù)學(xué)生能理解其作用。
2.在課程進(jìn)行中,用IVS表來(lái)改進(jìn)講義或教案,使學(xué)生目標(biāo)明確、思路清晰。可將未完成的IVS表交學(xué)生完成,并鼓勵(lì)學(xué)生提出新問(wèn)題,然后自行設(shè)計(jì)驗(yàn)證。教師可檢查學(xué)生提交的IVS表來(lái)發(fā)現(xiàn)過(guò)程中的缺陷和不足之處,給學(xué)生提供及時(shí)對(duì)癥的指導(dǎo)。
3.在課程復(fù)習(xí)時(shí),向?qū)W生提供本課程全部IVS表,主要是列出全部的目標(biāo)和問(wèn)題,要求學(xué)生對(duì)照檢查,以發(fā)現(xiàn)缺陷和不足,也方便教師選擇重點(diǎn)和難點(diǎn)。
4.在課程考核時(shí)依據(jù)IVS表,方便教師命題,既可考核基本概念,也可對(duì)實(shí)踐環(huán)節(jié)進(jìn)行考核。
IVS方法的特色總結(jié)如下:
·目標(biāo)驅(qū)動(dòng)。要達(dá)到的目標(biāo)和要解決的問(wèn)題必須先明確,有助于學(xué)生集中注意力,保持思路清晰。
·持續(xù)改進(jìn)提高。從簡(jiǎn)單入手,注重過(guò)程訓(xùn)練,使學(xué)生不畏懼復(fù)雜性,對(duì)克服困難有自信,也提高學(xué)生自學(xué)能力。
·提早實(shí)踐新方法.將迭代式開(kāi)發(fā)、漸增式開(kāi)發(fā)、軟件重構(gòu)等新方法提早引入到編程語(yǔ)言學(xué)習(xí)階段,使學(xué)生盡早地實(shí)踐新方法,有助于將來(lái)從事大型復(fù)雜軟件研發(fā)。
·簡(jiǎn)便易行.可理解、可跟蹤、可指導(dǎo),在教師與學(xué)生之間有效溝通。不需要特別的工具支持,
PowerPoint、Word或Excel通常夠用。
4 結(jié)束語(yǔ)
進(jìn)一步的工作包括基于IVS如何引入“測(cè)試優(yōu)先”、“結(jié)對(duì)編程”等新方法;研究多門課程間IVS的關(guān)系,以推動(dòng)多語(yǔ)言多平臺(tái)的漸增式教學(xué)實(shí)踐;也包括基于WS的教材編寫。