摘要:對如何精心組織“數(shù)據(jù)結構”課程教學提出了一些較為系統(tǒng)的教學方法。探討了堅定學生學習信心,培養(yǎng)學生主動學習、終身學習的習慣,開展問題驅動學習,重視實踐環(huán)節(jié)等方法和技巧。提出教師在教學上采取精心準備,適當追求新意,注重素質和樹立良好風范的教學法則,可使學生循序漸進,穩(wěn)步提高,對于教學質量的提高起到實質作用。
關鍵詞:數(shù)據(jù)結構;教學質量;問題驅動
作者簡介:吳陳(1962-),男,湖北天門人,江蘇科技大學計算機學院,教授。(江蘇鎮(zhèn)江212003)
基金項目:本文系江蘇省成人高等教育精品課程2010年度課題(項目編號:313830001)資助的研究成果。
中圖分類號:G642.0#8195;#8195;#8195;#8195;#8195;文獻標識碼:A#8195;#8195;#8195;#8195;#8195;文章編號:1007-0079(2012)10-0096-02
“數(shù)據(jù)結構”是全日制以及成教等系列計算機科學與技術各類專業(yè)的一門學科基礎課。用計算機解決任何實際問題都離不開數(shù)據(jù)表示和數(shù)據(jù)處理。而數(shù)據(jù)表示和數(shù)據(jù)處理的核心問題是數(shù)據(jù)組織和機器實現(xiàn)。這正是“數(shù)據(jù)結構”的基本內容。學生應從數(shù)據(jù)結構的定義和對象的使用,以及存儲表示和操作的實現(xiàn)兩個層次,系統(tǒng)地學習和掌握常用的基本數(shù)據(jù)結構和算法及不同的實現(xiàn),了解并掌握分析、比較和選擇不同的數(shù)據(jù)結構、存儲結構或算法的原則和方法,深化面向對象程序設計方法和風格在不同存儲結構上實現(xiàn)的算法思想,提高分析問題和解決問題的能力和技巧。從這個意義上說,“數(shù)據(jù)結構”在知識學習和技能培養(yǎng)兩方面都處于十分重要的地位,是理論和實踐要求都相當高的課程。它不僅為后續(xù)“操作系統(tǒng)”、“數(shù)據(jù)庫系統(tǒng)”、“編譯方法”、“計算機網絡”等課程提供了必要的基礎知識,而且也為計算機專業(yè)的學生提供了必要的技能訓練。曾有人對某大學計算機歷屆畢業(yè)生和部分研究生追蹤調查顯示,幾乎所有人都認為“數(shù)據(jù)結構”是他們在學校里學過的最有用的課程之一,也是國內外許多軟件開發(fā)機構要求考核的基本課程之一,對計算機軟件開發(fā)和應用,有著不可或缺的作用。由此可見“數(shù)據(jù)結構”這門課程的重要性。
然而,由于“數(shù)據(jù)結構”本身高度抽象,內容豐富,學習量大,技巧性高,涉及許多前驅課程中沒有涉及到的知識,解答問題對于學生來說有一定的難度,所以,如何使學生學好“數(shù)據(jù)結構”,特別是如何提高整個“數(shù)據(jù)結構”的教學質量是人們探討的一個重要話題。本文通過總結筆者從事該課程多年的教學經驗,從教與學兩方面闡述“數(shù)據(jù)結構”教學的一些方法和體會,以期推進和促進“數(shù)據(jù)結構”教學改革和發(fā)展,提高教學水平和教學質量。
一、緊扣大綱,抓重點難點,適度立新
古人云,授人以魚,不如授人以漁。要達到這一點,說起來容易,做起來卻相當困難,因為它要涉及到教學各個環(huán)節(jié)的方方面面。教師要高屋見瓴,準備充分,透徹把握,除了要對課程教學嚴格按照大綱進行,同時也要注意選擇重點,分散難點。必要時也要不拘泥于教材,可根據(jù)當前“數(shù)據(jù)結構”發(fā)展的情況,作適當擴充,標新立異,拓展學生視野。課堂用幻燈片要明白易懂,可以帶有動畫效果,使學生感到形象生動。授課時重點要突出,難點要分散。課后習題內容布置可以讓學生很好地鞏固已學知識。相對來說,學生不喜歡照本宣科、毫無新意、呆板的教學方式,比較喜歡融教材基本內容和略作擴展、補充的內容為一體,靈活而富有挑戰(zhàn)性的教學方式。
二、重視實驗環(huán)節(jié),提高算法設計和程序設計能力
與課堂教學、自學和練習相輔相成,配備課程實驗,是提高學生“數(shù)據(jù)結構”課程的學習效果,增強算法設計和程序設計能力的一個必不可少的教學環(huán)節(jié),能夠訓練學生進行復雜程序設計的技能,培養(yǎng)良好程序設計的風格,達到綜合訓練的目的。設計內容要豐富,要貼近實際的上機實驗,更要集實用性、趣味性于一體。設計好的實驗項目不僅能鍛煉學生解決實際問題的分析、綜合、演繹、歸納、推理的能力和編程能力,更能對思維和智能起到較大的開發(fā)和升華作用。實驗題要理論聯(lián)系實際,能夠使學生把課堂上以及教輔材料上學到的知識靈活應用于解決實際問題,深入理解和掌握理論知識,培養(yǎng)學生從事軟件開發(fā)所需要的動手實踐能力。
實驗類型分為三種:驗證性實驗、設計性實驗和綜合性實驗。合理設計每種類型的實驗內容,是使學生循序漸進、融會貫通、穩(wěn)步提高的保障。
驗證性實驗題目的設計以不宜太難為準則。否則,學生一開始就覺得很難,往往會失去學習的興趣。在驗證性實驗題目中,可以給出求解問題的算法的主要思想,甚至給出主要的代碼。但是,在代碼中可有意在重要的某些地方給出“錯誤”的語句,以不讓程序只要一運行就能通過為準。否則學生會覺得枯燥乏味,不感興趣。最合適的題目是,能夠讓學生反復調試,多次試運行,起到“舉一反三”的作用。當然,教師要做到心中有數(shù),必要時可事先通告學生,程序中預設了一些“陷阱”。事后也要告知問題所在,讓學生能夠對照檢查,提高其查錯水平,同時也能讓學生檢驗自己的調試和更正能力。如果學生能夠做不同的修改同樣也能解決問題,那說明學生對該實驗項目已有了十足的把握。同時,這不失為誘導學生認真閱讀理解算法或程序的一種有效辦法。當然,在做實驗之前,也要把這種學習方法向學生加以聲明,讓他們心中有數(shù),不要讓學生誤以為教師給的程序居然有錯誤。如果學生對實驗內容把握良好,那么,通常會出現(xiàn)多種不同的校正方式。
設計性實驗題目一般給出主要思想和求解思路,主要的算法基本構架,然后由學生自己編寫完成全部的代碼,并加以調試運行。當然也要求學生能用多組數(shù)據(jù)加以反復測試。
而綜合性實驗則具有更大的挑戰(zhàn)性。往往僅給出題目內容和主要的求解功能,數(shù)據(jù)測試結果要求等,其他內容則由學生自己設計完成。大的綜合性實驗,也可要求學生分組,以小組為單位,多人合作,加以實施完成。課程配備的綜合性實驗最好能使學生感到耳目一新,相對而言,實驗任務要適當大些,每個實驗都包括花幾個小時才能編寫、調試和修改完成的程序,挑戰(zhàn)性和實用性更加明顯,使學生在最終完成后感到苦盡甘來。這樣就達到了“講一練三”的要求。通過設計型和綜合型實驗,學生在問題分析、總體設計、用戶界面設計、程序設計技巧等諸方面的能力都會得到大幅度的提高,為將來按軟件工程規(guī)范開發(fā)大型軟件起到基礎訓練的作用,并且可養(yǎng)成良好的開發(fā)風格。
三、努力提高教師素質,改進教學方法
要想提高教學質量,教好學生,教師必須努力提高自身的綜合素質。綜合素質所包括的內容是多方面的。首先,教師必須要有強烈的責任心、嚴謹?shù)闹螌W態(tài)度和無私的奉獻精神,既要熱愛教學工作,更要熱愛自己所教的學生。讓學生感覺到,教師知識非常淵博。遇到表現(xiàn)突出的學生,如對課堂教學中教師所講的經典算法提出了好的想法,對算法效率有所改進,甚至設計出了自己的不同的算法,教師就要及時加以肯定。而對未能在給定時間內設計出算法或做出習題的學生,要多加督促,嚴格要求,但也要體現(xiàn)寬嚴有加。即使教師“逼”學生交,學生也能體會到是對其善意的“逼”,能接受。反之,如果教師的語言不當,甚至粗俗,學生即使表面上接受,但心理上仍存反感,甚至對抗。愛學生,既要體現(xiàn)在授業(yè)上不辭辛勞,也要體現(xiàn)在教學活動中的每一個環(huán)節(jié),包括語言美、適量的作業(yè)布置和時間上的合理安排,等等。其次,教師要不斷提高自己的專業(yè)水平,教學與科研實踐相結合。有時甚至可以將自己的獨特經歷或體驗融合在課堂的教學中,既可提高學生的興趣,又可加深學生的印象。例如,在給學生講解圖這一章的單源頂點到其余各個頂點的最短路徑內容時,如果講授了迪杰斯特拉(Dijkstra)算法之后,再補充講一般教材上沒有的不帶負代數(shù)和圈的Ford-Bellman算法,學生可能不會產生特別的興趣,因為學生對不帶負代數(shù)和圈的這種現(xiàn)象的出現(xiàn)沒有任何感性認識。但如果在其中穿插講解現(xiàn)實生活中很多促銷手段或故事,其效果可能就大不相同了。如從美國費城乘車到美國大西洋城(美國第二大“賭城”),乘汽車來回的票價需18美元,到達大西洋城某賭場門前下車后進賭場,可憑車票兌換17美元,并發(fā)給價值5美元的食品購物券(供在場內購食品用)。此時完全可以在場內轉一圈,不參加任何賭博,用券買上食品,再到大西洋邊兜一圈,再乘車回到費城。這與通常的走一圈應該付費相反,價值上反而相當于增加4美元。這實際上是一種促銷手段,與帶負回路的圈的現(xiàn)象的出現(xiàn)是一個道理。通過這個小小的插曲,不僅讓學生對這種現(xiàn)象的出現(xiàn)有了一定的感性認識,同時也激起了學生的聽課興趣。
四、“問題”驅動教學,調動學生思維
突破教材本身所提供的完善體系,克服教學中平鋪直敘的呆板教學方法,采用交互式的教學方法,就是在課堂上采用“問題”驅動教學。一方面可增強交互感,另一方面可調動學生積極思考,競相解答問題的積極性。在引出教學基本內容的背景下,以“問題”為驅動,富有極強的挑戰(zhàn)性,學生能被很好地調動起來,參與到推導、歸納和演繹之中,并能應用編程技巧,投入到問題求解之中,同時也會感覺到輕松愉快。課堂上的氛圍會顯得相當活躍。
要因材施教和采用“啟發(fā)式”教學。例如,在講二叉樹的遍歷算法,對前序、中序和后序遍歷這三種算法的遞歸描寫時,要著重比較它們之間的差別。而在非遞歸算法的描寫下的講解中,雖然都要利用棧來消除遞歸,兩者有相似之處,但最后的后序非遞歸算法要注意是在左子樹遍歷完后的返回,還是右子樹遍歷完后的返回。特別是在講解非遞歸的前序遍歷時,一般在大多數(shù)教科書上都是在訪問一個結點后就將其指針壓棧,繼續(xù)訪問其左孩子結點,再將其指針壓棧,直到無左孩子時,若棧非空,則從棧頂彈出棧頂元素,再轉向其右孩子結點,然后按上述過程不斷做下去,直到??諡橹?。雖然算法思想比較單一,也便于記憶。而且在非遞歸遍歷的中序遍歷中,差別僅僅在于訪問不在壓棧之前進行,而是從棧上彈出后進行。兩相比較,邏輯思路清楚,易于對照記憶。但如果在非遞歸的前序遍歷算法教學中提出,能不能進一步提高效率?問空右孩子結點今后有沒有右子樹要訪問?對學生進行啟發(fā)思維。這時,就有學生提出,對空右孩子結點其指針就不需要壓棧。教師對學生啟發(fā)出來的這一思想加以充分的肯定,既實現(xiàn)了對經典算法的改進,又普遍加深了全部學生對該算法的理解。他們在今后的練習中,也會這樣一點一滴地去理解和琢磨算法的每一個內容,養(yǎng)成自主學習的習慣,同時也樹立了創(chuàng)新意識。通過這種類似的方法,也可貫穿著培養(yǎng)學生終身學習的思想以及學習方法。讓學生在今后的學習中,能夠學會自己提問,舉一反三,用這樣的學習方法進行學習且伴隨終生。此外,要經常與學生就課程的教學情況進行溝通,及時了解學生對課程的掌握情況,調整教學內容和教學方法
五、采用現(xiàn)代化教學手段,適應當前技術發(fā)展潮流
在教學手段上,借助現(xiàn)代化的多媒體教學設備,通過電子文檔的演示把抽象的思想用形象的動畫片和具體的算法顯示在屏幕上,采用有問有答、體現(xiàn)互動的風格教學,使教師和學生都處在探究學術問題或欣賞研究成果的情景之中,上課的氛圍就會顯得格外寬松。
通過使用網絡資源,學生不僅可以下載和閱讀教師的教學課件,還可方便地閱讀或搜索網上有關“數(shù)據(jù)結構”的教學資源。學生通過電子郵件可以與教師交流溝通,及時反饋教學信息。
六、結語
本文從精心組織“數(shù)據(jù)結構”課程教學的角度,探討了從教學理念、教學技巧、教學手段和教學方法等方向如何提高教學質量的問題。盡管有不少相關教學研究論文從不同的側面如啟發(fā)式教學、多媒體教學等進行了一系列的有意義的研究,但由于目前對教學評價體系的不斷創(chuàng)新,學生對教學的要求越來越高,學生生源也在發(fā)生極大的變化,所以筆者認為,從將整個“數(shù)據(jù)結構”教學作為一項系統(tǒng)工程的角度來探討該課程的教學,是比較適宜和有意義的。本文強調了教學中每一個基本環(huán)節(jié)的重要性,提出了一些相應的教學手段、教學技巧和教學方法,如加強教師素養(yǎng)、培養(yǎng)學生自信心和主動學習以及終身學習的思想、強化實驗教學等,旨在對“數(shù)據(jù)結構”教學質量提高提出一些有益的參考和做法。
參考文獻:
[1]陳雪剛.數(shù)據(jù)結構課程教學改革與實踐[J].計算機教育,2011,(4):34-37.
[2]嚴蔚敏,吳偉民.數(shù)據(jù)結構(C語言版)[M].北京:清華大學出版社,1997.
[3]王紅梅.數(shù)據(jù)結構(C++語言描述)[M].北京:清華大學出版社,2005.
[4]孫波,劉丹.“數(shù)據(jù)結構”多媒體教學改革研究[J].科技信息,2011,(2):264-264,266.
(責任編輯:孫晴)