樓軼超
摘 要: 針對(duì)C語(yǔ)言實(shí)踐教學(xué)中存在的問(wèn)題,提出在C語(yǔ)言課程設(shè)計(jì)的教學(xué)中采用項(xiàng)目驅(qū)動(dòng)的分組教學(xué)模式。融合軟件工程思想,從項(xiàng)目設(shè)計(jì)、分組劃分、模塊化思想應(yīng)用、編程思想訓(xùn)練、測(cè)試、考核方式等多個(gè)方面改革實(shí)踐教學(xué)環(huán)節(jié),因材施教,使得學(xué)生在解決實(shí)際問(wèn)題的過(guò)程中,通過(guò)分工協(xié)作,提高自主學(xué)習(xí)能力,培養(yǎng)起團(tuán)隊(duì)合作精神,從而提高教學(xué)效果和教育質(zhì)量。
關(guān)鍵詞: C語(yǔ)言課程設(shè)計(jì); 項(xiàng)目驅(qū)動(dòng); 分組教學(xué); 模塊化思想; 協(xié)作
中圖分類號(hào):G642 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2013)08-65-03
0 引言
當(dāng)今社會(huì),隨著信息技術(shù)的高速發(fā)展,各種程序設(shè)計(jì)語(yǔ)言蓬勃發(fā)展,如C、C++、JAVA、C#等。在這些語(yǔ)言中,C語(yǔ)言是各高等院校的計(jì)算機(jī)及相關(guān)專業(yè)的一門(mén)核心基礎(chǔ)課程,它的學(xué)習(xí)效果會(huì)極大程度影響學(xué)生后續(xù)相關(guān)課程,如數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、算法分析以及其他高級(jí)語(yǔ)言的學(xué)習(xí)。
作為一種實(shí)踐性很強(qiáng)的程序設(shè)計(jì)語(yǔ)言,C語(yǔ)言課程的教學(xué)一般采用理論教學(xué)結(jié)合上機(jī)實(shí)踐的模式,理論教學(xué)以講授語(yǔ)法和基本算法為主,上機(jī)實(shí)踐則主要練習(xí)簡(jiǎn)單程序的編寫(xiě),通常以驗(yàn)證性實(shí)驗(yàn)為主,以掌握、鞏固基礎(chǔ)的語(yǔ)法為目的。從教學(xué)效果來(lái)看,學(xué)生雖然掌握了不少語(yǔ)法知識(shí),但在面對(duì)實(shí)際問(wèn)題時(shí),往往不能靈活應(yīng)用。為了進(jìn)一步拓展學(xué)生的實(shí)踐編程能力,我們學(xué)院繼兩個(gè)學(xué)期的C語(yǔ)言教學(xué)后開(kāi)設(shè)了“C語(yǔ)言課程設(shè)計(jì)”課程,該課程以設(shè)計(jì)性和綜合性實(shí)驗(yàn)為主,重點(diǎn)培養(yǎng)和鍛煉學(xué)生獨(dú)立分析問(wèn)題,解決實(shí)際問(wèn)題能力。根據(jù)這一教學(xué)目標(biāo),我們結(jié)合日常教學(xué),針對(duì)實(shí)踐教學(xué)中存在的不足,開(kāi)展項(xiàng)目驅(qū)動(dòng)的分組教學(xué)方法,使學(xué)生形成自主和協(xié)作型的學(xué)習(xí)模式。
1 教學(xué)現(xiàn)狀
C語(yǔ)言是一種面向過(guò)程的結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言,具有數(shù)據(jù)類型較多、表達(dá)式豐富、語(yǔ)法結(jié)構(gòu)復(fù)雜、語(yǔ)法規(guī)則繁多等特點(diǎn),其授課對(duì)象往往又是第一次接觸程序設(shè)計(jì)語(yǔ)言的低年級(jí)學(xué)生,這些都給學(xué)生學(xué)習(xí)和教師教學(xué)帶來(lái)了難度。通過(guò)對(duì)學(xué)生進(jìn)行教學(xué)效果調(diào)查,發(fā)現(xiàn)在“理論+實(shí)驗(yàn)”的教學(xué)模式中,由于課時(shí)限制等各種因素,實(shí)際教學(xué)常存在著如下問(wèn)題。
⑴ 實(shí)驗(yàn)訓(xùn)練以知識(shí)點(diǎn)訓(xùn)練為主,與實(shí)際應(yīng)用存在脫節(jié)。
在理論課后的上機(jī)練習(xí),通常是針對(duì)特定語(yǔ)法設(shè)計(jì),形式上采用練習(xí)書(shū)上的例子、驗(yàn)證某個(gè)語(yǔ)法或者實(shí)現(xiàn)一些簡(jiǎn)單的相關(guān)算法,驗(yàn)證性實(shí)驗(yàn)占了多數(shù)。這種訓(xùn)練模式雖然能夠加深學(xué)生對(duì)各種語(yǔ)法細(xì)節(jié)的認(rèn)識(shí),但同時(shí)導(dǎo)致的問(wèn)題是,學(xué)生容易孤立地去看待各章節(jié)的語(yǔ)法,割裂了各知識(shí)之間的聯(lián)系,在編程時(shí)以模仿改寫(xiě)書(shū)上的程序?yàn)橹?,欠缺工程型知識(shí),處于被動(dòng)灌輸?shù)膶W(xué)習(xí)狀態(tài),常常會(huì)覺(jué)得語(yǔ)法知識(shí)點(diǎn)繁瑣、內(nèi)容枯燥,很難調(diào)動(dòng)積極性,當(dāng)面對(duì)實(shí)際工程問(wèn)題時(shí),程序規(guī)模一大,就束手無(wú)策,無(wú)法有機(jī)地綜合應(yīng)用所學(xué)知識(shí)去解決問(wèn)題。
⑵ 沒(méi)有形成系統(tǒng)化的分析過(guò)程。
由于教學(xué)和教材均側(cè)重于對(duì)語(yǔ)法進(jìn)行講授和剖析,未強(qiáng)調(diào)分析及測(cè)試的重要性,也沒(méi)有將軟件工程的思想融合在實(shí)踐教學(xué)中,因此,長(zhǎng)久以來(lái),學(xué)生養(yǎng)成一接觸題目就馬上開(kāi)始編寫(xiě)代碼的習(xí)慣,并且,運(yùn)行時(shí)往往僅按照預(yù)先設(shè)定的正確的輸入數(shù)據(jù),去驗(yàn)證自己的所編的程序是否正確。
⑶ 忽略算法邏輯思維能力的培養(yǎng)。
從學(xué)習(xí)效果來(lái)看,學(xué)生常存在著兩種誤區(qū),一種是將參與和獲得計(jì)算機(jī)等級(jí)考試證書(shū)作為學(xué)習(xí)目的,這就導(dǎo)致他們習(xí)慣于程序填空題形式的編程方式,獨(dú)立編程能力欠缺;一種是對(duì)C語(yǔ)言中的指針、遞歸問(wèn)題存在畏難情緒,又認(rèn)為就業(yè)時(shí)可以選擇其他語(yǔ)言工具如Java來(lái)避免這些難點(diǎn),沒(méi)有認(rèn)識(shí)到指針和遞歸的真正價(jià)值在于學(xué)習(xí)它們過(guò)程中得到的思維深度[1],忽略了推理能力、抽象思考能力方面的培養(yǎng)。
⑷ 實(shí)踐操作能力不強(qiáng)。
學(xué)生的實(shí)驗(yàn)操作能力不強(qiáng)主要表現(xiàn)在對(duì)程序運(yùn)行中一些常見(jiàn)編譯問(wèn)題無(wú)法很快做出反應(yīng),不會(huì)依據(jù)提示信息去判斷發(fā)生錯(cuò)誤的原因,對(duì)一些運(yùn)行問(wèn)題更是束手無(wú)策,通常一有問(wèn)題產(chǎn)生,就轉(zhuǎn)向?qū)ふ遗涮椎膶?shí)驗(yàn)指導(dǎo)書(shū)中所提供的正確答案,或者依賴教師指出問(wèn)題所在,幫忙改正錯(cuò)誤。
2 項(xiàng)目驅(qū)動(dòng)的分組教學(xué)方法的具體實(shí)施
建構(gòu)主義學(xué)習(xí)理論認(rèn)為,個(gè)體的認(rèn)知發(fā)展與學(xué)習(xí)過(guò)程密切相關(guān),知識(shí)獲取是以學(xué)習(xí)者為中心,利用“情境”、“協(xié)作”、“會(huì)話”等學(xué)習(xí)要素,通過(guò)意義建構(gòu)的方式而獲得。針對(duì)C語(yǔ)言課程設(shè)計(jì)這一門(mén)實(shí)踐性非常強(qiáng)的課程,我們采用項(xiàng)目驅(qū)動(dòng)的分組教學(xué)方法,在建構(gòu)主義學(xué)習(xí)理論基礎(chǔ)上進(jìn)行教學(xué)設(shè)計(jì),以學(xué)生為中心,融合軟件工程思想,以培養(yǎng)學(xué)生的程序設(shè)計(jì)能力、創(chuàng)新能力、邏輯思維能力和協(xié)作精神為主線,通過(guò)項(xiàng)目任務(wù)引導(dǎo)他們主動(dòng)學(xué)習(xí),去深入理解軟件設(shè)計(jì)思想,并加深對(duì)重要知識(shí)點(diǎn)的理解。為了將課內(nèi)實(shí)踐和課外自學(xué)有機(jī)結(jié)合起來(lái),我們將15個(gè)學(xué)時(shí)的上機(jī)實(shí)踐分為5次,集中安排在5天內(nèi),每次上機(jī)后留充足時(shí)間,要求學(xué)生去查閱資料,提升獲取信息、解讀信息的能力。整個(gè)教學(xué)過(guò)程中,需要在多個(gè)教學(xué)環(huán)節(jié)注意改革和創(chuàng)新。
2.1 項(xiàng)目設(shè)計(jì)
項(xiàng)目的提出是能否調(diào)動(dòng)學(xué)生學(xué)習(xí)積極性的關(guān)鍵。目前隨著信息化建設(shè)的深入,軟件在各個(gè)行業(yè)都獲得了廣泛應(yīng)用,其實(shí)際應(yīng)用領(lǐng)域非常廣泛。課程設(shè)計(jì)應(yīng)該提供一個(gè)良好的學(xué)習(xí)“情境”,要結(jié)合教學(xué)目標(biāo),來(lái)模擬演練實(shí)際軟件開(kāi)發(fā)過(guò)程。項(xiàng)目的設(shè)計(jì)需要遵循以下幾點(diǎn):①選擇學(xué)生比較熟悉的領(lǐng)域,貼近學(xué)生生活和學(xué)習(xí)方面的應(yīng)用,避免選擇需要較強(qiáng)專業(yè)背景、業(yè)務(wù)邏輯復(fù)雜的應(yīng)用,例如可以選擇學(xué)生選課、書(shū)籍管理、宿舍管理等,而盡量不要去選擇企業(yè)人事管理之類的應(yīng)用。這樣可以方便學(xué)生理解或完整需求,激發(fā)他們用程序去解決現(xiàn)實(shí)生活問(wèn)題的興趣。②功能上要有層次性,可劃分為一般性要求和可拓展性要求,一般性要求指出必須實(shí)現(xiàn)的功能,可拓展性要求則指出可以擴(kuò)展的功能,引導(dǎo)學(xué)生去探索和想象,可以方便開(kāi)展梯隊(duì)型教學(xué)。③從項(xiàng)目的編碼實(shí)現(xiàn)考慮,要能涵蓋C語(yǔ)言中的結(jié)構(gòu)體或聯(lián)合體等復(fù)雜數(shù)據(jù)類型,體現(xiàn)函數(shù)和指針這條主線,以促進(jìn)學(xué)生去綜合運(yùn)用和深入理解這些重要的知識(shí)點(diǎn)。
2.2 分組劃分
一個(gè)軟件的開(kāi)發(fā)僅依靠個(gè)人力量往往是無(wú)法實(shí)現(xiàn)的。軟件生命周期的各個(gè)階段需要軟件小組開(kāi)發(fā)人員協(xié)作完成[2],因此,在課程設(shè)計(jì)教學(xué)中,我們采用分組教學(xué)模式來(lái)培養(yǎng)學(xué)生的團(tuán)隊(duì)合作意識(shí)和團(tuán)隊(duì)精神,來(lái)充分體現(xiàn)合作與競(jìng)爭(zhēng)、分層教學(xué)與因材施教[3],并且還可以通過(guò)幫帶方式和組內(nèi)討論消化掉一部分問(wèn)題。分組是否合理、有效,直接影響協(xié)作模式能否取得良好的教學(xué)效果。在C語(yǔ)言課程設(shè)計(jì)實(shí)踐中,我們按照任務(wù)量安排人數(shù),學(xué)生分為以3-5人一組,按照組內(nèi)搭配合理,組件平衡原則分配,在分組時(shí)充分考慮到學(xué)生的個(gè)體能力差異,使學(xué)生能在交流合作過(guò)程中取長(zhǎng)補(bǔ)短。分組觀點(diǎn)認(rèn)為組內(nèi)成員之間的合作關(guān)系可以有“頭腦風(fēng)暴”式、模擬課題式、同伴互助式、角色扮演式和組合式[4]。這里,我們可以結(jié)合軟件開(kāi)發(fā)的分工特點(diǎn),將角色扮演應(yīng)用到課程設(shè)計(jì)的分組中,由小組組長(zhǎng)擔(dān)當(dāng)開(kāi)發(fā)經(jīng)理角色,其他人員針對(duì)其特長(zhǎng)分別擔(dān)當(dāng)需求分析師、架構(gòu)設(shè)計(jì)師、開(kāi)發(fā)人員、測(cè)試人員等角色,根據(jù)開(kāi)發(fā)階段的不同,各成員可以扮演不同類型的角色。
2.3 培養(yǎng)學(xué)生用模塊化思想對(duì)實(shí)際問(wèn)題進(jìn)行分析和設(shè)計(jì)
結(jié)構(gòu)化方法強(qiáng)調(diào)以模塊為中心,采用模塊化、自頂向下、逐步求精設(shè)計(jì)過(guò)程。項(xiàng)目驅(qū)動(dòng)的教學(xué)要培養(yǎng)學(xué)生用模塊化思想思考復(fù)雜問(wèn)題,即將程序劃分成獨(dú)立命名且可獨(dú)立訪問(wèn)的模塊,最后裝配集成模塊完成指定的功能。指導(dǎo)過(guò)程中,不僅需要糾正學(xué)生一接觸題目馬上編碼的習(xí)慣,而且需要糾正學(xué)生在main方法中編寫(xiě)所有代碼的習(xí)慣,這種方式會(huì)使得整個(gè)函數(shù)變得龐雜,代碼冗余大,不利于分工協(xié)作,也給閱讀和維護(hù)帶來(lái)很大的困難。當(dāng)學(xué)生在程序分解主函數(shù)和若干個(gè)其他函數(shù)時(shí),發(fā)現(xiàn)常存在著隨意分解、隨心所欲定義函數(shù)的現(xiàn)象,針對(duì)這一情況,教師可以先以一個(gè)項(xiàng)目為例,如成績(jī)管理系統(tǒng),演示模塊的分解過(guò)程,說(shuō)明內(nèi)聚性和耦合性要求[5]。在實(shí)際項(xiàng)目應(yīng)用時(shí),要求學(xué)生按功能分解,模塊內(nèi)的函數(shù)做到功能盡量單一,留出接口供其他模塊調(diào)用,一個(gè)模塊對(duì)應(yīng)一個(gè)文件,便于分工協(xié)作。各小組在完成按模塊劃分的軟件體系結(jié)構(gòu)圖后,才被允許進(jìn)入下一個(gè)詳細(xì)設(shè)計(jì)編碼階段。
2.4 強(qiáng)化編程思想的訓(xùn)練,加深對(duì)重要知識(shí)點(diǎn)的理解
算法是程序設(shè)計(jì)的靈魂,教學(xué)中需要成功訓(xùn)練好學(xué)生的頭腦,使他們變得足夠熟練、敏捷和靈活,需要訓(xùn)練學(xué)生在多個(gè)抽象層次上同時(shí)思考問(wèn)題[1]。因此,實(shí)踐過(guò)程中,要求學(xué)生熟練應(yīng)用程序流程圖或偽代碼等工具設(shè)計(jì)算法,在組內(nèi)展開(kāi)討論,比較不同算法實(shí)現(xiàn)方案的優(yōu)劣,以及如何在完成程序的功能基礎(chǔ)上,改善程序結(jié)構(gòu),優(yōu)化算法,進(jìn)一步提高運(yùn)行效率和空間利用率。
對(duì)C語(yǔ)言而言,訓(xùn)練學(xué)生的編程思想,離不開(kāi)指針、函數(shù)參數(shù)傳遞這些重要概念,是否真正理解這些概念也與能否成為一個(gè)優(yōu)秀程序員直接相關(guān)。在學(xué)生編碼時(shí),可幫助他們建立內(nèi)存模型,通過(guò)跟蹤每條語(yǔ)句的執(zhí)行情況,感受不同數(shù)據(jù)類型在內(nèi)存中所占用的空間,直觀地觀察內(nèi)存布局變化、變量的生命周期、變量狀態(tài)的變化等,去深入理解這些概念尤其是指針的本質(zhì)。
程序設(shè)計(jì)的另一目的是要培養(yǎng)學(xué)生的操作能力,其中很重要的一點(diǎn)就是提高調(diào)試能力。調(diào)試的方便與否與程序書(shū)寫(xiě)風(fēng)格密切相關(guān),學(xué)生通常不注意代碼的規(guī)范化,出現(xiàn)沒(méi)有層次縮進(jìn),標(biāo)記符隨意命名、詞不達(dá)意,也沒(méi)有必要的注釋等現(xiàn)象,這些給查錯(cuò)和閱讀帶來(lái)了很大的不便,不利于分組模式下的協(xié)作開(kāi)發(fā)和維護(hù),因此,實(shí)踐教學(xué)時(shí)應(yīng)該培養(yǎng)學(xué)生注意良好程序風(fēng)格。此外,教學(xué)時(shí)還需糾正部分學(xué)生寫(xiě)代碼一寫(xiě)到底的習(xí)慣,讓學(xué)生認(rèn)識(shí)到程序的編寫(xiě)是一個(gè)調(diào)試-修改-調(diào)試的反復(fù)迭代過(guò)程,要在多次錯(cuò)誤或失敗中獲取調(diào)試經(jīng)驗(yàn)。在學(xué)生出現(xiàn)錯(cuò)誤時(shí),要引導(dǎo)學(xué)生根據(jù)錯(cuò)誤和警告信息,分析辨別是語(yǔ)法錯(cuò)誤還是邏輯錯(cuò)誤,并鼓勵(lì)學(xué)生使用調(diào)試工具,應(yīng)用斷點(diǎn)跟蹤和對(duì)分查找等調(diào)試方法,去主動(dòng)地發(fā)現(xiàn)和解決問(wèn)題。
測(cè)試在軟件開(kāi)發(fā)中占重要地位,軟件測(cè)試的工作量往往占軟件開(kāi)發(fā)總工作量的40%以上。從學(xué)生實(shí)踐情況調(diào)查來(lái)看,測(cè)試往往是初學(xué)C語(yǔ)言的學(xué)生特別容易忽略的,普遍出現(xiàn)一些諸如不重視人機(jī)交互界面設(shè)計(jì),沒(méi)有輸入提示或出錯(cuò)提示信息,僅使用在預(yù)定范圍內(nèi)、滿足預(yù)定格式要求的正確數(shù)據(jù)進(jìn)行測(cè)試等問(wèn)題。項(xiàng)目驅(qū)動(dòng)的教學(xué)尤其應(yīng)該注重培養(yǎng)學(xué)生的測(cè)試意識(shí),指導(dǎo)學(xué)生學(xué)會(huì)設(shè)計(jì)簡(jiǎn)單的有效測(cè)試用例和無(wú)效測(cè)試用例,并開(kāi)展組內(nèi)測(cè)試和組間測(cè)試,以提高測(cè)試效率和質(zhì)量。
2.5 考核方式改革
對(duì)不容易理解的常量、變量和語(yǔ)句有注釋\&5%\&函數(shù)、變量取名較規(guī)范易懂\&5%\&函數(shù)功能是否滿足功能內(nèi)聚\&15%\&調(diào)試手段\&會(huì)單步運(yùn)行到任何一個(gè)語(yǔ)句,查看變量值\&5%\&會(huì)斷點(diǎn)調(diào)試\&5%\&總結(jié)報(bào)告\&用流程圖或偽代碼描述一個(gè)函數(shù)的算法\&10%\&有小組分工情況說(shuō)明和各自的經(jīng)驗(yàn)總結(jié)\&5%\&語(yǔ)言簡(jiǎn)練,條理清楚,圖表規(guī)范,附程序清單\&10%\&]
分組形式的課程設(shè)計(jì)需采用彈性考核機(jī)制,個(gè)人考核、組內(nèi)考核和教師考核有機(jī)結(jié)合方式。課程設(shè)計(jì)考核成績(jī)=個(gè)人自我評(píng)價(jià)(15%)+組內(nèi)評(píng)價(jià)(35%)+教師評(píng)價(jià)(50%)。自我評(píng)價(jià)是促進(jìn)學(xué)生反思的一種有效手段,組內(nèi)評(píng)價(jià)可以觀察學(xué)生組內(nèi)交流協(xié)調(diào)時(shí)有沒(méi)有突出表現(xiàn),而為避免少數(shù)學(xué)生抄襲實(shí)驗(yàn)報(bào)告,教師評(píng)價(jià)采用答辯形式,考核學(xué)生的實(shí)際操作能力、對(duì)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)和算法的理解程度,以及功能和算法上的應(yīng)用亮點(diǎn)??己说木唧w內(nèi)容和評(píng)分標(biāo)準(zhǔn)可以多元化,比如對(duì)一個(gè)用鏈表實(shí)現(xiàn)圖書(shū)信息管理系統(tǒng)的項(xiàng)目,可以按表1來(lái)指定具體考核標(biāo)準(zhǔn)。
3 結(jié)束語(yǔ)
本學(xué)院的C語(yǔ)言課程設(shè)計(jì)教學(xué)實(shí)踐表明,通過(guò)項(xiàng)目驅(qū)動(dòng)的分組教學(xué)法的實(shí)施,能充分調(diào)動(dòng)學(xué)生的學(xué)習(xí)積極性,學(xué)生的編程邏輯性和實(shí)踐能力都得到了明顯提高。在模仿實(shí)際開(kāi)發(fā)環(huán)境過(guò)程中,學(xué)生對(duì)項(xiàng)目開(kāi)展的整個(gè)流程和各環(huán)節(jié)的具體要求程有了切實(shí)了解,積累了一定的項(xiàng)目開(kāi)發(fā)經(jīng)驗(yàn),培養(yǎng)起了團(tuán)隊(duì)協(xié)作能力。為了能更好地提高學(xué)生實(shí)踐能力,為他們將來(lái)從事軟件開(kāi)發(fā)工作奠定扎實(shí)基礎(chǔ),我們還需要在今后的實(shí)踐教學(xué)中繼續(xù)開(kāi)拓和探索,以期達(dá)到更好的實(shí)踐效果。
參考文獻(xiàn):
[1] Spolsky J. More Joel on Software: Further Thoughts on Diverse and Occasionally Related Matters that Will Prove of Interest to Software Developers, Designers, and Managers, and to Those Who, Whether by Good Fortune Or Ill Luck, Work with Them in Some Capacity[M].Apress,2008.
[2] Brooks, Jr. Frederick P., "The Mythical Man-Month", The: Essays on Software Engineering[M]. Anniversary Edition, 2/E, Addison Wesley,1995.
[3] 時(shí)貴英,劉華鎣,李瑞芳.分組協(xié)作教學(xué)模式在程序設(shè)計(jì)課程中的應(yīng)用[J].長(zhǎng)江大學(xué)學(xué)報(bào)自然科學(xué)版:理工卷,2010.3:704-705
[4] 趙琦.分組教學(xué)的形式及指導(dǎo)方法.http://www.edu.cn/20010827/208389.shtml.
[5] Lawrence P S, Pfleeger S L, Atlee J M. Software engineering:theory and practice[M].Pearson Education India,2006.