摘要:C、C++和Java等宿主語(yǔ)言是計(jì)算機(jī)專業(yè)必修的課程。本文指出了語(yǔ)言課程的教與學(xué)中存在的問(wèn)題,并結(jié)合軟件開發(fā)方法對(duì)課程教學(xué)法作了積極地探索。采用啟發(fā)式教學(xué)、探究式教學(xué),激發(fā)學(xué)生的學(xué)習(xí)潛能,使之掌握編程思維和方法,對(duì)提高他們的自主學(xué)習(xí)能力、培養(yǎng)他們的創(chuàng)新精神有著積極的作用。
關(guān)鍵詞:宿主語(yǔ)言;教學(xué)法;自主學(xué)習(xí)
中圖分類號(hào):G64 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1672-5913 (2007) 21-0034-04
Study and Practice on Teaching Method of Computer Language Course
Bian Xiaoyong
(Department of Computer Science Technology,
Wuhan University of Science Technology, Wuhan 430081)
Abstract: The host languages such as C, C++ and Java are a compulsory course majored in computer specialty. This paper points out the problems existing in computer language teaching, and combining with software developing approach makes a positive exploration of course-teaching methods. We try to use heuristic or exploring method of teaching, which can greatly inspire the potential ability of the students and their programming idea and method are trained. It’s extremely helpful to improve their Autonomous Learning ability and to foster them mentally.
Key words: Host Language;Teaching Method;Autonomous Learning
C、C++和Java等計(jì)算機(jī)語(yǔ)言(也稱宿主語(yǔ)言)課程作為計(jì)算機(jī)專業(yè)重要的基礎(chǔ)課,在計(jì)算機(jī)專業(yè)本科教學(xué)和軟件開發(fā)中起著重要的基礎(chǔ)作用。對(duì)學(xué)生用計(jì)算機(jī)解決實(shí)際問(wèn)題的思維能力訓(xùn)練也是非常重要的。而學(xué)生掌握計(jì)算機(jī)語(yǔ)言類課程的程度將直接影響到計(jì)算機(jī)在其專業(yè)領(lǐng)域中的應(yīng)用,如何提高學(xué)生的程序設(shè)計(jì)能力和軟件開發(fā)思維將變得相當(dāng)重要。
本文針對(duì)計(jì)算機(jī)語(yǔ)言教學(xué)中的一些共性問(wèn)題進(jìn)行分析,對(duì)一些面向研究型的教學(xué)法進(jìn)行探索,例如圍繞以問(wèn)題為主的教學(xué)法和“任務(wù)驅(qū)動(dòng)式”教學(xué)法,能夠很好地培養(yǎng)學(xué)生的自主學(xué)習(xí)和創(chuàng)新思維能力。
1計(jì)算機(jī)語(yǔ)言教與學(xué)中存在的主要問(wèn)題
在計(jì)算機(jī)語(yǔ)言課程教學(xué)中存在著這樣或那樣的問(wèn)題,例如偏離教學(xué)目標(biāo)、無(wú)法貫徹實(shí)施新的教學(xué)理念,等,這些問(wèn)題歸根結(jié)底還在于教師“教”和學(xué)生“學(xué)”兩個(gè)方面的問(wèn)題。
1.1教師“教”方面的問(wèn)題
教師“教”是一個(gè)教學(xué)環(huán)節(jié)中的重要部分。教師除了傳授知識(shí),還應(yīng)該精心組織教學(xué)活動(dòng),創(chuàng)設(shè)情境,啟發(fā)和引導(dǎo)學(xué)生學(xué)習(xí)。以下這些問(wèn)題都會(huì)直接或間接地影響學(xué)生對(duì)語(yǔ)言課程的學(xué)習(xí)興趣。
(1) 沒(méi)有把握好理論教學(xué)和實(shí)例教學(xué)之間的尺度。高校計(jì)算機(jī)專業(yè)教師往往是“理論知識(shí)冗余,實(shí)戰(zhàn)經(jīng)驗(yàn)貧乏”,特別是缺少即時(shí)編程及案例分析經(jīng)驗(yàn),這就制約了實(shí)例教學(xué)的開發(fā)應(yīng)用,學(xué)生的學(xué)習(xí)熱情無(wú)法調(diào)動(dòng)起來(lái)。
(2) 缺少應(yīng)有的情境設(shè)計(jì)。教師在講解完某個(gè)知識(shí)點(diǎn)后一般要舉例予以說(shuō)明。一些教師的做法是直接運(yùn)行教程上的例子或讓學(xué)生看懂就行,而沒(méi)有創(chuàng)設(shè)與實(shí)例有關(guān)的,盡可能真實(shí)的情境。例如對(duì)這樣的例子是否合適,有沒(méi)有更好的做法等問(wèn)題情境,由此提出具體的編程要求。
(3) 強(qiáng)調(diào)語(yǔ)法或算法為主的教學(xué)。在教學(xué)中有些教師片面強(qiáng)調(diào)以語(yǔ)法教學(xué)為主或以算法設(shè)計(jì)為主的方式,前者缺少程序設(shè)計(jì)方法、算法設(shè)計(jì)與分析、軟件工程等方面的實(shí)訓(xùn),而后者只講解算法的設(shè)計(jì)。這樣學(xué)習(xí)的結(jié)果是弱于編程或在“虛無(wú)”中編程。
(4) 缺少服務(wù)于學(xué)生所學(xué)專業(yè)的理念。教師缺乏對(duì)學(xué)生已有的知識(shí)結(jié)構(gòu)和學(xué)習(xí)心理特點(diǎn)之間關(guān)系的研究,在教學(xué)設(shè)計(jì)時(shí)沒(méi)有充分考慮學(xué)生的專業(yè)特點(diǎn)而不加區(qū)分地采用同一種教學(xué)方法和策略,結(jié)果是學(xué)生沒(méi)能將程序設(shè)計(jì)的能力遷移到實(shí)際的工作和研究中。事實(shí)上,學(xué)生最容易在所學(xué)專業(yè)上出成果。
因此,教師對(duì)如何“教”進(jìn)行定位是一個(gè)很重要的環(huán)節(jié),它對(duì)教師提出了更高的要求。
1.2學(xué)生“學(xué)”方面的問(wèn)題
學(xué)生基本上是在應(yīng)試教育環(huán)境下培養(yǎng)出來(lái)的,習(xí)慣于有教師監(jiān)督的學(xué)習(xí),容易產(chǎn)生依賴心理,常常滿足于課堂上聽懂,課后不去查閱相關(guān)書籍和知識(shí)。主要存在的問(wèn)題有:
(1) 缺少編程訓(xùn)練和積累。計(jì)算機(jī)語(yǔ)言課程是一門實(shí)踐性非常強(qiáng)的課程,學(xué)習(xí)與掌握它們需要進(jìn)行一定數(shù)量的、綜合性和有針對(duì)性的訓(xùn)練。大多數(shù)學(xué)生僅僅滿足于課堂部分理論知識(shí)的學(xué)習(xí)和鞏固,即使在有限的上機(jī)實(shí)踐中,也往往不注意集中訓(xùn)練和編程技能方面的積累。因此難以達(dá)到“融會(huì)貫通”。
(2) 缺少相應(yīng)的編程設(shè)計(jì)方法。許多學(xué)生在寫C程序的時(shí)候,不論程序多大都用一個(gè)函數(shù)實(shí)現(xiàn),缺少模塊化的編程思想,在C++編程中難于捕捉和創(chuàng)建問(wèn)題域模型,在Java編程中不能設(shè)計(jì)易于部署的可重用組件。因此他們不能掌握面向過(guò)程的編程方法、面向?qū)ο蟮木幊谭椒ê兔嫦蚪M件的編程方法。
(3) 習(xí)慣于監(jiān)督學(xué)習(xí)。學(xué)生長(zhǎng)期以來(lái)囿于有教師指導(dǎo)和監(jiān)督的學(xué)習(xí)情境,他們的依賴性很強(qiáng),這不利于開放式環(huán)境下的自我學(xué)習(xí),無(wú)法發(fā)揮他們的主體作用,也就無(wú)從談起他們?cè)谇笾械闹鲃?dòng)性和創(chuàng)造性。
(4) 缺少團(tuán)隊(duì)合作精神。在布置大作業(yè)或課程設(shè)計(jì)時(shí),往往將一個(gè)大的課題分給課題小組,要求學(xué)生分工協(xié)作、共同討論方案,劃分模塊,并最終承擔(dān)一定的工作。在實(shí)際的開發(fā)應(yīng)用中,他們沒(méi)有意識(shí)到“學(xué)習(xí)團(tuán)隊(duì)”的重要性,缺少交流和提不出問(wèn)題,不能互相取長(zhǎng)補(bǔ)短,最終影響到課題的完成。
教師在教學(xué)過(guò)程中,針對(duì)上述這些問(wèn)題要及時(shí)引導(dǎo)學(xué)生,幫助他們走出誤區(qū),正確認(rèn)識(shí)和對(duì)待語(yǔ)言課程的學(xué)習(xí)。
2新型教學(xué)法的運(yùn)用
在計(jì)算機(jī)語(yǔ)言教學(xué)過(guò)程中,不僅要學(xué)習(xí)語(yǔ)言的語(yǔ)法和編譯器的相關(guān)知識(shí),更重要的是要學(xué)習(xí)程序設(shè)計(jì)的思想和算法,培養(yǎng)編程思維。在各種教學(xué)法中尤以以問(wèn)題為主的教學(xué)法和強(qiáng)調(diào)實(shí)踐活動(dòng)的教學(xué)法見(jiàn)長(zhǎng),它們很適合計(jì)算機(jī)語(yǔ)言類課程的教學(xué)。
2.1以問(wèn)題為主的教學(xué)法
創(chuàng)新的動(dòng)力在于不斷提問(wèn)。問(wèn)題是學(xué)生學(xué)習(xí)的驅(qū)動(dòng)力,沒(méi)有問(wèn)題便沒(méi)有深入。教學(xué)的目的就是激發(fā)和培養(yǎng)學(xué)生的問(wèn)題意識(shí)。所提“問(wèn)題”,也是以教學(xué)中相關(guān)的一些問(wèn)題為主。這樣把學(xué)習(xí)知識(shí)的過(guò)程化解為提出問(wèn)題、分析問(wèn)題和解決問(wèn)題的過(guò)程,促進(jìn)學(xué)生創(chuàng)新精神和創(chuàng)新能力的發(fā)展。這一類教學(xué)活動(dòng)的實(shí)際教學(xué)中以啟發(fā)式教學(xué)居多。如果在教學(xué)中很好地運(yùn)用啟發(fā)式教學(xué),就可以調(diào)動(dòng)學(xué)生學(xué)習(xí)的積極性和主動(dòng)性,又能啟發(fā)學(xué)生的思維。例如,在C的main函數(shù)指針數(shù)組參數(shù)的學(xué)習(xí)中,許多學(xué)生無(wú)法理解基于指針數(shù)組參數(shù)方式交換字符串的例子。此時(shí),教師應(yīng)解釋兩個(gè)概念:argv內(nèi)存區(qū)和*argv內(nèi)存區(qū),也就是說(shuō)這是兩個(gè)不同的內(nèi)存區(qū),根據(jù)數(shù)組表示和指針表示之間的法則,*argv也就是argv[0](這是編譯器的逆行為),對(duì)*(argv+i)的操作就是對(duì)指針數(shù)組元素(下標(biāo)i)的操作,而指針數(shù)組元素存放的是那些常量字符串的首地址。因而使用選擇法交換指針數(shù)組的值也就是交換指向那些“逆序”的字符串的首地址。在此基礎(chǔ)上學(xué)生就可以理解使用指針數(shù)組傳遞參數(shù)的過(guò)程。進(jìn)一步,我們可以在“電子黑板”上畫出argv和*argv的內(nèi)存結(jié)構(gòu)圖,如圖2.1所示。
在圖2.1中,main函數(shù)的形參argv實(shí)際上就是一個(gè)二級(jí)指針變量,對(duì)應(yīng)的實(shí)參是由命令行參數(shù)構(gòu)成的字符指針數(shù)組的數(shù)組名。為什么*(argv+i)是指向第i個(gè)字符串而不是一個(gè)隨機(jī)地址值呢?這時(shí)引導(dǎo)學(xué)生思考二級(jí)指針參數(shù)之間的傳遞關(guān)系,就不難理解了。所以容易得出結(jié)論:必須對(duì)argv+i執(zhí)行間接訪問(wèn)運(yùn)算才能得到某個(gè)參數(shù)值。接著讓學(xué)生思考:能不能在程序運(yùn)行后從終端輸入多個(gè)字符串保存在argv[i]中呢?學(xué)生要經(jīng)過(guò)一番思索和作橫向類比后才能得出結(jié)論:不能從終端輸入字符串并企圖用argv[i]保存第i個(gè)串。學(xué)生在結(jié)合第一個(gè)問(wèn)題的深刻理解后就可以很快得出第二個(gè)問(wèn)題的結(jié)論了。這對(duì)避免學(xué)生寫出邏輯錯(cuò)誤的程序是很有裨益的,類似這樣的問(wèn)題情境還有很多。啟發(fā)式教學(xué)法對(duì)于C++和Java的教學(xué)也具有同樣的效果,在此不作討論。
2.2強(qiáng)調(diào)實(shí)踐活動(dòng)的教學(xué)法
這一類教學(xué)活動(dòng)以探究式教學(xué)模式為主?!叭蝿?wù)驅(qū)動(dòng)式”是實(shí)施探究式教學(xué)模式的一種教學(xué)方法,是一種新型的、以學(xué)生自主學(xué)習(xí),教師加以引導(dǎo)的教學(xué)方法,它打破了傳統(tǒng)教學(xué)方法中注重學(xué)習(xí)的循序漸進(jìn)和積累的循規(guī)蹈矩,不再按照教學(xué)內(nèi)容從易到難的順序,而是以完成一個(gè)“任務(wù)”作為驅(qū)動(dòng)來(lái)進(jìn)行教學(xué),完成教學(xué)任務(wù)。在完成“任務(wù)”的過(guò)程中,又培養(yǎng)了學(xué)生的自學(xué)能力、創(chuàng)新精神和合作意識(shí)。
在C語(yǔ)言的教學(xué)過(guò)程中,結(jié)合“任務(wù)驅(qū)動(dòng)式”教學(xué)法,我們將鏈表和文件章節(jié)的內(nèi)容整合起來(lái)布置一個(gè)大作業(yè)進(jìn)行課堂教學(xué)。因此,將教學(xué)分為三個(gè)環(huán)節(jié)進(jìn)行。
(1) 教師設(shè)計(jì)“任務(wù)”階段
在教學(xué)內(nèi)容的安排上,將以前的“知識(shí)點(diǎn)”為線索改用以“任務(wù)”為線索、以“子任務(wù)”為模塊組織教學(xué)內(nèi)容。教師應(yīng)創(chuàng)設(shè)任務(wù)情境,將整個(gè)“任務(wù)”分為8個(gè)“子任務(wù)”,即8個(gè)模塊,例如,鏈表創(chuàng)建模塊,鏈表輸出模塊,鏈表插入模塊,鏈表刪除模塊,鏈表排序模塊,鏈表釋放模塊,以及鏈表保存模塊和鏈表恢復(fù)模塊。在模塊的具體設(shè)計(jì)中體現(xiàn)出“任務(wù)”的層次性,即根據(jù)學(xué)生的實(shí)際水平來(lái)設(shè)計(jì)每一個(gè)模塊,針對(duì)不同的課題小組來(lái)設(shè)計(jì)不同層次的模塊。例如,鏈表創(chuàng)建要求用隊(duì)列方式或棧式建立,鏈表表頭指針的返回分為3種不同的函數(shù)實(shí)現(xiàn)。整個(gè)任務(wù)確定之后,以一個(gè)“框架”程序的形式展示給學(xué)生。
(2) 學(xué)生自主探索“任務(wù)”階段
這是一個(gè)開放式的教學(xué)環(huán)節(jié),其目的在于讓學(xué)生在自主探索的過(guò)程中完成對(duì)新知識(shí)的理解和鞏固。在這個(gè)過(guò)程中,教師通過(guò)必要的講解和引導(dǎo)讓學(xué)生在情境中學(xué)習(xí)任務(wù)和完成任務(wù)。在學(xué)生學(xué)習(xí)遇到困難時(shí),教師應(yīng)該為學(xué)生作適當(dāng)?shù)闹更c(diǎn),給學(xué)生提出問(wèn)題,引導(dǎo)學(xué)生去探究。例如,學(xué)生在看到教程上使用二級(jí)指針變量返回鏈表表頭指針的函數(shù)模塊時(shí)就很納悶,這時(shí)教師就應(yīng)該講解這樣做的好處以及使用一級(jí)指針變量也是可行的。學(xué)生在明確了本小組的任務(wù)后,要求他們互相討論、交流、分析和提出各種可能的方案,并最終確定解決方案和完成設(shè)計(jì)任務(wù)。學(xué)生的自主學(xué)習(xí)和小組內(nèi)的協(xié)作學(xué)習(xí)是任務(wù)完成的關(guān)鍵。
(3) 學(xué)習(xí)效果評(píng)價(jià)階段
學(xué)習(xí)效果評(píng)價(jià)指學(xué)生反思問(wèn)題的解決過(guò)程,相互評(píng)價(jià)或自我評(píng)價(jià),教師適當(dāng)作出點(diǎn)評(píng),并幫助學(xué)生作歸納與總結(jié)。教師要?jiǎng)?chuàng)設(shè)一個(gè)自主平等的氣氛,適時(shí)引導(dǎo)學(xué)生暢所欲言,發(fā)表對(duì)每個(gè)問(wèn)題的意見(jiàn),組織討論、交流匯報(bào)各個(gè)學(xué)習(xí)小組的或個(gè)人的不同理解,使學(xué)生在交流和討論中學(xué)會(huì)比較、學(xué)會(huì)思考、敢于創(chuàng)新。例如針對(duì)教程上保存鏈表的函數(shù)模塊,教師就可以提出問(wèn)題,如“能不能只保存每個(gè)結(jié)點(diǎn)的非指針部分的數(shù)據(jù)?”并讓學(xué)生進(jìn)行討論,并在學(xué)習(xí)中得到結(jié)論。教師還可以在恢復(fù)鏈表的函數(shù)模塊中提出問(wèn)題“為什么每次讀出一個(gè)結(jié)點(diǎn)數(shù)據(jù)后還要重新申請(qǐng)一段內(nèi)存區(qū)呢?”當(dāng)學(xué)生明白了前一個(gè)問(wèn)題時(shí),有學(xué)生就提問(wèn)了“那我每次保存鏈表時(shí)也保存指針部分的數(shù)據(jù)不就可以直接恢復(fù)鏈表了?”接著,讓學(xué)生進(jìn)行討論。經(jīng)過(guò)多次討論和教師的指導(dǎo),學(xué)生明白了原來(lái)創(chuàng)建鏈表時(shí)申請(qǐng)的是動(dòng)態(tài)變化的自由堆空間。
通過(guò)應(yīng)用“任務(wù)驅(qū)動(dòng)式”教學(xué)法進(jìn)行教學(xué),學(xué)生就比較容易掌握難點(diǎn),其主體意識(shí)明顯增強(qiáng)了,程序設(shè)計(jì)能力和創(chuàng)造性得到了很好的發(fā)展,自我探究能力也在不斷提高?!叭蝿?wù)驅(qū)動(dòng)式”教學(xué)法同樣適用于C++和Java語(yǔ)言課程的教學(xué)。
當(dāng)然,任務(wù)驅(qū)動(dòng)的教學(xué)思想是將新知識(shí)分解到一些任務(wù)中,難免忽略知識(shí)的系統(tǒng)性和完整性。因此,要把握好任務(wù)的提出,注意從整體上統(tǒng)籌設(shè)計(jì),使任務(wù)與任務(wù)之間、新舊知識(shí)之間產(chǎn)生聯(lián)系。另外,在學(xué)習(xí)完一個(gè)章節(jié)之后,教師有必要引導(dǎo)學(xué)生對(duì)所學(xué)知識(shí)進(jìn)行及時(shí)的總結(jié)歸納,以形成知識(shí)的系統(tǒng)性。
3輔助教學(xué)手段的使用
(1) 充分利用多媒體教學(xué)手段?;诙嗝襟w技術(shù)的教學(xué)能夠以豐富的信息展示在學(xué)生面前,使得教學(xué)內(nèi)容形象、生動(dòng)、更為直觀,教學(xué)秩序更加規(guī)范。
(2) 以網(wǎng)絡(luò)技術(shù)為支撐的網(wǎng)絡(luò)學(xué)習(xí)環(huán)境。以網(wǎng)絡(luò)環(huán)境為依托的計(jì)算實(shí)驗(yàn)平臺(tái)為學(xué)生提供了豐富的教學(xué)資源。通過(guò)網(wǎng)絡(luò)教學(xué)平臺(tái),可以下載網(wǎng)絡(luò)課件、提交電子作業(yè),進(jìn)行在線答疑和自測(cè)練習(xí);可以展示方式多樣的信息,有利于學(xué)生對(duì)信息的加工和處理。教師還可以以此環(huán)境為依托進(jìn)行網(wǎng)絡(luò)教學(xué)和遠(yuǎn)程教學(xué)。
4結(jié)束語(yǔ)
本文對(duì)計(jì)算機(jī)語(yǔ)言教學(xué)中的一些共性問(wèn)題進(jìn)行分析,結(jié)合大多數(shù)計(jì)算機(jī)高級(jí)語(yǔ)言的共同特點(diǎn),對(duì)計(jì)算機(jī)語(yǔ)言課程教學(xué)法進(jìn)行了有益探索,在教學(xué)實(shí)踐中通過(guò)運(yùn)用它們?nèi)〉昧撕玫慕虒W(xué)效果,同時(shí)培養(yǎng)了學(xué)生的編程思維。
總之,在計(jì)算機(jī)語(yǔ)言教學(xué)過(guò)程中,要充分發(fā)揮教師的主導(dǎo)性和學(xué)生的主體性,以培養(yǎng)學(xué)生自主學(xué)習(xí)和創(chuàng)新能力為導(dǎo)向的教育理念,充分利用各種教學(xué)法和實(shí)踐環(huán)節(jié),提高學(xué)生的編程技能;采用考試和實(shí)驗(yàn)相結(jié)合的方式進(jìn)行考核,并充分利用教學(xué)中的諸要素(例如媒體),不斷創(chuàng)新,實(shí)現(xiàn)向研究型教學(xué)的轉(zhuǎn)變。
參考文獻(xiàn)
[1] 張書云. 程序設(shè)計(jì)語(yǔ)言課程教學(xué)方法探析[J]. 計(jì)算機(jī)教育,2005,(5):16-18.
[2] 曾煌興,周曉宏. 項(xiàng)目開發(fā)教學(xué)法的教學(xué)設(shè)計(jì)策略及應(yīng)用[J]. 職教論壇,2005,(6).
[3] 劉乃琦. 軟件工程教育的特點(diǎn)與問(wèn)題[J]. 計(jì)算機(jī)教育,2004,(11).
[4] 張敏霞. 程序設(shè)計(jì)語(yǔ)言課程教學(xué)方法改革的探索與實(shí)踐[J]. 中國(guó)高教研究,2004,(2):90.
[5] 潘云鶴. 研究型大學(xué)本科生教育的改革與發(fā)展[J]. 中國(guó)高等教育,2001,(245).
[6] 王家瑾. 從教與學(xué)的互動(dòng)看優(yōu)化教學(xué)的設(shè)計(jì)與實(shí)踐[J]. 教育研究,1997,(1):51-55.
收稿日期:2007-06-25
作者簡(jiǎn)介:邊小勇(1976-),江西峽江人,碩士,講師,研究方向:數(shù)據(jù)挖掘。