蔡 敏 鄭尚志 梁寶華
摘要:本文結合筆者在數據結構課程教學的一些體會,從教材選擇、課堂教學、實驗教學、作業指導等方面對數據結構課程教學改革提出了一些意見和建議,希望得到專家與同行的指導。
關鍵詞:數據結構;教學改革;教學手段
中圖分類號:G642文獻標識碼:B文章編號:1672-5913(2009)04-0050-02
1引言
數據結構是計算機專業課程體系中一門重要的專業基礎課程,ACM/IEEE CC-2004將它列為核心課程之首。數據結構前承高級語言程序設計和離散數學,后接操作系統、編譯原理、數據庫原理等專業課程,為研制開發各種系統和應用軟件奠定理論和實踐基礎。因此數據結構教學與計算機專業人才培養計劃的成敗有著非常大的關系。然而在該課程的教學過程中,學生普遍反映學習起來非常困難,教師也感覺教學效果不盡如人意。如何教好這門課程是擺在我們面前的一個研究課題。
筆者作為該課程的主講教師,深感責任之重大,所以一直密切關注該課程教改理念與經驗,以期借鑒過來最大限度提高教學效果。目前關于該課程教改方面文章很多,包含了教學各部分:有關于教材的,有關于課堂教學的,有關于實驗教學的,有關于課程輔導的,有關于教學效果評價的等等。特別是課堂教學方面,提出了很多新的教學方法和教學手段。下面筆者結合自己在數據結構教學中的一些體會,談談自己對目前教改的認識。
2教材選擇
教材選擇是實施該課程教學的第一步。目前《數據結構》教材有采用C語言描述的,也有采用C++或Java描述的。選擇什么語言描述,主要看學生都學過哪些編程語言。在很多院校里學生學習《數據結構》之前只學習過C語言,如果非要趕潮流,選擇面向對象語言,無疑會加大學習的難度。有些學校使用自己編寫的教材,這是好事。但各學校師資水平參差不齊,并不適合推廣。編制的教材質量到底怎么樣,應組織同行專家進行科學論證,如果草率拿學生做試驗,是不負責任的行為。目前國內《數據結構》教材數不勝數,但鮮有出清華嚴蔚敏、北大許卓群之在者。大多教材只是對內容的順序作一些調整,刪去一些不講的內容,再增加一些數據結構新技術。筆者認為,數據結構重在培養學生堅實的基礎理論知識、良好的抽象思維能力和良好的編程風格,沒有必要非得接觸最前沿的技術,即使需要,只要基礎知識扎實,自學這些新技術也不是什么困難的事。教師應注重通過基本理論的教學,教會學生學習的方法,而不應企圖把所有內容全部教給學生,這就是“授人以漁”的道理。將數據結構和程序設計兩門課進行融合,也是一條值得研究的思路。
3課堂教學
3.1充分利用第一次課
第一次課至關重要,教師應通過第一節課對學生的程序設計基礎有個大致了解,在培養學習興趣的同時,還要給學生留下良好的第一印象,因為學生對教師的喜惡往往也影響著學生對該課程的喜惡。第一節課要盡量向學生解釋清楚為什么學習程序設計語言后還要學習數據結構,數據結構的重要性,數據結構主要研究內容是什么;告訴學生一開始學習數據結構感覺有些困難是正常的,鼓勵他們努力克服困難;公開教師的聯系方式,告訴學生老師喜歡而不是討厭他們提問題。接下來通過幾個例子,帶學生簡要回顧一下C程序設計中的一些重要概念,如數組、結構體、指針、函數和遞歸。這些內容是數據結構的重要基礎,但往往正是學生的薄弱之處。如果發現學生以上知識比較薄弱,以后在講解數據的存儲結構和訪問方式時就要盡可能地詳細一點。最后要求學生利用課余時間重點復習這些內容。
3.2課前準備
在這門課程中,有一些概念比較抽象,而算法正確選擇的前提在于對基本概念的把握,因此概念的講解一定要清楚、準確。這就要求教師必須認真備課,查閱大量的參考資料。教師只有先對每個概念、原理進行深刻理解,然后才有可能用學生易于接受的方式、簡潔明了的語言去講解,并有目的地分散難點、化難為易。除了查閱資料,我還下載了好幾個大學的教學視頻,通過觀看這些視頻,學習他們教學中的長處,感覺頗有收獲。
3.3教學方法
教改先驅們提出了很多好的教學方法,具有重要的借鑒價值,如發現型教學法、啟發式教學法、任務驅動型教學法、討論式教學法、案例教學法等等。但有些文章片面強調某一種教學方法,還有些文章認為傳統的教學方法就是滿堂灌、填鴨式,給人感覺教改前就沒有數據結構講得好的教師,這都是有失偏頗的。比如案例教學法雖然效果好但比較費時,由于數據結構課時有限,因此并不適合經常使用。美國的數據結構教學也是以教師講授為主,而不是以課堂討論為主。“教學有法,教無定法”,每種方法只適合應用于某些特定的情形,教師應該根據教學內容和教學對象的不同,靈活采取適當的教學方法。
3.4教學手段
許多老師利用多媒體課件等現代化教學手段極大提高了課程的教學效果。但我發現,有的老師過于依賴這些手段,一說起黑板加粉筆的傳統教學手段就覺得必定呆板、沉悶、被動,并加以排斥。盡管多媒體教學具有知識信息量大、內容豐富生動的特點,但不利于教師的即興發揮,而這恰是黑板加粉筆的長處。此外數據結構中絕大部分算法長度都超過一個頁面,在教學中需要反復切換,影響了知識的聯結。因此我們在教學過程中應該把現代化教學手段和傳統教學手段有機地結合起來。例如在講二叉樹遞歸遍歷算法時,為了消除學生對遞歸算法的神秘感,可以先結合一個簡單的例子,將遞歸算法在黑板上層層展開,然后再使用計算機演示遞歸過程,這比直接演示更易于理解,因為很多學生即使看著遞歸的執行流程也難以理解為什么會這樣執行。還有些老師在教學中過于追求形象化,我認為沒有必要。對于本身并不復雜的算法,如果非要形象化,反而不利于培養學生的抽象思維能力,進而淪落為著名計算學科專家Dijkstra所批評的幼稚化。教師在制作CAI課件時應謹記它只是起輔助作用,不應該也不可能完全替代傳統教學手段。馮搏琴教授在文獻中詳細說明了運用多媒體課件授課的六元素和四大忌,具有極大的指導意義。
4實驗教學
實驗教學是課堂教學的一種延伸,通過實驗教學,學生不僅對所學知識加深了理解,更重要的是培養了學生分析問題、解決問題的能力。實驗題目應精心選擇,對于必做題,難度不能太大,要讓絕大多數學生通過自己的努力,或在指導教師稍許指點下就可以完成,如果難度太大,學生上機實踐的興趣必然急劇下降。對于編程能力較好的學生,可以鼓勵他們去嘗試難度稍大的選做題。數據結構中用類C語言來描述算法,并且只描述出其主體部分,其它部分則不做重要介紹,甚至忽略掉,這對于剛剛接觸這門課的學生來說,總有一種不知所措的感覺,所以我在前幾個算法講解中,盡量將其以程序形式給出,然后再與算法進行對比,這樣上機時就不會有學生將算法照抄一遍,然后委屈地問為什么不能運行了。前幾次主要是驗證型實驗,等學生適應數據結構編程后,再做一些設計型實驗。實驗教學課時較少,應要求學生在課下做好準備,上機時主要讓教師驗收程序或問一些自己解決不好的問題,這一點大部分學生都可以做到。由于高校擴招,每批上機學生數較多,還是有些學生的問題不能得到及時解決,可通過電子郵件等方式給他們提供幫助。
5作業及講解
很多學生反映上課能聽懂,但一旦讓他們自己設計算法時就不知所措了。經過了解,我覺得他們大多心里知道如何去解決問題,但就是不知道如何用類C語言表達出來。我一開始布置的作業題一般都是對課本算法的變形,這個難度要小一些。比如在學完“將兩個非遞減的有序表合并成一個非遞減的有序表”后,我就讓他們設法修改課本算法,實現將兩個非遞減有序表合并成一個非遞增的有序表(順序實現和鏈式實現)。對于難度大一些的習題,適當給一些提示。講解作業時,應盡量采取“現場編寫算法”的形式,將自己的思想表達成類C語言的每一個過程展現給學生,并讓學生參與其中。
6結束語
數據結構教學是一項復雜的系統工程。對該課程的教學改革是一項長期而艱巨的任務,不僅要從理論上進行探討,還要從教材選擇、教學方法、教學手段、實驗教學等多方面進行研究,只有科學綜合考慮多種因素,才能使該課程教改走向成功之路。