摘要:數(shù)據(jù)結(jié)構(gòu)是計算機專業(yè)的基礎(chǔ)課,同時也是考研的專業(yè)課,占據(jù)著非常重要的地位。本文針對筆者在數(shù)據(jù)結(jié)構(gòu)教學(xué)過程中所發(fā)現(xiàn)的師生精力投入與學(xué)習(xí)效果不成比例,學(xué)生不能用所學(xué)知識很好地解決現(xiàn)實問題的現(xiàn)象,在分析原因的基礎(chǔ)上,提出一些教學(xué)改革措施。
關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);教學(xué)問題;改革
數(shù)據(jù)結(jié)構(gòu)是計算機科學(xué)與技術(shù)專業(yè)重要的專業(yè)基礎(chǔ)課,不僅在計算機專業(yè)有著重要的地位,在整個電子與信息領(lǐng)域都是重要的基礎(chǔ)課。學(xué)生通過數(shù)據(jù)結(jié)構(gòu)課程的學(xué)習(xí)可以掌握客觀事物在計算機內(nèi)部的表示方法,也能具備設(shè)計算法、分析算法好壞的能力,從而不僅能夠具有動手能力,也掌握科學(xué)研究的基本功。因此,各高校都非常重視數(shù)據(jù)結(jié)構(gòu)課程的教學(xué)工作,這也是目前計算機教育改革的重點和熱點。
1 教學(xué)中遇到的問題及其原因
數(shù)據(jù)結(jié)構(gòu)課程的基礎(chǔ)性及其在考研科目中占據(jù)的比例,使得學(xué)生都能夠充分對待本課程,也愿意花費精力與時間來學(xué)好本課程,但由于該課程的抽象性等原因,學(xué)習(xí)效果并不理想,學(xué)生學(xué)習(xí)的效果與投入并不成正比。學(xué)生普遍反映的問題是:課堂上聽老師講解覺得很好理解,但是讓他們自己動手設(shè)計數(shù)據(jù)結(jié)構(gòu)及其算法來解決實際問題時就感覺力不從心了。也有些同學(xué)覺得數(shù)據(jù)結(jié)構(gòu)理論性太強,過于抽象,在實際的應(yīng)用中很難抽象出各種抽象數(shù)據(jù)類型。當(dāng)老師重新講解后又發(fā)出題目并不難的感慨,即常說的眼高手低。另外一個常見的現(xiàn)象就是只知道本課程很重要,不知道重要在什么地方,與實際生活相脫節(jié),不能用之來指導(dǎo)解決實際問題。針對這些現(xiàn)象,筆者歸納了一些原因如下。
1)課程本身難度較大。
數(shù)據(jù)結(jié)構(gòu)課程本身是一門抽象程度較高的課程,對于缺乏實際應(yīng)用經(jīng)驗的學(xué)生來說,理解起來具有一定的難度。不少同學(xué)反映學(xué)完該課程之后不知道能用在什么地方、能夠解決什么問題,即使教材上所講內(nèi)容都完全掌握,仍然無法應(yīng)用到實際問題當(dāng)中,除了課堂上講的例子外,找不出該知識點的其他應(yīng)用,同時遇到實際問題時,也想不出該問題的抽象數(shù)據(jù)類型。
2)編程能力較差。
C/C++程序設(shè)計語言是學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)課程的重要基礎(chǔ),無論對于學(xué)習(xí)該課程還是應(yīng)用該課程的知識解決實際問題都是非常重要的前提條件,但不少學(xué)生對于程序設(shè)計語言的掌握不能滿足數(shù)據(jù)結(jié)構(gòu)課程的需要,無法理解課堂上講的例題和思路,更無法進行算法分析、比較算法性能,成為影響學(xué)生學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)課程的一個因素。
3)學(xué)生缺乏主動思考。
由于老師的強調(diào)和考驗課程的性質(zhì),學(xué)生大多明白本課程的重要性,因此學(xué)生的學(xué)習(xí)興趣較高,但長期以來的學(xué)習(xí)方式和教學(xué)模式讓學(xué)生在學(xué)習(xí)過程中缺乏獨立思考的主動性,隨著課程的深入,學(xué)生容易對課程學(xué)習(xí)的意義產(chǎn)生懷疑,失去學(xué)習(xí)的興趣和主動性。如何在整個教學(xué)過程中保持學(xué)生的學(xué)習(xí)興趣也是一個決定教學(xué)效果的關(guān)鍵因素。
2 教學(xué)中采取的措施
明白了產(chǎn)生問題的原因之后,通過與其他老師的交流和討論,筆者在教學(xué)中采取了一系列的改革措施,并在課程教學(xué)實踐中取得了很好的教學(xué)效果,主要在如下5個方面進行了改革。
2.1 逐步引導(dǎo)
針對數(shù)據(jù)結(jié)構(gòu)課程較為抽象和學(xué)生理解起來比較吃力的特點,筆者在講解每個知識點的時候先從直觀的例子引入,然后與學(xué)生討論解決方法。通常情況下,學(xué)生提出的解決方法多數(shù)都存在問題,或者是解決方法上存在缺陷,或者是算法的執(zhí)行效率上不夠完善。針對學(xué)生的方案分析不足之處,教師逐步引導(dǎo)其正確的解決方法,從而引入相關(guān)知識點。
例如在講授“棧”這一知識點的時候,結(jié)合筆者的研究方向,先給學(xué)生介紹移動機器人未知環(huán)境下路徑規(guī)劃的方法,機器人在向著目標(biāo)位置運動過程中,發(fā)現(xiàn)障礙物之后,會采取避障行為,向著繞開障礙物的局部目標(biāo)位置運動,避開障礙物之后再向下一目標(biāo)運動。由開始的一個全局目標(biāo)到避障時逐步增加的局部目標(biāo),再到避開障礙物之后的一個全局目標(biāo),如何保存運動過程中的目標(biāo)和相應(yīng)的順序?筆者讓學(xué)生展開討論。不少學(xué)生提出采用數(shù)組加一個表示數(shù)組長度的變量來解決該問題,自然而然的引入“?!钡母拍?。這種方法能夠積極調(diào)動學(xué)生的積極性和參與欲望,同時也給他們指出思維方式的不足,并且很自然地將相關(guān)知識點的適用范圍、解決問題的方式和優(yōu)點在討論中與學(xué)生一起歸納出來,這樣學(xué)生自然就能牢牢掌握。逐步引導(dǎo)的方法雖然在每個知識點引入的時候花費的課時比較多,但后面的講解將會很流暢,節(jié)省不少課時,因此課程進度仍然能夠與進度計劃保持一致。
2.2 加強實踐教學(xué)環(huán)節(jié)
學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的最終目的是為了提高應(yīng)用計算機解決問題的能力,培養(yǎng)并提高學(xué)生的實踐能力是其教學(xué)重點之一。在教學(xué)實踐中,學(xué)生普遍反映課堂上能夠理解講授的知識點,但只要一動手實踐就糊涂。學(xué)生在實踐環(huán)節(jié)上的失敗,反過來又會影響其對理論知識的掌握,打擊學(xué)習(xí)的興趣和主動性。因此,我們在學(xué)生掌握基本理論的基礎(chǔ)上,要求和鼓勵學(xué)生進行一些實踐工作,重視實踐在教學(xué)中的作用。
現(xiàn)在多數(shù)課堂或課后的習(xí)題都是抽象之后的練習(xí),即規(guī)定了學(xué)生采用什么樣的數(shù)據(jù)存儲結(jié)構(gòu)和解決問題的方法,只是鍛煉學(xué)生的算法實現(xiàn)的能力,在考試當(dāng)中也是如此,無論是期末考試還是考研入學(xué)考試,都明確規(guī)定了題目要采用的方法,這樣雖然對于批改卷子和對知識點細(xì)節(jié)的評判較為有利,但忽略了對學(xué)生解決實際問題能力的培養(yǎng)和考評。在該模式下培養(yǎng)的學(xué)生遇到實際問題不知道該采用哪些知識點解決問題,這樣培養(yǎng)出來的學(xué)生“只見樹木,不見森林”,無法獨立解決實際問題。
因此,在考評機制上我們逐步加大對分析問題和抽象能力的考核??碱}不再規(guī)定使用什么樣的存儲結(jié)構(gòu),解決問題也不再指定采用什么算法,只要能夠解決問題即可。通過這種方式,學(xué)生不僅能夠充分發(fā)揮主觀能動性,抽象問題的能力得到充分展現(xiàn),而且有可能給出的解決方式比標(biāo)準(zhǔn)答案更加優(yōu)化,使學(xué)生的能力得到充分鍛煉。
2.3 擴展問題,增加學(xué)生主動性
針對學(xué)生主動性不夠的問題,我們對課堂上講述的知識點提出新的要求和限制條件,要求學(xué)生課下擴展新的功能。如在“棧的應(yīng)用”章節(jié)講到迷宮求解問題,利用教材上所述算法可以解決迷宮問題。我們可以提出新的要求讓學(xué)生解決,如教材給出的算法只能保證求出可行解,不能保證最短路徑,可以要求學(xué)生求解最優(yōu)路徑;或者對迷宮設(shè)置多個出口,要求求出最近出口或到達(dá)所有出口的路徑等,這樣就可以與“樹”的章節(jié)結(jié)合起來,極大提高學(xué)生的主動性。
2.4 擴展最新應(yīng)用
在講課過程中,學(xué)生對學(xué)科的最近進展和最新應(yīng)用都非常感興趣,或者對身邊經(jīng)常接觸的案例興趣很高。比如在講迪杰斯特拉算法時,可以進一步擴展到A*算法,并講到在經(jīng)典游戲“紅色警戒”中的應(yīng)用。從游戲中士兵或戰(zhàn)車的自動路徑規(guī)劃引入,指明目標(biāo)位置之后,游戲中的戰(zhàn)車都能夠按照最優(yōu)路徑前進,從而引入迪杰斯特拉算法和A*算法,學(xué)生對游戲中采用的技術(shù)和算法非常感興趣,從而達(dá)到很好的教學(xué)效果。甚至能夠主動提出問題,結(jié)合游戲擴展到動態(tài)環(huán)境的路徑規(guī)劃,超出了預(yù)計的教學(xué)效果。
2.5 改進教學(xué)方法
雖然現(xiàn)在講課都已經(jīng)采用了多媒體教學(xué),但是并沒有很好的發(fā)揮多媒體的作用,很多情況下只是把原來板書的內(nèi)容照抄到PPT上,沒有起到交互式和動畫教學(xué)的目的。因此學(xué)生對于一些細(xì)節(jié)的理解會受到一定的影響。針對該問題,我們重新設(shè)計了授課PPT,將細(xì)節(jié)的變化過程一一展示,如講授遞歸調(diào)用時,隨著每行代碼的執(zhí)行和棧的每一次入棧、出棧等操作,棧內(nèi)數(shù)據(jù)的變化逐步展現(xiàn)在學(xué)生面前,對于學(xué)生理解具有很好的幫助作用。
3 進一步改革的設(shè)想
教學(xué)改革的目的是使得學(xué)生更好的掌握本門課程,數(shù)據(jù)結(jié)構(gòu)是一門實踐性非常強的課程,僅僅依靠課堂上的時間是遠(yuǎn)遠(yuǎn)不夠的。因此除了課內(nèi)安排的實驗和課外實驗,可以結(jié)合本課程給學(xué)生安排或選做一些綜合性的實驗,能夠用到跨章節(jié)的知識點,甚至是跨課程的實驗。
從下學(xué)期開始,我們也將嘗試給學(xué)生安排針對性和綜合性較強的課程設(shè)計,只給學(xué)生提課程設(shè)計的問題和要求,采取什么樣的數(shù)據(jù)結(jié)構(gòu)和算法完全由學(xué)生自行設(shè)計、自主實現(xiàn),完全發(fā)揮學(xué)生的主動性,相信學(xué)生經(jīng)過大量解決實際問題的鍛煉,必定能夠更好的掌握數(shù)據(jù)結(jié)構(gòu)的內(nèi)容。
4 結(jié)語
54e879392a26e83bbca3856d7caba31d24ba8b3461bfea699c2f442def3271d4
本文針對在數(shù)據(jù)結(jié)構(gòu)教學(xué)過程中所發(fā)現(xiàn)的問題進行討論和改革,提出了5個方面的改革措施并將之在教學(xué)中應(yīng)用,實踐證明該措施取得了良好的教學(xué)效果,筆者對進一步的改革提出了一些建議,希望能夠更好地提高教學(xué)效果。
參考文獻:
[1]葉雙,吳清江,緱錦,等.提高“數(shù)據(jù)結(jié)構(gòu)”課程教學(xué)效果的方法初探[J].計算機教育,2009(11):90-92.
[2]王曉東,吳英杰,余春燕,等.算法與數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)興趣影響因素分析[J].計算機教育,2010(6):73-76.
[3]孫岐峰.“數(shù)據(jù)結(jié)構(gòu)”課程教學(xué)反思與改革[J].計算機教育,2009(11):66-68.
[4]嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:清華大學(xué)出版社,2007:50-52.
(編輯:姚彥