摘要:分析數(shù)據(jù)結(jié)構(gòu)課程教學(xué)中存在的一些問(wèn)題,為提高教學(xué)質(zhì)量,文章提出在課程學(xué)習(xí)之初復(fù)習(xí)前導(dǎo)課程要點(diǎn)以強(qiáng)化學(xué)生基礎(chǔ),授課時(shí)采用靈活的教學(xué)方法以培養(yǎng)學(xué)生解決問(wèn)題的能力和模塊化程序設(shè)計(jì)思維,同時(shí)通過(guò)構(gòu)建基礎(chǔ)型、綜合設(shè)計(jì)型和研究創(chuàng)新型三個(gè)層次的實(shí)踐教學(xué)體系,以提高學(xué)生程序設(shè)計(jì)實(shí)踐能力、培養(yǎng)創(chuàng)新精神和團(tuán)隊(duì)精神。
關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);模塊化思維;教學(xué)方法;實(shí)踐教學(xué)
數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)學(xué)科的重要分支研究領(lǐng)域,是計(jì)算機(jī)程序設(shè)計(jì)的重要理論技術(shù)基礎(chǔ)。該學(xué)科主要介紹如何用計(jì)算機(jī)解決一系列問(wèn)題,特別是非數(shù)值信息處理問(wèn)題時(shí)所用的各種數(shù)據(jù)的組織方法、存儲(chǔ)方式以及在各種結(jié)構(gòu)上執(zhí)行操作的算法。目的是使學(xué)生掌握如何把現(xiàn)實(shí)世界的客觀問(wèn)題轉(zhuǎn)換為在計(jì)算機(jī)內(nèi)的表示形式,學(xué)會(huì)組織數(shù)據(jù)、選擇算法、設(shè)計(jì)算法,培養(yǎng)邏輯思維和抽象思維能力,為系統(tǒng)開(kāi)發(fā)與設(shè)計(jì)奠定堅(jiān)實(shí)的基礎(chǔ)。在我國(guó),數(shù)據(jù)結(jié)構(gòu)不僅是計(jì)算機(jī)、軟件工程等專業(yè)的核心課程之一,也是許多理工類專業(yè)的必修課程。雖然數(shù)據(jù)結(jié)構(gòu)在計(jì)算機(jī)學(xué)科專業(yè)中具有如此重要的地位,但在目前的教學(xué)中學(xué)生普遍反映這門課程抽象、難學(xué),在學(xué)習(xí)和實(shí)際應(yīng)用中問(wèn)題比較多,學(xué)習(xí)過(guò)程中成就感不強(qiáng),學(xué)完之后還是不知道如何應(yīng)用。為提高數(shù)據(jù)結(jié)構(gòu)課程教學(xué)質(zhì)量,許多教學(xué)工作者提出了自己的一些思路,并付諸實(shí)踐,取得了很好的效果。由于每個(gè)學(xué)校自身的差異和學(xué)生層次差異等原因,我們?cè)诮梃b他人教學(xué)經(jīng)驗(yàn)的同時(shí),有必要針對(duì)自身的教學(xué)對(duì)象研究課程教學(xué),以提高教學(xué)質(zhì)量。
1 數(shù)據(jù)結(jié)構(gòu)課程教學(xué)中存在的問(wèn)題
從學(xué)生在本課程的學(xué)習(xí)和實(shí)踐過(guò)程看,影響學(xué)習(xí)效果的主要原因大致有以下幾個(gè)方面。
1.1 程序設(shè)計(jì)基礎(chǔ)薄弱
目前,大多數(shù)數(shù)據(jù)結(jié)構(gòu)教材采用類C、類C++語(yǔ)言描述。由于學(xué)生對(duì)C、C++課程掌握不牢,導(dǎo)致在學(xué)習(xí)過(guò)程中存在困難。采用C語(yǔ)言的版本描述數(shù)據(jù)結(jié)構(gòu)時(shí),學(xué)生的主要問(wèn)題是對(duì)于指向結(jié)構(gòu)體的指針、返回指針的函數(shù)、遞歸函數(shù)調(diào)用、動(dòng)態(tài)二維數(shù)組等知識(shí)掌握不夠,不能靈活運(yùn)用這些知識(shí)解決實(shí)際問(wèn)題;若采用c++語(yǔ)言版本,學(xué)生除了上述一些問(wèn)題外,對(duì)于C++中較復(fù)雜對(duì)象的構(gòu)造、模板的應(yīng)用等也感到困惑。
1.2 模塊化設(shè)計(jì)思維欠缺
模塊化是軟件設(shè)計(jì)的一個(gè)基本原理,它要求模塊的功能相對(duì)獨(dú)立,耦合盡量松散。在學(xué)習(xí)C語(yǔ)言時(shí),因?yàn)榍岸螘r(shí)間接觸的程序大都只有一個(gè)main函數(shù),導(dǎo)致學(xué)生經(jīng)常不自覺(jué)地將程序的所有功能放到main函數(shù)中實(shí)現(xiàn),而不去考慮用自定義函數(shù)實(shí)現(xiàn)一些相對(duì)獨(dú)立的功能,這些不良習(xí)慣在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)課程時(shí)仍然存在。另外有些學(xué)生可能因?yàn)樵趯懞瘮?shù)時(shí)覺(jué)得參數(shù)傳遞困難,于是定義了一些全局變量來(lái)共享數(shù)據(jù)。采用類似這樣的方式可能會(huì)使程序的運(yùn)行結(jié)果正確,但這類程序不符合程序設(shè)計(jì)和軟件工程的規(guī)范。
1.3 實(shí)踐能力較差
數(shù)據(jù)結(jié)構(gòu)是一門應(yīng)用性很強(qiáng)的課程,課程實(shí)踐是本課程的重要組成部分。由于學(xué)生平常上機(jī)訓(xùn)練時(shí)間偏少,實(shí)際設(shè)計(jì)和調(diào)試程序的能力偏弱,設(shè)計(jì)的程序看起來(lái)思路不是很清晰。學(xué)生寫的程序經(jīng)常因?yàn)楹瘮?shù)的返回類型和參數(shù)定義不合理,導(dǎo)致程序比較亂。另外在程序中還經(jīng)常出現(xiàn)與指針有關(guān)的較為隱蔽的錯(cuò)誤,給程序調(diào)試帶來(lái)了很大的困難。這些不流暢的程序,使他們?cè)趯?shí)際應(yīng)用中很難找到成就感,于是逐漸喪失了對(duì)該課程的興趣。
2 數(shù)據(jù)結(jié)構(gòu)課程教學(xué)改革
針對(duì)數(shù)據(jù)結(jié)構(gòu)課程在教學(xué)和學(xué)習(xí)中出現(xiàn)的一些問(wèn)題,我們?cè)趯?shí)際教學(xué)中主要提出了以下一些改革措施。
2.1 復(fù)習(xí)前導(dǎo)課程要點(diǎn),強(qiáng)化學(xué)生程序設(shè)計(jì)基礎(chǔ)
在課程學(xué)習(xí)之初,用4節(jié)課的時(shí)間說(shuō)明該課程在整個(gè)專業(yè)中的作用與地位,介紹課程學(xué)習(xí)方法和學(xué)習(xí)目標(biāo),復(fù)習(xí)該課程必備的編程語(yǔ)言基礎(chǔ)知識(shí)。主要通過(guò)函數(shù)的方式復(fù)習(xí)結(jié)構(gòu)體和指針的用法,如通過(guò)返回指針的方式建一個(gè)結(jié)點(diǎn)、通過(guò)函數(shù)參數(shù)的方式改變結(jié)點(diǎn)的值、動(dòng)態(tài)二維數(shù)組的建立和撤銷、通過(guò)參數(shù)傳遞二維數(shù)組等,并布置適當(dāng)?shù)淖鳂I(yè)或練習(xí)讓學(xué)生完成,以鞏固程序設(shè)計(jì)基礎(chǔ)知識(shí)。
2.2 采用靈活的教學(xué)方法,培養(yǎng)學(xué)生解決問(wèn)題的能力和模塊化程序設(shè)計(jì)思維
在教學(xué)過(guò)程中多采用啟發(fā)式教學(xué)方法。數(shù)據(jù)結(jié)構(gòu)課程概念抽象、知識(shí)點(diǎn)集中、重點(diǎn)突出,在課程教學(xué)過(guò)程中可以適當(dāng)設(shè)置問(wèn)題,讓學(xué)生去思考,通過(guò)問(wèn)題加強(qiáng)對(duì)學(xué)生的引導(dǎo),這種方法就是啟發(fā)式教學(xué)。啟發(fā)式教學(xué)方法運(yùn)用起來(lái)有一些難度,但教師應(yīng)該經(jīng)常運(yùn)用這一方法。課程中抽象的或是細(xì)節(jié)的問(wèn)題都可以涉及此方法,對(duì)于較大問(wèn)題的提問(wèn),任課教師在備課時(shí)應(yīng)該充分考慮,把握好問(wèn)題和引導(dǎo)的方向,因?yàn)檫@類問(wèn)題的解決經(jīng)常需要占用較多時(shí)間。而對(duì)于一些小問(wèn)題的啟發(fā),任課教師要根據(jù)實(shí)際授課時(shí)學(xué)生的表現(xiàn)決定,如函數(shù)返回類型的確定、參數(shù)的選取、指針的指向、返回語(yǔ)句的寫法等都可以進(jìn)行啟發(fā)式提問(wèn)。
針對(duì)不同的知識(shí)點(diǎn),盡量設(shè)計(jì)任務(wù)驅(qū)動(dòng)型教學(xué)方法。任務(wù)驅(qū)動(dòng)教學(xué)法是一種學(xué)生自主學(xué)習(xí)、教師從旁引導(dǎo)的教學(xué)方法,它打破了傳統(tǒng)教學(xué)方法中注重學(xué)習(xí)的循序漸進(jìn)和積累的老套路,不再按照教學(xué)內(nèi)容從易到難的順序,而是以完成一個(gè)“任務(wù)”作為驅(qū)動(dòng)來(lái)進(jìn)行教學(xué),將學(xué)生自學(xué)能力、創(chuàng)新精神和合作意識(shí)的培養(yǎng)融于完成任務(wù)的過(guò)程之中。如講授鏈表時(shí),可以進(jìn)行一個(gè)貪吃蛇游戲。游戲剛開(kāi)始時(shí),蛇身的位置可以看成鏈表,蛇運(yùn)動(dòng)時(shí)可演變成隊(duì)列,蛇頭到達(dá)的位置入隊(duì),蛇尾離開(kāi)的位置出隊(duì),吃到一個(gè)食物后不進(jìn)行出隊(duì)操作,蛇身變長(zhǎng)。該游戲的其他鍵盤方向鍵的控制、延時(shí)控制、繪制可由學(xué)生自己查資料完成。學(xué)生經(jīng)過(guò)這個(gè)例子后,再講到棧就容易了,可以聯(lián)想到一個(gè)下棋的游戲,如果要悔棋,則需把走過(guò)的每一步存入一個(gè)容器,這個(gè)容器就是棧。通過(guò)這樣的案例既掌握了相關(guān)知識(shí)的應(yīng)用,同時(shí)也說(shuō)明了數(shù)據(jù)結(jié)構(gòu)課程確實(shí)能解決很多實(shí)際問(wèn)題,可激發(fā)學(xué)生的學(xué)習(xí)興趣,堅(jiān)定學(xué)生學(xué)習(xí)這門課程的信心。
對(duì)于較難的算法,考慮采用自然語(yǔ)言描述的方法。因?yàn)樽匀徽Z(yǔ)言更容易理解,但必須注意自然語(yǔ)言中的用詞和書(shū)寫格式,以便直接過(guò)渡到計(jì)算機(jī)程序。例如在講解圖的非遞歸遍歷時(shí),將板書(shū)或PPT頁(yè)面設(shè)計(jì)成自然語(yǔ)言描述法和C語(yǔ)言描述算法形式,如表1所示。
采用自然語(yǔ)言描述算法的方式,可將黑板或投影屏幕分成兩部分。左邊是自然語(yǔ)言描述,右邊為對(duì)應(yīng)的程序,且行與行對(duì)應(yīng),縮進(jìn)格式也對(duì)應(yīng),直接將“如果、否則、當(dāng)、從…到”對(duì)應(yīng)為“if、else、while、for”等。自然語(yǔ)言描述亦可實(shí)現(xiàn)粗線條的算法,一行自然語(yǔ)言將來(lái)有可能對(duì)應(yīng)一個(gè)函數(shù),這種方式可很好地體現(xiàn)自頂向下和模塊化設(shè)計(jì)思想。
實(shí)際授課中,還有一些其他的教學(xué)方法,如討論式、探究式等,但是每種方法只適合應(yīng)用于某些特定的情形。為了增強(qiáng)教學(xué)效果,需要教師仔細(xì)研究教學(xué)內(nèi)容,充分了解學(xué)生學(xué)習(xí)情況,在授課中根據(jù)實(shí)際情況加以把握。無(wú)論采用何種教學(xué)方法,教師在分析問(wèn)題和書(shū)寫程序時(shí)一定要注意模塊化程序設(shè)計(jì)思維的滲透。
2.3 加強(qiáng)實(shí)踐教學(xué)改革,提高學(xué)生實(shí)踐能力,培養(yǎng)學(xué)生創(chuàng)新精神
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)作為數(shù)據(jù)結(jié)構(gòu)教學(xué)的基本手段,有其特殊的教學(xué)功能,不僅可以加強(qiáng)對(duì)理論的理解,還可以培養(yǎng)學(xué)生的實(shí)際動(dòng)手能力。通過(guò)實(shí)驗(yàn)可以使學(xué)生理論聯(lián)系實(shí)際,引起學(xué)生學(xué)習(xí)興趣,從而調(diào)動(dòng)他們學(xué)好數(shù)據(jù)結(jié)構(gòu)的主動(dòng)性和積極性。
為增強(qiáng)實(shí)驗(yàn)教學(xué)效果,需對(duì)實(shí)踐教學(xué)進(jìn)行改革,按層次遞進(jìn)的方式,圍繞課程教學(xué)目標(biāo)精選實(shí)驗(yàn)題,構(gòu)建數(shù)據(jù)結(jié)構(gòu)課程基礎(chǔ)型、綜合設(shè)計(jì)型和研究創(chuàng)新型3個(gè)層次的實(shí)驗(yàn)教學(xué)體系,通過(guò)教學(xué)計(jì)劃內(nèi)規(guī)定學(xué)時(shí)(吉首大學(xué)為16學(xué)時(shí))和開(kāi)設(shè)第二課堂(60學(xué)時(shí))的方式完成3個(gè)層次的訓(xùn)練。其中基礎(chǔ)型和綜合設(shè)計(jì)型實(shí)驗(yàn)主要培養(yǎng)學(xué)生對(duì)各類數(shù)據(jù)的組織、存儲(chǔ)和算法設(shè)計(jì)的能力,按課程知識(shí)點(diǎn)次序組織實(shí)驗(yàn)項(xiàng)目,如鏈表的建立→隊(duì)列和棧、樹(shù)的建立Xqbdrsa48YpIeSslH3T8NA==與遍歷→求某層節(jié)點(diǎn)數(shù)、圖的建立→深度(廣度)優(yōu)先遍歷→最短路徑、排序→查找等,這部分實(shí)驗(yàn)在教學(xué)計(jì)劃學(xué)時(shí)內(nèi)完成,并要求學(xué)生完成相應(yīng)的實(shí)驗(yàn)報(bào)告。研究創(chuàng)新型實(shí)驗(yàn)主要提高學(xué)生的實(shí)踐能力,培養(yǎng)創(chuàng)新精神和團(tuán)隊(duì)精神,按應(yīng)用項(xiàng)目的方式設(shè)置,如一個(gè)小游戲設(shè)計(jì)(掃雷、連連看、紙牌等)、一個(gè)小系統(tǒng)設(shè)計(jì)(學(xué)生成績(jī)管理系統(tǒng)、通訊錄、哈夫曼編解碼等),在第二課堂采取“做中學(xué)”的方式,在教師的引導(dǎo)下由學(xué)生自主完成,要求學(xué)生參照軟件工程相關(guān)規(guī)范撰寫設(shè)計(jì)文檔和編寫源程序。
為進(jìn)一步提高學(xué)生實(shí)踐能力,吉首大學(xué)軟件服務(wù)外包學(xué)院開(kāi)設(shè)了第二課堂,在晚上和周末開(kāi)放實(shí)驗(yàn)室,專業(yè)任課教師輪流值班,教師作為學(xué)生學(xué)習(xí)的引導(dǎo)者,提供與課程配套的學(xué)習(xí)材料和相關(guān)實(shí)踐任務(wù)。在教師的引導(dǎo)下,學(xué)生可獨(dú)立或以小組討論的方式完成相關(guān)任務(wù),教師定期檢查完成情況。另外,考慮到實(shí)驗(yàn)室資源有限,另外創(chuàng)建了學(xué)生創(chuàng)新實(shí)驗(yàn)室,該實(shí)驗(yàn)室只配置了服務(wù)器、網(wǎng)絡(luò)、電源、桌椅等設(shè)施,學(xué)生可自己帶計(jì)算機(jī)進(jìn)入,該實(shí)驗(yàn)室由學(xué)生自主管理、自主學(xué)習(xí),教師布置相關(guān)任務(wù)、定期指導(dǎo)和檢查。
3 結(jié)語(yǔ)
筆者對(duì)數(shù)據(jù)結(jié)構(gòu)課程教學(xué)中存在的一些問(wèn)題進(jìn)行了分析,針對(duì)這些問(wèn)題,結(jié)合課程小組在實(shí)際教學(xué)中的一些體會(huì),對(duì)該課程的教學(xué)進(jìn)行了探索并作了一些改革,在實(shí)際教學(xué)中取得了良好的效果,希望能為同類院校相關(guān)教師的教學(xué)提供一些參考。