摘要:本文針對當(dāng)前編程語言教學(xué)實踐過程中出現(xiàn)的問題,以QDeV過程為基礎(chǔ),結(jié)合迭代式、漸增式開發(fā)和軟件重構(gòu)的思想,嘗試一種漸增式驗證序列IVS方法。
關(guān)鍵詞:QDeV;IVS;編程語言教學(xué);漸增式;迭代式
中圖分類號:G642 文獻標(biāo)識碼:B
1 引言
編程語言在計算機專業(yè)課程中占很大比重,學(xué)生要學(xué)習(xí)匯編語言、C/C++、Java、數(shù)據(jù)庫SQL、J2EE等多門課程。但是在教學(xué)實踐過程中出現(xiàn)了諸多問題,“重結(jié)果、輕過程”是一個普遍存在的問題。教師往往直接拿出事先準(zhǔn)備好的程序進行演示,并不解釋設(shè)計過程的細(xì)節(jié),這導(dǎo)致學(xué)生理解困難、難以及時求證、缺乏興趣。另一方面,教師考核學(xué)生往往僅檢查程序運行的結(jié)果,而對學(xué)生設(shè)計過程缺乏了解,導(dǎo)致教師難以對求解過程進行深入指導(dǎo)。“重理論解析、輕實踐指導(dǎo)”也是一個普遍的問題。在教師看來,每個語言元素的語義、語法和語用都有必要解析清楚,‘而且這種重復(fù)解析簡單輕松。實際上,能使學(xué)生將。編程語言作為問題求解的有效工具才是我們的目標(biāo)。要達到此目標(biāo),實踐是必不可少的重要環(huán)節(jié),而且應(yīng)達到一定的比例。西方一些知名院校的實踐考核比例高達60%,而我們的實踐比例普遍低于25%。編程語言學(xué)習(xí)實踐中應(yīng)該融入開發(fā)方法的指導(dǎo)和訓(xùn)練,使學(xué)生能應(yīng)對將來的激烈競爭。
敏捷方法學(xué)提倡極限編程、迭代式漸增式開發(fā)、軟件重構(gòu)、測試優(yōu)先、結(jié)對編程等新方法,我們能否提早引入到編程語言學(xué)習(xí)實踐過程中,盡早培養(yǎng)學(xué)生良好的思維和實踐習(xí)慣,這是一個值得探討的問題。
以上問題對目前的編程語言教學(xué)實踐提出了挑戰(zhàn),本文嘗試一種漸增式驗證序列IVS方法,希望有助于改進當(dāng)前的編程語言教學(xué)實踐。
2 漸增式驗證序列IVS
2.1 QDeV過程
先簡單介紹QDeV過程,結(jié)合迭代式、漸增式開發(fā)和軟件重構(gòu),介紹漸增式驗證序列IVS(Incremental Verification Sequences),并探討多個IVS之間的關(guān)系。針對一個問題的求證,QDeV過程包含4個環(huán)節(jié):Question質(zhì)疑、Design設(shè)計、execution執(zhí)行和Validation確認(rèn)。此過程貫穿于每個關(guān)鍵性語言元素所涉及的每個問題,即對一個問題貫穿如下4個環(huán)節(jié):
1.“質(zhì)疑”:明確提出一個問題。
2.“設(shè)計”:根據(jù)問題需要,給出簡單編程,也可能重構(gòu)已有設(shè)計或更改配置。
3.“執(zhí)行”:運行程序以得到可觀察結(jié)果。
4.“確認(rèn)”:對該問題給出結(jié)論。
QDeV(隱含著快速開發(fā)Quick Development之意)特色是質(zhì)疑驅(qū)動、以驗證性設(shè)計為核心、個性化和實踐性。
2.2 IVS表
在QDeV實踐過程中我們進一步認(rèn)識到,對一個問題給出結(jié)論之后又會引出新問題。此時添加少量新設(shè)計(稱之為漸增increment),或者少量改進已有設(shè)計(稱之為重構(gòu)refactoring),就能很容易地驗證新問題或更復(fù)雜的問題,如此周而復(fù)始(稱之為迭代iteration)。當(dāng)教師和學(xué)生都不能提出新問題,或者已有設(shè)計不能再改進,或者到達學(xué)生當(dāng)時能理解的極限時,迭代暫停。而當(dāng)學(xué)習(xí)過新元素之后,這樣的過程還可再繼續(xù)。這種迭代式漸增的過程可描述為圖1的螺旋曲線。
經(jīng)實踐,我們總結(jié)如下規(guī)律:
· 持續(xù)改進已有設(shè)計具有更好的教學(xué)效果。
· 迭代式漸增可驗證多個相關(guān)問題,具有更高效率。
· 漸增式驗證和求解能表達更多的過程細(xì)節(jié),簡化了復(fù)雜性。
· 作為一種良性循環(huán),是對當(dāng)前軟件工程的一些新方法的實踐。
為了推廣應(yīng)用這種教學(xué)實踐方法,本文嘗試IVS來改進編程語言的教學(xué)和實踐,表示為一種IVS表的形式,如表1所示。
IVS表由兩部分組成:表頭和表體。表頭主要描述編號、目標(biāo)和前提。
編號:一門課程需要一系列的IVS表,按教學(xué)過程對每個IVS表確定一個序號,以確定該表的教學(xué)次序,也方便其他表的引用。
目標(biāo):用簡短文字描述要達到的目的。通常是一個具體的實例,例如,“如何用模板類設(shè)計一個單向鏈表”,“如何用模板類實現(xiàn)一個堆棧/隊列”等。也可能是一個教學(xué)單元的描述,例如“數(shù)組如何定義與應(yīng)用”、“函數(shù)/方法如何定義與應(yīng)用”等。一個IVS目標(biāo)往往是一個較“大”或者較“抽象”的問題,解決此問題要求進行多輪的QDeV過程。
、
前提:即“前繼目標(biāo)或問題”。要達到本目標(biāo)需利用前面已實現(xiàn)的目標(biāo)或已解決的問題,以明確已有的條件和基礎(chǔ)。此處可引用其他IVS表的編號或表編號加序號,可說明多個前提。在表頭,教師可按需擴展新內(nèi)容,如“難易程度”、“時間安排”等。
表體包含由多輪QDeV構(gòu)成的序列,一行表示一輪QDeV過程。
序號:從1開始按序排列,以確定每一輪QDeV的次序,也方便引用。被引用的方式是“表編號:序號”。一般來說,后一輪以前一輪為基礎(chǔ)。如果前后兩個QDeV之間沒有嚴(yán)格的前后次序,可加小寫字母來區(qū)分,如2a、2b,表示兩者之間無嚴(yán)格次序。
問題:用簡短文字描述一個問題。
設(shè)計:文字說明設(shè)計要點,僅需以提示方式來說明添加或重構(gòu)的要點,避免大幅源碼出現(xiàn)。如果需要的話,可用超鏈接來關(guān)聯(lián)一個或一組文件。
執(zhí)行確認(rèn):說明執(zhí)行效果和結(jié)論。表中將執(zhí)行和確認(rèn)合并為一欄,原因是“確認(rèn)”描述往往很簡單。
備注:主要用于教師擴展新的內(nèi)容。例如,總結(jié)當(dāng)前驗證的結(jié)論、引出下一個問題、引用另一個更具體的IVS表或引用教材中的相關(guān)章節(jié)等等。
2.3 IVS間的關(guān)系
一門課程需要多個WS表,多個IVS表之間可能存在多種關(guān)系。明確表示這種關(guān)系,可使學(xué)生的知識技能的體系更趨完善,也可方便教師備課和實施。IVS表之間主要有3種關(guān)系:“表序”表示課序前后;“前提”表示基礎(chǔ)與條件;“細(xì)化”表示具體實施。下面分別介紹這3種關(guān)系。
表序。多個IVS表的序號從小到大表示了多個課程單元的大致前后次序,這樣將一門課的多個IVS表形成一個序列,這類似我們的教學(xué)實施計劃。
前提。每個IVS表都可說明要實現(xiàn)本目標(biāo)所需要的若干相對重要的條件和基礎(chǔ),這往往依賴于已實現(xiàn)的目標(biāo)或者一已解決的問題。前提關(guān)系表明了知識和技能的脈絡(luò)結(jié)構(gòu),從簡單到復(fù)雜,從低級到高級,給出一個清晰的漸增過程。例如在C/C++課程中,一個IVS目標(biāo)是“如何用函數(shù)實現(xiàn)一個單向整數(shù)鏈表”,應(yīng)說明“函數(shù)”、“結(jié)構(gòu)”、“指針”作為其前提,而像變量說明、循環(huán)語句就不適合作為其前提。
細(xì)化。一個抽象描述的IVS表可細(xì)化為多個具體表。對于一個IVS表,如果有一個問題不能簡單用一輪QDeV過程來解決,那么這個IVS表就是一個“抽象表”,它需要將一項QDeV細(xì)化為一個具體的IVS表。例如,在J2EE課程中建立一個抽象的IVS表,目標(biāo)是“如何構(gòu)建Jt2EE應(yīng)用系統(tǒng)”,第1個問題是“如何搭建一個J2EE基礎(chǔ)平臺”,而要解決此問題,并非一輪QDeV能完成。一種合理的方法是細(xì)化:以此問題為目標(biāo),另建一個具體的IVS表,用幾輪QDeV來說明如何逐步安裝、配置、驗證數(shù)據(jù)庫、Java虛擬機、Web服務(wù)器等過程。表示這種細(xì)化關(guān)系是在抽象表中的“備注”中引用具體的IVS表。
除了上述3種關(guān)系之外,多個IVS表之間還可能存在其他關(guān)系,但建議不要將關(guān)系復(fù)雜化。
3 IVS應(yīng)用及特色
應(yīng)用IVS的目標(biāo)是“將學(xué)生納入良性循環(huán)的軌道,推一把,讓學(xué)生自己去做”,具體如下:
1.“將學(xué)生納入良性循環(huán)的軌道”:對一個IVS表確定一個中等難度的目標(biāo),并給出前3個問題。
2.“推一把”:教師對第1個問題給出設(shè)計、執(zhí)行和確認(rèn)全過程,對第2個問題僅給出設(shè)計,讓學(xué)生執(zhí)行和確認(rèn)。第3個問題由教師提出。
3.“讓學(xué)生自己去做”:對第3個問題由學(xué)生自行設(shè)計、執(zhí)行和確認(rèn),而后要求學(xué)生提出第4個問題,自行設(shè)計、執(zhí)行和確認(rèn),如此循環(huán)下一個問題。
在編程語言教學(xué)實踐中應(yīng)用IVS,應(yīng)注意以下幾個問題:
1.在課程開始時,向?qū)W生說明這種新的教學(xué)實踐方式,使學(xué)生能理解IVS表和QDeV過程,使多數(shù)學(xué)生能理解其作用。
2.在課程進行中,用IVS表來改進講義或教案,使學(xué)生目標(biāo)明確、思路清晰??蓪⑽赐瓿傻腎VS表交學(xué)生完成,并鼓勵學(xué)生提出新問題,然后自行設(shè)計驗證。教師可檢查學(xué)生提交的IVS表來發(fā)現(xiàn)過程中的缺陷和不足之處,給學(xué)生提供及時對癥的指導(dǎo)。
3.在課程復(fù)習(xí)時,向?qū)W生提供本課程全部IVS表,主要是列出全部的目標(biāo)和問題,要求學(xué)生對照檢查,以發(fā)現(xiàn)缺陷和不足,也方便教師選擇重點和難點。
4.在課程考核時依據(jù)IVS表,方便教師命題,既可考核基本概念,也可對實踐環(huán)節(jié)進行考核。
IVS方法的特色總結(jié)如下:
·目標(biāo)驅(qū)動。要達到的目標(biāo)和要解決的問題必須先明確,有助于學(xué)生集中注意力,保持思路清晰。
·持續(xù)改進提高。從簡單入手,注重過程訓(xùn)練,使學(xué)生不畏懼復(fù)雜性,對克服困難有自信,也提高學(xué)生自學(xué)能力。
·提早實踐新方法.將迭代式開發(fā)、漸增式開發(fā)、軟件重構(gòu)等新方法提早引入到編程語言學(xué)習(xí)階段,使學(xué)生盡早地實踐新方法,有助于將來從事大型復(fù)雜軟件研發(fā)。
·簡便易行.可理解、可跟蹤、可指導(dǎo),在教師與學(xué)生之間有效溝通。不需要特別的工具支持,
PowerPoint、Word或Excel通常夠用。
4 結(jié)束語
進一步的工作包括基于IVS如何引入“測試優(yōu)先”、“結(jié)對編程”等新方法;研究多門課程間IVS的關(guān)系,以推動多語言多平臺的漸增式教學(xué)實踐;也包括基于WS的教材編寫。