張兆維,劉 慧
(1.南京郵電大學 物聯網學院,江蘇 南京 210003;2.金陵科技學院 軟件工程學院,江蘇 南京 211169)
數據結構作為高校計算機專業的核心課程之一,既是對程序設計、離散數學等先修課程的進一步深入,又為操作系統、數據庫原理、編譯原理等后續課程奠定基礎,在計算機類課程體系中起著承上啟下的關鍵作用[1]。在一定程度上,學生能否學好數據結構對于其能否學好計算機類本科課程有著十分重要的作用,這也對其后續的工作和研究有著深遠的影響。數據結構課程具有概念繁多(鏈表、棧、串、樹、圖等)、體系復雜(一對一的線性結構,一對多的樹形結構和多對多的圖形結構)、操作種類多(插入、刪除、查找、遍歷、平衡、排序等)以及算法(KMP算法、Huffman 算法、Dijkstra 算法等)難理解等特點,在一定程度上加大了學生的學習難度和教師的講課難度。
針對數據結構在理論和實踐方面的教學方法,眾多專家和學者對此進行了廣泛而深入的反思和討論[2-4]。從學生角度來說,畢業去向無外乎兩種:考研與就業。考研和就業是學生最為關心的話題,也是他們的實際需求。數據結構又恰恰在學生考研和就業兩方面具有舉足輕重的作用。考研偏重于理論計算,考查學生對基礎理論知識的深入分析和總結[5]。就業偏重于工程實踐,要求學生具有利用所學知識解決實際工程問題的能力[6]。
為兼顧學生考研和就業的實際需求,應分析當前教學存在的困難,根據各種教學方法的優缺點,探索考研與就業的分類教學模式。
同一個班級的學生,既有立志考研深造的,又有選擇就業工作的。數據結構的教學活動需要圍繞學生的這兩方面需求來開展,才能激發他們的學習動力,但是在實際教學活動中,同時滿足考研學生和就業學生的需求是比較困難的。
針對學生的考研和就業需求,一方面,如果教學活動偏向于理論計算以滿足考研學生的話,就業學生就會認為深入的理論分析使學習變得枯燥,興趣匱乏,從而應付考試。例如,一道考研題:一棵度為4 的樹中,若有20 個度為4 的結點,10 個度為3 的結點,1 個度為2 的結點,10個度為1 的結點,則樹的葉子結點個數是多少。這道題考查的是樹的一個性質:“樹的結點數目等于所有結點的度數之和加一”,這是考研試題中經常碰到的計算問題。考研學生通常希望能夠在課堂和課后對此類題目多加練習,舉一反三,但是這類理論計算在實際工程實踐中卻并不常見,應用較少。就業學生對此類計算問題缺乏學習動力,積極性不高。另一方面,如果教學活動偏向于工程實踐以滿足就業學生的話,考研學生就會感覺對考研用處不大,興趣減弱,無所適從。例如,一個工程實踐項目要求:利用樹的算法,設計一種關系型數據庫系統的索引結構。眾所周知,數據庫系統中的索引結構通常采用B+/-樹,這是因為B+/-樹的每個結點可以有更多的孩子,新的值可以直接插到已有結點,而不需要增加樹的高度,從而大量減少重新平衡的次數,這就非常適合做大量查詢和插入的數據庫索引。作為平衡二叉樹的變種,B+/-樹在工程實踐中應用非常廣泛,而這卻不是考研重點,考研試題通常偏重于二叉樹和平衡二叉樹的構造和計算。在這種情況下,考研學生會覺得大量課后實踐B+/-樹是浪費時間,不愿意做此類課后習題。
因此,在數據結構課程中,如何兼顧考研和就業兩個方面的學生需求,以激發他們的學習興趣并學有所用,就成為一個值得教學反思的問題。
“課堂統一、課后分組、分類考查”的教學方法可以同時兼顧學生考研和就業的實際需求。
“師者,傳道授業解惑也”,課堂授課是教師開展教學活動的主戰場,具有不可替代的關鍵作用。授課內容面向所有學生,主要涉及數據結構的基本概念、理論和原理。在此過程中,如何運用各種技巧深化知識重點和難點,就顯得十分重要。在實際教學過程中,以下幾種措施具有良好的授課效果。
(1)案例輔助。數據結構中的很多概念晦澀難懂,僅從文字描述或定義中很難理解其含義,從而加大了學生的學習難度。例如,棧是一種只能在一端進行插入或刪除操作的線性表,隊列是一種僅允許在一端進行插入操作而在另一端進行刪除操作的線性表。對于這段描述,學生往往難以理解和分辨棧和隊列的概念。在課堂中,可以將棧類比為一個帶開口的容器,插入和刪除操作就對應于放入和取出物品,從而容易理解棧的“先進后出”的核心特點。另外,可以將隊列類比為學生生活中經常遇到的車站排隊買票的問題,排在前面的人先買票,后來的人依次到后面排隊,加深理解其“先進先出”的特點。案例輔助使枯燥知識形象化,能夠活躍課堂氣氛,促進學生對抽象知識的理解。
(2)動畫演示。數據結構的一些算法包含很多步驟,各個步驟之間又具有某種聯系,使得學生不容易理解數據各個狀態的變遷和交互。在這種情況下,以動畫演示來展示算法的運行步驟和數據狀態變化就顯得十分必要。例如,在經典的快速排序算法中,動畫演示可以讓學生清楚地看到算法每一步的運行過程和結果。每一步運行開始,第一個數據首先突出顯示,提醒學生這是一個基準元素,所有的數據依此分為兩部分;然后以動畫給學生展示一個大于基準元素的數據和一個小于基準元素的數據相互交換。至此,動畫提示學生這是一次完整的一趟劃分,加深學生的理解。經過多趟劃分,快速排序完成。動畫演示將算法的各個步驟動態地展示出來,讓學生一目了然地看到算法的整個運行過程。
(3)課后反思。數據結構中的很多數據操作種類很多且較為繁瑣,學生不易區分和記憶。例如,在平衡二叉樹的平衡過程中,教材將調整分為LL、RR、LR 和RL 4 種類型。在講完這4 種類型之后發現,學生既不容易記憶,又容易記混。通過仔細分析這4 種類型的異同,總結出一套處理流程:插入新結點,判斷是否平衡,尋找最下層不平衡點,中間值替換不平衡點,左右子樹調整。在這之后,將這一套處理流程再傳授給學生,既能減輕學生的記憶壓力,又使學生意識到平衡過程的核心思想。“盡信書,不如無書”,課后反思可以總結出更適合學生理解的數據處理方法,加深學生對知識的理解和運用。
“師傅領進門,修行在個人”,課后學習是學生的第二課堂,對鞏固和掌握課堂所學知識具有十分重要的作用。在此過程中,課后習題的設置就顯得十分關鍵,習題既要能覆蓋課堂知識,又要在某一方面有所深入。根據學生自身的考研或就業需求,課后習題分為兩組,學生從中任選一組。
(1)第一組習題面向考研學生,以理論計算和分析為主。眾所周知,考研試題考查學生的理論深度和分析,而不注重具體的實現過程。為備戰考研,本組習題要求考研學生做到以下兩點:①找出與本節知識點相關的歷屆考研真題,分析試題類型(選擇題、填空題或計算題),梳理出考研重點和難點,做到心中有數;②對相關知識點的考研模擬題作針對性訓練,熟悉解題過程和技巧,夯實考研重點和難點,做到胸有成竹。通過以上兩種方式,考研學生能夠掌握考研的重點和難點,提早備戰,做到有的放矢,事半功倍。另外,為適應研究生的科研環境,本組習題也鼓勵學生參加相關的學術講座,了解當前的科技前沿和進展。對學有余力的學生,鼓勵他們參加老師的科研項目,培養創新意識,為以后的研究生學習奠定良好的前期基礎。
(2)第二組習題面向就業學生,以工程實踐為主。在科研院所和企業的工作中,數據結構更多地是以工具的角色出現,其承擔的是項目開發的具體實現任務。本組習題要求就業學生做到:①了解企業需求,調研本節知識點在各種實際項目開發中的應用實例(包括軟件開發、算法設計、系統集成等),梳理出知識點的應用場景和范圍,能夠意識到所學知識的用武之地;②針對某種具體應用實例,能夠進行簡單的模擬演練,熟悉項目開發的基本流程,增長經驗和開闊視野,達到工程實踐鍛煉的目的。通過以上兩種方式,就業學生能夠意識到所學知識在工作中的巨大作用,珍惜學習機會,為未來的就業選擇添磚加瓦。另外,本組習題鼓勵學生參加競賽(如ACM 國際大學生程序設計競賽、微軟創新杯、挑戰杯、中國大學生計算機設計大賽等),激發學生的學習動力和興趣,達到以賽促學的目的。
“尺有所短,寸有所長”,每個學生根據自己的考研或就業需求而偏重于理論或實踐的學習,從而具有不同的優勢。在這種情況下,采用同一套試題考查所有學生是不合理的。如果期末試題偏向于理論分析,就業學生的優勢無法發揮,這樣就會打擊他們的學習積極性,反之亦然。在分類考查中,期末試題分為必做題和選做題。必做題的分值占60%~70%,考查學生對數據結構基礎理論知識的掌握程度。選做題分為兩組,分值占30%~40%,學生可從中任選一組作答。
(1)第一組面向考研學生,以理論計算為主,考查學生的理論分析深度(以考研題變式為主)。通過仔細分析近年的考研試題,從中選取代表性的試題,加以改變作為考試題。這類試題可以讓考研學生接受考研試題的考驗,對試題的理論深度和分析難度有一個比較清醒的認識。考研學生對此類試題具有濃厚的興趣,認為對未來考研幫助很大。
(2)第二組面向就業學生,以工程實踐為主,考查學生解決實際問題的能力(以項目應用模擬為主)。從企業或科研院所的實際工程項目出發,提煉出某些算法的應用模型作為考試題。這類試題可以使學生提早接觸到未來工作的項目,啟發學生理論聯系實際的意識。就業學生對此類試題得心應手,有利于其畢業后就業方向的選擇。
綜上所述,“課堂統一、課后分組、分類考查”要求學生掌握數據結構的基礎理論知識,根據自身的考研或就業需求分別深入理論分析或加強工程實踐,并在期末考試中發揮自身特長,從而提高學生的學習興趣和效果。
為分析本文所提方法的實際教學效果,筆者對學生的學習過程、學習興趣、學習成績等進行了問卷調查和統計。被調查的對象包括258 名三本獨立學院大二學生和196 名二本普通高校的大二學生。
兩所學校學生在課后分組中選擇考研和就業的比例如圖1 所示。

圖1 學生選擇課后考研組和就業組的比例
從圖1 中可以看出,在三本獨立學院學生的課后分組中,選擇考研和就業的人數分別為145和113 名,對應的比例為56%和44%;在二本普通高校中,選擇考研和就業的學生人數分別為167 和29,對應的比例為85%和15%。這說明二本普通高校學生的考研需求強于三本獨立學院,而三本獨立學院(尤其是技術應用型學校)學生的就業意愿相對較為強烈,但是考研學生比例仍然過半。
圖2 比較了學生對傳統教學方法和本文教學方法在課堂講課、課后習題和考查考試3 個方面的教學滿意度。作為對比,傳統教學方法指的是對所有學生統一講課、統一布置課后習題和統一考查考試,不區分學生的考研和就業需求。從圖2 可以看出:①學生對課堂講課的教學反饋幾乎一致,也就是說學生對基礎理論知識的學習在兩種方法下是接近的;②對課后分組習題,本文教學方法的教學滿意度要高于傳統教學方法,這說明學生對于本文教學方法對考研和就業需求的滿足度得到了較好的認可;③對考查考試來說,學生對本文教學方法的滿意度要超過傳統教學方法,期望在期末考試中能夠體現考研和就業的需求,做到學以致用。

圖2 學生對新教學方法和傳統教學方法的教學滿意度比較
圖3 對比了本文教學方法與傳統教學方法的學生學習效果(學習興趣、不及格率和平均成績3 個方面)。從圖3 可以看出:①與傳統教學方法相比,本文教學方法明顯地提高了學生的學習興趣,其原因在于滿足了學生考研和就業的不同需求;②本文教學方法顯著地降低了學生的不及格率,這說明學生在期末考試中有了選擇權,便于發揮自身優勢,更能適應必做題和選做題的考試模式;③在學生期末成績方面,本文教學方法提高了學生的考試平均成績,這也是學生學習興趣上升帶來的直接效果。因此,本文教學方法兼顧了學生的考研和就業需求,激發了學生的學習動力,提升了學生的學習效果。

圖3 新教學方法和傳統教學方法的學習效果比較
實踐證明,“課堂統一,課后分組,分類考查”的教學方法可有效地激發學生的學習興趣和動力,降低學生的不及格率,一定程度上提高教學效果。該方法更具針對性,可以根據具體情況,如院校的人才培養目標、學生的知識儲備、考研學生與就業學生的比例等,適當地調整考研和就業兩方面的習題難度、時間分配、期末必做題與選做題比例等。在實際教學過程中,如何改進并靈活運用該方法仍然需進一步探討。