周長兵 季曉慧 王振華
摘要:針對數(shù)據(jù)結(jié)構(gòu)課程教學(xué)過程中面臨的問題和學(xué)生的學(xué)習(xí)狀態(tài),依據(jù)數(shù)據(jù)結(jié)構(gòu)課程特點,結(jié)合教學(xué)中的實際經(jīng)驗,提出了對課程教學(xué)方法的改進措施。在強化理論基礎(chǔ)的同時,加強上機實踐,引導(dǎo)學(xué)生自主學(xué)習(xí),敢于并勇于質(zhì)疑,培養(yǎng)學(xué)生分析問題和解決問題的能力。
關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);問題驅(qū)動教學(xué)方法;差異教學(xué);課程實踐;算法效率
中圖分類號:G642.0 文獻標(biāo)識碼:A 文章編號:1009-3044(2014)22-5277-03
1 概述
數(shù)據(jù)結(jié)構(gòu)是計算機及其相關(guān)專業(yè)中最重要的基礎(chǔ)課程之一,它不僅是計算機專業(yè)的核心基礎(chǔ)課程,也是非計算機專業(yè)的選修或必修課程。該課程不僅對學(xué)習(xí)計算機相關(guān)領(lǐng)域的知識有巨大幫助,而且對軟件設(shè)計或項目開發(fā)等都具有重要作用。其研究思想和研究方法在計算機及其相關(guān)領(lǐng)域的科學(xué)研究中,都已經(jīng)得到廣泛深入的應(yīng)用。同時,數(shù)據(jù)結(jié)構(gòu)還是《算法設(shè)計與分析》與《數(shù)據(jù)庫原理》等課程的先行基礎(chǔ)課程,只有學(xué)好了數(shù)據(jù)結(jié)構(gòu),才能更好地掌握計算機其它專業(yè)課程,才能深刻理解并靈活運用計算機及相關(guān)專業(yè)知識。
數(shù)據(jù)結(jié)構(gòu)主要研究數(shù)據(jù)在計算機中的表示、組織和處理,以及在相應(yīng)結(jié)構(gòu)上的算法設(shè)計和初步的算法性能分析技術(shù)[1,5]。通俗來講,數(shù)據(jù)結(jié)構(gòu)是計算機中存儲、組織和管理數(shù)據(jù)的方式。如何選取合適的數(shù)據(jù)結(jié)構(gòu)是算法效率優(yōu)化的重要因素之一。本課程要求學(xué)生能分析計算機中各種數(shù)據(jù)結(jié)構(gòu)的特性,初步掌握算法的時間和空間分析技術(shù),通過選取合適的數(shù)據(jù)結(jié)構(gòu)來優(yōu)化不同類型的程序設(shè)計。在實際應(yīng)用中,分析不同數(shù)據(jù)結(jié)構(gòu)和程序的特點,結(jié)合時間和空間方面的考慮,選擇適當(dāng)?shù)臄?shù)據(jù)存儲結(jié)構(gòu)和邏輯結(jié)構(gòu),優(yōu)化算法,進行程序設(shè)計。
該課程理論性較強,具有一定的抽象性,學(xué)生理解起來具有一定的難度,容易造成教學(xué)效率低和學(xué)時膨脹。同時,理論與實踐并行,容易造成學(xué)生學(xué)習(xí)任務(wù)過重,難以消化,致使動手能力較差,不能靈活應(yīng)對實際生活中某些應(yīng)用場景下的數(shù)據(jù)結(jié)構(gòu)設(shè)計和算法優(yōu)化,在整個教學(xué)過程中存在多種不同的問題。為此,該論文首先分析我們在課程教學(xué)過程中遇到的各類問題并分析其成因,結(jié)合實際教學(xué)經(jīng)驗,給出相關(guān)的建議和改進措施,來達到該課程的教學(xué)目的,使學(xué)生掌握最常用的數(shù)據(jù)結(jié)構(gòu),理解不同數(shù)據(jù)結(jié)構(gòu)的特點、優(yōu)缺點、適用場景、內(nèi)在聯(lián)系與異同點,能夠靈活運用這些數(shù)據(jù)結(jié)構(gòu),選擇合適的數(shù)據(jù)結(jié)構(gòu)并優(yōu)化算法效率。同時,注重培養(yǎng)學(xué)生發(fā)現(xiàn)問題、分析問題、解決問題能力,不斷改進教學(xué)方法,探索新的教學(xué)模式。
2 教學(xué)中存在的問題及其成因分析
2.1 傳統(tǒng)教學(xué)方法的不足
傳統(tǒng)的教學(xué)方法是教師用粉筆在黑板上進行板書,輔以口頭講授。然而單純的口頭和書面授課方式較枯燥,加上數(shù)據(jù)結(jié)構(gòu)理論性較強,有一定的深度和抽象性,學(xué)生難以理解,容易使學(xué)生對該門課程失去興趣,甚至厭學(xué)。
在課程結(jié)束時,學(xué)生通過學(xué)習(xí)往往能夠掌握數(shù)據(jù)結(jié)構(gòu)中的一些基本概念,對一些基本操作也有理論性的了解。但由于缺乏思考和對不同數(shù)據(jù)結(jié)構(gòu)之間內(nèi)在關(guān)系的深刻認識,不僅對該課程的意義不甚理解,還往往造成眼高手低,僅具有理論知識,在實踐過程中卻不知道該如何靈活應(yīng)用,難以真正地進行數(shù)據(jù)存儲結(jié)構(gòu)的編程實現(xiàn),以至于一到解決具體問題時就感到無從下手。因此,不僅該課程的教學(xué)沒有達到預(yù)期效果,學(xué)生們對該課程也只覺得枯燥和復(fù)雜,并未能找到學(xué)習(xí)的樂趣。同時,隨著新技術(shù)的不斷涌現(xiàn),教師教學(xué)的方式也應(yīng)有所變化,例如準(zhǔn)備精美的PPT課件、Flash動畫等等,這些技術(shù)簡單易學(xué),不但可以節(jié)省教師板書的時間,而且在講解知識點時也會更加的有條理性,更能調(diào)動學(xué)生學(xué)習(xí)的積極性和興趣。
2.2 教學(xué)內(nèi)容繁雜抽象
數(shù)據(jù)結(jié)構(gòu)中定義了多種結(jié)構(gòu)形式,比如線性結(jié)構(gòu)、樹形結(jié)構(gòu)和圖形結(jié)構(gòu)等,教材中為了不受編程語言的限制,通常都用抽象數(shù)據(jù)類型來進行描述,代碼也均為偽代碼。內(nèi)容多,并且抽象復(fù)雜,讓學(xué)生難以理解透徹。
在講解數(shù)據(jù)結(jié)構(gòu)時,教師通常將算法附帶著進行講解,例如一些簡單的排序算法、查找算法等,也會有一些應(yīng)用方面的例子,例如棧、圖、樹等數(shù)據(jù)結(jié)構(gòu)的綜合應(yīng)用等。這些算法涉及的內(nèi)容較寬泛,且都是理論上的、算法思想層面的講解,不易理解。編程語言基礎(chǔ)不好的學(xué)生在學(xué)習(xí)的過程中尤會感到困難,因為算法的實現(xiàn)必須要有編程語言的設(shè)計。所以,在學(xué)習(xí)這些章節(jié)時,有相當(dāng)多的學(xué)生會感到有比較大的難度,從而容易造成學(xué)生學(xué)習(xí)興趣不高,學(xué)習(xí)動力不足,致使教學(xué)達不到預(yù)期的效果。
2.3 缺乏實踐
數(shù)據(jù)結(jié)構(gòu)應(yīng)是一門理論與實踐并重的課程。如果只重視理論教學(xué),容易造成學(xué)生實踐能力差,只有在經(jīng)過上機實踐了之后,學(xué)生們才會對該課程有深入地理解。
因此,在整個教學(xué)過程中,開設(shè)實踐課時并輔以程序?qū)崿F(xiàn),加深學(xué)生對數(shù)據(jù)結(jié)構(gòu)和算法的理解。同時,大部分教材為使學(xué)生學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)時將主要精力放在掌握數(shù)據(jù)結(jié)構(gòu)的特點和算法思想上,而不限于具體語言的實現(xiàn)上,都選用偽代碼(類語言)來描述算法。但這對一些前導(dǎo)課程(例如程序設(shè)計語言課程)的基礎(chǔ)不夠扎實的學(xué)生來說,難以將偽代碼具體運用到編程語言實現(xiàn)中,導(dǎo)致學(xué)生理解得不夠透徹,動手能力較差,解決問題時沒有思路。
總的來講,該門課程首先要求學(xué)生掌握不同數(shù)據(jù)結(jié)構(gòu)的特性,深入理解并分析其優(yōu)缺點。其次,在遇到實際問題時能夠動手靈活運用,根據(jù)應(yīng)用場景和程序設(shè)計選擇最佳的數(shù)據(jù)結(jié)構(gòu)和優(yōu)化算法。最后,訓(xùn)練學(xué)生進行復(fù)雜程序設(shè)計的技能和養(yǎng)成良好程序設(shè)計的習(xí)慣。因此在教中,實踐課時的設(shè)計是一個非常重要的組成部分。
3 改進教學(xué)方法
針對上文所提到的問題,在教學(xué)中我們采用了如下方法來改進教學(xué)質(zhì)量。
3.1 注重概述
“興趣是最好的老師”,概述部分對于提高學(xué)生的學(xué)習(xí)興趣至關(guān)重要[2],一個好的概述不僅可使學(xué)生認識到該門課程的重要性,還可使學(xué)生對該門課程產(chǎn)生濃厚的興趣與學(xué)習(xí)動力。在教學(xué)過程中,老師應(yīng)該充分認識到概述部分的重要性,它不僅是新知識的一個統(tǒng)領(lǐng)性的介紹,更是讓學(xué)生從宏觀上了解該門課程體系結(jié)構(gòu)的一個重要環(huán)節(jié)。
在概述部分可適當(dāng)添加一些數(shù)據(jù)結(jié)構(gòu)有趣的應(yīng)用實例來進行輔助說明,引起學(xué)生的學(xué)習(xí)興趣,讓學(xué)生主動地去探索這些問題,尋求解決方案,激發(fā)學(xué)生自主性的學(xué)習(xí),并引導(dǎo)學(xué)生從宏觀上了解日常生活中數(shù)據(jù)結(jié)構(gòu)的應(yīng)用,思考如何創(chuàng)新運用數(shù)據(jù)結(jié)構(gòu)等。例如,在介紹新的知識點時,可從學(xué)生身邊的一些有趣的數(shù)據(jù)結(jié)構(gòu)的實際應(yīng)用入手,比如,在設(shè)計一個游戲時,計算機是如何應(yīng)對不同變化情況,給出相應(yīng)策略并實現(xiàn)靈活對弈等。用同學(xué)們所熟悉的、貼近生活的問題來激發(fā)同學(xué)們?nèi)ヌ剿鲉栴}的解決方法,激發(fā)同學(xué)們渴望掌握相應(yīng)的數(shù)據(jù)結(jié)構(gòu)知識的欲望等。讓學(xué)生們帶著興趣和思考去學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),才是最好的教學(xué)方式。
同時,為了培養(yǎng)學(xué)生們獨立思考的能力,可以在講授某個知識點之后,引出下一知識點,鼓勵學(xué)生課下進行思考,做一些準(zhǔn)備和預(yù)習(xí)工作,再在下一堂課的概述部分進行討論。
3.2 問題驅(qū)動課堂教學(xué)
傳統(tǒng)教學(xué)都是先學(xué)習(xí)理論知識,再解決實際問題,這樣的一種學(xué)習(xí)方法容易造成學(xué)生學(xué)習(xí)的惰性和被動性。在學(xué)習(xí)過程中,多數(shù)同學(xué)可以從教材中掌握數(shù)據(jù)結(jié)構(gòu)的相關(guān)理論知識,并能讀懂書本上的算法。但是往往在遇到實際問題時,例如應(yīng)對一個題目需要設(shè)計一個算法時,就感到無從下手,其最主要的原因就是教學(xué)時偏重于理論,致使學(xué)生沒有將理論知識與實際應(yīng)用結(jié)合起來。教師是教學(xué)中的引導(dǎo)者,學(xué)生是學(xué)習(xí)的主體,為此有人提出了問題驅(qū)動教學(xué)方法,也就是以各種思考問題為學(xué)習(xí)起點,在問題的基礎(chǔ)上進行學(xué)習(xí)內(nèi)容的規(guī)劃,讓學(xué)生圍繞問題尋求解決方案。
實踐表明,問題驅(qū)動教學(xué)法能夠提高學(xué)生學(xué)習(xí)的主動性,調(diào)動學(xué)習(xí)的積極性,容易激起學(xué)生的求知欲,活躍思維。所以,在講述數(shù)據(jù)結(jié)構(gòu)的每一個知識點前,例如某種基本的數(shù)據(jù)結(jié)構(gòu)時,可相應(yīng)地準(zhǔn)備一些實際應(yīng)用的例子,讓學(xué)生一邊逐步學(xué)習(xí)理論知識,一邊思考如何應(yīng)用,將理論真正應(yīng)用到實踐當(dāng)中,聯(lián)系到實際的應(yīng)用場景中。如此進行課堂教學(xué)的實踐已經(jīng)取得了較好的效果。比如在學(xué)習(xí)棧之前,舉幾個常用的線性表的應(yīng)用實例,讓學(xué)生帶著問題去學(xué)習(xí),不僅極大地提高了學(xué)生的學(xué)習(xí)熱情,并且可提高課堂師生的互動。基于問題的教學(xué)方法可使學(xué)生思維高速運轉(zhuǎn),主動的融入到教學(xué)中,與教師形成互動。極大地強化了學(xué)生的學(xué)習(xí)動力,激發(fā)了學(xué)生的探求欲望和學(xué)習(xí)興趣,使學(xué)生進入一個積極思考的狀態(tài)[3]。
同時,在教學(xué)過程中可采用“3W”的教學(xué)理念,調(diào)動學(xué)生的學(xué)習(xí)積極性?!?W”即What, How和Why,What是讓學(xué)生明確學(xué)些什么,帶著明確的學(xué)習(xí)目標(biāo)進行有針對性的學(xué)習(xí),以拓展學(xué)生的知識面為輔。How就是如何做的意思,加強學(xué)生的動手能力,將理論應(yīng)用到實踐當(dāng)中。Why是讓學(xué)生能夠知道為什么要這樣做,不僅知其所以然,還要知其為何所以然。
3.3 差異化教學(xué)
在課堂講授中教師應(yīng)起到提綱挈領(lǐng)和引導(dǎo)的作用,對易懂的內(nèi)容可以點到為止,重點難點精講細講,用最少的時間將課堂效率最大化。
重點內(nèi)容是指數(shù)據(jù)結(jié)構(gòu)中的重要概念、重要算法思想及其應(yīng)用,對這些內(nèi)容,應(yīng)結(jié)合多種教學(xué)方式和手段去講深講透,引導(dǎo)學(xué)生理解概念的真正含義,掌握算法的實質(zhì),在此基礎(chǔ)上,尋找解決問題的方法。難點是認知到學(xué)生不易理解和容易出錯的地方,可通過教學(xué)經(jīng)驗或者與學(xué)生進行交流得知。同時,在教學(xué)的過程中也要注意學(xué)生易于忽視的細節(jié)。對待難點要分析究竟難在何處,在知道難點的所在之處之后,再對癥下藥進行重點講解。
課堂講解也應(yīng)該是由易到難、由簡到繁、由淺至深、循序漸進的過程。授課的過程中,對于抽象的東西應(yīng)該形象化、直觀化地進行講解,對于復(fù)雜的知識點應(yīng)注重講解的條理性和上下文邏輯性,對于易于混淆的內(nèi)容宜盡量采用對比法加于區(qū)別,例如通過圖表進行分項比較,做到化難為易,化繁為簡,化抽象為具體。
因為每一個學(xué)生的學(xué)習(xí)程度可能都不一樣,對于一個問題的理解方式和速度等也都會有所差異,所以教學(xué)不能講的太快,致使理解慢的學(xué)生跟不上節(jié)奏;同時也不能講的過慢,致使學(xué)時膨脹。最好的方式是因材施教,使學(xué)生知學(xué)、好學(xué)、樂學(xué),以此達到課程教學(xué)的目的。備課時教師就要分析每節(jié)課的教學(xué)內(nèi)容,確保通過本節(jié)課的學(xué)習(xí),每一個學(xué)生都能夠理解應(yīng)該掌握的內(nèi)容,然后確定本節(jié)內(nèi)容的擴展部分,為一些學(xué)有余力的學(xué)生提供發(fā)展的思考空間;而對于基礎(chǔ)較差的學(xué)生則應(yīng)鼓勵性的分步進行教學(xué),注重多重練習(xí),調(diào)動他們的學(xué)習(xí)積極性,增強自信心,并使其盡快達到基礎(chǔ)標(biāo)準(zhǔn)。
3.4 加強實踐環(huán)節(jié)
歐洲和北美教育的成功的一個主要因素在于非常重視學(xué)生的動手能力和實踐,而這點很值得我們學(xué)習(xí)。在歐洲和北美國家的教學(xué)中,幾乎每一門課程都會有大量的課程設(shè)計,這不僅需要授課老師具有扎實的理論基礎(chǔ),同時要求老師花費大量的時間去備課。
數(shù)據(jù)結(jié)構(gòu)該門課程本身就是一個理論和實踐并行重要的課程,設(shè)計一個好的實踐課也將會對學(xué)生動手能力的提高具有非常大的意義。課程的理論教學(xué)需以教師為主學(xué)生為輔,老師起到引導(dǎo)作用,實踐教學(xué)需要以學(xué)生為主教師為輔,學(xué)生應(yīng)主動進行自我動手的學(xué)習(xí)。國內(nèi)目前已有部分教師采取分小組的方法來進行實踐考察,例如,在進行期末課程測試設(shè)計時,要求學(xué)生自行分成若干小組,根據(jù)難度系數(shù)的不同來分別設(shè)計一些綜合性的應(yīng)用問題,每一小組可為3到5個人不等,根據(jù)難度系數(shù)隨機分配題目,組內(nèi)成員分工合作完成分析設(shè)計和實現(xiàn),最后提交規(guī)范的課程設(shè)計報告,并上臺進行講解,進行分享,使得所有同學(xué)都能學(xué)習(xí)到更多的實踐經(jīng)驗。教師除了給出難度適宜、結(jié)合實際的題目外,還需要引導(dǎo)學(xué)生在分析問題時的方法和角度,對學(xué)生不明白的地方適當(dāng)給予提示與引導(dǎo),使學(xué)生積極參與,調(diào)動學(xué)生的主動性,并激發(fā)學(xué)生的創(chuàng)造力,不斷培養(yǎng)學(xué)生發(fā)現(xiàn)問題、分析問題和解決問題的能力。
在制定期末成績考核機制時,也可適當(dāng)加大實踐教學(xué)中考核成績的權(quán)重,讓學(xué)生重視實踐課,注重自身動手能力的培養(yǎng),同時,提高學(xué)生運用理論知識靈活解決實際問題的能力。
3.5 敢于質(zhì)疑
由于受我國傳統(tǒng)教育和社會因素的影響,絕大多數(shù)學(xué)生對書本、教師、權(quán)威專家所說的話基本上是絕對性的服從,總以為書本上知識是絕對正確的,教師講的都是真理,即使學(xué)生有所疑問,也不敢對書本和老師等提出半點懷疑。但這一點恰恰嚴重阻礙了學(xué)生進行獨立思考和創(chuàng)新思維的發(fā)展。只有在質(zhì)疑的過程中,學(xué)生才能夠更深刻地理解每一個知識點的來龍去脈,并能有自己獨立思考和想法的空間和機會。
為此,教師可以嘗試在授課的過程中,在提出一個應(yīng)用問題后,鼓勵學(xué)生采用不同的數(shù)據(jù)結(jié)構(gòu)和不同的算法解決問題。不同的解決方案,性能不同,在問題功能實現(xiàn)后,讓學(xué)生比較不同解決方案的性能,找出其中的原因,然后鼓勵學(xué)生發(fā)現(xiàn)其中的問題,讓學(xué)生通過自己的思考來發(fā)現(xiàn)問題。不是把學(xué)生放在一個被動式的狀態(tài)中學(xué)習(xí),而是不斷地進行反思和質(zhì)疑,敢于質(zhì)疑任何問題,獨立思考,提出自己的見解,即使有所不對,但也可以將學(xué)生逐漸從傳統(tǒng)的“迷信”思維中解脫出來,讓學(xué)生發(fā)散思維方式,勇于質(zhì)疑,勤于思考[4]。使學(xué)生明白在學(xué)習(xí)過程中不能只是接受式的學(xué)習(xí),同時需要不斷的思考與質(zhì)疑,“讀書無疑者,須教有疑,有疑者都要無疑,到這里方是長進”。
4 結(jié)論
數(shù)據(jù)結(jié)構(gòu)是計算機及其相關(guān)專業(yè)重要的核心基礎(chǔ)課程之一,該課程的理論性和實踐性都較強。為此,教師在講解的過程中,更應(yīng)當(dāng)化抽象為具體,化難為易,化繁為簡。不僅要使學(xué)生掌握該門課程基礎(chǔ)理論知識,并要學(xué)會靈活運用,更要著力培養(yǎng)學(xué)生敏捷的抽象思維能力和嚴謹?shù)倪壿嬎季S能力,充分調(diào)動學(xué)生自主學(xué)習(xí)的積極性、獨立性、主動性和創(chuàng)造性,培養(yǎng)和提高學(xué)生的自學(xué)能力,以及發(fā)現(xiàn)問題、分析問題、解決問題的能力[5]。
同時,教師應(yīng)不斷完善自己的教學(xué)方法和教學(xué)模式,尤其是加強實踐教學(xué)環(huán)節(jié),勤于與其他老師交流心得,與學(xué)生交流得知教學(xué)效果,并抱著“好則加冕,無則改之”的心態(tài)不斷地探索最佳教學(xué)方式,以達到更優(yōu)的教學(xué)質(zhì)量。培養(yǎng)學(xué)生創(chuàng)新思維和創(chuàng)新能力,將有利于學(xué)生個性和才能的全面發(fā)展,對社會也將培養(yǎng)出理論知識扎實、動手能力強、具有發(fā)散性思維和創(chuàng)新能力的新型人才。
參考文獻:
[1] 嚴蔚敏,吳偉民. 數(shù)據(jù)結(jié)構(gòu)[M]. 北京: 清華大學(xué)出版社, 2007.
[2] 黃德玲,汪林林. 數(shù)據(jù)結(jié)構(gòu)課程教學(xué)方法的探討[J]. 中外教育研究, 2009(3).
[3] 鹿旸. 數(shù)據(jù)結(jié)構(gòu)與算法課程教學(xué)方法的思考[J]. 計算機教育, 2010(5).
[4] 余臘生,石獻. 基于創(chuàng)新理念的數(shù)據(jù)結(jié)構(gòu)教學(xué)方法探討[J]. 計算機與信息技術(shù), 2006(11).
[5] 季曉慧,王群,管建和. “數(shù)據(jù)結(jié)構(gòu)"課程教學(xué)初探[J]. 中國地質(zhì)教育, 2009(1).