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