摘要 上機(jī)實(shí)驗(yàn)是數(shù)據(jù)結(jié)構(gòu)課程教學(xué)中很重要的一個(gè)環(huán)節(jié),其教學(xué)效果對(duì)整個(gè)課程的教學(xué)質(zhì)量有直接影響。然而,獲取良好的實(shí)踐教學(xué)效果是不容易的,在分析各方面因素的基礎(chǔ)上,以課內(nèi)上機(jī)為例,從學(xué)時(shí)分配、內(nèi)容設(shè)置、任務(wù)難度和驗(yàn)收方式四個(gè)方面給出了一些建議以供探討。
關(guān)鍵詞 數(shù)據(jù)結(jié)構(gòu) 實(shí)踐教學(xué) 課內(nèi)上機(jī)
中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:A
作為計(jì)算機(jī)專業(yè)學(xué)生的一門專業(yè)核心課程,數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)程序設(shè)計(jì)的重要理論技術(shù)基礎(chǔ)。①在實(shí)際的教學(xué)過程中,學(xué)生常常反映數(shù)據(jù)結(jié)構(gòu)課程難度偏大,而且內(nèi)容枯燥。從教學(xué)內(nèi)容上來講,數(shù)據(jù)結(jié)構(gòu)比較難在于它包含了很多抽象的概念、算法。
數(shù)據(jù)結(jié)構(gòu)的教學(xué)形式包含理論教學(xué)和實(shí)踐教學(xué)兩部分。同C語(yǔ)言程序設(shè)計(jì)等實(shí)踐性很強(qiáng)的課程②類似,數(shù)據(jù)結(jié)構(gòu)也需要學(xué)生在掌握有關(guān)概念的基礎(chǔ)上進(jìn)行上機(jī)編程訓(xùn)練。理論是實(shí)踐的基礎(chǔ),而實(shí)踐幫助學(xué)生更好地理解課堂上所學(xué)到的知識(shí)。要提高本門課程的教學(xué)質(zhì)量,理論教學(xué)和實(shí)踐教學(xué)兩個(gè)環(huán)節(jié)都必須做好。當(dāng)然,要達(dá)到事先制定的教學(xué)目標(biāo)并不容易。比如,在理論教學(xué)上,教師需要豐富教學(xué)內(nèi)容而不僅僅是講解教材上的知識(shí)點(diǎn),如有教師提出的案例教學(xué)。③同時(shí),要想方設(shè)法使課堂教學(xué)過程生動(dòng)有趣、講授語(yǔ)言淺顯易懂。下面本文將以課內(nèi)上機(jī)為例,從如何增強(qiáng)教學(xué)效果談幾點(diǎn)感受,以供探討。
1 同步理論教學(xué),合理分配上機(jī)學(xué)時(shí)
在一般情況下,課內(nèi)上機(jī)內(nèi)容應(yīng)與理論教學(xué)內(nèi)容同步。然而,課內(nèi)上機(jī)的學(xué)時(shí)是有限的,比如20學(xué)時(shí)。如果一次上機(jī)為兩學(xué)時(shí),那么平均一章內(nèi)容只能安排一次上機(jī)。以嚴(yán)蔚敏C語(yǔ)言版的《數(shù)據(jù)結(jié)構(gòu)》教材為例,最先學(xué)習(xí)的內(nèi)容是線性結(jié)構(gòu),可以安排單鏈表的創(chuàng)建和插入、刪除等作為上機(jī)實(shí)驗(yàn)內(nèi)容。盡管這是第一個(gè)上機(jī)實(shí)驗(yàn),但在教學(xué)過程中學(xué)生往往反映這些內(nèi)容并不簡(jiǎn)單。原因是多數(shù)學(xué)生對(duì)C語(yǔ)言中結(jié)構(gòu)體和指針的使用并不熟練,因此需要花一定的時(shí)間來復(fù)習(xí)這方面內(nèi)容,所以本次實(shí)驗(yàn)可以安排兩次上機(jī)。而后續(xù)的棧和隊(duì)列等內(nèi)容相對(duì)而言較為容易,可只安排一次上機(jī)。由于上機(jī)學(xué)時(shí)有限,實(shí)驗(yàn)內(nèi)容又受到理論教學(xué)進(jìn)度的制約,為保證實(shí)驗(yàn)內(nèi)容在規(guī)定的學(xué)時(shí)內(nèi)全部完成,對(duì)課內(nèi)上機(jī)學(xué)時(shí)的合理分配就顯得尤為重要了。
2 豐富上機(jī)內(nèi)容,提高學(xué)生的學(xué)習(xí)積極性
學(xué)習(xí)的積極性對(duì)課程學(xué)習(xí)來說其重要性不言而喻。很多學(xué)生在學(xué)習(xí)理論知識(shí)之后,對(duì)上機(jī)編程還是有新鮮感的,但是不少學(xué)生會(huì)因?yàn)榫幊屉y度的逐步增大而逐漸失去興趣,最終選擇放棄。要讓學(xué)生保持對(duì)上機(jī)實(shí)驗(yàn)的熱情,教師需要在上機(jī)內(nèi)容的安排上有新意。通常,與教材配套的習(xí)題集中有不少的上機(jī)實(shí)習(xí)題(如嚴(yán)蔚敏版《數(shù)據(jù)結(jié)構(gòu)題集》)④可做參考。為提高學(xué)生的學(xué)習(xí)興趣,可以提供一些其他的題目。比如,在學(xué)習(xí)數(shù)組中的三元組時(shí),使用Movielens提供的用戶評(píng)分?jǐn)?shù)據(jù),Movielens是較早出現(xiàn)的電影推薦評(píng)分系統(tǒng),它提供了很多測(cè)試數(shù)據(jù)集。這些數(shù)據(jù)經(jīng)過處理后很容易轉(zhuǎn)換為三元組的存儲(chǔ)形式,而且具有一定的實(shí)際意義,相比為檢驗(yàn)程序而隨意制造的測(cè)試數(shù)據(jù),完成對(duì)這些評(píng)分?jǐn)?shù)據(jù)的處理更能夠吸引學(xué)生的注意力,從而提高他們的學(xué)習(xí)興趣。當(dāng)然,如何在教學(xué)中讓學(xué)生感受到樂趣,從而保持較高的學(xué)習(xí)積極性是一個(gè)值得研究的問題。
3 把握任務(wù)難度,提高學(xué)生編程能力
在數(shù)據(jù)結(jié)構(gòu)的理論教學(xué)內(nèi)容中包含了很多復(fù)雜而且抽象的概念、算法,通過課堂上的認(rèn)真學(xué)習(xí),多數(shù)學(xué)生還是能夠理解的。但是很多學(xué)生并不能真正掌握并做到學(xué)以致用。在一定程度上,這也是不少動(dòng)手能力不強(qiáng)的學(xué)生卻能在理論考試中考出好成績(jī)的原因。因此,對(duì)每一個(gè)在課堂上講解的重要知識(shí)點(diǎn),不管是簡(jiǎn)單的結(jié)構(gòu)類型定義還是復(fù)雜的算法,都要求學(xué)生編程實(shí)現(xiàn),讓學(xué)生在上機(jī)實(shí)驗(yàn)中去體會(huì)并掌握所學(xué)的理論知識(shí)。為了降低任務(wù)難度,可以給學(xué)生提供已經(jīng)寫好框架的程序,讓學(xué)生在合適的位置添加相應(yīng)的功能。比如,對(duì)于樹結(jié)構(gòu),可以在源程序中寫好二叉樹的創(chuàng)建,然后要求學(xué)生補(bǔ)充完成二叉樹的遍歷、層次計(jì)算或左右孩子查找等其他操作。這樣做的另一個(gè)好處是避免學(xué)生從網(wǎng)絡(luò)或從其它途徑直接尋找源代碼以應(yīng)付了事。由于程序是統(tǒng)一提供的,對(duì)學(xué)生來說無(wú)法自行發(fā)揮,即使找到合乎要求的部分代碼也要放到源程序中去調(diào)試運(yùn)行。然而,這樣的任務(wù)安排也會(huì)對(duì)一部分編程能力強(qiáng)的學(xué)生產(chǎn)生約束,使他們有可能提出的更好設(shè)計(jì)方案和編程創(chuàng)意被抑制。解決這一矛盾的方法之一是布置多級(jí)任務(wù)。對(duì)基本任務(wù)要求學(xué)生統(tǒng)一完成,而高級(jí)任務(wù)可以讓學(xué)生自行發(fā)揮。在采取這樣的多級(jí)任務(wù)方式之后,一方面可以讓編程基礎(chǔ)相對(duì)薄弱的學(xué)生得到訓(xùn)練,另一方面能夠?yàn)榫幊棠芰^強(qiáng)的學(xué)生提供自由發(fā)揮的空間,以滿足不同層次學(xué)生的需求。
編程是實(shí)踐數(shù)據(jù)結(jié)構(gòu)必須具備的能力。但是在教學(xué)中發(fā)現(xiàn),很多學(xué)生在數(shù)據(jù)結(jié)構(gòu)課程的實(shí)踐過程中不是沒有想法,而是不知道如何通過編程去實(shí)現(xiàn)。由于數(shù)據(jù)結(jié)構(gòu)是一門重要的專業(yè)基礎(chǔ)課,一般學(xué)生在修完某種編程語(yǔ)言(如C/C++)后就開始學(xué)習(xí)此課程了,除少數(shù)對(duì)編程有濃厚興趣、已經(jīng)具有一定編程能力的學(xué)生外,多數(shù)學(xué)生在此階段的編程能力還不是很強(qiáng),這也就往往使得他們花費(fèi)在調(diào)試程序上的時(shí)間遠(yuǎn)多于對(duì)程序的設(shè)計(jì)和編寫。因此,上機(jī)任務(wù)的難度需根據(jù)學(xué)生的實(shí)際水平適時(shí)調(diào)整,讓學(xué)生的編程能力得到鍛煉和增強(qiáng),以便為綜合性設(shè)計(jì)打好基礎(chǔ)。
4 完善驗(yàn)收方式,加強(qiáng)監(jiān)督和管理
課內(nèi)上機(jī)實(shí)驗(yàn)的考查是個(gè)很棘手的問題,一般實(shí)踐課程的常規(guī)考查方法是以答辯的形式進(jìn)行。學(xué)生在規(guī)定時(shí)間內(nèi)講解并運(yùn)行程序,教師通過提問來判斷學(xué)生的完成情況。這種方法還是比較有效的,能在有限的時(shí)間內(nèi)了解學(xué)生的學(xué)習(xí)情況,特別是提問環(huán)節(jié)能夠凸顯很多問題。然而,課堂時(shí)間有限,有時(shí)一個(gè)班甚至多個(gè)班被安排同時(shí)上機(jī),而且采用這種答辯的方式在課內(nèi)完成對(duì)所有學(xué)生的檢查是很難實(shí)現(xiàn)的。如果只安排一次最終的測(cè)試,部分自覺性不強(qiáng)的學(xué)生可能不會(huì)一直認(rèn)真學(xué)習(xí),僅僅在最后階段突擊,顯然這也沒有達(dá)到教學(xué)目的。因此,平時(shí)對(duì)課內(nèi)上機(jī)實(shí)驗(yàn)不僅要加強(qiáng)監(jiān)督和管理,驗(yàn)收方式也需靈活多樣。舉例來說,若課內(nèi)上機(jī)一共安排10次,可根據(jù)教學(xué)內(nèi)容分階段地安排3次答辯形式的考查,如對(duì)鏈表、二叉樹和圖等重要的教學(xué)內(nèi)容。這3次考查是每個(gè)學(xué)生都要完成的,每次指定一個(gè)最后期限,并且在此之前的任何上機(jī)時(shí)間也都可以驗(yàn)收。這樣,既解決了課內(nèi)上機(jī)的驗(yàn)收時(shí)間不夠用的問題,也能掌握所有學(xué)生的學(xué)習(xí)情況。
5 結(jié)語(yǔ)
綜上所述,由于數(shù)據(jù)結(jié)構(gòu)是一門理論性和實(shí)踐性都很強(qiáng)的計(jì)算機(jī)專業(yè)核心課程,如何在教學(xué)中使得每一堂上機(jī)實(shí)驗(yàn)課都有意義,而不流于形式是不容易的。當(dāng)然不論采用何種方式,最終目的還是希望學(xué)生能夠通過實(shí)驗(yàn)加深對(duì)理論知識(shí)的理解,在實(shí)踐中增強(qiáng)專業(yè)技能,并真正做到學(xué)以致用。
注釋
① 嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)[M].北京:清華大學(xué)出版社,2007:I.
② 譚浩強(qiáng).C語(yǔ)言程序設(shè)計(jì)(第二版)[M].北京:清華大學(xué)出版社,1999:X.
③ 李克清.《數(shù)據(jù)結(jié)構(gòu)》課程中的案例教學(xué)初探[J].長(zhǎng)江大學(xué)學(xué)報(bào):自然科學(xué)版,2004.1(4):135-136.
④ 嚴(yán)蔚敏,吳偉民,米寧.數(shù)據(jù)結(jié)構(gòu)題集(C語(yǔ)言版)[M].北京:清華大學(xué)出版社,2007:72-165.