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