陳靜 張達敏 劉國敏(貴州大學(xué)大數(shù)據(jù)與信息學(xué)院,貴州貴陽550025)
?
基于CDIO數(shù)據(jù)結(jié)構(gòu)課程教學(xué)思考與改革*
陳靜張達敏劉國敏
(貴州大學(xué)大數(shù)據(jù)與信息學(xué)院,貴州貴陽550025)
摘要:《數(shù)據(jù)結(jié)構(gòu)》課程是計算機專業(yè)及其相關(guān)專業(yè)的核心課程,是一門注重知識思想學(xué)習(xí)和實踐性很強的課程。傳統(tǒng)的教學(xué)注重理論知識的講解,對動手實踐能力的培養(yǎng)較弱,導(dǎo)致學(xué)生對知識的運用能力較弱。該文章將CDIO的教育模式引入到數(shù)據(jù)結(jié)構(gòu)的教學(xué)中,并采取一系列的教學(xué)改革措施,以達到知識片段系統(tǒng)化,以“小設(shè)計”、“大設(shè)計”和“作品”三個層次的程序設(shè)計實踐能力,以循序漸近地方式培養(yǎng)不同層次的學(xué)生。
關(guān)鍵詞:CDIO數(shù)據(jù)結(jié)構(gòu);實踐能力;做中學(xué)
*1.貴州省省級本科教學(xué)工程項目:“通信工程”專業(yè)綜合改革試點(黔教高發(fā)[2014]378號)
2.貴州省研究生教育教學(xué)改革重點課題:研究生教育質(zhì)量保證和監(jiān)督體系示范點建設(shè)(黔教研合JG字[2014]004)
Abstract:"Data structure" course is the core course of computer science and other related majors, and it focuses on learning of knowledge and thought and practical ability. The traditional teaching pays great attention to the theoretical knowledge while the cultivation of the practical ability is weak, which leads to students' poor ability of using knowledge. In the article, the CDIO education model is introduced into the teaching of data structure, and a series of measures of teaching reform are taken in order to make knowledge fragment integrate systematically. The article recommends cultivating students of different levels in a step-by-step manner by three levels of program practice ability: "small design", "major design," and "works".
Keywords:CDIO data structure; practical ability; study in practice
《數(shù)據(jù)結(jié)構(gòu)》課程是計算機專業(yè)及其相關(guān)專業(yè)的核心課程,是一門注重知識思想學(xué)習(xí)和實踐性很強的課程。該門課程要求學(xué)生先掌握一門程序設(shè)計語言,在此基礎(chǔ)上學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識。由于數(shù)據(jù)結(jié)構(gòu)知識的特殊性,要求學(xué)生掌握的是知識的思想,以便可以用任意一種程序設(shè)計語言來描述它。該課程的目標是在程序設(shè)計中能運用數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識,編寫出執(zhí)行效率較高的程序代碼,提高解決實際問題的能力。
CDIO是一種新型的工程教育模式,它由麻省理工學(xué)院和瑞典皇家工學(xué)院等四所大學(xué)經(jīng)過四年的探索研究,創(chuàng)立了CDIO工程教育理念,并成立了以CDIO命名的國際合作組織。CDIO工程教育模式中C代表構(gòu)思(Conceive)、D代表設(shè)計(Design)、I代表實現(xiàn)(Implement)、O代表運作(Operate)[1]。該模式讓學(xué)生將課程理論知識與動手實踐相結(jié)合參與產(chǎn)品研發(fā)到產(chǎn)品運行的每一個環(huán)節(jié),學(xué)生以主動的、實踐的、課程之間有機聯(lián)系的方式學(xué)習(xí)工程。CDIO工程教育理念注重培養(yǎng)學(xué)生的基礎(chǔ)知識學(xué)習(xí)能力、動手能力、團隊協(xié)作能力。
CDIO教育模式為學(xué)生提供一種強調(diào)工程基礎(chǔ)的、建立在真實世界的產(chǎn)品和系統(tǒng)的構(gòu)思-設(shè)計-實現(xiàn)-運行(CDIO)過程的背景環(huán)境基礎(chǔ)上的工程教育。它的大綱首次將工程師必須具備的工程基礎(chǔ)知識、個人能力、人際團隊能力和整個CDIO全過程能力以逐級細化的方式表達出來,使工程教育改革具有更加明確的方向性、系統(tǒng)性。CDIO體現(xiàn)了系統(tǒng)性、科學(xué)性和先進性的統(tǒng)一,代表了當(dāng)代工程教育的發(fā)展趨勢。
CDIO教育模式拋開了以往教育中注重理論知識輕視實踐的觀念,以工程項目為載體,強調(diào)“做中學(xué)”,在項目的實施過程中,使學(xué)生的知識和動手能力得到不斷的積累和鍛煉。截至目前,已有幾十所世界著名大學(xué)加入了CDIO組織,其機械系和航空航天系全面采用CDIO工程教育理念和教學(xué)大綱,取得了良好效果,按CDIO模式培養(yǎng)的學(xué)生深受社會與企業(yè)歡迎。
《數(shù)據(jù)結(jié)構(gòu)》是計算機專業(yè)的核心課程。數(shù)據(jù)結(jié)構(gòu)是介于數(shù)學(xué)、計算機硬件和計算機軟件三者之間的一門核心課程。數(shù)據(jù)結(jié)構(gòu)這一門課的內(nèi)容不僅是一般程序設(shè)計(特別是非數(shù)值性程序設(shè)計)的基礎(chǔ),而且是設(shè)計和實現(xiàn)編譯程序、操作系統(tǒng)、數(shù)據(jù)庫系統(tǒng)及其他系統(tǒng)程序的重要基礎(chǔ)。
《數(shù)據(jù)結(jié)構(gòu)》課程在以往的教學(xué)中通常是對基礎(chǔ)知識進行教學(xué),選擇學(xué)生熟悉的程序設(shè)計語言對各種數(shù)據(jù)結(jié)構(gòu)及基本操作進行描述。在此教學(xué)過程中,學(xué)生在學(xué)完《數(shù)據(jù)結(jié)構(gòu)》課程后,并沒有清楚的了解《數(shù)據(jù)結(jié)構(gòu)》這門課程在程序設(shè)計中的作用,及如何使用數(shù)據(jù)結(jié)構(gòu)知識使算法效率更高及解決生活中的常見問題。導(dǎo)致了學(xué)生在學(xué)習(xí)中逐漸喪失了學(xué)習(xí)興趣,將知識的學(xué)習(xí)與知識學(xué)習(xí)的目的分離開來,最后只是學(xué)習(xí)了知識,而不知道該知識在什么時候用,可以怎么用。同時,由于數(shù)據(jù)結(jié)構(gòu)知識的特殊性,它的學(xué)習(xí)注重知識思想性的學(xué)習(xí),學(xué)習(xí)了思想就可以用任何一種程序設(shè)計語言對數(shù)據(jù)結(jié)構(gòu)思想進行描述,導(dǎo)致了學(xué)生在學(xué)習(xí)的過程中,使用的是哪種程序設(shè)計語言進行教學(xué),就只會用該程序設(shè)計語言描述數(shù)據(jù)結(jié)構(gòu),換一種程序設(shè)計語言描述就感覺非常困難,學(xué)生的動手實踐能力和解決問題的能力較弱,知識的掌握度不夠高,運用不夠熟練。
針對數(shù)據(jù)結(jié)構(gòu)課程中出現(xiàn)的問題,目前也進行了大量的課程改革,主要體現(xiàn)在針對課堂教學(xué)中使用多媒體教學(xué)方式改善傳統(tǒng)教學(xué)方式所帶來的抽象,不易理解的問題,通過多媒體課件的制作,使得學(xué)生能夠了解當(dāng)代碼執(zhí)行時數(shù)據(jù)變化情況,數(shù)據(jù)變化細節(jié)展現(xiàn)在學(xué)生的面前,對知識的理解起到了很好的作用。另一方面,同時也加強了對實踐的要求,在實驗中不僅要求能把問題解決,還要求能進一步求出問題的最優(yōu)解,提高了學(xué)生的學(xué)習(xí)主動性。
根據(jù)CDIO的教育理念,以培養(yǎng)學(xué)生的動手能力、團隊協(xié)作能力、工程能力為目的。需在學(xué)生學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)課程之前學(xué)習(xí)某種程序設(shè)計語言。在基礎(chǔ)知識的教學(xué)過程當(dāng)中,將生活中常見的待解決的問題引入到教學(xué)過程中,運用數(shù)據(jù)結(jié)構(gòu)知識進行解決,使學(xué)生在理解基礎(chǔ)知識的基礎(chǔ)上,更能感性認識數(shù)據(jù)結(jié)構(gòu)這門課程的作用,從而提高學(xué)生的學(xué)習(xí)興趣。
“做中學(xué)”是CDIO的核心思想之一,該思想的目的是激發(fā)學(xué)生的學(xué)習(xí)興趣。為了更好的提高學(xué)生的學(xué)習(xí)興趣,可以將教學(xué)與學(xué)習(xí)的重心從課堂轉(zhuǎn)移到實驗室機房。讓學(xué)生在實踐操作中掌握知識,體會知識是如何解決問題的。
數(shù)據(jù)結(jié)構(gòu)改革的主要措施如下:
(一)課堂教學(xué)改革
在傳統(tǒng)教學(xué)方式下,更多的采用啟發(fā)式的教學(xué)。
由于學(xué)生的學(xué)習(xí)水平參差不齊,因此在教學(xué)過程中仍然主要采取傳統(tǒng)的教學(xué)方式,要求學(xué)生在教學(xué)前預(yù)習(xí)講授的知識,課堂教學(xué)過程中教師對于基礎(chǔ)知識進行詳細的講解,確保學(xué)生能準確的掌握這部分知識。在對基礎(chǔ)知識進行算法描述和靈活運用時,教師采用啟發(fā)式的教學(xué)。教師對這部分知識設(shè)計問題,使學(xué)生在問題的思考與回答中將該部分知識掌握,提高學(xué)生的邏輯思考能力,同時也提高了學(xué)生的自主學(xué)習(xí)能力。
例如在講解堆棧知識時,可以對學(xué)生在講授了堆棧的基本知識概念后,讓學(xué)生對比堆棧和線性表這兩種數(shù)據(jù)結(jié)構(gòu)的異同之處,使學(xué)生能更好的理解堆棧的基本知識概念,加深知識印象。同時可以針對這部分的知識設(shè)計問題,如老鼠迷宮的問題。該問題要求學(xué)生深入掌握堆棧知識,同時能理解深度優(yōu)先搜索算法。該問題用二維數(shù)組表示迷宮,一只老鼠從迷宮的左上角進入迷宮,編寫算法,尋找一條從迷宮右下角出去的路徑。由于學(xué)生只是學(xué)習(xí)了堆棧的基本知識,要解決這樣的問題對大多數(shù)學(xué)生來說比較困難,因此老師在課堂上可以對該問題給出部分解決思路,用一個m×n的二維數(shù)組來表示地圖,有墻的格子用1表示,沒有墻的格子用0表示。為了讓老鼠走路,我們可以假設(shè)老鼠只能依次按照東、南、西、北四個方向行走。老鼠很聰明,總是先判斷東方是否有路,如果有,則向東走;如果東方?jīng)]有路,才接著判斷南方……南方有路,則走南方,以此類推。由于老鼠已走過的格子不能重復(fù)走,因此對于已走過的格子,我們可以放一個“腳印”在上面,即把相應(yīng)的格子設(shè)置為2就行了。這樣的格子表明已走過,不能再走[15]。當(dāng)老師的解決思路告訴學(xué)生時,剩下的問題要求學(xué)生自己思考該如何運用堆棧知識解決。
我們可以設(shè)置棧S來保存老鼠走過的所有格子,最近走過的格子總是放在棧頂,當(dāng)與“棧頂”格子p相鄰的格子(東、南、西、北)在地圖網(wǎng)格(二維數(shù)組)中的值不為0時,則表示再往下走已無路可走。此時,我們可以從S中出棧一個位置,并設(shè)該位置(格子)對應(yīng)的值為3,表明該格子已無路可走。接下來以新的棧頂元素為當(dāng)前位置(回溯),依次從東、南、西、北四個方向?qū)ふ铱梢宰叩奈恢茫业侥澄恢煤螅言撐恢萌霔#砻髯呷朐撐恢谩@^續(xù)尋找下一個位置,直到某位置為end位置或者找不到合適的路徑,即棧為空時算法結(jié)束。主要解決方法如下[15]:
Position Cur,offset [4]={{0,1},{1,0},{0,-1},{-1,0}}; /*某格的相
鄰單元格的坐標偏移*/
int **M;
int i;
M=(int **)map;
Push(S,(ElemType*)&begin); /*起始結(jié)點入棧*/
M[begin.x][begin.y]=2; /*置一個腳印*/
while(!StackEmpty(S)){
StackTop(S,(ElemType*)&Cur); /*取棧頂元素(坐標)*/
if(Cur.x==end.x&&Cur.y==end.y)/*找到,直接退出即可*/
break;
for(i=0;i<4;i++)/*檢查相鄰可走坐標*/{
if(M[Cur.x+offset[i].x][Cur.y+offset[i].y]==0)/*這一格可以走的*/{
Cur.x=offset[i].x+Cur.x; Cur.y=offset[i].y+Cur.y; M[Cur.x][Cur.y]=2; /*留一個腳印,有興趣的還可以加上方向*/
Push(S,(ElemType*)&Cur);
break; /*退出循環(huán)*/
}
} /*for*/
if(i==4)/*四個方向都走遍無路可走,回溯*/{
M[Cur.x][Cur.y]=3; /*曾經(jīng)走過的腳印,但走不通后往回走的腳印*/
Pop(S,(ElemType*)&Cur); /*棧頂位置退出路徑*/
}
} /*while*/
在這一部分的訓(xùn)練中可以讓學(xué)生問題的解決思路用偽代碼或自然語言的形式寫下來,并不強求學(xué)生一定要用程序設(shè)計語言描述該問題,并把代碼調(diào)試成功。讓學(xué)生在解決問題的過程中掌握知識,并能運用知識解決問題。使學(xué)生明白數(shù)據(jù)結(jié)構(gòu)的知識并不是抽象無用的,而是能實實在在的解決我們生活中的某些問題的。
(二)程序設(shè)計改革
在掌握了基礎(chǔ)知識的基礎(chǔ)上,鼓勵學(xué)生采用任意一種程序設(shè)計語言來描述算法。
由于數(shù)據(jù)結(jié)構(gòu)知識可以用任意一種程序設(shè)計語言來進行描述。因此,在教學(xué)過程和實驗過程中,鼓勵學(xué)生使用多種程序設(shè)計語言來描述算法。該項改革的目的在于使學(xué)生能以自己所熟悉的學(xué)習(xí)方式來掌握該課程的知識。并能更加熟練的掌握一門程序設(shè)計語言。
目前在大多數(shù)教學(xué)中,采用的數(shù)據(jù)結(jié)構(gòu)教材的描述語言方式都是C語言。導(dǎo)致了學(xué)生在學(xué)習(xí)完數(shù)據(jù)結(jié)構(gòu)課程后只能運用C語言來描述數(shù)據(jù)結(jié)構(gòu),當(dāng)要求用其他程序設(shè)計語言來描述各種數(shù)據(jù)結(jié)構(gòu)時,就顯得束手無策了。因此在學(xué)生編寫程序時,可以要求學(xué)生在看懂,調(diào)試通過教材或老師要求的代碼時,鼓勵學(xué)生用其他的程序設(shè)計語言如JAVA把同樣的問題再描述一遍,以此來加深知識的掌握,增加學(xué)生的成就感,提高學(xué)生的學(xué)習(xí)興趣。
(三)數(shù)據(jù)結(jié)構(gòu)實驗改革
在對每一個數(shù)據(jù)結(jié)構(gòu)知識點設(shè)計實驗時,實驗的難度由淺到深,每一個實驗都是在前一個實驗完成的基礎(chǔ)上增加新的問題和難度,對于同一個問題使用不同的數(shù)據(jù)結(jié)構(gòu)來實現(xiàn),最終完成該知識點實驗后,學(xué)生可以得到一個對該知識點的系統(tǒng)掌握和理解。
例如,在隊列數(shù)據(jù)結(jié)構(gòu)中,讓學(xué)生先完成循環(huán)隊列的基本操作實驗,如循環(huán)隊列的入隊、出隊、隊滿和隊空等基本操作的實現(xiàn),這一類的實驗對于學(xué)生來說都可以算做驗證性的實驗,較為簡單,只要掌握了基礎(chǔ)知識就可以完成,可以算做常說的由淺入深中的“淺”了。當(dāng)學(xué)生完成了這樣的實驗后,可以要求學(xué)生在此基礎(chǔ)上做較深的綜合設(shè)計性的實驗了。當(dāng)然這樣的實驗要求學(xué)生用到前一個實驗的內(nèi)容,如電路布線問題,在布線區(qū)域疊一個網(wǎng)格,該網(wǎng)格把布線區(qū)域劃分成n×m個方格,就像迷宮一樣,當(dāng)從一個方格A的中心點連接到另一個方格B的中心點時,轉(zhuǎn)彎處必須采用直角。如果已經(jīng)有某條線路經(jīng)過一個方格,則封鎖該方格。使用A和B之間的最短路徑來作為布線路徑,以便減少信號的延遲。為了找到網(wǎng)格中位置A和B之間的最短路徑,先從位置A開始搜索,把A可到達的相鄰方格都標記為1(表示到達A的距離為1),然后把標號為1的方格可到達的相鄰方格都標記為2(表示到達A的距離為2),繼續(xù)進行下去,直到到達B或者找不到可到達的相鄰方格為止[15]。
在解決該問題的過程中就需要用到循環(huán)隊列的基本操作。這樣的問題可以算做是由淺入深中的“深”了。要解決這樣的問題必須深入理解隊列知識和廣度優(yōu)先搜索算法原理。這種難度問題的解決對于現(xiàn)在的大多數(shù)學(xué)生要獨立解決還是很困難的,因此可以建議學(xué)生以分組的方式來協(xié)作完成。學(xué)生可以3-4人組建為團隊完成任務(wù)。按照CDIO模式,團隊成員確定任務(wù)和設(shè)計方案,完成成員分工,制定問題解決計劃,然后解決該問題,最后提交任務(wù)解決報告。通過這樣的綜合設(shè)計性任務(wù)的鍛煉,使學(xué)生從任務(wù)的分析,任務(wù)的解決,計算機模擬,團隊合作,動手能力各方面都得到一次全面的訓(xùn)練。
實驗環(huán)節(jié)是知識掌握中最重要的環(huán)節(jié)。所有知識的掌握最終都要在實驗中進行實踐和驗證。因此數(shù)據(jù)結(jié)構(gòu)實驗的設(shè)計就尤為重要。在實驗內(nèi)容設(shè)計上由淺入深,先進行基礎(chǔ)知識的實驗,使得學(xué)生能更好的理解課堂理論知識,并能完整的寫出可運行的算法。在基礎(chǔ)實驗內(nèi)容完成后,所設(shè)計的實驗項目為生活中較為常見的問題或小游戲問題的解決,適當(dāng)給出問題解決的提示以及代碼片段,鼓勵學(xué)生獨立思考,完成整個算法。根據(jù)算法的實現(xiàn),設(shè)計不同的實驗數(shù)據(jù)時得到的結(jié)果有何變化以及原因所在,培養(yǎng)學(xué)生深入思考能力。
以上三項改革措施實際上也是一個相輔相成,循序漸進的過程。學(xué)生在學(xué)習(xí)的初始階段主要集中在知識的理解和掌握,在此基礎(chǔ)上能用不同的程序設(shè)計語言描述算法,達到知識的熟練掌握,再后便是對知識的靈活運用,主要體現(xiàn)在實驗階段,通過教師對實驗項目的設(shè)計,使學(xué)生能系統(tǒng)掌握知識,并能解決生活中較為常見的小問題。它解決學(xué)生在學(xué)習(xí)該課程后,所學(xué)的知識片段系統(tǒng)化,最終以“小設(shè)計”、“大設(shè)計”和“作品”三個層次的程序設(shè)計實踐能力,以循序漸近地方式培養(yǎng)不同層次的學(xué)生。以“項目和任務(wù)驅(qū)動”為主線,結(jié)合“案例教學(xué)”、“研究式教學(xué)”手段,把理論教學(xué)和實踐教學(xué)進行無縫連接,以期獲得比傳統(tǒng)實踐方法更好的效果[15]。
本文針對數(shù)據(jù)結(jié)構(gòu)教學(xué)過程中出現(xiàn)的問題進行了討論和改革,并提出了三個方面的改革措施,并運用在教學(xué)中,取得了良好的效果。在以后的教學(xué)過程中,利用CDIO教育創(chuàng)新模式,在《數(shù)據(jù)結(jié)構(gòu)》這門課程中培養(yǎng)學(xué)生具有扎實的專業(yè)技術(shù)知識,通過項目驅(qū)動學(xué)習(xí),在做中學(xué),使得知識的理解更加牢固,同時知識與現(xiàn)實生活也充分結(jié)合。在未來的教學(xué)中,我們希望在《數(shù)據(jù)結(jié)構(gòu)》課程中利用CDIO的工程教學(xué)理念,以任務(wù)為目的,基礎(chǔ)知識學(xué)習(xí)為基礎(chǔ),驗證性實驗為核心,以“滾雪球”方式,將每一個實驗都逐漸“滾”成一個任務(wù),以此達到真正學(xué)會知識,會用知識的目的。
參考文獻
[1]陳芳,王旭.基于CDIO的C語言教學(xué)改革[J].科技視界,2015 (2):96.
[2]王向輝,崔巍,徐俊麗.基于CDIO的數(shù)據(jù)庫課程教學(xué)改革方案研究[J].計算機教育,2011(2):38-41
[3]王艷玲,李秀媛.基于CDIO模式的單片機課程教學(xué)方法探討[J].計算機光盤軟件與應(yīng)用,2014(15).
[4]郝宗波.數(shù)據(jù)結(jié)構(gòu)課程教學(xué)改革探討[J].計算機教育,2011 (3):78-80.
[5]宋桂娟,楊勇虎,王文生.基于CDIO的數(shù)據(jù)結(jié)構(gòu)課程教學(xué)改革與研究[J].電腦知識與技術(shù),2010,6(3):755-756.
[6]楊蒙召,顧澤元,劉文強.CDIO理念在數(shù)據(jù)結(jié)構(gòu)課程中的探索與實踐[J].計算機教育,2010(12):124-126.
[7]齊會娟,李德雄,劉麗娜.基于CDIO理念的“數(shù)據(jù)結(jié)構(gòu)”課程改革與研究[J].石家莊鐵路職業(yè)技術(shù)學(xué)院學(xué)報,2011,10(2).
[8]曾曉輝,文展,付琳.CDIO模式下的數(shù)據(jù)結(jié)構(gòu)教學(xué)體系探索[J].計算機教育,2015(2).
[9]曹海燕.基于CDIO模式的數(shù)據(jù)結(jié)構(gòu)與算法教學(xué)改革研究[J].江蘇第二師范學(xué)院學(xué)報,2014(4):21-23.
[10]胡瑞娟.CDIO理念在數(shù)據(jù)結(jié)構(gòu)課程教學(xué)中的實踐[J].電腦知識與技術(shù),2014(1).
[11]嚴蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:清華大學(xué)出
版社,2012.
[12]劉曉靜,黃維通,王曉英.西部地區(qū)CDIO理念下的數(shù)據(jù)結(jié)構(gòu)與算法課程建設(shè)[J].計算機教育,2013(17).
[13]任雪萍,王立波,趙葆華.融入PIC-CDIO理念的“數(shù)據(jù)結(jié)構(gòu)”課程教學(xué)改革[J].計算機教育,2012(12):29-32.
[14]于波,郭紅,李鵬.CDIO工程教育模式在數(shù)據(jù)結(jié)構(gòu)與算法教學(xué)中的應(yīng)用[J].黑龍江教育,2014(12).
[15]王力,陳靜.新編數(shù)據(jù)結(jié)構(gòu)實驗指導(dǎo)——基于CDIO實訓(xùn)[M].貴州:貴州大學(xué)出版社,2013.
作者簡介:陳靜(1981,4-),女,回族,貴州省貴陽市白云區(qū),研究生,講師,教師,研究方向:計算機軟件應(yīng)用。
中圖分類號:G642
文獻標志碼:A
文章編號:2096-000X(2016)01-0109-04