劉海霞,冉宇瑤,王菊雅
(浙江理工大學科技與藝術學院,上虞 312369)
《數據結構與算法》是應用型本科院校(獨立學院)計算機科學與技術及其相關專業的專業基礎課程,是許多后續課程如數據庫原理、算法分析、操作系統等的基礎[1]。該課程主要培養學生抽象思維能力、邏輯思維能力等,鍛煉學生分析問題、解決問題的能力,抽象程度較高,這使得《數據結構與算法》成為一門公認的比較難學的課程。如何培養學生利用抽象的理論為,解決世界軟件設計中的問題,是高校教師應該特別關注并亟待解決的問題。對于獨立學院,這些注重應用型的本科院校,學生本身的特點是理論基礎較差、學習積極性不高,很難達到好的教學效果。因此,提高學生數據結構與算法的理解與分析能力,采用動畫教學模式對《數據結構與算法》實施教學改革,吸引學生學習的興趣,提高教學效率是刻不容緩的問題。
(1)先修課程掌握不夠扎實
課程的學習需要學生先修高等數學、C語言或C++語言、離散數學等學科,存在部分學生前面的語言及本課程理論學習掌握不夠扎實,在課堂上能聽懂,一旦動手上機,就顯得力不從心。
(2)課程理論性強
《數據結構與算法》中涉及到很多的概念、抽象模型及算法,對模型和算法的理解,需要學生掌握扎實的數學基礎和和邏輯推理能力[2]。而獨立院校的學生數學基礎相對較弱,邏輯分析不強,學習興趣也不高,因此在學習《數據結構與算法》課程時,顯得更加困難。
(3)學生實踐能力弱
在理論教學過程中,很多學生反映,課堂上教師講的知識點都能聽懂,對課后布置的涉及少量的邏輯結構的書面作業也能夠認真地完成。但是,課后自己獨立編寫程序卻無從下手。而《數據結構與算法》書上的代碼都是偽代碼,任何一個算法的實現都需要編寫主函數、定義各類變量等,因此實現起來更加困難。
對于目前存在的問題,主要從兩個大的方面對《數據結構與算法》進行改革:理論方面采用動畫和案例展現每個知識點的運行過程;實踐方面采用驗證性實踐、設計性實踐、綜合性實踐等由淺入深的方式進行。首先激發學生學習的興趣,掌握扎實的理論基礎,然后逐步介入編程,提高動手能力。
(1)“啟發式”教學模式
啟發式教學,就是根據教學目的、內容、學生的知識水平和知識規律,運用各種教學手段,采用啟發誘導辦法傳授知識、培養能力,使學生積極主動地學習,以促進身心發展。《數據結構與算法》課程理論性強、概念多、算法解決方式靈活[3],因此,在課堂教學方面首先采用“啟發式”的教學模式,課堂上討論的方式,形成“問題-討論-分析-總結”的模式。
例如:在講棧和隊列這一章時,先介紹了棧和隊列的特性,然后進行舉例。隊列采用順序表存儲機構,在模擬運算時,出現了“假溢出”現象。如何解決呢?請學生結合生活中排隊現象,提出問題解決方案。如元素遷移、計數、采用循環隊列等,再逐步分析各方案的優缺點,由學生自己選擇采用哪種方案更佳,逐步深入。另外,若采用循環隊列解決,又會出現判斷隊列滿或空相同的情況,如何進行解決?一次逐步引出問題,并解決問題;提出解決方案,分析解決方案的優劣,最終達到認識問題并解決問題的目的。通過這種方式的教學,學生從發現問題到解決問題整個過程都積極參與,學習采用借鑒的手段,認識到解決問題的多種方案,學習分析評價的方法,選擇更適合需求的解決辦法。
(2)“案例+動畫式”教學模式
在教學中選擇基礎的知識點作為案例,通過“案例”內容的研究學習,激發學生深入探究的興趣。例如講解棧和隊列一章時,將我們日常生活中常碰到的疊盤子、食堂排隊買飯等現象聯系起來進行比喻說明。采用這樣的方式,學生不僅聽起來有興趣,并且易于理解。根據各個章節內容的知識點,利用Flash動畫進行展示抽象的內容實現過程,使學生通俗易懂的理解掌握各個概念,更深理解課堂內容。眼睛看到的比耳朵聽到的更加真實、更加直觀,同時會吸引學生學習的興趣,提高了教學效率。
通過對獨立學院學生的調查與分析,根據機電系各個專業的培養計劃,修訂實踐教學項目,設計實踐教學案例。堅持由簡到難,由淺入深的原則,開展實踐教學。主要分為驗證性實踐、設計性實踐和綜合性實踐,其中通信專業、電子專業、自動化專業只需要做到驗證性實踐和設計性實踐,對學習能力比較強的學生,可以去選做綜合性實踐;計算機科學與技術專業,要求做到綜合性實踐,并掌握解決實際問題的能力,實踐教學層次如表1所示:

表1 實踐性教學
根據本學院課程內容先進行整體設計,如表2所示。然后根據不同教學方式,再分布進行方案的整理。
(1)動畫教學
《數據結構與算法》是一門內容多、概念多、邏輯性強、高度抽象、實踐性強的課程,很多學生在接觸這門課的時候,普遍存在上課能聽懂、下課不會做這種眼高手低的現象。為了解決將抽象思維進行簡單、具體化,使學生更好理解,本次改革采用動畫的教學方式,將數據結構課程分成4個大模塊:線性結構(線性表、棧和隊列、串、數組和廣義表)、樹狀結構(樹、二叉樹和哈夫曼樹)、圖形結構(有向圖、無向圖)、混合結構(查找和排序)。對不同的學習模塊和知識點,用仿真動畫的方式將問題及解決方案展示出來。如線性表的生成、插入、刪除等;入棧、出棧、入隊列、出隊列等;三元組的轉換,二叉樹的生成、遍歷,樹與二叉樹的轉換、哈夫曼樹的構建等;圖的遍歷、拓撲排序、最小生成樹、求關鍵路徑和最短路徑的過程以及各類查找和排序,等等,圖1顯示各個動畫實例列表,圖2是圖的深度遍歷動畫,從V4節點開始遍歷。

表2 整體課程內容設計圖

圖1 動畫實例列表

圖2 圖的深度優先遍歷
(2)分組討論的啟發式教學法
本次教學改革注重學生的主觀能動性,教師重點做引導進行開展。根據學生的水平進行分組,直接參與課題討論和問題解決,引導學生樹立客觀的學習態度和掌握科學的實際方法,培養他們的計算思維和創新能力。例如,在講解矩陣轉置時,可以采用對比的方式:先介紹內容,引導學生利用已經學過的線性代數知識點進行轉置,然后采用剛剛學三元組表示進行轉置。兩種解法做對比,啟發學生進行思考,從空間復雜度、時間復雜度、操作效率等多方面討論二者的優劣。在討論的過程中,任課教師進行適當的提醒和引導,幫助學生在理解的基礎上掌握所學知識。
(3)案例教學
本次教學改革首先采用啟發和動畫教學,每一章比較抽象的知識點都制作成Flash動畫,根據動畫模擬進行理解。章節學習結束,每一章內容布置一到兩個大的綜合案例,先組織學生進行討論,提出解決問題的關鍵,選擇合適存儲方式和算法,然后進行上機檢驗。通過一個學期的學習,采用案例教學法能充分調動學生的學習積極性,開拓他們的思維方式,使學生能夠主動分析問題、設計程序,最終解決問題。
《數據結構與算法》的動畫制作,由相關參與教學改革的教師花費了3個月的時間進行完成。通過一個學期的應用實踐,學生對數據結構與算法的理解相對深入很多,大部分學生感覺數據結構也不是太難。案例的設計是根據不同專業學生情況進行開展的,整體來說,計算機科學與技術專業的學生動手能力相對比較強,通信專業的學生在動手方面比較欠缺,在實現課本上偽代碼時,還是有一定的困難。后期需要修訂的方面主要體現在:(1)動畫實例的優化,使動畫更加生動;案例的更新,使其更貼近生活;(2)知識點題庫的整理,供學生課下練習;(3)手機微信端App的開發,方便學生想學就學,想練就練。