張安勤,葉文珺,田秀霞,彭源
摘 要:數(shù)據(jù)結(jié)構(gòu)是軟件設(shè)計(jì)的重要理論和實(shí)踐基礎(chǔ),數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)和算法設(shè)計(jì)是軟件系統(tǒng)設(shè)計(jì)的基礎(chǔ)和核心。本文分析了目前數(shù)據(jù)結(jié)構(gòu)教學(xué)中存在的主要問題,提出了教學(xué)前開發(fā)數(shù)據(jù)結(jié)構(gòu)類庫,課堂教學(xué)中采用項(xiàng)目驅(qū)動(dòng)的方法,實(shí)驗(yàn)環(huán)節(jié)中使用結(jié)對(duì)編程的教學(xué)改革方案。在學(xué)校相關(guān)專業(yè)實(shí)施后的效果表明,我們的教學(xué)改革方案提高了學(xué)生學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的興趣、積極性,提升了學(xué)生算法設(shè)計(jì)和算法實(shí)現(xiàn)的能力,增強(qiáng)了學(xué)生的合作能力和責(zé)任心。
關(guān)鍵詞:類庫;項(xiàng)目驅(qū)動(dòng);結(jié)對(duì)編程
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A
The Teaching Reform Scheme and Application Effect of Data Structure
ZHANG Anqin,YE Wenjun,TIAN Xiuxia,PENG Yuan
(School of Computer Science and Technology,Shanghai University of Electric Power,Shanghai 200090,China)
Abstract:Data structure is an important theoretical and practical basis for software design.Data structure design and the algorithm design are the basis and core of software system design.This paper analyzes the main problems existing in the teaching of data structure at present,and puts forward the teaching reform scheme of the development of the data structure class library before teaching,the project driven method used in classroom teaching,and the pair programming used in practice teaching.The implementation effect in the relevant majors in the authors school shows that the teaching reform scheme proposed in this paper promotes the students' interest and enthusiasm in learning data structure,improves the ability of algorithm design and algorithm implementation,and enhances the students' ability of cooperation and responsibility.
Keywords:class library;project driven;pair programming
1 引言(Introduction)
數(shù)據(jù)結(jié)構(gòu)是軟件設(shè)計(jì)的重要理論和實(shí)踐基礎(chǔ)。數(shù)據(jù)結(jié)構(gòu)課程討論的知識(shí)內(nèi)容是軟件設(shè)計(jì)的理論基礎(chǔ),介紹的技術(shù)方法是軟件設(shè)計(jì)中使用的基本方法[1]。
數(shù)據(jù)結(jié)構(gòu)課程主要是培養(yǎng)學(xué)生程序設(shè)計(jì)的邏輯思維和數(shù)據(jù)抽象能力。在課程教學(xué)中需要讓學(xué)生深刻理解相同的數(shù)據(jù)對(duì)象,使用的數(shù)據(jù)結(jié)構(gòu)不同,效率差別很大。高效的程序設(shè)計(jì)不僅要進(jìn)行充分的算法設(shè)計(jì),還要選擇合適的數(shù)據(jù)結(jié)構(gòu)[2]。
數(shù)據(jù)結(jié)構(gòu)課程內(nèi)容多,概念抽象,理論深?yuàn)W,部分算法難度大,是計(jì)算機(jī)專業(yè)最難學(xué)的課程之一。
2 數(shù)據(jù)結(jié)構(gòu)教學(xué)中存在的問題(Problems existing in
the teaching of Data Structure)
(1)學(xué)生的編程基礎(chǔ)差,容易陷入編程的具體實(shí)現(xiàn)細(xì)節(jié)
目前數(shù)據(jù)結(jié)構(gòu)教學(xué)中主要采用的是基于面向?qū)ο蟮某绦蛟O(shè)計(jì)語言的數(shù)據(jù)結(jié)構(gòu)教學(xué),例如C++和Java。代碼復(fù)用是面向?qū)ο缶幊痰膬?yōu)點(diǎn)之一,但是在數(shù)據(jù)結(jié)構(gòu)課程教學(xué)中沒有充分體現(xiàn)或很少體現(xiàn)這一優(yōu)點(diǎn)。學(xué)生在編程時(shí)很少考慮或涉及代碼的復(fù)用[3]。這樣不僅編程的效率低下,很容易陷入編程的具體實(shí)現(xiàn)細(xì)節(jié),不容易充分理解算法的思想,而且由于程序細(xì)節(jié)中存在問題,程序不能成功運(yùn)行也會(huì)挫敗學(xué)生的學(xué)習(xí)積極性。
(2)學(xué)生編程能力參差不齊
數(shù)據(jù)結(jié)構(gòu)課程一般安排在第二學(xué)年。在前一學(xué)年中,學(xué)生只學(xué)過一門編程語言,編程訓(xùn)練時(shí)間短,缺乏編程經(jīng)驗(yàn)。每個(gè)同學(xué)的編程水平差別較大,有的同學(xué)編程能力很強(qiáng),有的不會(huì)編程,甚至寫不出一個(gè)完整的main函數(shù)。
(3)教學(xué)內(nèi)容抽象,難度較大,教學(xué)方法單一
數(shù)據(jù)結(jié)構(gòu)課程難度較大,內(nèi)容比較抽象,學(xué)生理解困難。在過去的教學(xué)過程中,主要以教師的課堂講授、學(xué)生聽記為主。課程教學(xué)內(nèi)容和現(xiàn)實(shí)應(yīng)用脫節(jié),這種“填鴨式”教學(xué)方法,不能有效調(diào)動(dòng)學(xué)生的學(xué)習(xí)主動(dòng)性和積極性。
3 《數(shù)據(jù)結(jié)構(gòu)》教學(xué)改革方案(The teaching reform
scheme of data structure)
我們的教學(xué)改革方案主要有三個(gè)方面:課外老師提前開發(fā)基本數(shù)據(jù)結(jié)構(gòu)的類庫,課堂教學(xué)采用項(xiàng)目驅(qū)動(dòng)的方法,實(shí)驗(yàn)教學(xué)環(huán)節(jié)中使用敏捷開發(fā)方法中的結(jié)對(duì)編程方法。圖1是教學(xué)改革方案的框架圖。
(1)開發(fā)基本數(shù)據(jù)結(jié)構(gòu)的類庫
在數(shù)據(jù)結(jié)構(gòu)教材和教學(xué)中,數(shù)據(jù)的結(jié)構(gòu)和算法采用偽代碼表示。偽代碼的可操作性差,學(xué)生需要進(jìn)行調(diào)整和修改才能運(yùn)行。編程基礎(chǔ)差的同學(xué),很難在短時(shí)間內(nèi)調(diào)試和修改成功,因此容易給學(xué)生帶來消極心理[4]。為了提高學(xué)生的學(xué)習(xí)積極性,防止學(xué)生因?yàn)榇鞌「袔淼南麡O影響,團(tuán)隊(duì)老師開發(fā)了基本數(shù)據(jù)結(jié)構(gòu)的類庫。endprint
對(duì)于基于C++的數(shù)據(jù)結(jié)構(gòu)課程,團(tuán)隊(duì)老師開發(fā)常用的基本數(shù)據(jù)結(jié)構(gòu)的類庫,例如順序表類、單鏈表類、順序棧類、鏈棧類、循環(huán)隊(duì)列類、鏈隊(duì)列、二叉樹的二叉鏈表類,圖的鄰接矩陣類和鄰接表類[5]。對(duì)于基于Java的數(shù)據(jù)結(jié)構(gòu)課程,在課程中相應(yīng)章節(jié)中,介紹Java語言所提供的類庫[1]。在此基礎(chǔ)上,設(shè)計(jì)和實(shí)現(xiàn)一個(gè)面向C++和面向Java的數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)教學(xué)系統(tǒng),讓基于C++的數(shù)據(jù)結(jié)構(gòu)課程學(xué)生和基于Java的數(shù)據(jù)結(jié)構(gòu)課程的學(xué)生學(xué)會(huì)理解、選擇和使用合適的數(shù)據(jù)結(jié)構(gòu)進(jìn)行軟件開發(fā)。該數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)教學(xué)系統(tǒng)的用戶分為普通用戶和高級(jí)用戶。對(duì)普通用戶,可以運(yùn)行課內(nèi)實(shí)驗(yàn),觀察實(shí)驗(yàn)運(yùn)行的結(jié)果,系統(tǒng)提供實(shí)驗(yàn)的所有類及主函數(shù)的代碼。對(duì)于高級(jí)用戶,需要編寫主函數(shù)來調(diào)用系統(tǒng)提供的類庫。這樣可以為不同編程水平的用戶提供一個(gè)實(shí)驗(yàn)平臺(tái),提高代碼的復(fù)用性和實(shí)驗(yàn)的效率。
(2)項(xiàng)目驅(qū)動(dòng)的教學(xué)方法
項(xiàng)目驅(qū)動(dòng)的教學(xué)方法,主要就是在講授理論知識(shí)之前,教師首先給出一個(gè)具體項(xiàng)目,然后引導(dǎo)學(xué)生思考應(yīng)用以前所學(xué)的知識(shí)能不能解決問題,以前的方法存在什么問題。最后運(yùn)用數(shù)據(jù)結(jié)構(gòu)中的邏輯結(jié)構(gòu)、物理結(jié)構(gòu)和相關(guān)算法來解決問題。讓學(xué)生在具體項(xiàng)目中體會(huì)數(shù)據(jù)結(jié)構(gòu)課程中選擇合適的數(shù)據(jù)結(jié)構(gòu)和算法設(shè)計(jì)的重要性,以及如何把所學(xué)的課程內(nèi)容應(yīng)用到實(shí)際項(xiàng)目中。
例如,對(duì)于圖數(shù)據(jù)結(jié)構(gòu)的教學(xué),筆者在具體教學(xué)過程中首先給出了一個(gè)項(xiàng)目:基于圖結(jié)構(gòu)的社會(huì)網(wǎng)絡(luò)分析系統(tǒng)。要求同學(xué)思考如何從Email數(shù)據(jù)中提取出社會(huì)網(wǎng)絡(luò)中的個(gè)體信息和個(gè)體間的關(guān)系信息,以及如何把這些信息存儲(chǔ)到計(jì)算機(jī)中去,如何設(shè)計(jì)算法求出社會(huì)網(wǎng)絡(luò)中的核心人物、活躍人物和小團(tuán)體等功能。
和實(shí)際生活相聯(lián)系的項(xiàng)目[6]充分調(diào)動(dòng)了學(xué)生思考的積極性,并對(duì)如何應(yīng)用圖的方法解決所提出的問題充滿了期待。學(xué)習(xí)完圖的相關(guān)內(nèi)容后,絕大部分的同學(xué)已經(jīng)能夠在團(tuán)隊(duì)合作的情況下,完成這個(gè)項(xiàng)目。圖2是學(xué)生完成的項(xiàng)目運(yùn)行結(jié)果截圖。
項(xiàng)目驅(qū)動(dòng)方法使得學(xué)習(xí)、思考和動(dòng)手相結(jié)合,老師引導(dǎo)學(xué)生邊學(xué)邊做,實(shí)現(xiàn)“學(xué)中做”“做中學(xué)”,使學(xué)生不會(huì)覺得所學(xué)知識(shí)枯燥無味,還能更好地理解一些復(fù)雜的問題,讓學(xué)生真正掌握知識(shí)和相應(yīng)技能[7]。
(3)結(jié)對(duì)編程實(shí)驗(yàn)教學(xué)方法
結(jié)對(duì)編程技術(shù)是指兩位同學(xué)坐在同一臺(tái)電腦前開發(fā)軟件。結(jié)對(duì)編程是敏捷開發(fā)方法中一種提高程序質(zhì)量和效率的常用方法之一。由于簡(jiǎn)單易行,效果明顯,受到業(yè)界的推崇。
結(jié)對(duì)編程在具體操作過程中有如下好處[8]:
①可以提高學(xué)生的合作和交流能力,與別人合作會(huì)增加責(zé)任感和紀(jì)律性。
②兩個(gè)學(xué)生同時(shí)有相同的盲點(diǎn)的可能性比較小,結(jié)對(duì)編程可以給出更好的解決方案。
③另外在結(jié)對(duì)編程過程中,一位同學(xué)編寫代碼,另一位同學(xué)邊看邊思考,給出設(shè)計(jì)思想,而且容易觀察出代碼是否有問題,結(jié)構(gòu)是否有問題。代碼編寫后,相當(dāng)于已經(jīng)完成了一遍代碼評(píng)審,這樣大大提高了代碼的質(zhì)量。
④兩個(gè)同學(xué)一起編程時(shí),水平較差的同學(xué)會(huì)潛移默化地受水平略好的同學(xué)影響,學(xué)到一些新的東西。而水平好的同學(xué)同樣因?yàn)椴粩嗟匕炎约旱南敕ㄕf出來而整理了自己的思路。
4 《數(shù)據(jù)結(jié)構(gòu)》教學(xué)成效(Reform effects of the
teaching of data structure)
在計(jì)算機(jī)科學(xué)技術(shù)學(xué)院的軟件工程專業(yè)、計(jì)算機(jī)卓越工程師班、計(jì)算機(jī)創(chuàng)新創(chuàng)業(yè)班和信息安全專業(yè)四個(gè)班級(jí)通過實(shí)施一年開發(fā)基本數(shù)據(jù)結(jié)構(gòu)類庫,在課堂教學(xué)中采用項(xiàng)目驅(qū)動(dòng)的教學(xué)方法,以及在實(shí)驗(yàn)中采用結(jié)對(duì)編程的方法后,取得了顯著效果。學(xué)生的學(xué)習(xí)積極性和主動(dòng)性得到了提高,不同層次的同學(xué)都找到了自己合適的學(xué)習(xí)渠道。學(xué)生可以自主學(xué)習(xí),又可和結(jié)對(duì)的同學(xué)互相合作討論,每個(gè)同學(xué)既是老師也是學(xué)生,提高了學(xué)生合作能力和責(zé)任心。學(xué)生的課堂學(xué)習(xí)和實(shí)驗(yàn)效果有了很大提高。
表1是計(jì)算機(jī)專業(yè)2014—2015、2015—2016、2016—2017三個(gè)年度數(shù)據(jù)結(jié)構(gòu)卷面成績(jī)分析對(duì)比表。從表1可以看出課程的合格率和優(yōu)秀率也有了明顯提高。
5 結(jié)論(Conclusion)
我們通過采用課外老師提前開發(fā)基本數(shù)據(jù)結(jié)構(gòu)類庫,課堂教學(xué)采用項(xiàng)目驅(qū)動(dòng)的方法,實(shí)驗(yàn)教學(xué)環(huán)節(jié)中使用敏捷開發(fā)方法中的結(jié)對(duì)編程方法,提高了學(xué)生的學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的興趣、積極性和編程能力,增強(qiáng)了學(xué)生的合作能力和責(zé)任心。但我們的解決方案還需要不斷改進(jìn),例如項(xiàng)目驅(qū)動(dòng)方法中的項(xiàng)目必須是新穎的,能夠引起學(xué)生興趣,能調(diào)動(dòng)學(xué)生積極性,因此項(xiàng)目的選擇必須不斷更新。另外結(jié)對(duì)的同學(xué)不能固定不變,需要定期進(jìn)行調(diào)整,以便同學(xué)之間更充分的交流和合作。
參考文獻(xiàn)(References)
[1] 葉核亞.數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)[M].北京:電子工業(yè)出版社,2015(7):1.
[2] 陳宏.數(shù)據(jù)結(jié)構(gòu)的選擇與算法效率[EB/OL].http://blog.csdn.net/u011345136/article/details/23966739,2014-04-17.
[3] 楊曉波,陳邦澤.“數(shù)據(jù)結(jié)構(gòu)”教學(xué)平臺(tái)建設(shè)方案及應(yīng)用效果[J].實(shí)驗(yàn)室研究與探索,2014(10):162-165.
[4] 卓明敏,黃正亮,廖小于.數(shù)據(jù)結(jié)構(gòu)活代碼教學(xué)實(shí)踐[J].福建電腦,2010(4):207-208.
[5] 李春葆.數(shù)據(jù)結(jié)構(gòu)教程(C++語言描述)[M].北京:清華大學(xué)出版社,2014:44-52;90-96;113-118;199-249.
[6]霍玲玲,王智,孫江.數(shù)據(jù)結(jié)構(gòu)教學(xué)方法的研究[J].計(jì)算機(jī)教育,2015(2):73-76.
[7] 汪赫瑜.基于項(xiàng)目的教學(xué)方法在數(shù)據(jù)結(jié)構(gòu)教學(xué)中的應(yīng)用[J].教育教學(xué)論壇,2016(19):147-148.
[8] 張偉華,李立,王海英.結(jié)對(duì)編程在數(shù)據(jù)結(jié)構(gòu)教學(xué)中的應(yīng)用[J].福建電腦,2012(3):195-196.
作者簡(jiǎn)介:
張安勤(1974-),女,博士,副教授.研究領(lǐng)域:數(shù)據(jù)挖掘.
葉文珺(1966-),女,碩士,副教授.研究領(lǐng)域:圖像處理.
田秀霞(1976-),女,博士,教授.研究領(lǐng)域:信息安全.
彭 源(1981-),女,博士,副教授.研究領(lǐng)域:圖像處理.endprint