緒論:寫作既是個人情感的抒發,也是對學術真理的探索,歡迎閱讀由發表云整理的11篇數據結構課程設計總結范文,希望它們能為您的寫作提供參考和啟發。
數據結構是計算機專業的核心課程之一,是計算機軟件技術的基礎,以數據為中心講述問題如何在計算機程序中得以實現。該課程的教學不僅要注重學生對理論知識的理解,更要培養學生能針對具體問題,設計合理的數據結構,對數據進行有效的存儲、操作,并能完成相應的高效算法。課程設計的教學是整個教學環節中非常重要的一環,它彌補了課堂教學中實踐少的缺陷,其教學目標不僅要培養學生縝密的邏輯思維和數據抽象能力,更要培養學生在軟件設計領域科學的思維方式,將算法理論和編程實踐完美結合,能夠在工程實際中靈活應用。因此不斷改進課程設計的教學方法,提高教學質量是培養高素質軟件人才的迫切要求。
1存在的普遍問題
1.1編程語言基礎差
數據結構課程設計通常是在大二進行,算法是基于C/C++語言。雖然學生之前已先修過這些課程,但C++本身規則復雜,面向對象的思想不容易掌握,而學生又沒有經過系統訓練,普遍存在編程語言基礎薄弱、對調試程序的方法不夠熟練、程序結構設置不合理、代碼編寫可讀性差等問題。不少同學反映算法能聽懂,看教師演示一些實例也覺得簡單,但輪到自己編程就無從下手。這種狀況直接制約了學生完成課程設計的質量[1]。
1.2缺乏系統的軟件開發思想
計算機專業的課程體系中,軟件工程通常安排在數據結構課程設計之后,這樣學生在進行課程設計時,尚不具備軟件開發的思想。遇到問題時,只考慮怎么實現,沒有進行整體軟件開發的過程規劃,忽視了軟件的性能、質量、甚至于需求都不甚明確就急于動手編寫程序。這樣的做法使得課程設計的完成效率很低,經常需要返工。
1.3教師的指導“過多”或“過少”
課程設計中,教師的指導相當重要,但是目前存在兩個極端,有的教師對每個課程設計都講解得面面俱到,如何實現,用什么樣的存儲結構,所得結果等都作了交代,學生只是被動的接收者,這種“填鴨式”的教學方式制約了學生的創新能力。而另一個極端,有的教師認為課程設計是由學生上機完成的,教師督促學生,最后給出考評,對學生完成課程設計的過程關注太少,很多學生因此敷衍了事。教師如何把握指導的度,如何指導是學生能力能否得到提高的一個重要因素[2]。
1.4考評制度不合理
長期以來,課程設計報告被看成是評定學生成績的一個重要依據,而對學生軟件開發的過程關注不多,學生只要上交了報告就能獲得成績[3]。這樣的做法導致學生過度追求報告的整潔度、實驗結果的正確性等。甚至部分同學抄襲、直接從互聯網上下載報告交差。一個學期下來,除了交了幾份報告,學生的收獲甚少,課程設計教學效果甚微。因此,必須改革考評制度,才能真正培養學生的動手能力、創新能力。
2提高課程設計教學效果的措施
2.1規范軟件開發的過程,培養良好的編程習慣
在學生開始課程設計前,教師首先通過一個具體的實例,從需求分析、概要設計、詳細設計、編程測試等各個方面出發,讓學生了解完整的開發軟件過程。在數據結構課程教學中,所有算法均用可運行程序講解,避免出現懂算法不懂編程的現象。有意識地讓學生強化編程的技巧、調試方法、面向對象思想等內容。
我院數據結構課程組教師采用面向對象的思想,將數據結構中基本算法全部用C++模板類實現,學生通過多看、多讀這些規范的程序,取得了不小進步。
2.2梯度命題,循序漸進開展課程設計
課程設計以往是教師根據實驗指導書布置課題后由學生完成,部分學生感到難度很大,無從下手。現階段我們將課程設計改為驗證型、驗證設計型、設計應用型多種層次,針對各種基本數據結構,教師首先用模板類實現,學生在課程設計時先用實例驗證程序,在此基礎上,設計出預留的一些函數接口,實現該類的部分功能。最后再針對某一具體問題,由學生開發出完整的程序。這是一個由易入難的循序漸進的過程,學生通過驗證型實驗更加牢固掌握基本數據結構,再由驗證設計型和設計應用型實驗學會如何應用數據結構,如何在計算機中實現存儲,實現各種需求的功能。
下面以二叉樹部分內容為例,首先實現二叉樹的模板類如下:
/*二叉樹類*/
template
class BinaryTree
{
public:
BinaryTree():m_root(NULL){} /*構造函數*/
~BinaryTree()//析構函數
/*按以先序次序輸入結點值的方式建立二叉樹的接口函數*/
void Create1(ElemType ch[],const ElemType &endChar);
/*以二叉樹的先序和中序次序建立二叉樹的接口函數*/
void Create2(ElemType ch1[],ElemType ch2[],int );
/*先序遞歸遍歷二叉樹的接口函數*/
void PreorderTraverse (void (*visit)(const ElemType &));
/*中序遞歸遍歷二叉樹的接口函數*/
void InorderTraverse (void (*visit)(const ElemType &));
/*后序遞歸遍歷二叉樹的接口函數*/
void PostorderTraverse (void (*visit)(const ElemType &));
……
private:
BTNode *m_root;
/*按先序次序輸入結點值的方式建立二叉樹*/
void _Create1(BTNode* &,ElemType ch[],const ElemType &,int &);
/*已知二叉樹的先序遍歷次序及中序遍歷次序,建立二叉樹*/
void _Create2(BTNode * &,ElemType ch1[], ElemType ch2[],int ,int ,int &);
/*先序遞歸遍歷二叉樹*/
void _PreorderTraverse(BTNode* ,void (*visit) (const ElemType &e));
……
};
對于這樣的模板類,設定的驗證型實驗為:給定一棵二叉樹,驗證其先序中序和后序遍歷結果。在掌握了二叉樹遍歷的基礎上,設計出模板類中預留的兩個接口函數create1和create2。最后,安排設計型實驗為創建表達式樹;分別用三種遍歷方式遍歷該樹,比較它與實際的波蘭式、中綴式和逆波蘭式之間的區別;完成給定表達式樹的表達式求值運算。這樣有梯度地安排課程設計,一方面強化了基本概念,另一方面引導學生完成更復雜的設計。對基礎薄弱的同學來說,驗證型實驗難度不大,基本都能完成,大大增強了自信;對優秀學生來說,挑戰設計型實驗更能提高自身的能力。
2.3抽絲剝繭,層層深入啟發
學生遇到復雜問題時,往往一籌莫展,不知如何下手。教師應教會學生如何從問題本身出發,層層分析,應采用哪種數據結構,用到什么樣的操作,在這樣的操作需求下應用何種存儲方法比較合適,最后細化到具體的函數實現。
如教學計劃編制問題[4],要求根據課程和課程之間的先修關系,得到合適的教學計劃安排。首先分析這個問題是對有向圖進行拓撲排序,課程和課程之間的先修關系可用有向圖描述出來。數據結構為有向圖,存儲方式為鄰接表,應用的操作是拓撲排序。拓撲排序的基本思想是先輸出有向圖中入度為零的頂點,再從圖中刪除該頂點和所有以它為尾的弧,重復執行,直至圖中所有頂點均輸出為止。要完成拓撲排序,首先要求出圖中所有頂點的入度。拓撲排序算法中還用到了一個輔助的數據結構棧,因此還需要初始化棧、出棧,入棧,判定棧空等操作實現。這樣層層分析下來,程序中需要的函數一一明了:創建有向圖、鄰接表的建立、求頂點入度、初始化棧、出棧、入棧、判定棧空、拓撲排序等。函數層次關系圖示如圖1所示。
圖1函數層次關系圖
通過這樣的教學方式,學生學會了帶著問題去思考,逐步學會將大的程序化解成若干小函數,最終經過整合完成整個設計開發。
2.4加強團隊合作,調動每位同學積極性
在課程設計中,針對每一種數據結構安排了一個工程性綜合實驗,這個綜合實驗由幾名同學組成小組合作完成。團隊成員分工明確,一名同學擔任組長,負責組織和控制組內的工作進程,強調任務落實到組內每一個同學。
教師布置任務后,每個團隊將軟件開發流程應用到課程設計中,實質性進行問題規劃、模塊劃分、項目整合等工作。只有團隊中每個成員都積極面對,整個團隊才能獲得優秀成績,無形之中鞭笞每位同學認真對待。在一個團隊中,大家集思廣益,可以跟伙伴一起交流,互相學習,形成共同進步的良好局面。
最后在驗收答辯時,團隊中每個成員都應匯報自己所做工作,教師和其他團隊可以提問,交流開發過程中的心得。
2.5改革考評制度,從多角度綜合考慮成績
合理的考評制度可以對課程設計過程進行有效的監控,通過考評體系可以反饋各階段的進展情況,便于總結經驗,找出不足,保證課程設計的質量和效果。課程設計考評有別于普通的課程評分,我分院數據結構課程設計的成績由幾個方面綜合決定:課程設計的內容、課程設計的實現以及實驗報告。各項考評指標均有一定的權重,能夠比較客觀公正地確定學生成績。其中課程設計的內容主要考慮學生所選課題的難易度、工作量多少。實現過程主要考慮完成情況、軟件代碼規范化、文檔規范化、答辯質量等,最后由學生提交設計報告進行總結和討論。設計報告除了包括常規的系統需求分析,概要設計,詳細設計,調試分析和實驗結果外,還鼓勵他們提出優化方案,對于每個課程設計再“多想一點”,即其他可能存在的求解方法,如已經使用了鏈式存儲結構實現,那使用順序存儲結構如何實現?各種設計的優缺點是什么?如何提高時間空間性能?通過總結,學生對問題有了更加深入全面的理解,鍛煉了擴散思維方式,培養了創新能力。同時教師對評價優秀的學生或團隊給與獎勵,促使學生之間形成你追我趕的良好學習氛圍,整體提高教學質量。
3結語
數據結構作為計算機專業的重要基礎課程之一,對學生軟件開發習慣的培養至關重要。提高課程設計教學質量不僅可以鞏固基本知識,還可以讓學生適應快速發展的軟件開發技術,激發學生學習和研究的興趣。本文從五個方面討論了提高課程設計教學質量的措施,通過一個學期的教學實踐,從效果上來看,這屆學生分析問題、解決問題的能力,綜合創新能力,學習積極性都比前幾屆學生有了明顯提高,絕大部分的同學都能順利完成課程設計并獲得較好成績,這為他們后續的課程打下了堅實的基礎。
參考文獻:
[1] 龐曉瓊. 案例驅動的數據結構課程設計教學改革實踐[J]. 計算機教育,2009(1):53-64.
[2] 陳越,何欽銘,馮雁.“數據結構”綜合性課程設計教學探索與實踐[J]. 計算機教育,2008(8):54-55.
[3] 李群,趙玉霞,莊波.《數據結構》實驗課程設計與探討[J]. 中國現代教育裝備,2007(3):27-28.
[4] 嚴蔚敏,吳偉民. 數據結構(C語言版)[M]. 北京:清華大學出版社,2006:180-182.
Discussion and Practice on Improving Teaching Quality of Data Structure Course Design
XU Chong, WANG Libo, JIANG Juan
(College of Computer Science, Hangzhou Dianzi University, Hangzhou 310018, China)
摘要:結合高等教育心理學中的學習遷移理論,對數據結構課程設計的教學進行了思考與教學實踐。文章針對數據結構課程設計的教學目標制定、設計題目設計、考核方式等各個環節的特點與問題,闡述了學習遷移理論對數據結構課程設計的指導作用;在此基礎上給出了所制定的課程設計題目及一些有代表性的學生作品欣賞;對課程設計與課程實驗的區別進行了論述。對今后數據結構課程設計教學具有很好的參考和借鑒價值。
關鍵詞 :學習遷移;課程設計;題目設計;作品欣賞
基金項目:北京林業大學2011年“虛擬現實技術”精品課程建設項目;2014年北京林業大學微課建設項目“計算機動畫原理與技術”。
第一作者簡介:楊猛,男,講師,研究方向為計算機應用技術,yangmeng@bjfu.edu.cn。
0 引言
數據結構[1]是北京林業大學信息學院的計算機科學與技術、數字媒體藝術、信息管理與信息系統等專業的一門重要專業基礎課,也是必修課。它的總學時為64學時,其中理論授課48學時,實驗16學時,課程設計(實習)一周,通常安排在第3學期或者第4學期開課。數據結構也是軟件開發與設計、計算機算法研究與實現等課程的基礎,其主要內容包括線性表、棧和隊列、串、數組和廣義表、樹、圖、查找算法和排序算法等。數據結構課程設計通常是在數據結構的授課環節以及實驗環節之后,單獨安排學生用大約一周的時間來完成一個較大的作業,以提高學生的思維能力,促進學生的綜合應用能力和專業素質的提高。
學習遷移一般是指學習者已有的知識經驗、技能等對另一種學習的影響。學習遷移是知識學習過程中普遍存在的。由數據結構課程實驗到課程設計,是對數據結構基礎知識到綜合能力的一種自然過渡,這個過渡即為學習遷移。學生在課程學習過程中,如果能夠很好地應用學習遷移,將有利于完善知識結構,收到舉一反三、觸類旁通的良好學習效果。可見,從數據結構基礎知識到數據結構課程設計能力培養,是一種學習遷移的過程。因而,在課程設計的教學實施過程中,學習遷移理論對提高教師的授課質量和學生的學習效果起著非常重要的作用。
筆者對學習遷移基本理論進行了分析,并結合其在數據結構課程設計的實際教學實施過程中的體現,闡述了如何有效應用學習遷移理論來提高授課質量和學生的學習效率。
1 學習遷移基本理論
學習遷移是指一種學習中學得的經驗對另一種學習的影響。遷移的基本過程是一個概括出新舊學習本質特征的過程。它是學習者運用已有的認知經驗和技能,在對新的學習內容進行分析概括的基礎上實現的。學習遷移有順向和逆向兩種,先前學習對后來學習的影響稱為順向遷移,反之則為逆向遷移。不論順向遷移還是逆向遷移,都有正負之分。正遷移指一種學習對另一種學習起促進作用,反之起阻礙作用則為負遷移。按照遷移的方向來劃分,可以分為水平遷移和垂直遷移。水平遷移指已習得的概念、規則或解決問題的方法等在同一抽象概括層次的新情境中的運用;垂直遷移指低級概念和規則向高級概念和規則的遷移。學習遷移理論主要包括以下幾種[2]。
(1)形式訓練理論。該學說以官能心理學為理論依據,認為通過一定的訓練,可以發展心的官能,從而將其轉移到其他學習上去。
(2)相同要素理論。該理論認為原先的學習能夠遷移到新的學習中去的前提條件是兩種學習情境有相同的要素。并且相同要素越多,遷移的程度越高。
(3)泛化理論。泛化理論是指將在一種情境中得到的經驗進行“泛化”并運用到另一種情境中去。因此在教學過程中,為使學生能夠掌握學習遷移,應該讓學生學會思考泛化。
(4)轉化理論。支持該理論的心理學家認為學習遷移實際上是一個關系轉化的問題。產生遷移的原因,是由于兩者之間存在著相同的關系。我們平時強調通過理解而不是機械記憶來學習是因為理解可以轉化到各種情境中去,減少知識的錯誤運用。
(5)學習定勢理論。該理論指出遷移取決于通過練習而獲得的定勢或學習能力。通過練習某一種學習問題,可以幫助解決另一種不同的問題。
(6)認知遷移理論。該理論認為遷移的可能性取決于在記憶搜尋過程中遇到相關信息或技能的可能性。所以,如何增加學生在面臨實際問題時提取所學知識的可能性尤為重要。提取的可能性與交互聯結的數量直接有關,所以任何增加交互聯結網絡的“豐富性”的教育方法,對增加遷移的可能性均是有利的。
2 基于學習遷移理論指導的數據結構課程設計
依據前面對學習遷移基本理論的分析,以下將結合數據結構課程設計在教學目標、教學內容與基本要求、題目設計、考核方式以及學生作品欣賞等各個環節的特點與問題,闡述學習遷移理論對數據結構課程設計的指導作用。
2.1 課程設計教學目標
2.1.1 教學目標
學習數據結構是為了將實際問題中所涉及的對象在計算機中表示出來并對它們進行處理。根據形式訓練理論的觀點,學習技能的掌握是經過反復訓練達到的,學生對知識的理解程度和技能的熟練程度越高,正遷移的可能性越大。因此實踐教學環節非常重要。通過課程設計,一方面,使學生學會綜合分析研究計算機加工的數據結構的特性,以便為應用涉及的數據選擇適當的邏輯結構、存儲結構及相應的算法,并初步了解對算法的時間分析和空間分析技術;另一方面,通過課程設計中的算法設計和上機實踐的訓練,培養學生全面的數據抽象能力、綜合的程序設計能力等。通過此次課程設計主要達到如下目的。
(1)了解并掌握數據結構與算法的設計方法,掌握數組、鏈表、隊列、堆棧、樹、圖、查找、排序等基本數據結構,具備初步的獨立分析和設計能力。
(2)初步掌握軟件開發過程[3]的問題分析、系統設計、程序編碼、測試等基本方法和技能。
(3)提高獨立分析和解決問題的能力。
(4)訓練用系統的觀點和軟件開發一般規范進行軟件開發,培養軟件工作者所應具備的科學的工作方法和作風。
2.1.2 教學實驗中的遷移
教學實驗[4]側重于幫助學生詳細理解相應章節的知識點,具有針對性強、目的明確等特點。同時幫助學生樹立起動手編程的信心,逐步提高學生對該章節所涉及算法的理解與動手能力。這是由基礎理論知識到編程實踐的一種遷移,是正遷移。我們以實驗1(基于線性表的學生信息管理)為例,該實驗要求學生重點掌握線性表的定義與線性表的基本操作,如建立、查找、插入和刪除等。其實驗內容詳細地介紹了需要實現的每一個功能。同時,為了使動手能力差、基礎薄弱的學生也能快速地掌握編程技術,教學實驗通常會給出一些代碼不完整的參考程序供他們參考,只需添加需要實驗的線性表功能的代碼即可。這樣,使學生能夠對前面學習過的理論知識的理解更加清晰、深刻,有利于學生扎實地掌握理論知識。可見,這是后面編程實踐所獲得的經驗對前面所學理論知識的一種遷移,是逆遷移。按照泛化理論,我們需要把一種情境中得到的經驗進行“泛化”并運用到另一種情境中去,應該讓學生學會思考泛化。為此,為了滿足編程能力強的學生的需求,實驗要求中除了必做題目外,還安排了選作內容供他們選擇實現,充分調動不同能力的學生的編程積極性。
與教學實驗不同,數據結構課程設計強調的是學生綜合運用知識點與基礎算法,設計出較為復雜的用來解決實際問題的算法。題目要求往往只是提出對課程設計題目的描述,而非一條一條的具體功能,這就要求學生具有一定的分析問題的能力和學習遷移的能力,綜合運用所學知識解決題目中所描述的問題。所以,課程設計強調培養學生綜合運用知識來分析問題、解決問題的能力,這也是泛化理論的體現。
總之,課程設計的目標[5]是使學生能將數據結構課程中所學的基本知識融會貫通,綜合運用所學的知識解決相關的實際問題,能夠把所學知識(包括算法和結構)在計算機上用編程語言加以實現,并且能夠根據實際需求創建自己的數據結構和實現自己的算法。而學習遷移是實現這一目標的有效途徑。只有在掌握好基礎理論知識的基礎上學會遷移,才能更好地解決問題、達成目標。
2.2 課程設計的內容及基本要求
合理安排課程設計的內容才能充分發揮其遷移的功效。從學習遷移的角度來說,合理安排課程設計的內容的標準就是使課程設計內容與課堂教學內容具有一定的關聯性和一致性,這有助于學生在做課程設計的過程中鞏固課堂所學知識,加深對知識的理解,重構教學內容的結構,為知識遷移提供很好的支撐。
課程設計的內容既要遵循基本的授課內容,又要從一定的高度上對基本內容進行抽象與發展,使之能夠真實、準確地反映出由基礎知識到綜合運用能力的遷移過程。因而本文中課程設計的內容主要包括:①設計準備:理解實習任務,明確相關算法,搜集可用資源,熟悉實習環境。②方案設計:完成設計目標、設計路線的確定,并進行模塊設計和任務分工。③代碼編寫:各模塊代碼編寫、模塊測試。④代碼測試:模塊組裝、整體測試。⑤設計報告:完成設計文檔,制作設計報告。
為了保證綜合、靈活運用基礎知識的遷移效果,課程設計有如下基本要求:首先,學生應該獨立思考、獨立完成。在課程設計過程中各任務的設計和調試要求小組獨立完成,遇到問題可以討論,但不可以拷貝。其次,要做好上機準備。每次上機前,要事先編制好準備調試的程序,認真想好調試步驟和有關環境的設置方法,準備好有關的文件。再次,按照課程設計的具體要求建立功能模塊,每個模塊要求按照以下幾個內容認真完成,包括需求分析、概要設計、詳細設計、調試分析、課程設計總結。最后,課程設計結束后需要對課程設計結果進行檢查和演示,并提交程序源代碼和文檔文件、課程設計報告等內容。
課程設計過程中的編程環節是從程序設計語言課程到數據結構課程的另外一種重要的知識遷移,需要用面向程序或者面向對象的思想來完成數據結構中線性表等基本的結構定義以及操作。本文中課程設計需要重點注意的事項有:①注意備份源文件;②不要輕易刪除代碼,如需要修改,最好用注釋方法來代替刪除;③熟悉常用的調試技巧。
2.3 課程設計題目設計
為了促進學生正遷移學習,教師要科學合理地設計課設的題目,要建立在學生主動、適度、適量、適時且形式多樣化的基礎上, 引導學生綜合利用所學知識和經驗,深入思考分析問題,學以致用。按照形式訓練理論,我們需要通過一定的訓練進而發展學生心的官能,從而將其前面所學知識轉移到其他學習上去。為此,通過教學實驗內容的訓練,我們已經訓練了學生在基礎理論與基礎編程中的能力,這些經驗為先前知識的轉移打下了堅實的基礎。按照泛化理論,我們將在一種情境中得到的經驗進行“泛化”并運用到另一種情境中去,需要讓學生學會思考泛化。為此,與教學實驗的細化要求不同,我們所設計的課程設計題目主要是給出題目要求的概括性描述,之后是一些要求與提示,還會有一些對題目中個別語句的解釋,但不會給出參考的代碼,全憑學生自己的知識組成以及算法設計來完成題目要求。我們從泛化理論出發,2011級數字媒體藝術專業的課程設計共8個題目,其中題目1~7具體給出所做題目的描述,同時為了發揮學生的學習積極性,允許學生自擬題目,給學生一定的自由發揮的空間,但是需要教師對自擬題目的難度以及實驗小組的組成進行一定的把關。
2.4 課程設計成績評定體系
課程設計成績評定體系是對學習遷移理論在課程設計中應用的成果的一個重要體現,因而需要我們更客觀、更公平地評價學生的實習成果。為了避免片面的評價,本文中課程設計將綜合考慮小組成員各自完成的任務與工作態度情況、機房中源代碼系統與PPT的演示與答辯情況、課程設計報告書的質量等,請三位老師分別對上述項目分別打分,最終按照一定的權值進行綜合求和。為了體現編程實踐、報告在課程設計最終目標中的知識遷移效果,規定源代碼演示未通過、未提交報告等情況記為不及格。
3 學習遷移效果展示
學生最終的作品是學習遷移理論應用于課程設計成果的具體體現。課程設計過程中,每個小組對各自的題目進行了深入研究,從基礎知識向深度、廣度上進行探索與綜合,經過團隊協作,完成了各自作品。我們選取了3個具有代表性的作品向大家展示。圖1展示了某小組學生完成的手機通訊錄系統界面,該系統具有大多數其他手機通訊錄系統所不具備的動態常用聯系人標定功能。圖2展示了某小組學生完成的貪吃蛇游戲。該游戲通過MFC設計界面,通過鏈表組織貪吃蛇的結構,完成了貪吃蛇游戲的功能,但沒有處理蛇碰壁的情況。圖3展示了某小組學生完成的電梯模擬系統。該題目是學生自選題目,該系統可以自動模擬電梯的不同運行情況,同時考慮了用戶請求的優先級問題。自選題目使學生充分發揮自己的主觀能動性,更好地將理論知識遷移到綜合設計能力上來。
4 課程設計分析
本次課程設計以學習遷移理論為指導,為了調動學生的積極性,并適合不同學生的風格和能力,這次課程設計共出了7個指定題目供學生選擇,如果學生有自己的想法,也可以自擬題目,充分發揮學生的主觀能動性,同時要求學生以軟件工程的要求來實現這次課程設計,從需求分析到概要設計,再到詳細設計,最終是調試分析。
從學生最終的作品來看,選擇《手機通訊錄功能模擬》的學生比較多,其次是《文章編輯系統》,其他題目選擇的人數較少,《教學計劃編制問題》無人選擇。這主要是因為《手機通訊錄功能模擬》題目與實驗1有很多相似之處,只要對實驗1做合理的改動以及擴充,即可完成手機通訊錄的功能。從學生課題完成情況看,絕大多數學生完成了課程設計的基本功能要求,一部分學生還綜合考慮了用戶界面、程序健壯性等因素,課題完成質量較高。數據結構課程設計是在所學基礎知識之上,對數據結構的深層次應用,既引導學生深入熟悉編程技巧,又加深對課程知識的理解,這體現了學習遷移的過程。實踐證明,這在一定程度上激發了學生的積極性,有效提高了學生的編程能力,使得部分以前不怎么會編程的學生體會到了編程的樂趣。不過,還有一些學生并沒有找到自己編程的方法,對數據結構的基本概念不是很清晰。這一方面與學生自身的編程基礎較為薄弱有關,另一方面也是需要教師在指導過程中進一步加強基礎知識與編程環境之間的聯系,引導學生積極主動掌握學習遷移,并且能夠針對實驗中出現的問題及時進行一些專門講解。實際情況表明,這次課程設計不但使得學生可以充分了解算法設計,而且能使學生了解軟件工程的設計過程,為后續課程的進行提供一個好的開始。同時鍛煉了學生的學習遷移能力,對后續學習是非常有利的。
5 結語
數據結構課程設計是綜合運用所學的數據結構理論知識與實驗實踐能力來增強與提高獨立分析問題、解決問題的有效手段,如何幫助學生快速、準確地理解并掌握課程的理論知識,是課程設計的目的之一。而學習遷移理論正是這樣一種研究先驗知識與后續知識之間轉換關系的理論,這給數據結構課程尤其是課程設計環節帶來了有力的指導。正因為如此,我們將學習遷移理論應用于數據結構課程設計。實驗結果表明,這次課程設計比較成功,取得了較好的效果,基本達到了增強數據結構理論與提高編程能力的目的。
參考文獻:
[1] 嚴蔚敏, 李冬梅, 吳偉民. 數據結構(C語言版)[M]. 北京: 人民郵電出版社, 2011.
[2] 施良方. 學習論[M]. 2版. 北京: 人民教育出版社, 2001.
[3] Ivar Jacobson Grady Booch James Rumbaugh. 統一軟件開發過程[M]. 周伯生, 馮學民, 樊東平, 譯. 北京: 機械工業出版社, 2002.
1 課程的地位與作用
《數據結構》是計算機科學與技術專業的核心專業基礎課程,是計算機程序設計的重要理論和實踐基礎,是計算機理論與技術的重要基石。《數據結構》上承高級語言程序設計,下啟算法分析與設計,是計算機科學與技術人才素質框架中的脊梁骨,對學生能力培養至關重要,向來是計算機本科教學的重中之重。調查表明已畢業的學生通過他們的工作實踐認為《數據結構》是最有用的課程之一,這也從另一方面說明了該課程的重要性。
計算機科學與技術專業的培養目標之一是掌握計算機科學與技術的基本理論、計算機軟/硬件基本知識及應用技術,《數據結構》在培養目標的實現中具有舉足輕重的作用,是理解計算機科學與程序開發技術的關鍵課程。作為一門重要的專業必修課程,《數據結構》課程既是對以往課程的深入和擴展,也是為將來更加深入地學習其他專業課程打下基礎。課程中所學習的排序問題的算法,以及基本的樹、圖等數據結構,是計算機科學的基本功。B+樹等高級數據結構,也是數據庫、操作系統、編譯原理、計算機網絡等后續課程的基礎。《數據結構》是計算機專業考研的統考課程,也是很多大賽(“藍橋杯”、ACM等)必涉及的知識。
《數據結構》與其它課程關系如圖1所示。
圖1 《數據結構》與其它課程關系
《數據結構》在培養目標中的作用如圖2所示。
圖2 《數據結構》在培養目標中的作用
2 課程的教學目標與主要內容
2.1 課程的教學目標
學習本課程后,應達到下列基本要求:
(1)理解數據結構的基本概念;
(2)熟練掌握線性表、棧、隊列、樹、圖等常用數據結構的基本運算的實現及應用;
(3)熟練掌握排序和查找的常用算法及應用;
(4)能夠對算法進行時間復雜度度、空間復雜度的分析;
(5)培養學生分析數據、組織數據的能力,能夠根據實際問題來選擇合適的數據結構,設計有效的算法。
2.2 教材與主要參考資料
教材
耿國華《數據結構(用C語言描述)》,高等教育出版社,2011年
教材選擇的依據:
(1)該教材跟蹤技術發展需要,體系科學,是“十一五”國家級規劃教材。
(2)該教材理論的闡述由淺入深、通俗易懂。
(3)該教材理論結合實際,配有大量的例題、習題與實習題。
主要參考資料
[1]嚴蔚敏,吳偉民《數據結構(C語言版)》,清華大學出版社,2006年
[2]張銘,王騰蛟,趙海燕《數據結構與算法》,高等教育出版社,2008年
[3]朱戰立《數據結構――使用C語言(第4版)》,電子工業出版社,2009年
[4]王曉東《數據結構(C語言版).》電子工業出版社,2007年
[5]西北大學數據結構精品課程網站
http//:/datastr
[6]北大數據結構與算法課程網站
http:///pkujpk/course/sjjg/
[7]洛陽理工學院數據結構精品課程網站
http//:/sjjg
[8]洛陽理工學院數據結構精品資源共享課程網站
http//:/ds
2.3 知識體系
《數據結構》知識體系可分為分為三大塊,如圖3所示。
圖3 《數據結構》知識體系
數據結構課程的基本知識模塊是以數據的邏輯結構為主線,順序介紹線性結構(線性表、棧、隊列、串、數組、廣義表)、樹形結構、圖結構。在介紹每種數據結構時,再討論其存儲結構以及相關的算法。在介紹完基本的數據結構及其存儲結構和相關的算法后,介紹了兩種常用技術:查找和排序。
3 課程教學內容安排
3.1 課程重點、難點
重點:線性表、棧、隊列、二叉樹、圖典型數據結構的邏輯結構、存儲結構和操作的實現方法,各種典型的排序和查找算法思想。
難點:各種數據結構的操作實現和應用
第1章是對數據結構課程的認識,基本概念比較多,概念要講清楚、準確,第一章要通過豐富的例子講解如何分析算法時間復雜度,這是貫穿整門課程的內容,也是本課程的一個難點,第2章是整個課程的重要基礎,要講得十分詳細,為后面的章節打下良好的基礎,第3章的棧與遞歸的實現是本書的一個難點,要通過例子講透,并且在第6章還要進一步地講遞歸到非遞歸的轉換。第四章內容較簡單,而且學生在高級語言程序設計中學習過字符串,因此留給學生自學,也可以培養學生的自學能力。第五章數組和廣義表一般講解即可。第6章的二叉樹要詳細講解,第7章的幾個關于圖的算法較難,要結合例子講解,第8章中的難點是平衡二叉樹的調整和B樹,要通過例子把算法的思想講清楚,使學生能實際操作。第9章要把各種排序的思想、特點講清楚,特別是較難的希爾排序、快速排序、堆排序、基數排序一定要結合實例講解。
3.2 課時分配
表1 總課時:72;理論授課:58,實驗:14
4 課程實踐環節
數據結構是與實踐緊密結合的課程,學生學習的理論必須經過大量的實踐才能更好的掌握,因此必須強化實踐教學。數據結構實踐分兩部分:一部分是隨課程進行的實驗,另一部分是課程結束后為期一周的課程設計。通過合理、有效地設計上機題目,改進實驗考核方式,調動學生的積極性,啟發引導學生掌握基礎理論并能創新應用,增強學生綜合運用有關知識的能力。
實驗內容包括六個實驗項目,分別為:線性表的基本操作(2學時),棧的基本操作(2學時),隊列的基本操作(2學時),二叉樹的建立及遍歷(2學時),圖的遍歷的實現(2學時),宿舍管理查詢系統(4學時)。其中宿舍管理查詢系統實驗為三性實驗。
課程設計是課程結束后進行的很重要的實踐環節,本課程課程設計給出14個題目,這些題目都是綜合性的,學生可任選一題,完成后要寫出課程設計報告。通過課程設計,使學生進一步理解和掌握所學各種基本知識,培養學生綜合運用所學的理論知識和方法獨立分析和解決問題的能力;訓練學生用系統的觀點和軟件開發一般規范進行軟件開發,使學生具備軟件工作者所應具備的科學的工作方法和作風。
學生完成實驗后,不僅要求學生提交高質量的規范的實驗報告,還要引導學生互相交流,開闊視野。好的實驗作業要放到班級公共郵箱里和所有學生共享。
5 課程的建設情況
5.1 課程資源情況
該課程教學文件完備。通過多年的教學,積累了必要的一些輔助教學資料(包括教學參考書、參考課件、聲像、影像等),并且使用效果良好。補充的學習資料有:
(1)教學網站:http:///sjjg/
http:///ds/
(2)搜集了大量探討數據結構理論與算法、介紹學科前沿動態的中、英文學術論文和碩、博論文,對其分類整理后在課程教學網站上提供下載鏈接,以供學生深入研究、學習;
(3)自編《數據結構實驗指導書》;
(4)多媒體電子教案的紙制版和網絡版;
(5)數據結構與課程實驗指導書的紙制版和網絡版;
(6)自編的算法演示器;
(7)Flash課件和Flash算法演示;
(8)圖書館內,國外優秀的經典教材。
5.2 實驗實習條件
所有實驗在計算機系機房進行,機房現有的實驗平臺功能齊全,課程中所涉及的實驗項目均可在平臺上完成。目前課程實驗大綱中所列的實驗開出率達到100%,實驗教學效果良好。
5.3 課程成果
該課程2010年被評為河南省級精品課程,2012河南省級精品資源課程。
6 教學設計
《數據結構》是一門理論與實踐相結合的課程。由于理論的抽象性,學生難以建立起數據結構的相應算法概念,容易產生畏懼和茫然的情緒。因此教學中在積極引導學生、啟發學生,激發學生學習的積極性。教學以課堂講授為主,同時借助網絡教學平臺,拓展課堂講授的相關知識,便于同學自主學習、鞏固課堂所學內容。另外,組織獨立習題課,針對學生作業中出現的典型問題進行深入探討。
在教學中要貫徹“以理論學習為主線,以課程實驗、課程設計為補充”的教學思想。
6.1 精心組織教學內容
分析學生的需求和現實,同時緊緊抓住教學目的,參考相關院校的教材和教學計劃,取長補短,參考考研大綱、軟考大綱,對課程的內容進行嚴格的篩選,刪除一些較深且應用不是很廣泛的內容,對于重點的內容要精講、細講,而對于有些較簡單且與先修課程交叉的內容(如字符串與數組),就粗講,甚至可以留給學生去自學。這樣重點突出,簡潔明了。在課程內容的安排上由淺入深,循序漸進。對每種數據結構都按三個層次來組織教學內容,并且把這三個層次的思想貫穿于數據結構教學的各個環節。第一個層次,基本概念、方法,這是最基本的內容,學生必須掌握,在學生很好地掌握了這個層次的內容后,可進入第二個層次,基本概念、知識的簡單應用,這一層次是對基本概念、知識加深理解,這個層次學生必須達到。第三個層次就是基本概念、方法的深入應用,把所學的知識、方法串起來靈活運用。要達到這個層次,需經過大量的訓練才行。
6.2 實現數據結構課程與其先修和后續課程的無縫銜接
程序設計語言(如C語言)是本課程的一門非常重要的先修課程,數據庫原理、編譯原理、操作系統是該課程的后續課程,這些課程不能各自為政,而要無縫銜接,教這些課程的老師要互相交流,這樣在講程序設計語言時可以有的放矢的把和數據結構聯系緊密的內容預先告知學生,這樣學生就會對相關知識印象深刻,到數據結構課中就很容易用的得心應手。在數據結構課中講到各種后續課程中用到的數據結構時也告訴學生,并且在后續課程中用到相關數據結構時提醒學生這是這種數據結構在本課程中的應用。這樣使學生的知識一脈相承,使學生在學習各門課程時把知識融會貫通。
6.3 精講多練,加強實踐環節,培養學生分析問題解決問題的能力
數據結構既有大量的理論又是實踐性很強的課程,學生要很好地掌握這門課,必須要有一定的理論知識,又要經過大量的上機實踐。因此,針對應用型本科的特點,在教學過程中,即注重理論,又重視實踐,加大上機實踐的力度。實踐由與理論課同時進行的上機實驗和理論課講授完畢后的課程設計兩部分組成。對所學的每一部分內容都要要求學生完成相應的實驗習題。整個實踐過程要結合教學進度與學生的實際情況,制定實踐的內容。每部分的實驗習題必須精心挑選,和上述三個層次對應,分為基礎與驗證型實驗、設計與綜合型實驗,開發與創新型實驗。既要把基本知識掌握好,又要會靈活運用。基礎與驗證型實驗是基本的、較簡單的題目,主要結合課堂理論教學內容展開,學生可以對在課堂上學到的基本算法進行驗證;設計與綜合型實驗是具有挑戰性的較難的新穎有趣的題目,讓學生充分利用所學的理論知識進行相對較復雜的應用設計,培養學生綜合能力;開發與創新型實驗培養學生的創新意識,提高綜合能力和創新實踐能力。
6.4 多樣化的教學方法
6.4.1 啟發式教學
教師主要起引導的作用,激發學生的學習興趣,發揮學生的學習積極性,與學生進行互動,鼓勵學生對教學內容提出問題,師生共同討論,提高教學和學習水平。鼓勵學生多動腦子進行思考,在學習過程中不拘于以往的解法,對同一個問題可以提出不同的解法,深化對問題的理解。另外還要強調學生自己學會對知識的總結、梳理、推演和挖掘。總結是教學中一個非常重要的環節,不可忽視。通過對所學內容的總結、梳理、推演和挖掘,理清內容的內在聯系,使知識條理化、系統化,加強對知識的理解和掌握,培養學生的歸納總結能力和思維創造能力,對所學內容提煉出精華的東西。(下轉第260頁)
(上接第167頁)6.4.2 對比式教學
對同一問題,引導學生從不同的角度去思考,找出多種方法來解決。比如,在解決約瑟夫環問題時,可以采用循環鏈表作存儲結構,或采用線性表的順序存儲結構,也可以采用數組作存儲結構。這種對同一問題尋找不同算法實現的教學方式,有效地開闊了學生的思路,同時通過對不同算法的比較,加深了學生對算法的理解和掌握。
6.4.3案例教學
通過實例引入知識點。比如講最小生成樹可以通過城市間建立通信聯絡網為例引入最小生成樹及其求解算法,再比如講最短路徑可以通過去旅游選擇最短路徑為例引入最短路徑及其求解方法。
6.5 把課程與考研、軟考、相關競賽有機的結合起來
數據結構是計算機專業考研和軟考的必考科目,在教學過程中有意識地把考研和軟考引入教學中,使學生學完本課程后能夠從容應對考研和軟考中的數據結構題目。組織和鼓勵學生參加程序員,高級程序員證書考試,輔導學生參加各種編程競賽比如ACM大賽。
7 考核方法
要加強平時的學習過程管理,不定時地進行一些隨堂的小測試,課堂提問等。考試以學生完成日常作業和實驗環節為必要條件,期末考試采用筆試方式。成績評定由三部分組成:期末考試占總成績的60%,平時成績占總成績的20%,實驗占總成績的20%,綜合考核學生該科成績。
8 結語
《數據結構》對計算機科學與技術專業的學生來說是非常重要的課程,組織好教學,使學生通過該課程的教學,很好地掌握數據結構的相關知識,為今后的學習奠定良好的基礎是非常重要的。
MU Cui-xia
(China Women’s University, Beijing 100101, China)
Abstract:On the basis of analyzing the present status of the practice teaching of data structures in China Women’s University, the teaching reform and adjustment measures for the practical teaching in recent years are introduced. And the key points of future reform are pointed out..
Key words:Data Structures; practice teaching; hierarchical teaching; Micro-Course Video
1 引言
數據結構課程是計算機科學與技術專業的專業基礎課和核心課,也是計算機程序設計的重要理論和實踐基礎,其學習效果直接影響到學生的數據抽象能力和程序設計能力[1]。數據結構實踐課與理論課相輔相成,是學生驗證、掌握和應用數據結構理論的重要途徑[2]。,但是課程特點、學生的整體素質水平和基本程序設計能力等多因素影響了實踐教學進度和效果,進而影響了整個課程的教學效果。
2 數據結構實踐教學現狀
1)首先,要客觀地認識到,不同層次高校的學生整體素質,尤其是學習能力確實存在一定差距。只有坦然地承認差距,才能認真、耐心地了解學生學習過程中的困難和需求,才能坦然地采取一些雖不夠“高大上”,卻符合教學對象實際情況的教學措施,從而實實在在地提高教學質量。
2)數據結構教學是在第3學期,學生在第2學期剛學完C程序設計基礎。但學生在C程序設計基礎課程中主要學習和接觸的是簡單數據類型和單個函數程序,側重于基本語法學習,而對數據結構實踐中大量用到的頭文件、結構體、指針、遞歸、多個函數的定義調用及在主函數里測試等實踐得相對少,理解較淺。因而對于數據結構課程,不少學生覺得上課能聽懂,上機時無從下手或者程序錯誤很多。
3)傳統的數據結構實踐教學形式,教師布置實驗任務,適當指導,學生獨立完成,然后由教師驗收。這種方法的優點是能夠充分發揮學生在算法設計方面的主觀能動性,不足是數據結構設計和程序設計的難度較大,學生可能會感到無從下手,教師進行指導難度較大,實踐進度和效果不好控制[2-3]。
4)教材的選擇上,最初選擇了大部分高校采用的經典教材嚴蔚敏C語言版,也是考慮到考研參考書目需求。在教學過程中,也發現教材不適合我們學生的實際情況,比如類C的算法描述,使得程序設計思想和實踐能力還不太成熟的學生在理解上有困難,在實踐時覺得難以開始[4]。
5)另外,新實施的教學計劃中課時減少也是一大挑戰,需要對理論教學內容和實踐內容進行調整,首先抓好數據結構的基本和重點內容,而不能面面俱到。
3 數據結構實踐教學改革和調整措施
在具體分析數據結構實踐教學現狀的基礎上,可增設C程序課程設計,加強基礎知識實踐要求,調整課程大作業安排,發掘貼近實際案例和知識背后的故事,靈活運用微課等措施,進一步增強學生實踐積極性,提高實踐教學質量。
3.1增設C程序課程設計環節,彌補課程銜接問題
為了進一步提高學生動手編程實踐能力,一定程度上解決因學生基礎薄弱導致的課程銜接問題,可增設兩周共16學時的C程序課程設計。
在數據結構學習中,學生覺得在理論課上算法思想能聽明白,一到上機就感覺無從下手;覺得代碼出錯誤時,調試修改難。這說明三方面有待加強:一是從分析問題到給出解決問題算法步驟的能力,二是從理清算法步驟對應到編寫源代碼的能力,三是程序調試實踐能力。因此,在此課程設計環節中要加強問題分析訓練,根據給出的問題,分析出解決的主要思路,進而給出細化的偽代碼或者流程圖。要加強編碼和調試訓練,學生根據細化流程圖編寫出源代碼,調試測試程序。因此,教學中采取具體改革措施如下:
1)時間和內容安排:在第3學期的前兩周,開展C程序課程設計,數據結構從第3周開始。結合多年來的教學經驗,針對學生上學期C程序設計實踐的薄弱點和數據結構實踐的具體需要,專門編寫了課程設計指導書。為了進一步強化學生編碼規范,指導書中給出了明確的代碼書寫要求和編碼原則,在實踐過程中進行督促并納入考核點。為了讓學生復習和掌握基礎的知識要點,并能靈活運用在實踐案例中,設計了基礎和提高層次的例題和實訓題目。在例題中強調算法分析,采用偽代碼或者流程圖進行算法分析訓練,并給出參考源碼。在掌握例題的基礎上,要求學生獨立完成實訓題目。涉及的知識要點包括輸入輸出、常用數據類型和函數、分支結構和循環結構、數組、函數、結構體、指針以及文件等。然后進行分組合作完成一個綜合課程設計,讓學生從軟件開發的角度開始分析問題、解決問題,教師對開發過程進行適當指導。另外,指導書中給出了兩個完整案例給學生參考,拓展案例由小到大、由?\入深,使設計的功能越來越完善。指導書努力做到幫助學生從低到高的逐步提高編程和動手能力。
2)實踐考核方式:以考核方式引導整個實踐過程。考核總成績由基礎練習(例題和實訓題)和綜合課程設計兩部分組成。根據銜接數據結構課程教學需要以及學生的具體學習基礎情況,為了最大程度調動學生實踐積極性和能動性,基礎練習比例從40%逐步調整到70%,課程設計比例從60%調整到30%;從只有綜合課程設計答辯,調整為當前的基礎練習也進行抽查答辯,答辯內容包括設計思想、代碼分析、結果分析、經驗體會等,進一步突出基礎的重要性。四次共16節課中都明確給出任務清單,并及時了解每次課的任務完成情況,針對具體問題及時集中或者個別指導。考慮到實踐內容較多,基礎練習答辯一般安排在第2和3周,另外由于跟數據結構內容的連貫性,答辯可適當占用前2周數據結構上機時間和課外時間。但是,綜合課程設計的答辯會適當延長到第5周,為了促進分組合作的有效性,每個人對合作都要負責任,采取當天隨機抽取一人負責答辯的方式。另外,下一步計劃嘗試基礎練習采取2人一組,共同討論分析完成,以應對任務多時間短、基礎薄弱學生壓力大等問題。還將設計細化的課程教學效果調查問卷,深入了解學生需求,調整教學內容和方式等。
3.2在數據結構教學中不斷加強基礎知識的上機實踐要求
考慮到學生的實際情況,在課堂教學中主要采取源碼形式來講解各種結構和算法(線性表、棧、隊列、二叉樹、查找、排序等)的實現,基礎實踐就是要求編寫函數代碼實現并在主函數中測試各種數據結構的基本算法,完成后提交源碼即可。為了夯實基礎知識,提高基礎編程能力,不斷調整對基礎知識實踐的要求,加強對基礎知識進行復習的書面作業要求,重要基礎知識點都留書面作業,將書面作業成績計入平時成績,并提高分值比例,這樣可以引導學生重視并加強。然后,將基礎知識的實踐作業提交情況和抽查答辯情況都計入平時成績,并調整分值比例。通過期末考試試卷平均成績能較明顯看到重視基礎的效果。另外,學生學習基礎和能力確實存在差異,明確分層要求哪些是必須掌握的基礎,哪些是可以擴展選做的,也是很有必要的[3-4]。
3.3調整課程大作業的安排和要求,讓不同基礎和能力的同學都能有所收獲[3]
在數據結構教學過程中,會有同學疑問,學了數據結構到底有什么用。雖然概論一章曾經講授過一些實例,但終究不如自己實踐體驗來得深刻。通過課程大作業,利用掌握的基礎知識,實現一個貼近生活的實例,是加深理解和提高能力的有效途徑。利用堆棧實現迷宮游戲,很多同學答辯完后表示很有成就感,但也確實經歷了克服困難的過程,而這一克服困難逐步解決問題的過程,也正是學生能力提高最快的階段。但也不可避免地出現了問題,比如基礎比較弱的同學,完成基礎練習都很吃力,大作業就會覺得太難,最后效果也就不理想。因此,在大作業的難度設置上,首先要考慮大部分同學的能力情況,還可以考慮有適當難度差異的題目供學生選擇。同時,如何避免學生趨向選擇小難度以及考核公平性,這是需要繼續探討的問題[5]。
這幾年教學中,有個思路調整,就是首先夯實基礎、抓好主線,在此基礎上進行拓展。比如,有學生在大作業答辯過程中,能很清晰表達算法思想、分析代碼等,但平時基礎練習卻做得不好,期末考試成績也不理想。因此,課程大作業在總成績中占分比例調整降低。另外,為了滿足基礎好的同學的學習需求,可以適當提供完整的有趣或者貼近生活的擴展案例代碼,進行讀代碼這種形式的學習,也可提供同學間分享交流機會。
3.4小舉措增強學生自信心,提高學習積極性
1)在教學中多從正面引導和肯定,增強學生自信心。如果學生有抵觸或者畏難情緒,肯定會影響學生的學習效果。教師在教學中確實需要正視學生的學習基礎和能力的現實情況,必須承認不同層次學校的學生之間學習基礎和能力差距的存在,才能理直氣壯地安排合適的教學內容和方式方法。作為中華女子學院唯一的工科系,較大比例學生不是第一志愿入學計算機專業。經過一年的學習時間,每位學生對計算機專業了解和接受程度不同,大學二年級更是關鍵的一年。因此,老師在實踐教學過程中更需要細致的情緒關懷,及時了解學生在實踐過程中碰到問題,給予積極回應或幫助。尤其在學生學習困難或者壓力大時,更要理解和尊重,耐心疏解,正面引導,具體指導,多正面肯定每次哪怕小小進步。同時,在教學進度安排上要考慮整體學生情況,抓牢主線夯實基礎為先,并注意教學內容的螺旋式進展,這樣可以一定程度上減小學生心理壓力,進而增強自信心[4]。
2)聯系實際應用,,關注技術背后的故事,激發學生學習興趣。比如,實現了隊列的基本操作之后,帶著學生一起分析和實現醫院就診排隊應用,加深對隊列邏輯結構特點的理解以及數據結構在解決較復雜問題中的應用。實現堆棧的基本操作之后,帶著學生先玩迷宮游戲,再一起分析利用堆棧如何實現走迷宮。在講赫夫曼編碼前,先引入赫夫曼當初發明赫夫曼編碼的背景故事,引起學生的好奇心和求知欲。類似這些小舉措卻可以激發學生的學習興趣。
3)一起?I造分享、合作、互助和積極的學習氛圍。鼓勵學生在實踐過程中多討論,大作業合作完成,遇到困難互相幫助。發現有優化算法的例子,老師及時表揚并讓學生跟大家一起分享討論,從而營造積極的集體學習氛圍。
3.5發揮微課在數據結構實踐教學中作用
互聯網+時代的教育改革,將以學生和學習為中心,創造性地利用信息技術,提高教與學的效率,改善教與學的體驗,更好地滿足個性化的學習需求。“翻轉課堂”模式中,學生在課外通過看視頻講座、閱讀功能增強的電子書等形式,自主規劃學習內容、學習節奏、風格和呈現知識的方式來完成知識的學習。而在課堂上教師答疑解惑,有更多的時間與每個人交流,學生之間也可以討論,可以開展知識運用的實驗實踐等,最大程度地滿足學生的個性化學習需要。微課是實現“翻轉課堂”教學組織形式的一種常用的課件設計方案,它基于學科的核心知識點設計而成,以短小教學視頻為核心的、具有明確教學環節的結構化和微型化在線教學課件。基于微課的翻轉課堂教學模式能更好地做到分層教學、因材施教,而且更有利于學生的個性發展。
分析女院計算機專業學生的具體情況,結合數據結構課程本身的特點,完全實現翻轉課堂難度極大,但是將微課作為傳統課堂的一種延伸和補充,將會更好地滿足學生的學習需求,改善教學效果。在算法設計實踐過程中,最容易發現學生的不同學習能力和需求,也更適宜開展微課應用,也利于教師不斷總結和完善重點和難點的教學方法方式[6-7]。比如稍慢于實踐進度的,有疑問可通過微?n進行回顧,自行安排學習和實踐進度。快于實踐進度的,可通過補充視頻自學來加大實踐力度,拓展學習和實踐內容。
《數據結構》是計算機科學與技術專業的必修課之一,是一門綜合性的專業基礎課和專業核心課程,而且正逐步發展成為眾多理工專業的熱門選修課。通過本課程的學習,能使學生熟練掌握如何合理地組織數據、有效地存儲和處理數據,正確地設計算法以及對算法的分析和評價等知識。它是學習操作系統、編譯原理、數據庫原理等計算機專業核心課程的基礎,掌握好這門課程的內容,是學習計算機其他相關課程的必備條件。因此,該課程在專業建設的地位十分重要。
《數據結構》課程體系不斷發展,傳統的教學內容和教學方法已落后于時代的發展和市場經濟的需要,作為以應用型本科人才培養為目標的高等學校,如何針對計算機科學與技術專業學生就業難的特點,利用有限的教學課時,讓學生接觸到較新的理論和技術,同時提高學生對數據結構理論的掌握能力,并且能利用數據結構理論進行實踐,培養創新能力和自主學習能力,使學生畢業后能盡快適應就業市場的需要,是一個急待解決的問題。
而當前《數據結構》課程的教學存在以下問題:①教學內容跟不上計算機技術的快速發展,教材沒有從理論、抽象和設計三種形態的高度來組織教學內容,理論性強,實踐性弱。②教學方法單一,不能使學生掌握本學科系統分析、解決問題的基本科學方法。③教學手段的落后,只通過PPT講稿向學生講解教學內容。④教學實踐設置側重于單一知識點的訓練,與實際應用脫節。
通過教學改革,以上問題才能得到解決。一方面,使教師教學和教研水平得到提高;另一方面,使學生掌握最新的學科知識及對知識的靈活運用能力及實踐動手能力,為將來的進一步深造打下良好的基礎,所以《數據結構》課程的教學改革勢在必行。
《數據結構》是計算機科學與技術專業的主干課程,遵循應用型本科院校的辦學宗旨,不斷更新課程內容,改進教學方法,加強學生實踐能力和創新能力的培養,從而提高學生素質的教學改革思想,構建課程體系。改革主要分以下幾方面:
一、吸取國外教材的優點,對教學大綱內容進行調整
刪減必要性不大、陳舊過時的內容,如廣義表、多維數組、串的基本內容等,逐步增加了反映學科發展趨勢的新內容,如生物信息計算、各類搜索引擎中常用的數據結構和算法等,還增加許多典型的數據結構的算法與應用,如跳表、優先隊列、B-樹等內容。重新修訂現有的教材和教學大綱,保持教學內容具有先進性、科學性。同時考慮到與其他課程的銜接問題,進行雙語教學,并且申請校級優秀課,以此促進教學改革的進行。
二、教學方法和手段改革上,采用面向問題求解的教學方法
從科研工作或現實生活中的大量實際問題入手,引導學生主動探求答案的積極性。并依托學校的網絡建立《數據結構》教學平臺,提供豐富的《數據結構》教學資源,包括高質量的多媒體課件,算法動態演示系統,授課內容,教案,大綱,參考文獻,疑問解答等等。全方位地為學生提供學習方便,與學生進行網絡互動,學生隨時有問題都可以通過網絡進行求解,從而極大地吸引了學生的學習興趣,激發了學生學習的積極性和主動性。
三、建立高素質教師隊伍
由于《數據結構》技術發展飛速,建立起一支穩定的、高素質的《數據結構》教師及實驗教師隊伍,這也是提高《數據結構》實驗及理論教學質量的關鍵,從多個渠道解決了師資缺乏的問題,從而使教師的理論和實踐操作水平大大提高。
為了提高教師的指導水平以利于進一步的培養學生的實踐動手能力,同時能夠使理論課教師通過對實驗的掌握更好的講授和體會理論課的教學,每隔一段課程組開培訓和研討會,討論課程內容的設置及實驗和課程設計的內容安排問題。課程組所有成員積極提出有效合理的改善方案,使課程的發展穩固進行。無論是主講教師還是實驗教師均在討論中有所提高。同時在講授有關實驗內容時更準確、更有自信,避免了在出現問題時無法解決的尷尬局面,進一步激發學生的學習興趣,培養了學生應用能力,達到了教學要求,而且對其它課程的教學具有深遠的意義。
四、在實踐環節教學方面,以創新能力培養為目標,進行實踐環節的教學改革
詳細分為以下三點:
1.以學生為出發點進行調研選擇合適的實驗項目
從科研和實際問題選題,編寫實驗指導書和課程設計指導書,實驗增設設計型和綜合型的實驗內容,通過實踐培養學生面向問題求解的能力,如:結合ACM認證進行教學,使學生馬上從理論過度到實際應用;講課過程中的理論,課后布置實際問題作業和學期末布置大作業,讓學生利用理論自己解決,編寫程序,完成作業。在選擇實驗內容時重點考慮開設哪些實驗,所開設的實驗中,哪些是驗證性的,哪些是綜合性、設計性的;并且對于計算機專業所開設的實驗項目要有不同的針對性;針對每個實驗確定考核依據和方法以及整個實驗課程的考核評分方法;提高學生對《數據結構》理論的動手實驗能力。使學生通過實驗課程的開設來提高實踐能力,實驗的設置做到了少開一些驗證性的實驗,多開一些設計性的、綜合性的實驗。真正提高了學生的動手能力及技術應用能力。當然,在教學過程中理論課教師與實驗課教師應經常相互溝通、相互協調教學內容。
《數據結構》課通常是56學時以上左右,《數據結構》課程的重要性不言而喻。在理論課內容的設置上,不同專業由于學時不同而有所區別。計算機專業的學生不但要掌握線性表,樹,圖實驗,而且還要開設有關表,樹,圖的綜合設計性實驗;而軟件專業除了掌握上述實驗外,對多維數組等內容也要進行實驗。通過不同性質的實驗設置,催發學生的學習主動性和興趣,有效地利用《數據結構》資源,幫助學生深人理解和掌握《數據結構》的原理和技術,提高了學生實踐和運用數據結構知識的能力,鍛煉了學生獨立分析解決問題的能力,加強了學生學習的協作精神,從而達到了數據結構課程的教學目標。
2.有良好的實驗室條件
除實驗室專門配備的實驗室指導教師外,課程組教師都在實踐環節中進行指導,利用實驗室的環境,加上合理的實驗題目引導學生積極主動地學習,鍛煉學生的動手能力、創新能力及面向問題求解的能力。實驗室有專門的實驗環境,從實驗目的到實驗原理,實驗步驟都可以從實驗環境中得到,有了這些理論基礎,學生就可以在此基礎上順利完成各個實驗項目。實驗中心每天在無課的情況下,全天對學生開放,為學生自主創新提供方便。對不同層次的學生進行不同層次的輔導答疑。實驗成績由程序設計,文檔說明組成,課程設計成績由程序設計、設計作品、報告撰寫和答辯表現四部分組成。
3.采用“理論――實驗――理論總結” 的方法進行實驗內容的講解
傳統計算機課程教學中,理論課與實驗課教師為同一人,《數據結構》課程也不例外,經過多次討論和改革,應設專門的實驗老師,在實驗課上,主講老師和實驗老師同時指導,方便學生提問,有問題及時解決。無論是授課老師還是實驗老師在每次實驗課后都要對實驗內容和對應的理論內容作出總結,經過理論到實驗的總結,授課教師和實驗教師對課程的內容有了更加深刻的認識,對以后的教學和實驗指導有重要意義。
在長期的《數據結構》課程講解中,可以積累豐富的教學經驗,實行理論課與實驗課相剝離的教學方式,并采用“理論-實驗-理論總結”的方法進行教學會起到事半功倍的作用。即理論課教師在做實驗之前先講解一次要做的實驗項目,可能學生會明白50%~60%的內容;然后再安排專門的實驗課教師在做實驗時邊指導邊講解,這樣學生在有了對實驗內容的大致了解之后經實驗課老師的指導再經親自動手去完成,大概就可以理解90%;實驗結束后理論課教師再對實驗中的重點進行總結,對問題加以分析,就可以使學生更好的掌握《數據結構》理論和實驗知識,從而加強了《數據結構》實踐能力的培養。
4.依據實驗過程和書面的《數據結構》實驗基礎知識進行考核
通過實驗過程進行考核,教師重點查看學生對實驗中所出現問題的理解或解釋,鼓勵學生在做每個實驗時開動腦筋獨立解決問題,而不拘泥于查看學生實驗報告的工整性,對解決問題好的可另酌情加分;對于綜合性實驗或創新性實驗,根據學生個人意愿進行分組選題或自選題,重點查看學生如何圍繞實驗目標來解決問題的思路而不過分拘泥于實驗的結果,對完成實驗優秀的學生另酌情加分。在期末考核時,既實現了書面的《數據結構》實驗基礎知識卷面考試,也組織進行專項的實驗設計或模擬應用動手考試,圍繞教學大綱由師生或聘請有關專業人士一起對實驗成果進行分析評定等。
通過改革,對調動學生的積極性、培養學生的綜合素質、創新能力、創新意識以及擴大就業機會具有重要的意義,為他們將來進入社會打下良好的基礎。《數據結構》課程實踐操作能力培養模式的構建,對于普通工科院校尤其是工程類專業提高學生的綜合素質和能力,具有一定的參考價值和可借鑒的經驗。同時也提高了教師的理論水平、業務素質和科研能力。這種教學方式和方法是一種頗有成效的教學改革。
參考文獻:
[1]馬艷芳,姜樺.《數據結構》課程教學方法的探討[J].科技信息.2009
【摘要】數據結構是高職院校計算機專業中一門專業基礎課程和核心課程,本文關注了當前《數據結構》課程教學的現狀,總結該課程教學中存在的一些不足,并提出了一些見解。
關鍵詞 數據結構;算法;程序設計
1 《數據結構》課程的作用及意義
1968年美國唐納德·克努特(Donald Ervin Knuth)教授開創了數據結構的最初體系,他所著的《計算機程序設計藝術》第一卷《基本算法》是第一本較系統地闡述數據的邏輯結構和存儲結構及其操作的著作,是《數據結構》的經典之作。隨后,數據結構作為一門獨立的課程開始進入大學課堂。
數據結構課程主要是研究非數值計算的程序設計問題中所出現的計算機操作對象以及它們之間的關系和操作的學科。主要內容包括數據的邏輯結構,數據的物理存儲結構和對數據的操作(或算法)。通常,算法的設計取決于數據的邏輯結構,算法的實現取決于數據的物理存儲結構。數據結構是通過對數據的抽象與研究,幫助我們把生活中具體的事物抽象出數學模型,從而幫助我們寫出“好”的算法。
數據結構課程與數學、計算機硬件和軟件有十分密切的關系,它是介于數學、計算機硬件和計算機軟件之間的一門計算機專業的核心課程。伴隨計算機應用領域的擴大和軟、硬件的發展,非數值計算性問題使得人們越來越重視數據結構,所有的計算機系統軟件和應用軟件的設計、開發都要用到各種類型的數據結構,已成為高級程序設計語言、操作系統、編譯原理、數據庫、人工智能、圖視學等課程的基礎。同時,數據結構技術也廣泛應用于信息科學、系統工程、應用數學以及各種工程技術領域。《數據結構》的學習越來越被人們所重視,成為構建計算機類專業群的重要課程。目前,這門課程不僅在本科段開設,同時也是高職高專院校計算機相關專業開設的主要課程之一,許多非計算機專業的理工專業也都將它作為必修課程或熱門選修課。
學習數據結構的目的是使學生在軟件開發的過程中能夠正確、合理地選擇數據的存儲結構,有效地設計算法,從而提高軟件整體質量,既可以為后續課程的學習以及軟件設計水平的提高打下良好的基礎,也可以培養學生的分析與解決問題能力,提高學生的思維能力和程序設計能力,進而促進學生的綜合應用能力和專業素質的提高。
2 《數據結構》課程教學現狀
《數據結構》課程具有概念抽象、理論性強、邏輯性強、難度大等特點,它涉及到不同的數據邏輯結構和存儲結構,以及相應結構上的算法,因而總被認為是一門深奧、抽象的課程,一門理論性很強、和實踐相脫節的課程。學完后不能形成一個完整的知識體系,學生為了考試而學習,而在程序設計的能力上不能得到提高,分析原因主要有以下幾點:
2.1 教學目的不夠明確
《數據結構》課程本來是以在程序設計過程中總結而得到的數據組織和操作的體驗和認識,用于程序設計的指導工作,而當下的教學很大程度上只要求掌握數據結構的幾種基本類型和基本操作,期望通過基本數據類型的掌握能夠用于指導實際程序設計。這就使得教學過程偏重理論而忽略了本課程的根本目的和意義,導致學生對學習這門課程的作用不夠明確。從而使學生感覺課程內容抽象、算法復雜、實用性不強。
因此,學生的學習目的主要變成是為了應付考試,只注重課本上的理論內容,而不去考慮在具體程序設計中如何去使用《數據結構》基本理論來設計和解決具體的問題。在課程設計中,學生只是為完成編程去苦苦思索,而根本就想不到如何去進行數據的有效組織和實現數據的基本操作。很難想象不帶問題去學習一門課程,會有很高的學習積極性。
2.2 教學內容不盡合理
學習《數據結構》課程的最終目的是為了使學生獲得求解問題的能力,就是從實際問題中抽象出數學模型,選擇合適計算機表示的數據結構,再把解決問題的算法程序化,這是一個復雜抽象思維的過程,是一項創造性的智力勞動。但從目前的教學內容來看,強調的是數據結構的各個模型內容,每個模型只是說明模型的結構和模型的計算機實現,在理論描述上力求做到盡善盡美,從內容安排上,各個模型之間表現為相對獨立的關系,使得學生在學習過程中不能將課程的內容聯貫在一起而形成一個整體,更就談不上思維訓練、分析和解決問題能力的提高了。
而課程安排的實驗環節,通常是對所講述的內容的偽代碼翻譯成高級語言進行調試,或者是仿造例子依葫蘆畫瓢地來解決一個簡單的問題。沒有通過具體應用教會學生解決問題的思路、算法思想和數據結構的使用,在實驗中也只能停留在完成課本內容,而對實際問題則是一籌莫展。
2.3 教學方式不夠新穎
計算機技術日新月異,程序設計的思想也在不斷發展。程序設計方法已從面向過程的設計方法發展到面向對象的程序設計方法。然而目前大部分的數據結構教學方式還是停留在面向過程的設計思路上,所使用的教材也大致類似,教師按照課本的思維方法傳授知識,學生被當成聽眾。這種教學思維嚴重落后技術發展的的現象制約了教學效果的提高。
教學手段比較單一,依然主要是老師講,學生聽的狀況。學生接受的知識局限于教材和老師授課的內容,學生的認知水平被壓制,出現能力強的學生不滿足,能力弱的學生比較吃力的現象。這種單向的教學方式,不利于《數據結構》課程的學習,對鍛煉學生創造和分析問題的能力也無益處。
2.4 學生素質有所制約
必要的數學知識是學好《數據結構》課程的前提。目前,由于高職學生的基礎較差,特別是數學基礎更加薄弱,這對《數據結構》課程的學習極為不利。另外,《數據結構》課程的教學基本上都是在學過一門或幾門程序設計語言(如C語言)的基礎上進行的。不少學生對這些程序設計語言課程就沒有學好,因此學習《數據結構》課程就覺得困難。再加上學習的積極性不高,學習的目的性不明確,學習習慣不良等,因此學習效果可想而知。
3 方法出路
基于改變上述現狀的思考,可以從以下幾方面著手:
3.1 整合教學內容
首先從教材的選用上,力求教材版本新、質量高,以防止教材內容滯后。教材內容的編排,要以程序設計的基本原理引領數據結構的內容;教材內容的描述,要以程序設計技術發展相對應的手段,如現階段可選擇面向對象的方法描述;其次要及時把反映學科前沿動態的新成果反映在授課內容里,如數據結構的描述上盡量使用面向對象的方法,描述語言盡量選擇目前較為流行的C++、JAVA等語言;再次是教師在授課過程中,對教學內容進行整合,將形似分散的各種數據結構類型通過實例能夠組成一個整體。
同樣的,實驗的內容也應是配合授課內容,對同一項目能夠逐步深入,從低效率的程序設計,隨著數據結構內容的不斷深入,不斷完善程序。體會采用不同的數據組織方式,帶來不同的程序運行的效率。
3.2 改進教學方法
將學生為主體,教師為主導的教學模式始終貫徹于教學的全過程。采取實例式與研討式教學相結合的方式,以項目作為切入點,分組組織學生對項目展開討論,在討論的過程中發現并提出問題,老師參與學生的討論并針對問題講解解決問題所需要的數據結構的知識。這樣學生由被動變主動地學習課程內容,既增加了師生之間的互動,也調動了學生學習的主觀能動性;同時,學生的發現問題,分析問題、解決問題的思維能力也得到提高。
3.3 加強實踐環節
提高學生程序設計的能力是《數據結構》課程的目的之一,實踐環節自然必不可少。而且也只有通過實踐才能體會到數據結構對程序設計的影響。首先對每一部分的理論內容安排實驗內容,既要使學生能夠加深對所學內容的理解和應用,也要通過實驗讓學生逐步提高程序設計的邏輯思維能力,擺脫的單純的為了解決某個問題而編程的粗放方式。其次是要合理安排課程設計的內容。課程設計是對所學內容的一個綜合練習,也是檢驗學生具體應用所學內容的能力。在題目選擇上應考慮學生的知識水平層次,從難度上做到難易結合,由淺入深完成設計內容。關注解決問題中程序設計的過程,規范化程序設計思維。三是剖析講解典型程序設計中數據結構的具體使用過程,以增加學生對數據結構的實際應用的直觀感性認識。
4 結束語
縱觀作者數年來的《數據結構》課程的教學實踐,僅是根據自己的教學經驗和體會,提出了存在的問題,并在實際的教學工作中積極摸索改進方法。經過多年的努力,學生的程序設計能力都得到不同程度的提高,也增強了學生對計算機課程的學習積極性。
參考文獻
[1]張紅霞.數據結構教程與實踐[M].北京理工大學出版社,2006.
中圖分類號:G642 文獻標識碼:A文章編號:1007-9599 (2011) 19-0000-01
"Data Structure" Teaching Reform and Research
Zhang Mingwei
(School of Computer Science&Engineering,Anhui University of Science&Technology,Huainan232001,China)
Abstract:For the course characteristic of"data structure",and combining the prombles which exists in learning this course,the auther introduced the teaching methods and experimental procedure of this course.
Keywords:Data structure;Teaching methods;Practice
一、前言
《數據結構》是計算機專業及相關專業中一門重要的專業基礎課程,它涉及的內容和方法在計算機科學中有許多廣泛的應用,學好這門課為學生今后從事理論研究、應用開發、技術管理工作提供了堅實的理論基礎。數據結構這門課主要研究非數值型數據三方面的問題,一是數據內在邏輯關系,二是數據在計算機內的存儲,三是對數據的運算(操作)以及對運算的分析。這三方面問題是緊密聯系的,對每一種數據結構都從這三方面來進行梳理,這是數據結構教與學的主線,所以說數據結構是形散而神不散。但該課程具有相當的抽象性,對計算機編程的能力要求也較高。筆者通過長期教學實踐不斷總結經驗,為了解決學生學習中現存問題,從教學方法、教學手段上進行改革,從而提高了教學質量。
二、數據結構學習困難分析
首先是這門課較抽象,內容豐富,學習量大。怎樣從現實問題中抽象出三種數據結構即線性結構、樹型結構和圖型結構,怎樣理解非數值型數據的這三種邏輯結構,怎樣使抽象的數據邏輯模型轉化為物理存儲,對應于各種存儲上操作怎樣實現,這些問題對于初學者來說較抽象,涉及的知識點較多,一時之間難于把握這門課的重點,學生學起來感覺晦澀難懂,久而久之就會喪失學習的信心。
其次是這門課程所用的教材大多是基于C的,那么數據結構的前置課C語言的學習就至關重要,C語言是學生開的第一門程序設計課,由于課時的局限和考慮到學生的接受能力,教師在講解指針的時候沒有深入地講解,線性鏈表多局限于簡單介紹或者不講,這就增加了數據結構的教學難度,有的同學理解了某種數據的邏輯結構,也能把邏輯結構映射于物理存儲,但是在講解算法的時候就不明白了,特別是涉及二級指針和結構體的時候。
最后就是教學方法不得當,在教學的過程中以教師為中心,沒有很好的與學生互動,有些老師對“數據結構”知識掌握、理解的好,教授也到位,但在教學的過程中沒有照顧到學生的具體水平和接受能力,只是按教學內容把知識點灌輸給學生,學生的接收效果并不盡如人意,這種教與學分離,學生學習的興趣也不高,感覺越學越難,陷入教與學的惡性循環。
三、教學改革的措施與方案
針對《數據結構》課程的自身特點和以上在教學中存在問題,從教學改革、學生學習和教學實踐方面展開探討。
對于數據結構抽象性強,難于理解的特點,教師可以在講解的時候多注重于每一種數據結構的應用,以實例引出每一種數據結構,這樣不但使同學對這種數據結構的認識形象化,而且提高同學的學習興趣,另外還要與學生互動,及時掌握同學們的接受情況,在講解每一種數據結構時,可以本著提出問題、分析問題、解決問題的思路,例如在講解圖這種數據結構時,以著名的七橋問題引入圖的概念,然后提出怎樣對圖進行存儲,結合前面所學二叉樹的可讓同學回答問題,然后分析由圖的特性,得出圖的兩種存儲結構,問題得以解決。另外由于課時的局限性,也為了提高同學的自學能力,在每次課最后總結完本次課學習內容后,留幾道下一堂課主要解決的問題,供同學們課下預習的時候思考,下一次上課的時候可以直接讓同學回答他對這些問題的理解,老師可以糾正理解不到位或錯誤的地方。這樣對同學們對學過的知識點印象會更深刻一些。
數據結構教程中大多是基于C的,這樣C語言的學習就至關重要,可以適當的加大C語言的授課學時,另外就是盡量提高同學學習的主觀能動性,教師可以把在數據結構中用的較多指針、結構體等的知識點的講解和相關程序放到教師主頁上供同學參考學習,學生有什么問題可以在網上留言,教師在網上及時解答問題,當然這里還是要強調學生學習的興趣,教師要調動學生的非智力因素,教師要多介紹這門課程的作用和學習目標,培養學生的自信心,從就業和未來發展的角度幫學生分析利害關系,督促同學盡最大努力來學習。
一、引言
設計、實現一個復雜或者高級項目的軟件項目,可能需要涉及程序設計語言、數據結構、算法設計與分析、計算機網絡、數據庫等許多課程。而計算機科學技術專業的每一門課程都是從基礎理論入手,復雜、高級項目不適合作為課程的學習案例或者習題。
不少課程選用比較簡單和容易理解的小項目作為例題講解知識點或者作為習題鞏固學生所學知識點。比如約瑟夫程序,在程序設計語言中是鏈表操作習題,而數據結構課程中又作為線性表的習題或者上機題目;圖書館管理程序,可能作為數據結構課程的線性表的課程設計題目,也可能作為數據庫課程范式優化的例題;集合的交集和并集可能作為離散數學課程的習題,也常被選做數據結構課程線性表操作的算法優化例題;網絡蜘蛛常被作為計算機網絡課程的課程設計題目,也常因為其中的典型樹形結構關系被數據結構課程選作綜合性課程設計題目;多優先級作業調度既是操作系統課程的主要研究內容,也是數據結構課程隊列內容的習題。
以往的教學實踐反映,很多學生學完課程之后并沒有達到預期的目的。究其原因,一是對學生動手能力的培養沒有到位,以至于部分同學對課程的學習還停留在“紙上談兵”的階段;二是對學生自主學習能力的培養沒有到位,以至于涉及講授范圍之外的問題學生就不知從何入手。可以采用分層次教學,就是要因材施教,根據大多數學生的情況,正確處理教學中難與易、快與慢、多與少、應知與應會的關系。充分發揮學生學習的主體作用,轉化差生、培養優生,全方位增進教學效果。
目前的教學活動,主要考慮的先后關系,而沒有建立良好的課程的銜接關系。需要研究、整理他們直接的銜接關系。
需要整理本課程案例,考慮與先修課程或者后修課程的關系及所選題目的價值和意義,同時對案例采用層次性分解方法,滿足層次性教學需求。
鑒于計算機專業本科教學課程數量多,本文針對計算機兩大具有緊密關系的核心基礎課程《數據結構》和《程序設計C語言》進行探索,并期望擴展到其他課程。
二、課程的銜接關系
C語言程序設計與數據結構是工科院校計算機專業中開設的兩門重要的專業基礎課。在以往教學中,這兩門課程是相對獨立、分開授課的,因此導致內容脫節,教學效果差。一般C語言程序設計課程只注重C語言的語法體系,因此學習后卻不能用C語言進行程序設計;后者則注重講授抽象的數據關系和算法在計算機中的表示及實現,學生能進行抽象算法的描述,上機實踐應用時卻無從下手。然而,這兩門課程都以培養學生解決實際問題的程序設計能力為共同目標。因此,如何將這兩門課程有機地結合起來,構建C語言與數據結構的新體系,改革教學方法,提高教學質量,成了當前教學改革中亟待解決的問題。
在傳統的教學模式下,C語言程序設計與數據結構這兩門課程分開教學。C語言程序設計的學習主要在語言語法的層次上,數據結構難度較大,注重思維訓練,造成學生不能結合有效結合這兩門課程運用到實際中去。通過不斷探索,認識到這兩門課程有很多內在聯系,如軟件是用一種程序設計語言編寫解決該問題的算法,通過編譯、鏈接成為可執行程序而成,而算法是通過處理輸入數據轉換為輸出的解決方案,因此數據結構和程序設計語言密不可分;再比如數據結構討論的抽象數據關系和算法要用C語言去實現等。
針對差異化的學生現狀,整理課程關系,精巧的設計教學案例和習題實現任務驅動式教學法,對于調動學生學習興趣,先修課程的簡單案例讓學生能夠逐漸獨立實現,有助于學生產生滿足感,增加學習自信心;對于案例的擴展性引導,啟發學生深入思考和逐步掌握自學方法,通過自學后修課程,提出的較難的問題又有助于激發學生參與后修課程學習的積極性。
三、擬解決的主要問題
數據結構與C語言課程的結合方式的探討,針對探討結果設計實際結合方法,并在學生中實踐,選擇最佳結合方式。
數據結構與C語言,每門課程需要有經驗的任課教師結合本課程特點,探討并確定各個案例與各知識點和其他課程關系,針對學生差異性現狀和任務驅動式及層次性教學需求,對選擇的案例采用遞增式設計;確定跨課程案例及相關課程名,涉及的知識點。探討選擇的習題(包括課堂練習題、課后思考題、課后作業、上機實驗題和課程設計題目)于知識點及其他課程的關系,標注習題難度級別,以達到層次性教學目的。
針對這兩門課程的案例和習題,深入探討相互關系,特別是相互的銜接性,C語言課程首先需要講解基本語法知識,幫助初學者建立簡單的程序設計過程思想,但由于教學時間限制,只依靠課內學習和課后作業及上機實驗是不能充分達到熟練運行C語言解決問題,編寫項目程序的目的。
C語言是大一學生首先接觸的程序設計語言,加上許多學生還存在中學時期的一切依賴老師的學習方法和觀念,未能進一步學習并提高程序設計能力,因此在后續課程中,比如數據結構課程中需要在講解數據結構抽象數據類型及解決問題的時候,學生應該嘗試借用C語言編程實現抽象算法。因此,應該結合學生的這個實際情況,進一步細化和分解選擇的案例和習題,讓學生在C語言學習過程中學會應用C語言解決和數據結構簡單問題相關任務,為數據結構課程打下堅實基礎;而數據結構課程中有意識的安排一些案例和習題,讓學生能夠有運用C語言解決簡單問題的能力,并通過數據結構課程的學習和培養,掌握復雜問題的解決方法和更加熟練的應用C語言工具。
四、總結
根據計算機課程關系,設計優化與其他相關課程有關系的案例與習題,一來可以引導學生理解后修課程部分內容,引起學習興趣,二來在一些先修課程已經介紹本課程該知識點的基礎上,提出新的解決方案或者優化方法,更容易激發學生探索問題的好奇心和解決復雜問題的滿足感,加強學生理解課程相互關系和培養計算機創新思維。
以數據結構課程和程序設計語言課程為例整理課程關系,研究和設計教學案例及習題,滿足學生差異化需求和對學習內容的興趣,進行層次性教學,將其經驗和方法最終推廣到計算機本科教學的各課程。
參考文獻:
[1]黃迪明.C語言程序設計(第2版)[M].成都:電子科技大學出版社.
[2]吳躍,李樹全,尚明生.數據結構與算法(第2版)[M].北京:機械工業出版社,2010.
[3]薩師煊.數據庫(第3版)[M].北京高等教育出版社,2000.
中圖分類號:G642文獻標識碼:A文章編號:1009-3044(2007)12-21712-01
Research on the Practice Teaching of Data Structure
CHEN Lan, GU Xiang
(School of Computer Science and Technology, Nantong University, Nantong 226019, China)
Abstract: The data structure is one of the most important core courses in computer science and technology. It is also a difficult course for a student to study. Aimed at the characteristics of data structure, such as strong logic, higher degree abstract etc., problems in practice teaching are set out. And the corresponding solved scheme is also discussed.
Key words: Data structure; Practice teaching; Teaching Method
1 引言
數據結構作為計算機學科中一門核心專業課程,綜合了數學、計算機程序設計、軟件開發等課程的眾多知識,該課程為理解、應用和開發計算機應用程序提供了技術和方法支持,是計算機軟件開發的基礎。實踐教學對于數據結構這門課程,有著十分突出的意義和價值。只有在實踐的過程中,才能使學生的編程能力得到切實鍛煉,讓他們在不斷的練習與嘗試中,把理論運用于實踐,設計編寫出結構清晰明了、可讀性強、高質量、高效率的計算機程序。最終使學生在用計算機解決實際問題時能有效地組織、存儲和處理數據,為后續課程打下良好的理論基礎和實踐基礎。然而,在實際教學中,學生對該門課程的掌握并不理想,實踐環節不到位是其中一個重要的原因。
2 實踐教學中的問題
分析起來,在課程實踐教學中的問題可以歸納為教材、教師教學方法和學生這三個方面。
2.1 教材方面的問題
數據結構實踐教學的教材較少,現有的一些實驗教材所設計選取的實驗題目難度較大,不適合學生使用。因為對于大多數剛剛學過一門程序設計語言的學生來說,將教材中用偽碼書寫的算法轉換成完整無錯的可以運行的程序代碼,都是一件相當困難的事情,更不用說自己設計數據結構和算法去解決實際問題了。因此上機實驗的失敗便比比皆是,幾次實驗課下來,學生就會對這門課程的學習失去了興趣和信心,從而嚴重影響了教學效果。
2.2 教師的教學方法
一些教師在教學過程中,由于各種主客觀原因,往往會高估學生的高級語言程序設計的基礎。在大多數高等學校的教學計劃中,學生一般是在學完C語言(C++語言)后的學期里接著學習數據結構的,他們的語言基礎并不牢靠。倘若僅按照教材而不顧及學生的現實水平,只會使學生越學越枯燥。
另外由于高校擴招,學生規模很大,一個教師同時上四個班(120人左右)的課是很常見的事情,這也使得實驗課中教師指導作用弱化,學生遇到問題不能及時得到解決。實踐教學的效果便也受到直接影響。
2.3 學生方面的問題
學生在學習數據結構時,先修課程――程序設計語言的基礎相對薄弱。對C(C++)語言中的難點,如結構體(類)、指針、函數(方法)等等內容,理解不透徹,掌握不充分。而這些內容恰恰是數據結構的基礎。
其次,學生的編程能力與經驗不足。多數學生僅僅學習過一門程序設計語言,并且也沒有很多的實際編寫程序的機會。他們沒有能夠很好的理解、掌握程序設計的方法和理論。
再有,學習上的困難導致學習熱情的缺乏。數據結構這門課程理論性強,內容枯燥,不大好學。學生學了不知道有什么用、怎么用。這樣,學習時間越久,越覺得辛苦,逐漸磨滅了學習興趣。
3 數據結構實踐教學題目的設計要點
針對上面所提出的問題,在現有條件下,只有通過精心設計、選取實踐教學題目,編寫能夠針對所教學生特點、適合他們自學、使用的實驗指導講義,才能在一定程度上彌補教材、教師教學和學生學習三個方面的缺陷,提高數據結構的教學效果。
我們通過實際教學的不斷嘗試,逐步總結了在設計實踐教學題目時應該注意的幾個要點,簡要說明如下:
3.1 選擇典型算法,做到以點帶面
在選擇實踐教學題目時,應該盡量選擇一些典型算法。這些典型算法應該具有一定的代表性,能夠系統的體現某個數據結構的基本特征;難度應該適中,能被絕大多數學生理解和掌握;還要有一定的綜合性,具備一定的理論深度,通過算法的實現,不僅能幫助學生更好的學習和掌握數據結構,還能提高學生編寫程序的水平。表1中,給出了對應于某種數據結構的一些可以選用的典型算法。
表1 數據結構課程中的典型算法
3.2 注重示例程序,起好示范作用
把實驗中每種數據結構的第一個算法的源程序提供給學生,使得他們能對該種數據結構的實現有更好的理解,同時還有一個可以參考模仿的范本。實踐表明,這樣做能夠極大地提高程序的成功率,增強學生的學習信心,提高了實驗效率。
3.3 與現實相結合,提高學生學習興趣
在設計實驗題目時,應力求與相關課程、實際生活相聯系。把理論和實際聯系起來,使得實驗題目生動、接近學習和生活實際,學生容易接受和理解,容易調動學習積極性。
比如消防武警選址實例:給定5個縣之間的交通網,現要在5個縣中選擇一個縣建一個消防武警中隊,使得離消防隊最遠的縣到消防隊之間的路程最短。問這個消防隊應建在哪個縣?實際上,這個問題就是從5個縣中選出一個縣,使得它到其他4個縣的最短距離的最大值最小,而問題的關鍵就是頂點與頂點之間的最短路徑問題。解決該問題的經典算法是弗洛伊德算法。
3.4 與學生實際水平相結合,設計不同層次的實驗題目
在設計實驗的過程之中,需要考慮學生的專業水平以及編程功底。由于不同的人對新知識的接受能力和認知能力存在差異,所以不可能用一兩個實驗就要學生們在對知識的了解程度上達到相同的層次。一個有效的辦法是,在一個實驗題目中,提出不同層次的任務要求,難度由低到高。這樣可以充分的調動所有同學的積極性,使得不同層次的學生可以在各自的層次上進行思考,并獲得收獲,提高學生的學習興趣并增強自己對學習這門課程的信心。
例如在堆棧這一實驗中,按照難易程度從低到高,可以設計出堆棧的實現(構建堆棧、入棧操作、出棧操作)、使用堆棧模擬停車場、使用堆棧模擬鐵路調度站、算術表達式求值等四個難度不同的題目,供學生選用。
3.5 設計綜合實驗(課程設計),提高學生對所學知識的靈活掌握程度
綜合實驗的設計是將書本中多個知識點整合在一個實驗中,是對學生能力水平上的一種較高層次上的要求。學生在課程設計中,綜合的運用自己所學過的基礎知識,使用軟件工程的方法指導和要求整個實驗過程。在整個過程中,學生可以以兩到三個人為一個開發小組共同進行實驗。使得學生在相互學習相互促進中進一步掌握數據結構的應用,提高學生分析問題,組織數據,組織編程解決實際問題的能力。并在次過程中可以提高團隊意思,培養協作精神。當然,在題目的選取上,也可以設計難度層次不同的實驗,以適合不同需要的小組或個人。例如迷宮問題,教學計劃,校園導游咨詢等。
4 數據結構實踐教學的實施
實踐教學題目設計完成以后,教學的組織實施是下一個重要的環節。在實施的各個階段,都必須向學生提出明確的要求,并進行必要的檢查。否則,依然會達不到預期的效果。
4.1 實驗預習
學生在上機實驗時臨時現編代碼是常見的事情。為此,在預習階段,就應該要求學生根據自己的情況,選擇一個適合的題目,并對完成此題目的算法進行較為透徹的研究:設計出算法所必需的數據結構,給出具體的函數聲明(如果是C++,則應給出類的定義)及函數實現流程。對于掌握得較差的學生,還應要求他們事先編寫好源程序。所有這些內容構成預習報告。
在實驗開始時,教師應該對學生的預習情況進行檢查,對于沒有很好完成實驗預習的學生,要直接取消其實驗資格,實驗成績記零。課程開始時,學生可能會不適應,但當養成習慣以后,他們就會深刻體會到預習工作的重要。
為了更好的調動學生的積極性,作為鼓勵,前次實驗完成得較好的學生,可以不作預習檢查。
4.2 實驗實施
教師在實驗進行中,所扮演的角色不應當是程序調試者,而應當是引導者。當學生在代碼執行中發生錯誤而向教師求助時,教師只需指出可能導致此問題的原因即可,更多的工作應該留給學生自己去完成。這樣一方面可以節約教師的時間,從而能為更多的學生解決問題;另一方面也可以解除學生的依賴思想,鍛煉他們的代碼調試能力。
教師在實驗進行中的另一項重要工作,是觀察并提示學生的代碼書寫是否規范。從某種意義上說,代碼的規范比編程技巧更為重要。在課程前期,這將是教師在指導實驗時工作量最大的工作。
4.3 實驗報告
實驗完成后,學生必須撰寫實驗報告,實驗報告應附預習報告。實驗報告一般包含的內容是[放參考文獻]:實驗題目、實驗目的、實驗任務和要求、實驗步驟(源程序)、實驗總結。
特別要強調的是實驗總結,必須討論在實驗中遇到的問題以及是如何解決的,即使是語法錯誤也應該報告。這樣可以促使學生對錯誤不斷反思,從而逐步提高編程能力。可以明確告訴學生,這部分將是成績評定時最重要的考察因素。
4.4 成績評定
成績評定以鼓勵為主,只要學生確實付出了努力(這從實驗報告的實驗總結中可以看出),那就可以適當給以高分。另一個要考慮的因素是學生所選題目的難度,但這不應該是主要的。
5 結束語
文中所討論的是我們在數據結構課程實踐教學中的一些成功經驗的總結。實踐表明,這些經驗對于提高實踐教學的效果是有益的,這也進一步促進了課程的理論教學。當然,這些經驗還是初步的和粗淺的,還需要在實際教學中作進一步的研究。
參考文獻:
[1] 嚴蔚敏,吳偉民. 數據結構(C語言版)[M]. 北京:清華大學出版社,1997.
[2] 陳宇文. 注重源程序在《數據結構》課程中的重要性[J]. 高教論壇,2004.(1):73-75.
中圖分類號:G642 文獻標識碼:B
CDIO原本是工程教育領域內的一個概念,它是構思(Conceive)、設計(Design)、實現(Implement)、運作(Operate)的集合體,是2001年由瑞典查爾姆斯技術學院、瑞典林克平大學、美國麻省理工學院、瑞典皇家技術學院合作開發的一個新型工程教育平臺。它以工程項目(包括產品、生產流程和系統)從研發到運行的生命周期為整體,讓學生主動地參與到理論到實踐的轉化過程中來,是一種倡導“做中學”和“基于項目的教育和學習”的新型教學模式。CDIO既注重抽象理論知識的“教”和“學”,又強調了教學過程中“做”的重要意義;既增強了學生的動手能力,又培養了學生的創新意識、項目設計的能力和團隊協作的精神。CDIO教學模式應用于我國的一些高校,已經取得了初步成果。比如清華大學工業工程系的顧學雍教授就曾創造性地將CDIO方法運用于“數據結構”和“數據庫原理”兩門課中,取得了突出的成效。筆者也在本院計算機專業“數據結構”課程的建設過程中遵循CDIO原則,進行了一系列教學實踐與探索。
1CDIO能力培養大綱
CDIO模式以構思、設計、實現、運作為主線,將基礎知識、個人能力、團隊協作與社會環境融合在一起,注重理論與實踐的結合。圖1為CDIO大綱的主要內容。
大學計算機專業也是實踐性很強的學科專業,借鑒CDIO大綱對工程師的培養目標,我們對于專業性人才的培養也應該首先立足于加強學生對專業基礎性知識的學習和基本技能的掌握,倡導產學研相結合,在實踐中培養學生的專業技能與合作溝通的能力,最終讓畢業生滿足企業對人才的需求并服務于社會。
2“數據結構”課程的重要性
“數據結構”是整個計算機學科體系的一門核心課程,也是計算機相關專業的專業必修課。學好這門課程,不僅可以為軟件開發奠定良好的編程基礎,也可以培養學
生良好的編程思想和編程風格。這門課程主要介紹各種離散結構,如表、樹、圖、集合等在計算機內的存儲和處理,以及各種常用算法及其應用。課程除了要求學生有較好的離散數學基礎外,還應至少掌握一門程序設計語言(Pascal、C、C++、Java等)。因為課程既包含抽象的理論,又強調算法的實踐,所以一直以來都被學生認為是最難學的課程之一。
3基于項目的學習
CDIO教育模式要求學生基于工程項目的全生命周期進行學習與實踐,項目最好來源于企業的真實題目或結合教師的科研課題組織和設計,以項目作為基礎知識傳授與基本技能掌握的載體。考慮到“數據結構”課程一般開設在計算機專業大學本科二年級,此時學生剛剛學習了一至兩門程序設計語言,對編程語言的運用還處在初級階段,還沒有經過軟件工程的系統培訓,所以教師在設計項目時,還必須講究方式方法,結合學生的實際情況來組織教學。
3.1課堂講授
課堂講授是貫徹CDIO教學大綱,學習基礎知識的主要方法,要求教師對“數據結構”課程中所有的知識點、重點及難點有很好的設計。在講授教學內容時,教師可以適當地引用實際項目,引導學生體會產品從構思、設計、實施到運作的完整過程。
比如在講解樹結構時,引入ERP企業資源計劃系統中的BOM(Bill of Material)物料清單的實例。BOM是一種描述配套件結構的零件表,包括所有子件、零件、原材料的清單以及制造一個配件需要的所有物料數量。BOM是制造業信息系統的一個核心部分,在ERP系統的MRP分析、制定生產計劃、采購及銷售控制及生產過程控制等環節都具有重要的作用,設計合理的BOM結構可以取得事半功倍的效果。針對對BOM特點和作用的簡單講授和對樹型結構的分析,教師可以引導學生從實例入手,鍛煉學生從分析實例產品的構成和用戶的實際需求出發,構思并設計合理的數據結構,促進學生對樹型結構的掌握。
3.2課堂討論
課堂討論是課堂講授教學內容的有效補充形式。現代教學理念主張啟發式教學,在適當的時候拋出一個問題,給學生5~10分鐘的自由發言或分組討論時間,效果會更好。比如上一個問題,教師可以在講解BOM的時候直接給出樹型結構的解決方案,但是如果教師在講授了基礎知識和問題背景后,讓學生自行討論設計方案,自由發言或由小組代表提出設想,再由全班討論,經教師總結后給出結論,則可以充分地激發學生的積極性,也讓學生體會了“提出問題―分析問題―解決問題”的過程。在這個過程中,教師要注意對學生的思路加以引導,對學生所提的方案加以鼓勵,幫助學生樹立創新意識,讓他們不墨守成規,學會從多角度思考問題。
3.3課后作業
課后作業是對課堂教學內容的延伸和對課堂教學效果的驗證。在教學時間緊任務重的前提下,科學地設計課后作業可以彌補缺憾,也可以促進學生主動學習。比如可以針對具體項目,讓學生通過上網查閱資料補充項目背景知識,也可以讓學生查找相關問題的其他解決方案,或對課堂提出的算法進行代碼實現。教師可以從這些內容中挑選出精彩的部分,安排合適的時間,在課堂上由學生進行匯報講演,交流心得。這種形式既對課堂教授有很好的補充,又有效杜絕了學生的作業抄襲現象。
4通過課程實踐體會“做中學”
CDIO理念是總結了歐美20多年來工程教育改革的產物,目的是能夠培養出全面發展的工程師,他們不僅要具有扎實的專業知識和熟練的專業技能,理解構思―設計―實施―運行一個完整系統的復雜性,還要能夠在一個現代的、合作的環境中讓這個產品升值。CDIO強調學生的工程能力不是單純的理論知識或直觀技能,而是兩者的綜合運用,也就是所謂的“做中學”。
“數據結構”課程的實踐環節由兩部分組成:課內上機和課程設計。課內上機一般有2~4個學時,以驗證性實驗為主,側重學生對每章知識點的上機驗證和內容的延伸;課程設計時間相對較長,一般有20~40個學時不等,學生可以在這個過程中完整地體驗一個項目的設計和實施。
4.1項目的選擇
課程實踐的項目最好來自企業一線,或者是一些具有實際意義的題目,考慮到學生知識的局限性,教師可以對這些題目稍作改動。比如“北京市城市軌道交通咨詢模擬系統”要求參考北京地鐵運營線路圖,見圖2,以無向圖的形式描述城市軌道交通狀況,給出從甲地到乙地的最優換乘方案。此項目來源于實際問題,學生很容易理解題目的要求和最終的結果。由于實際地鐵運行線路中站點比較多,所以布置題目時可以適當簡化,比如減少站點數目(但要保留換乘站),忽略兩站之間的運行時間和每站的停靠時間,以途經的站數來作為最優路徑的計算依據等。
在課程設計階段,學生首先選擇自己感興趣的項目,然后從問題需求入手,設計合理的數據結構,明確輸入和輸出信息,進行模塊設計,最后進行詳細代碼的編寫和模塊測試。整個過程始終遵循CDIO“做中學”的原則,讓學生在實際動手的過程中不斷增強解決實際問題的能力。部分能力較強的同學還在原題的基礎上進行功能擴展,形成了一個帶有友好人機界面的可視化軟件,既提高了學生的學習興趣,又激發了學生的創造力。
4.2分工與合作
《禮記•學記》上講:“獨學而無友,則孤陋而寡聞”。由于CDIO強調的項目具有完整性和綜合性,一個學生很難在短時間內完成,因此可以考慮采用分組的形式,由多名學生組成小組,由組長負責安排整個項目的進度。這種團隊的形式最能鍛煉學生的協作精神、溝通能力和領導能力。李開復教授在給中國學生的信中這樣寫道:“像Windows 2000這樣的產品研發,有超過3000名開發工程
師和測試人員參與,寫出了5000萬行代碼。沒有高度統一的團隊精神,沒有全部參與者的默契與分工合作,這項工程是根本不可能完成的。”CDIO模式就是要讓學生在不斷的碰撞和溝通中學會相互支持,共同討論,共同進步。
4.3項目考核
課程設計結束時,教師要對項目的完成情況進行考核,CDIO教學模式的標準之一就是要對學生個體進行評估驗收。考核的形式可以是多樣的,比如采用“答辯”的方式,由學生演示程序的運行結果,然后針對自己在小組
中的分工情況,詳細介紹具體算法和遇到的問題,最后提交項目總結報告。較之傳統的考試,這種考核方式更加強調學生的表達能力和科技文章的撰寫能力,既分享了學習經驗,又拓寬了知識面。教師在考核過程中要起到主導作用,要站在企業、用戶或用人單位的角度來設立問題,將學生置于一個大的環境中,使學生具備業界所需要的素質和能力。
總之,通過將CDIO教學模式運用于“數據結構”課程,倡導“做中學”和“基于項目的教育和學習”,使學生在掌握基本專業知識和技能的同時,既提高了學習興趣,又增強了從業所要求的各項素質,對學生畢業走上社會的可持續發展起到積極的作用。
參考文獻:
中圖分類號:TP311.12-4
數據結構是計算機專業中介于數學、計算機硬件和計算機軟件三者之間的一門綜合性的專業基礎課。數據結構的內容不僅是程序設計進行總結和提高,而且是編譯原理、操作系統、數據庫系統等后續專業課提供基礎,具有承上啟下的重要作用。本文針對數據結構的課程特點和教學過程中存在的問題,探討教學實踐中如何針對產生的問題進行教學改革與實踐,以提高教學質量和學生學習效果。
1 數據結構教學中存在的問題與現狀
1.1 缺乏對數據結構認識。正確深刻地理解數據結構的涵義、作用以及數據結構課程內容體系是學習好數據結構的前提和基礎。但是,一般情況學生只是大概了解了數據結構的概念,在缺乏正確認識和深刻的理解的情況下,就開始直接學習課程內容了,認為具體的內容才是最重要的。對于為什么需要數據結構,課程中包括哪些內容,從哪些角度和方面對數據結構進行講解,原因是什么等等,都沒有認真研究和體會,導致數據結構的學習效果和教學效果都不甚理想。如果這些問題都理解了,就從整體上認識了數據結構,那么學生學習,教師教授都會有的放矢。
1.2 C語言知識儲備與數據結構的要求相脫節。數據結構涉及指針、結構體、類型定義、函數調用等相關知識,所以要求學生對這些內容的掌握程度比較高高。但是在C語言教學中,一方面,這些內容都是在課程的后半部分且學習起來難度較大,學生學習有畏難情緒,往往對這些內容掌握不牢;另一方面,教師在授課過程中,對不同專業區別度不大,很少特別為后續課程的需要專門對相關知識做重點講授,這樣就影響后續課程的學習。最終導致學生掌握的C語言知識不能滿足學習數據結構課程的要求。
1.3 缺乏獨立分析解決問題的能力。在課堂講課過程中,一般以教師講授課程內容為主導,在講解課程內容時,學生貌似都學會了,和老師的互動也非常積極,對老師提出的啟發式問題都能正確回答,認為課堂上老師所講的實例也都很簡單。但是,若在沒有老師的引領的情況下,讓學生單獨分析、解決一個例題,多數學生就很難掌握方向,不知從哪做起,缺乏獨立分析問題、解決問題的能力。
1.4 動手編程能力不強。相對于理論知識的學習,學生在上機實踐中遇到的問題更大。學生的程序設計基礎薄弱,缺乏足夠的系統訓練,對調試程序的方法不夠熟練,程序結構設置不合理,代碼編寫可讀性差。即使一些學生看懂了教材上的算法,將其轉換成能運行的C語言程序,也存在一定的難度。這些都對學生的學習效果都有較大的影響,甚至會削減學習的積極性,進而產生畏難和厭學情緒,產生惡性循環,有些學生干脆不學了。數據結構中教學中出現的這些問題,嚴重影響了數據結構課程的教與學,探討數據結構課程教學方法,勢在必行。
2 教學探討與實施
2.1 正確認識“數據結構”。認識數據結構課程不僅僅讓學生了解其在專業中的地位和重要性,更要理解數據結構課程本身的涵義和作用。所以在課程開始的時候開課之初,對課程緒論部分的講解不應吝嗇時間,要把這部門內容講清楚講透徹。數據結構是一門研究非數值計算機的程序設計問題中計算機的操作對象以及他們之間關系的操作等的學科。從這個定義中,我們從中抽取對象、關系、操作等關鍵詞,再以設計實現一個家族家譜這樣一個比較形象的例子進行講解,進而引出如何存儲表示數據對象及關系和能對這個家族的族譜做哪些操作,這樣就引入了邏輯結構和物理結構的知識以及對數據結構建立相應操作的問題。這樣學生就基本能建立數據對象、數據關系、基本操作三元組的概念,并能深刻理解邏輯結構與物理結構的概念和關系。從總體上認識、把握、建立數據結構的整體概念是學習好數據結構的基礎。
2.2 針對數據結構課程需要制定C語言課程教學大綱。因為不同專業學習C語言的要求不同,所以根據教學計劃制定科學合理的數據結構前導課程的教學大綱、考試大綱能有效解決前導課程儲備知識不足的情況。根據教學計劃安排有數據結構課程的專業,其C語言課程與其他專業的課程不同,是單獨列出的。其教學大綱、考試大綱等教學文件由講授C語言和數據結構的老師根據專業特點及后續課程的需要共同研究制定,并按學校的規定定期修訂。教學中只要按照制定好的教學大綱等相關文件規定執行,就能滿足數據結構課程的要求。這樣就從源頭上解決了C語言儲備知識不足的問題,避免了以往數據結構課程教師需要與C語言課程教師溝通重點講解哪些內容,但因只是個人行為而沒有學校相關文件規定的限制,所以不能達到較好的效果。通過制定專門的教學大綱,也無需要求數據結構與C語言課程采用“一師制”,避免了人員變動等其他因素帶來的不確定性影響。
2.3 構建整體教學內容體系。數據結構課程內容抽象涉及很多概念和技術,學生在學習的課程過程中總是感到知識沒有連貫性與整體性,難以對所學內容融會貫通,對課程的知識缺少一個整體的把握。所以建立整體的知識框架體系對數據結構的教學非常重要。數據結構課程的內容主要圍繞數據的邏輯結構、數據在計算機中存儲的物理結構以及對數據操作算法的實現及評價展開。數據的邏輯結構根據數據對象之間關系的不同特性,分為線性結構(一對一)、樹形結構(一對多)、圖結構(多對多);數據的物理存儲結構按照數據對象之間關系的表示方法分為順序存儲結構和非順序存儲結構。在教學中引入抽象數據類型(ADT)觀點介紹數據結構技術,采用算法時空分析來判斷算法的好壞。在講授每一個數據結構時,以抽象數據類型為主線,按照抽象數據類型的定義—抽象數據類型的設計—抽象數據類型的實現三個層次展開來討論,滲透并應用模塊化的思想,在此基礎上介紹數據結構的具體應用。在教學過程中教師會反復強調課程的篇章結構及其關系,數據結構課程的章、節、目,是課程的“骨架”,反應了課程內容的邏輯關系,以此加強學生對課程的內容體系的理解和掌握。
2.4 課堂上適當進行編程示范教學。教學過程中,我們發現,學生能聽懂老師所講授解題的算法思路,但就是不知道如何用編程語言或算法表達出來。為解決這一問題,在教學中會在課堂上對有代表性的算法進行現場編程演示。課堂上教師先帶著學生先把算法總體思想寫出來,接下來選擇合適的物理存儲結構利用C語言進行編程調試運行。這種方法可以讓學生掌握將解決問題的思路轉變成代碼的全過程,對學生編寫和調試程序起到很好的示范作用。在編程過程中,教師會邊寫代碼邊講解,引導學生積極獻計獻策一起來解決問題。由于現場編程比較耗費課時,對于比較長的程序,一般教師會在課前完成,留下解決問題的關鍵步驟在課堂與學生一起編程實現。通過這個過程學生能深刻理解緒論中算法的設計只取決于將要解決問題的數據對象之間的邏輯結構,而算法的實現則依賴于數據對象及其關系的存儲結構。同時學生也能認識到用類C語言表示的算法與用C語言編寫的程序有哪些不同。有了現場的變成演示,在上機實踐中,學生直接將教材上的算法照抄到計算機內運行的情況大大減少,理解了如何將抽象的數據結構理論應用到實際解決問題當中去。
2.5 任務驅動教學方法的應用。所謂“任務驅動”就是在學習信息技術的過程中,學生在教師的幫助下,緊緊圍繞一個共同的任務活動中心,在強烈的問題動機的驅動下,通過對學習資源的積極主動應用,進行自主探索和互動協作的學習,并在完成既定任務的同時,引導學生產生一種學習實踐活動。“任務驅動”是一種建立在建構主義教學理論基礎上的教學法。它要求任務的目標性和教學情境的創建。使學生帶著真實的任務在探索中學習。在這個過程中,學生還會不斷地獲得成就感,可以更大地激發他們的求知欲望,逐步形成一個感知心智活動的良性循環,從而培養出獨立探索、勇于開拓進取的自學能力。在教學中,我們應用了任務驅動的教學方法并加以改進,達到了較好的教學效果。我們的做法是根據不同的場景“任務”不僅僅是學生的,也是老師的,或者是由老師和學生共同完成的。比如在講解第二章線性表的時候,我們就會根據課程內容,設計完成一個共同的任務:一元多項式的相加。為了完成這個任務師生共同找解決的方法,當然任務的完成需要老師的按既定的方向循序漸進地引導,先講解兩個集合合并到一起的算法,再講解將兩個按值非遞減有序排列的線性表如何合并,一元多項式相加的問題稍加改進就解決了。在完成一些比較大任務的過程中,我們會將其分解成若干個小任務讓學生獨立完成。當然,在教學實踐中也不是所有的內容都可以通過任務驅動的方法實現,不能執行一刀切。授課教師應根據課程內容,學生的能力多方面考慮設計合適的任務。任務太大完不成,容易打消學生的積極性,任務太小不能起到應有的作用。
2.6 系統化實踐教學。為了滿足不同層次學生對實驗題目難度,提升學生對實踐教學的興趣;我們針對不同學生的特點,制定分層次實踐教學的方法。按照實驗的難易程度分為驗證性實驗、設計性實驗、綜合性實驗三個層次。驗證性實驗根據數據結構基礎內容設計,難度較低。目的是讓學生掌握基本數據結構的特點和基本概念,同時掌握基本算法及應用。在上機指導中授課教師將驗證性實驗作為主要的考核內容,只有對基本算法的完全掌握,才能靈活應用。設計性實驗是在驗證性實驗的基礎上增加難度和深度。根據特定的數據結構有針性設計題目,必須使用某種數據結構解決。授課教師會和學生一起分析問題,引導學生如何解決,如何設計數據結構,采用什么樣的算法,但是具體的數據結構及算法編程實現需要學生獨立完成。綜合性實驗一般要求綜合使用多種數據結構解決一個難度較大的現實問題;主要訓練學生綜合運用知識的能力、協作能力和創新能力。由于問題難度較大,我們采取將綜合性實驗安排在課程設計階段。
教學實踐證明,這種重點進行驗證性實驗,適當補充設計性實驗,通過課程設計完成綜合性實驗的分層次的實踐教學體系,符合學生的認知規律和特點,在實踐教學中也取得了較好的教學效果。
3 總結
數據結構課程在計算機專業的課程體系中具有非常重要的作用。本文通過對數據結構課程教學中存在的問題及現狀進行深刻剖析,結合教學經驗有針對性地提出了相應的解決方法,從問題的源頭上避免了這些問題的發生。教學實踐表明,通過在教學中采用以上教學方法,提高了數據結構的教學質量,并取得了良好的教學效果。
參考文獻:
[1]嚴蔚敏,吳偉民.數據結構(C語言版)[M].清華大學出版社,1997.
[2]余建國,劉雙紅.基于任務驅動的協同教學模式在程序設計類課程中的研究與實踐[J].科技信息,2009,27:104,83.