時間:2022-07-11 18:55:59
開篇:寫作不僅是一種記錄,更是一種創造,它讓我們能夠捕捉那些稍縱即逝的靈感,將它們永久地定格在紙上。下面是小編精心整理的12篇數據結構課程設計總結,希望這些內容能成為您創作過程中的良師益友,陪伴您不斷探索和進步。
數據結構是計算機專業的核心課程之一,是計算機軟件技術的基礎,以數據為中心講述問題如何在計算機程序中得以實現。該課程的教學不僅要注重學生對理論知識的理解,更要培養學生能針對具體問題,設計合理的數據結構,對數據進行有效的存儲、操作,并能完成相應的高效算法。課程設計的教學是整個教學環節中非常重要的一環,它彌補了課堂教學中實踐少的缺陷,其教學目標不僅要培養學生縝密的邏輯思維和數據抽象能力,更要培養學生在軟件設計領域科學的思維方式,將算法理論和編程實踐完美結合,能夠在工程實際中靈活應用。因此不斷改進課程設計的教學方法,提高教學質量是培養高素質軟件人才的迫切要求。
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)
Abstract: Data Structure course design is an important professional practice lesson for computer major in university or college. According to the current situation of the low teaching quality for course design, based on the experience in our college, the paper puts forward several steps on improving the teaching quality, and then have been analyzed and discuissed.
Data Structures Practice Teaching Exploration
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進行回顧,自行安排學習和實踐進度。快于實踐進度的,可通過補充視頻自學來加大實踐力度,拓展學習和實踐內容。
另外,本學期選擇了李春葆版的數據結構教程,屬于升級微課版,書中附帶了一些微課,直接掃描二維碼即可看視頻,方便了學生預習和復習。另外總結學生實踐過程的常見問題等需求,自行制作相應微課資源,比如vs2010使用指南微課,常見錯誤調試方法,赫夫曼編碼預習微課等。這樣可以更好地補充和輔助學生的課堂內外的學習與實踐,滿足學生個性化需求。
關鍵詞:數據結構;教學方法;實踐
中圖分類號: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語言的授課學時,另外就是盡量提高同學學習的主觀能動性,教師可以把在數據結構中用的較多指針、結構體等的知識點的講解和相關程序放到教師主頁上供同學參考學習,學生有什么問題可以在網上留言,教師在網上及時解答問題,當然這里還是要強調學生學習的興趣,教師要調動學生的非智力因素,教師要多介紹這門課程的作用和學習目標,培養學生的自信心,從就業和未來發展的角度幫學生分析利害關系,督促同學盡最大努力來學習。
數據結構的實踐課是非常重要的,是課堂教學的必要延伸,是理論學習的戰場,實踐課如果上的好,能起到深化理解理論和靈活解決實際問題目的。在數據結構的實踐課中一般分為實驗部分和課程設計部分。對于實驗部分,特別是開始上實驗的時候,首先要使同學們消除恐懼心理,多給同學們信心和鼓勵,不要覺得課堂教學難,實踐課就更難,另外要多加引導,在實驗課前把用到的知識簡略的串一下,剛開始給同學出的實驗題目要相對簡單些,例如線性表的操作,可以給出程序框架,讓同學把某些算法如求線性表的長度、插入元素等補齊,以后再逐漸加大題目的難度,對于學生參差不齊的狀況,實驗中可以加幾道選做題,以滿足做得快的同學,結合多年教學經驗,如果同學把線性表、棧、隊列部分實驗做的好,二叉樹和圖部分也能做的好,可見好的開始是很重要的。對于課程設計課,由于是綜合練習題目,包括問題分析、總體結構設計、用戶界面設計、程序設計等,可以分組進行,多人合作,這樣同學即可以互相學習,又培養了同學互相協作的能力。總之實踐課是提高學生的實際動手能力、對數據結構的學習興趣的培養和對這門課的扎實掌握是很重要的環節。
關鍵詞:CDIO教學模式;數據結構;項目
中圖分類號: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教學模式運用于“數據結構”課程,倡導“做中學”和“基于項目的教育和學習”,使學生在掌握基本專業知識和技能的同時,既提高了學習興趣,又增強了從業所要求的各項素質,對學生畢業走上社會的可持續發展起到積極的作用。
參考文獻:
[1] 陶勇芳,商存慧.CDIO大綱對高等工科教育創新的啟示[J].中國高教研究,2006(11):81-83.
論文摘要:在建構式教育理論的指導下,以就業需求為目標,針對數據結構教學中教與學目標不明、學習信心和動力不足、編程基礎薄弱等問題,提出建構式的數據結構教學方法,在實際教學中取得較好的教學效果,這些措施也可作為其他計算機專業課程教學的參考。
近年來,在產業界急需大量軟件開發人員的情況下,普通本科院校計算機專業學生的就業率持續走低。網絡、報紙等媒體對計算機本科教育現狀多有批評,甚至出現了大學不如培訓公司的極端觀點,嚴重影響了學生對專業課程的學習興趣、動力和信心。數據結構是計算機專業的核心基礎課程,上承程序設計語言、離散數學,下啟操作系統、編譯原理等課程,其重要性不言而喻。一方面,數據結構學科具有難度大、抽象層次高、概念繁雜等特點,學生很難掌握,更不要說將抽象理論與就業實踐需求相結合。另一方面,國內主流數據結構教材和相應的傳統教學模式側重于培養學生的計算機學科基礎理論素養,而將如何通過組織數據結構教學活動積極推動就業的問題留給了任課教師[1]。這造成了學生學習數據結構的目標不明、信心和動力不足。筆者面向就業需要明確了數據結構的兩大主要教學目標,并在實際教學過程中實踐建構式教育理論,嘗試解決學生對專業認識不清、學習興趣不足、編程基礎薄弱等問題。一些做法得到了學生的認可和配合,成功地激發了學生的學習主動性、在一定程度上培育了學生的創新精神。
1面向就業需求的數據結構教學目標
教育要服務于社會生產需求。數據結構教學也必須緊扣這一根本目標。本節從滿足就業需要的角度闡明了數據結構教學的兩個主要目標:
1) 培養超越具體程序設計語言技巧的編程技術。
現階段是一個傳統的生產生活方式迅速向電子化、信息化轉變的時期。人們需要開發和維護更多、規模更大的計算機系統來滿足生產和生活的需要[2]。這就決定了具有熟練編程技術的程序員在很長時期內都將受到產業界的青睞。大學對學生編程技術的培養始于程序設計語言的教學,如c語言,java語言等。但是現今編程語言繁多,各種新概念層出不窮,常常出現學生無所適從或者質疑某門語言課程已經過時無用的現象。甚至很多教師也在爭論講授何種編程語言。筆者看來掌握編程技術(而不僅僅是語言),回歸編程的本質問題更加重要,無謂地追趕時髦不可取。作為編程語言課程的后續,數據結構教學的重要目標就是幫助學生理解編程的本質、鍛煉編程技術以及學習提高編程技術的方法。
2) 培養圍繞復用的軟件開發方式。
隨著軟件規模的日益增大,軟件開發模式逐漸從“從無到有”的模式過渡到“從有到有”的模式,即復用現有的豐富的軟件資產,開發新的應用系統。事實上,復用的思想已經被廣泛的用于軟件開發實踐之中,從各種各樣的程序庫、軟件開發包、軟件構件、web服務等各種可復用資產已經簡化了軟件開發的難度、提高了軟件開發的效率也極大地改變了軟件開發的模式。數據結構學科本身就是對軟件復用思想的一種實踐,它通過總結大量軟件系統中反復出現的數據結構(如表、樹、圖、集合等),定義和實現處理這些數據結構的基本操作,最終達到能夠在不同項目開發中反復應用的目的。這些基本數據結構和算法已經被實現為可復用的產品隨著程序設計語言,如c++ stl、c# collections, java collections等,并得到了廣泛的使用。因此,數據結構教學的另一個重要目標就是引導學生習慣圍繞復用的軟件開發方式,能夠使用和定制已有的數據結構和算法庫。
其他傳統的數據結構教學目標,如培養學生面向實際問題進行算法設計和分析的能力,培養學生計算機學科的基本理論素養和思維方式等也非常重要。但普通本科院校學生對理論內容的接受能力以及將理論和現實就業需求相聯系的能力相對較弱且教學時間有限[3],筆者認為重點突破本節給出的兩個更具體、更可達的教學目標,并在實現這種具體教學目標的過程中潛移默化地培育學生的計算思維和理論素質,將會取得更佳的效果。
2建構式數據結構教學
教學理論研究以及教學實踐反饋均表明,學生主動學習的效果遠較被動地接受老師灌輸的效果好的多。因此,為實現上述教學目標,在建構式教育理論的指導下,筆者探索并采用了一系列建構式教學措施,激發學生的主動性和興趣,取得了較好效果。
建構主義認為,學習并非學習者對教師所授知識的被動接受,而是學習者以自身已有知識和經驗為基礎的主動建構過程[4]。知識不僅是通過教師傳授而得到,更是學習者在一定的情境中,利用必要的學習資料,通過同化新知識、順化自身知識結構的方式而獲得。建構主義提倡在教師指導下的、以學習者為中心的學習,也就是說,既強調學習者的認知主體作用,又不忽視教師的指導作用,教師是意義建構的幫助者、促進者,而不僅僅是知識的傳授者與灌輸者。學生是信息加工的主體、是意義的主動建構者,而不僅僅是外部刺激的被動接受者和被灌輸的對象。下面從理論教學和實踐教學兩個方面介紹我們采用的一些教學措施。
2.1理論教學措施
課堂教學是數據結構教學活動的主要部分,充分利用課堂教學時間,激發學生學習數據結構的興趣和信心,幫助學生建立學習數據結構的環節非常重要。我們采用了如下措施:
1) 組織小型討論。
好的開始是成功的一半,好的課堂教學須在上課之初就抓住學生的注意力,讓學生帶著輕松、愉快的心情聽課。我的做法是在課堂的前5分鐘,提出一個學生感興趣的話題,組織若干個有3~5位同學參與的小型討論。到一個學期結束時,每位同學都有至少一次的發言機會。討論的主題可以靈活設置,如時事、技術、社會熱點等。有時,課堂中間學生比較疲憊、注意力下降的時候,也可以穿插一點討論,改善課堂環境。大多數學生非常喜歡這種討論活動,積極參與其中,成為課堂的一部分,從被動上課轉變為喜歡上課。
2) 重建理論知識所針對的問題。
國內的經典數據結構教材側重嚴謹的理論,較少討論各種概念、算法出現的背景以及探討的問題是否仍然具有現實價值。而回答這些問題能夠幫助學生重建理論知識所針對的問題原型,重現解決方案的提出、發展乃至最終成熟的整個過程,更有助于培養學生解決實際問題的能力,養成批判性、創新性思考的習慣。眾所周知,關于樹的存儲方法很多,有雙親表示法,孩子表示法和二叉鏈表表示法[5],其中以樹的二叉鏈表表示法使用最廣,但其他存儲方法也有其適合的應用。例如,在利用樹表示各個集合,求集合中的等價類時,雙親表示法更為合適。每一個集合都用樹的雙親表示法存儲時,并設樹的根結點的值為集合名,集合中的每個成員都對應一個結點,這樣很容易找到一個元素所屬的子集(順著雙親指針找樹的根結點)。
3) 組織“我來講”活動。
數據結構涉及很多抽象的概念和算法,初學者很難理解。而教師則對理論內容比較精熟,常常傾向于從理論的角度逐步遞進、展開講解,這就增加了學生的學習難度。教師和學生在教學語言上的鴻溝是影響教學效果的一個重要障礙。教師當然可將抽象的理論概念與生活中更形象的概念進行類比,幫助學生理解,也可以將復雜的算法過程用多媒體動畫模擬出來,直觀地展示給學生,幫助學生掌握。但一方面,根據建構主義理論,教師和學生的知識背景不同,由教師設計概念類比語境和算法模擬動畫實際上仍然是基于教師的知識結構對知識點進行的同化和順化,而不是對學生知識體系的直接建構。另一方面,教師的經驗和智慧有其局限性,未必總能夠找到最適合的類比語境和動畫模擬。為此,筆者采用了充分發揮學生智慧的方法,組織“我來講”活動,要求學生通過設計算法的動畫模擬,創建概念的類比語境等方式進行學習,并隨機選擇學生走上講臺對抽象理論概念和復雜算法進行說明。這樣不但能夠調動學生思考問題,還能幫助那些無法完成自我知識體系建構的同學從學生的視角去理解同一個問題。例如,對于n維數組是元素為n-1維數組構成的線性表這一遞歸的類型定義,可采用符號推理的方式,培養學生的理論素養,而同時可鼓勵學生根據自己的理解將抽象理論具體化,建立幫助理解和記憶的現實語境。
2.2實踐教學措施
數據結構是幫助具有基本編程語言基礎的學生錘煉編程技術的關鍵課程。它揭示了程序設計的基本面,即如何處理相互之間存在一種或多種數據關系的數據元素所構成的集合、如何設計算法并分析算法的優劣。若沒有相應的配套實驗指導學生如何將理論應用于實際問題,只是泛泛而談、紙上談兵,學生容易迷失在數據結構的一連串復雜概念和算法之中,而不知道學習數據結構的意義何在。為實現教學目標,筆者鎖定實驗內容設置和實驗考核等兩個關鍵環節,實踐了如下措施,取得了較好效果。
2.2.1實驗內容設置
實驗內容設置是進行實踐教學的最重要部分。從覆蓋知識點的角度看,實驗內容須面向數據結構教學目標,即實驗內容須能夠鍛煉學生的編程技巧,如算法設計、調試、測試以及調優等能力,還能夠讓學生體會到圍繞復用開展軟件開發的威力以及思路。從覆蓋教育對象的角度來看,實驗內容須面向大多數同學并充分考慮優秀同學,即實驗內容須劃分不同的層次,讓大多數學生能夠很容易入手,并讓有能力、有余力的學生能夠不斷地深入,直至形成綜合型課程設計。
基于以上考慮,并借鑒同行經驗,筆者開展三個層次的實驗教學活動,一是要求所有學生都完成的實驗內容,要求學生采用不同的數據結構實現同一個問題并進行對比分析,例如,分別使用靜態數組和動態分配的連續內存區實現順序表,使用整型、字符型數組或者鏈表實現長整數的乘法,使用帶頭結點或不帶頭結點的循環鏈表模擬約瑟夫環等;二是組織程序設計競賽,讓部分學有余力的同學能夠在算法設計、程序實現和調試、優化等方面得到鍛煉和提高;三是設計綜合型課程設計鍛煉學生解決問題的綜合能力,并通過適當分組,培養學生團隊協作精神和能力,鍛煉學生解決問題的綜合能力的目標,最終達到以點帶面全面提高學生能力的目的。
2.2.2實驗考核手段
考核手段在教學環節中至關重要。考核手段是學生學習和鍛煉自身能力的風向標。為保證每位同學都能積極完成實驗并有所收獲,避免抄襲和敷衍的現象,筆者采取了綜合型的考核手段。其一,提交實驗成果,即程序及其運行結果;其二,記錄實驗過程、分析實驗結果以及總結實驗得失的實驗報告,對實驗報告進行選優講評,培養學生撰寫科學實驗報告的能力;其三,每位同學必須面向教師講解自己編寫的程序,包括主要思路和細節性語法,優秀的同學可走上講臺宣講自己的實驗方案和程序設計技巧。這就基本杜絕了學生相互之間抄襲程序和實驗報告的現象,使得學生真正能夠思考問題,并盡力動手完成實驗。綜合上述三種手段的綜合型考核方法既能夠達到督促大部分同學完成實驗、鍛煉動手能力目的,又能夠達到培養優秀同學的目的。特別地,優秀同學宣講活動能夠使學生觀摩到如何從學生的視角從無到有的解決問題的過程,這能夠培養學生解決實際問題的信心并激發其學習積極性。
3應用中遇到的問題
建構式教學模式在應用和推廣過程中遇到的主要問題來自三個方面。其一,目前學生的課業負擔較重,習慣于被動“填鴨”而不習慣于主動“求索”,這是推動和開展建構式教學模式的主要障礙。其二,建構式教學活動,需要師生的密切交流,但現有師資不足難以滿足實際需求。一個可能的解決方法是綜合多門課程和多個老師,建構整體的知識框架和學習體系,避免課程教學中的重復勞動,提高師資的利用率。另一個可能的解決方法是利用互聯網技術,建立在線教學園地。其三,建構式教學模式仍然處于探索階段,各學科缺乏建構式教學素材。從筆者在實踐教學的體驗來看,應盡量從學生的學習背景和能力成長規律出發而不僅僅是從學科背景出發,為學生建構知識體系設計更平滑的路線。
4結語
筆者提出將“培養超越具體程序設計語言技巧的編程技術”和“培養圍繞復用的軟件開發方式”作為普通本科院校的數據結構教學目標,在建構式教育理論的指導下,設計并實踐了一系列建構式教學措施,分析了應用建構式教學模式所遇到的一些問題。
未來將開展兩個方面的工作。一是通過問卷調查、統計分析等手段定量地分析建構式教學方法的實際效果;二是創造和積累建構式教學素材,如研究數據結構課程設計過程中不同類型學生的知識建構路線,挖掘并推廣其中優秀的知識建構方法。
參考文獻:
[1] 教育部高等學校計算機科學與技術教學指導委員會. 高等學校計算機科學與技術專業發展戰略研究報告暨專業規范(試行)[m]. 北京:高等教育出版社,2006:8-101.
[2] 蔡敏,鄭尚志,梁寶華.“數據結構”課程教學改革之我見[j]. 計算機教育,2009(4):50-51.
[3] 揭安全,李云清,楊慶紅,等. 項目教學模式指導的“數據結構與算法”教學改革[j]. 計算機教育,2008(22):21-23.
關鍵詞:數據結構;微課;思維導圖
一、背景
數據結構課程作為計算機專業的核心基礎課程,學好數據結構才能為許多后續課程的學習打下良好的基礎。課程要求學生通過理論與實踐學習之后,能掌握各種數據結構以及與之相關的算法的知識,并將這些知識應用到對具體實際問題的分析中。參照ACM/IEEE-CS的《ComputeCurricula2001》報告中提出的數據結構課程內容主題[1]有幾十個,即課程的教學內容多,覆蓋面廣,而且由于很多重要知識的理論性較強,特別是一些難點知識比較抽象而難以理解,所以數據結構是被學生廣泛認為難學、難懂、難實踐的課程。學習的過程通常由“信息傳遞”和“吸收內化”兩個階段構成,采用信息化技術手段開展以微課、慕課、云課程、翻轉課堂為代表的數字化教學是實現知識信息傳遞的有效手段[2]。微課一般是在課堂教學之外,由學生主動參與的輕量化、碎片化、結構化的學習方式,通過良好的課程結構設計,結合短視頻、動畫、語音等手段,能有效地將抽象的知識轉為形象化的內容,從而高效促進學生“吸收內化”的進程。
二、微課及設計方法
微課(Microlecture),是指運用信息技術按照認知規律,呈現碎片化學習內容、過程及擴展素材的結構化數字資源[3]。微課課程平臺是學生在課堂教學外的細化教學知識,實現“自主學習”和“個性化學習”的環境,在微課平臺上,學生可按需選擇學習,既可查漏補缺,又能強化鞏固知識,是課堂學習的一種重要補充和拓展。從邏輯結構角度看,一個完整微課課程通常由一系列微課單元構成,一個微課單元除了用來講述該教學主題知識點的課堂教學短視頻及與短視頻配套的描述或解釋的短文這一最重要的核心部分之外,通常還包含與該教學主題相關的練習測試及師生交流等輔教學資源,這些資源共同組成了一個主題式、半結構化的微課教學單元。一個設計良好的微課單元通常具備主題選題精準和內容組織合理的特點。選題精準就是一個微課單元是一個教學主題,在設計這個主題時,要注意這個選題所覆蓋的知識或原理應較為簡單[4],其涵蓋知識點可選2—3個;內容組織合理就是知識內容的組織和分解簡明,將一個教學主題核心知識點和目標分解為若干個子知識點或步驟,這個核心知識點的分解最好只要一層邏輯,盡量不要在子知識點下再分解。
三、數據結構微課設計過程
數據結構課程要求學生能合理選擇數據結構,并把與問題相關的數據組織起來實現準確和高效計算處理,所以數據結構的核心概念由數據的邏輯結構及其定義在邏輯結構上的運算、數據的存儲結構以及運算的實現、運算算法的復雜度分析三個方面構成,而且在課程中數據的結構又與其相關的算法纏繞在一起[5],使得在微課設計時所做的知識點分析必須循序漸進地展開,采用由淺到深、由易到難的步驟,再從這個課程的知識體系出發,選取其中的重點、難點、疑點、考點、易錯點、熱點和擴展點,設計和制作一系列既相對獨立,又環環相扣的微課主題單元[6]。
(一)知識點分析與微課主題單元劃分
設計數據結構課程的微課時,首先按照課程內容的知識結構來完成各個主題單元的設計和劃分。我國的大部分數據結構與算法的教材[7-8]把課程的知識體系對應到教學內容之后,分成了基本概念和基礎知識、線性數據結構及相關算法、樹形結構及相關算法、圖結構及相關算法四個教學組成部分,這四個組成部分又可分別分成若干子模塊,每個子模塊又可再分成若干主題單元;劃分方法可以使用表格或思維導圖來協助完成。思維導圖是表達發散性思維的有效圖形思維工具,能直觀地把各級主題的關系用相互隸屬與相關的層級圖表現出來[9]。借助思維導圖,我們能有效完成微課課程知識結構的設計工作,圖1是我們設計線性數據結構及相關算法部分的微課主題單元思維導圖。
(二)微課主題單元設計
在完成對課程的教學內容主題劃分之后,開始對每個教學主題單元做設計。設計主題單元時要以學生為中心,其內容選擇先考慮突出主題單元中的重點知識點,同時需要保證學生能看懂、能聽懂,就是盡量以生動形象的語言和動畫表達知識點,特別是難點和常見疑點必須演示或解釋得詳細清楚。這里以單鏈表主題單元為例。單鏈表是最簡單的鏈式存儲結構,是深入學習樹與圖(非線性結構)的基礎,其概念及其實現是本節教學的重點和難點內容,我們按照內容介紹的次序來繪制思維導圖,圖中帶星號的是重點知識點。在制作微課資源時,可以針對不同特點的知識點采用不同的講解形式。對于概念性的內容,只需用語言或文字以學生容易理解的方式講述清楚概念,而對一些抽象的內容,可采用圖形、對比表格、動畫等方法來講解。如單鏈表結點與單鏈表結構的知識點,我們采用的是圖形動畫演示配合語音講解方法;在講解單鏈表的實現時,我們采用了代碼單步執行分析與圖形動畫演示相結合的方法來講述,取得了較好的教學效果。
Xue Chunyan
Xiamen University, Zhangzhou, 363105, China
Abstract: In the course of data structure, there is a phenomenon that theory and practice are separated from each other, so that students can not apply that knowledge of data structure into practice. For these cases, according to the characteristics of the students in the independent institute, the writer discusses the practice of teaching from three aspects: organize teaching content, experiment content settings, laboratory assessment and other aspects of the course.
Key words: independent institute; data structure; practice teaching
數據結構是計算機專業的一門基礎課程,也是課程體系中的核心課程之一,在計算機學科的主干課程中起到承上啟下的作用。數據結構課程對基本數據的邏輯結構和存儲結構進行分析和闡述,并介紹其具體實現的算法和實際應用。數據結構課程教學的目的是使學生學習、分析、研究計算機加工的數據對象的特性,學會數據的組織方法,以便選擇合適的數據邏輯結構和存儲結構以及相應的操作,將現實中的問題轉換為可以在計算機中表示和處理的問題。
實踐教學作為數據結構教學中的一個重要環節,是對數據結構課程理論教學的延伸,也是對數據結構理論知識的綜合應用。
作為獨立學院,我校踐行技術應用型本科的教育理念,樹立面向市場的辦學宗旨,著力于加強學生基本技能和實踐能力的培養,構建“以實踐教學見長”為特色的課程體系,培養適應市場需要的應用型人才。教師在教學過程中將學生實踐能力的培養放在首要的位置上,對實踐教學的設計、實施等各個環節不斷進行探索,并總結經驗教訓,逐步改進,取得了較好的教學效果。
1 數據結構課程教學過程中存在的問題
數據結構是研究程序設計過程中如何設計和使用合理數據結構來解決具體的問題的課程,是一門實用性很強的課程。但是在教與學的過程中,往往出現教學與實踐脫節的問題,不能把教學和實踐很好地聯系起來,影響了教學效果。同時,獨立學院生源的特殊性也給授課帶來一定的困難。
筆者在教學過程中發現了如下問題:
1.1 內容抽象,邏輯性強,不易理解
數據結構課程的特點是概念多、內容抽象、邏輯性強。學生在學習的過程中不知道數據結構講什么,可以用在哪里。造成只注重理論學習應付考試,而不考慮在具體程序設計中利用數據結構設計和解決具體問題的應用實踐。
1.2 教學脫離實踐,實踐課效果不理想
1.2.1 驗證性實驗達不到實踐教學目的
數據結構的實驗大部分是驗證性實驗。驗證性實驗僅僅要求學生對教師課堂講述的內容用C語言進行翻譯,只需調試通過即可,對掌握利用數據結構的知識解決具體問題的思路和方法不做要求。因此,學生在解決實際問題時,不能將所學數據結構應用到實際中。學生做課程設計時無從下手、思路混亂,不知道如何選擇數據結構。
1.2.2 實驗題目結構單一,不能滿足不同層次學生的需要
數據結構實驗題目內容差別小,缺乏應用性和實效性,很難調動學生的學習興趣。另外,基礎較差的學生在完成難度較大的題目時存在一些困難,而學習較好的學生感覺題目太簡單,沒有挑戰性。
1.3 學生基礎較差,相關課程之間銜接不好
從生源質量看,獨立院校的學生由于入學分數低,學生整體水平不高,基礎不好,對所學知識的理解和掌握不到位,學習主動性不強,特別是對數據結構這類理論比較抽象,不好理解的學科學習興趣不高。學生動手能力和編程能力普遍不強。
從課程銜接來看,數據結構與C語言程序設計兩門課程聯系密切。C語言程序設計的學習一般安排在數據結構課程的上一個學期,而且在后者學習過程中要用到前者的函數、指針和結構體部分,但是這些內容往往是學生掌握得最薄弱的部分。很多學生對熟練使用指針和結構體等內容的數據結構的實驗有畏難情緒,直接影響了數據結構實踐教學的效果。
2 數據結構實踐教學探討
2.1 案例討論教學將理論教學與實踐教學相互結合
為了提高數據結構的實踐教學效果,筆者改變原有的教學方式,采用案例討論的方式授課。在案例討論教學法中,筆者將學生分成若干個小組,以小組為單位進行討論,學生在討論過程中提出問題,筆者針對提出的問題講解相關知識,引導學生利用所學知識提出解決方案,并最終編程實現。在實現的過程中,還可以進一步深化數據結構算法的講解,鼓勵學生不斷地改進和完善程序,提高程序的性能和效率。
例如:針對線性表結構的講解,以學生最為熟悉的宿舍管理系統為例進行研究討論。
首先,引導學生分析基本的數據信息和功能需求。基本信息包括學生信息和宿舍信息。基本功能包括增加、修改、刪除、讀寫、排序和查找。進一步討論數據的特點,操作對數據的結構需求,從而引入線性表結構的知識,幫助學生建立學生信息和宿舍信息的數據結構。
其次,分析各個功能的實現方法,從而引入線性表基本操作的具體實現。
最后,通過分析各個操作的優缺點總結線性表的特點,引導學生通過順序表和單鏈表兩種方式實現,經過比較和分析,最終掌握線性表的結構特點、表示方法、各種操作的實現以及不同實現方法的比較分析。
通過學習案例,學生深切地體會到了線性表的特點以及具體應用的過程。理論教學與實踐教學相融合,達到了很好的教學效果。
我們為每種數據結構都設置了一個案例,具體情況見表1。
表1 數據結構案例情況表
這種案例討論的教學方式改變了傳統的教師為主的教學模式,學生由被動學習變成了主動學習,調動了學生學習的主觀能動性,增加了師生之間的交流和互動,活躍了課堂氣氛,提高了學生分析和解決問題的能力。
2.2 打好語言基礎,掃清障礙
針對獨立學院學生基礎較差的客觀情況,教師在授課初期實驗開始之前,應先為學生掃清編程語言的障礙。筆者針對學生C語言學習中存在的問題,結合數據結構課程中涉及的C語言的知識點有針對性地進行講解和練習。對C語言中函數、指針、結構體部分的知識進行系統回顧,并安排學生做一些和數據結構相關的C語言練習題,幫助學生掃清數據結構學習中的障礙,減輕學生對編程的畏難情緒,輕裝上陣,更好地學習數據結構課程的內容。
2.3 實驗題目設置多層次、多種類
2.3.1 多層次
我校學生的水平參差不齊,我們針對不同水平的學生提供不同難度的實驗題目。實驗題目類型分為:基礎題、進階題、提高題、綜合項目題。
例如:針對二叉樹實驗,筆者設置了三類題目。
基礎題:二叉樹的順序實現和鏈式實現。
進階題:一個單位有10個部門,每個部門有一部電話,但是整個單位只有一根外線,當有電話打進來時,由轉接員轉到內線電話。已知各部門使用外線電話的頻率(次/天)為5,20,10,12,8,4,3,5,6,9,如何設計內線電話號碼,才能使接線員撥號次數最少?(哈夫曼樹的應用)
提高題:編寫程序判斷一棵二叉樹是完全二叉樹、滿二叉樹還是普通的二叉樹。
綜合項目題:身份證信息管理系統。
要求:(1)能夠進行身份證信息的錄入,包括身份證號、姓名、地址和手機號。(2)能夠快速根據身份證號進行信息的查詢,并輸出相關信息(地址、生日、性別)。(3)可以修改身份證號碼對應的其他信息,如姓名、地址。(4)可以完成身份證信息的刪除。(5)可以根據姓名查詢身份證信息。對于重名的人,能夠給出所有重名的人的身份證號和其他信息。
多層次的題目可以讓學生從易到難、循序漸進、逐步提高編程水平。基礎較差的學生,可以從最簡單的題目進行基礎訓練,一點一點提高難度,這樣可以幫助學生建立信心,提高學習的積極性。學習能力較強的學生,可以直接做比較難的題目來檢驗自己的學習效果,這樣也可以激發學生的學習興趣,提高學習效率,其學習能力也能獲得更大的提高。
2.3.2 多種類
題目的種類應是多樣性的。多種類的題目可以通過不同方式、不同角度考查學生知識掌握的情況。
基礎題中包括一些選擇題、填空題、寫程序結果、程序改錯以及基礎編程題;進階題和提高題主要以編程題為主;綜合項目題一般采取小組合作的方式,不僅可以鍛煉學生的實踐能力,還能夠培養學生的團隊合作精神。多種類的題目有利于調動學生的學習興趣。學生可根據個人情況選擇自己喜歡的題目類型進行訓練,提高了學習主動性和積極性。
2.4 完善實驗考核制度
我校設有數據結構實驗課程,該課程實踐教學大部分在實驗課中完成。我們對實驗課的考核方法也進行了改進和完善,具體成績構成見表2。
表2 數據結構實驗成績構成情況
通過對數據結構課程實踐環節的嚴格考核,學生養成了認真做好實驗記錄的習慣,培養了嚴謹的學習態度,形成了踏實的學習風氣,減少了上機過程中出錯的次數。
2.5 增加設備投入,完善現代化教學手段
增加設備投入,完善現代化教學手段,對提高教學質量尤為重要。我校充分考慮數據結構課程的實踐性特點,盡最大可能補充和更新計算機設備,并建立了專門的數據結構實驗室,配備了品牌電腦和所需的軟件,確保軟、硬件設施設備滿足教學需要。同時,還建設了數據結構教學輔導網站,用于課程資料下載、在線測試、在線答疑等,為學生學習數據結構課程提供了很好的平臺。
數據結構主要研究數據的各種邏輯結構,存儲和組織方式,以及相應算法的性能分析等。本課程在計算機相關專業課程教學體系中,具有舉足輕重的地位。這門課程的學習不僅能提高學生的程序設計能力,培養學生的編程技巧,而且為后續課程(如:算法設計與分析、數據庫和操作系統等)打下良好的理論和實踐基礎。數據結構實踐作為安徽師范大學數學計算機學院軟件工程專業的一門獨立的專業實踐課程,一方面使學生加深對《數據結構》理論的理解,另一方面培養學生利用理論知識進行實踐設計的能力,從而提高學生的學習能力。
1 數據結構實踐教學中存在的問題
由于數據結構本身概念較為抽象,算法也較難以理解和掌握。因此,在長期的教學過程實踐中,通過課題組連續2年對我校209名軟件工程專業同學進行跟蹤調查問卷發現,數據結構實踐課程存在這樣一些問題和困難。總結如下:
1.1 基礎編程語言較為薄弱
我校主要選擇C語言作為數據結構實驗和實踐的工作平臺。但課題組調查發現,僅有近30%的學生能夠掌握和較為熟練運用C語言進行程序設計。進一步的跟蹤調查發現,大部分學生對C語言的困惑主要體現在:1)對一些抽象概念的理解。例如,對指針相關的概念的理解,特別是當指針與數組、函數關聯在一起時,學生猶如霧里看花,很難把握。2)動手編程能力。課題組調查發現有近47%的學生編寫代碼的總量少于1000行;有近41%的學生能夠理解理論知識,但編程遇到困難,只有不到20%的學生能夠理解理論知識,并能夠熟練編程實現。
1.2 實踐內容繁多, 學生靈活運用知識能力不足
數據結構課程知識點繁多,而且理論概念較為抽象。教師在教學過程中基本采用每個知識點進行獨立的講解和分析的教學方式,這種方式最大的優勢是能夠重點強調和解析所要講解的知識點,但帶來的弊端是學生很難從整體上把各個分散的知識點進行融會貫通,靈活運用于對具體問題的解決。調查發現有近60%的學生認為教師講解過程過分強調理論的講解,而缺乏對具體的例子進行特定問題特定分析。同樣,調查也發現近60%的學生更期望采用自頂向下的教學方法,即針對特定的問題,對問題進行相應的分解,分析和講解其中利用到的知識點,從而最終解決特定的問題。也有88%的學生期望能夠定期講解經典算法設計的案例。
1.3 缺乏對學生興趣的培養
心理學研究表明,興趣既能夠改善學習的過程,也能改進學習的效果,導致質與量更優越的學習。Schiefele等人(1992)的研究結果也表明,興趣和成就之間有接近30%的相關性。數據結構是一門非常抽象的課程,而實踐過程又是枯燥、費時費神的工作,沒有濃厚的學習興趣是很難堅持和深入學習的,也很難體會到學習過程帶來的樂趣和成功帶來的愉悅。課題組跟蹤調查發現,在學習該課程的前后,對該課程很感興趣或感興趣的學生的比例下降了近27%。
1.4 缺乏必要的師生互動
教學不僅是一個教與學的過程,更是一個教學互動的過程。即是師生之間進行交流,探討和不同思想碰撞的過程。因此,教學,一方面包含著教師的教和學生的學,同時也包含著學生的反饋和教師的學習的過程,更重要的是也包含著學生的質疑,教師的理性的說服甚至爭辯。師生之間的互動是教學中重要的環節,也是必要的過程。然而,在實際的教學中,教師依然采用填鴨式教學,只管知識的傳授,而忽略了與學生的互動。而學生也不愿或者不會主動與教師進行交流、討論甚至爭辯。調查發現,絕大部分學生由于各種原因很少或者不愿參與各種討論和互動,即使學生當遇到問題時,也只有不到10%的學生會向老師請教討論,僅有20%學生和同學進行討論,有近60%的學生會通過其它方式(如互聯網)來解決問題。這一方面反映學生會利用先進的信息技術來解決自己的問題,同時也反映出師生間互動的缺乏。
2 數據結構實踐教學的探討
針對實踐教學過程出現的問題和困難,課題組對數據結構實踐的教學內容和教學方法進行了深入的探索和不斷的改進,從而形成了一套較為完整的教學體系。
2.1 強化實踐教學,明確教學目標和內容
為強化實踐教學,數據結構實踐已經被作為安徽師范大學軟件工程專業的一門獨立課程開設。該課程具有統一的教學大綱,教學計劃和課程設計大綱,每周安排4個學時,共計68個總學時實踐教學。對該課程也設定了固定的課題組,其核心人員由2位具有副教授以上職稱人員構成,并配備一定數量的助教人員。這些為實現課程的教學目標和任務提供了必要的保證。
數據結構課程包含的內容眾多,教學任務繁重,但各個教學內容和任務間并非孤立。因此,課題組的首要任務是教師自己要精通并讓學生能從整體上把握整個課程的體系,明確課程研究的目的和內容。具體而言就是:數據結構課程主要研究內容是各種數據的邏輯結構、存儲結構,以及建立在這些結構的算法及其性能分析,其主要學習目標對這些內容的掌握和理解。因此,在教學實踐過程中,一方面要把握“一條主干,四種邏輯結構,兩種存儲表示”這樣一條主線。即一條主干就是數據及其結構表示和存儲,四種結構就是集合、線性結構、樹形結構和圖結構,兩種存儲就是順序存儲和鏈式存儲。另一方面,要理解四種邏輯結構的區別和聯系,以及兩種存儲結構的各自優勢及不足。
2.2 加強教學環節設計,注重運用知識能力的培養
數據結構實踐課程,既要穩固和加強對理論知識的理解,又要培養學生的實踐設計能力,從而培養學生靈活運用知識的能力。因此,在實踐過程中,課題組采用層次設計的思想進行教學實踐。具體而言就是:對每個知識點,課題組要求學生進行驗證性的設計練習,從而達到加深對理論知識理解的目的;對每種邏輯結構,課題組都構造出一套設計性的試題,讓學生自己動手進行實踐設計,培養學生靈活運用多種知識進行實踐設計的能力;最后,課題組設計出一套綜合的設計試題,讓學生利用學到的理論知識,進行綜合性的設計和實踐,從而培養了學生綜合利用各種知識解決具體問題的能力。
2.3 加強對學生學習興趣的培養,培育良好的師生關系
心理學研究表明,良好的評價和反饋能夠激發學生學習的興趣。為了激發和培養學生的學習興趣,課題組一方面對每個實踐到的知識點進行總結概括,讓學生能夠知其然并知其所以然。另一方面,對每個學生的實踐設計的內容,進行認真的評閱,給出相應的反饋和評價,并對實踐的內容給出具體的討論和分析,激發學生學習的潛在動力和興趣。另外,在實踐過程中,課題組會有意識鼓勵學生自己動手設計和實踐一些課題,而不僅僅實現和模仿書本的內容。這一方面可以培養學生的自主學習和設計能力,同時也可以讓學生感受到學習的樂趣和成功的喜悅。
良好的師生互動,能夠培育出良好的師生關系,也有助于學習興趣的培養。課題組跟調查發現僅有不到20%學生是因為基礎不好無法交流而不愿參與教學互動,有超過80%的學生是由于信心不足或者沒有參與討論的習慣而不愿參與教學互動。因此,在教學設計過程中,課題組采用引導和鼓勵的方式,讓學生積極參與各種討論和互動中。具體而言就是:對與設計類和綜合類試題,課題組首先采用小組的方式(學生自由組合,每小組原則上不超過3人)進行實踐活動,鼓勵小組成員間進行交流互動。進一步,定期選擇優秀的實踐設計進行公開討論,讓其小組成員匯報自己工作,課題組和其它小組進行相應的評價和反饋,從而鼓勵小組間進行交流互動。這種教學方式既增加了師生間,學生間的互動,同時也培養了學生團隊合作精神,更激發了學生主動學習的積極性。.
2.4 加強基礎語言的學習,培養程序編寫能力
C作為數據結構課程的工作語言,對數據結構的實踐教學具有非常重要的作用。為了使學生能夠掌握和熟練的運用該編程語言,課題組首先要求C語言課程的授課教師要加強對C語言的內容講解和訓練,特別是與數據結構課程聯系比較緊密的知識點(如指針及相關的概念)要進行精講精練。同時,課題組對數據結構中相應的知識點涉及到的C語言知識,會進一步進行講解和分析,確保相應的實踐能夠順利進行。
【關鍵詞】C語言 教學目標 程序設計思想 軟件工程
目前,有相當多的高等學校不但將C語言列為計算機專業學生的必修課,而且是理工科非計算機專業的必修課。對于計算機專業學生來說,C語言程序設計是一門專業基礎課,對后續專業課程至關重要;對于非計算機專業的理工科學生來說,這是一門公共基礎課,是各專業學生的計算工具。專業不同,教學目標就應該有所差別。但是,現在很多高校并沒有一定的區分,而是統一的教學目標,統一的教學模式,過于注重語句、語法和一些細節,基本上是以高級語言自身的體系為脈絡展開的。這樣,就給計算機專業學生學習后續課程及研究生階段的課題研究留下了隱患。在這里,筆者對計算機專業C語言的教學目標做一個簡單的探討。
一、程序設計思想的培養
對于計算機專業學生而言。程序設計以及后來的軟件設計是整個計算機專業發展的一個重要方向,因此,程序設計思想的培養對于學生來說至關重要。思想的培養不能單單通過做大量的題目,而是要有一定的方法,循序漸進才能做到事半功倍的效果。
計算機編程思維的形成并不是一蹴而就的,對于從未受過算法設計訓練的學生來說,剛開始編程時,可能會感到無從下手。對此,我們可以從整體到具體細節,一步步引領學生來進行編程。
1.把程序設計簡單歸納為數據輸入、加工處理與結果輸出三個部分。學生遇到問題時,首先,分析已知的數據是什么,需要求解的數據是什么。然后,就是由已知求未知的過程,把這一過程用C語言描述出來就可以了。對于講解的每一道題目,我們都讓學生這樣來分析,慢慢地,學生就會有一個整體的認識了。
2.針對“由已知求未知的過程”,就是我們所說的算法了,它是程序的靈魂。算法就是我們的思考過程。但要把思考過程一步步描述出來還是不簡單的。首先,我們可以通過放慢我們的思考過程或加長我們的思考過程來實現。例如,5個整數求最大值。有的同學說,我一眼就看出來了,根本不需要思考。那我們如果來求50個數或者100個數的最大值,這次我們就不會一眼看出答案了,這時候,我們的思考過程就清晰了,先求出前兩個數的最大值放到變量max中,在拿max和第三個數比較,最大值仍放到max中,max再和第四個數比較……以此類推,最后max里放的就是所有數據的最大值。這就是一種算法。把它用C語言描述出來就可以了。其次,我們需要通過做大量的題目或閱讀大量好的程序,來積累一些好的算法。
3.把算法描述為C程序。這一步,需要學生們認真掌握C語言的語法規則。學生需要做大量的針對性的單項練習,一個一個規則來掌握。還要在具體的程序編寫中進行綜合練習。有具體的使用環境中,這些語法的掌握應該是不難的。
二、與后繼課程密切聯系
過去的C語言教學多注意基本概念的掌握,對于算法與程序設計的風格未能系統的訓練,與后繼課程《數據結構》的教學嚴重脫節。C語言的教學重點固然是C語言的各種數據類型及應用,但是《數據結構》中的許多基本概念與思想也應滲透到C語言的教學中去。
1.C語言的發明就是為了方便操作系統的開發,因此具有豐富的指針結構與位操作功能,這在unix操作系統中已經得到了很鮮明的體現。操作系統的設計涉及許多復雜的數據結構。為了實現這些結構,C語言構造了許多復雜的數據類型,如函數指針,結構指針函數,不一而足。這些模式很簡潔地描述了數據的關聯模式。顯然。C語言許多數據類型本身就是復雜的數據結構的抽象,這一抽象過程就構成了這種結合的基礎,這種交叉、滲透還是學生高漲學習情緒的最好切入點。
2.通過C語言中的數據排序,數據查找這些題目的實現,對于數據排序和查找算法的分析比較,我們就可以和數據結構課程中的查找、排序章節結合起來,對查找排序的各種方法作進一步的了解。
3.學習指針這一章時,通過鏈表的建立、插入、刪除等的學習,可以和《數據結構》課程的線性表中的單鏈表建立聯系,再通過與數組知識的結合,又可以和線性表的順序存儲結構,靜態鏈表產生聯系。這樣不僅使學生們對后繼課程有個較詳細的了解,加強了課程之間的聯系。還進一步提高了大家的學習熱情。
三、把軟件工程的思想融入教學
隨著學生對程序設計語言的學習進步,自然地產生了軟件設計的渴望,老師要適時引入一些軟件的基本設計方法,對啟迪學生悟性很有好處,也使學生找到學習的門路。主要可以從兩個方面加以引入。
1.在教學中加入面向數據流的設計方法,這是一種傳統的結構化軟件設計方法(簡稱SD),對于初學者易于理解,尤其是在C語言程序設計的課程設計中有很好的效果。讓學生了解軟件設計的一般方法,程序的模塊化結構和數據的輸入/輸出結構,明確模塊間的控制關系,從總體上把握軟件的結構,在課程后期的綜合練習中有特別的意義。
2.在編程過程中加入程序健壯性、安全性的問題
在程序設計中,適時提醒點撥學生注意編程安全很有必要。例如,在設計“學生成績管理系統”時,鍵盤錄入的某課程成績或者在數據文件中提供的成績數據的范圍、屬性是否正確的檢查,就是編程的安全問題中的被動式保護性編程。在整個程序設計課程中,到處都是編程安全例子。例如?數組界限是否正確?表達式中是否有0分母情況?使用鏈表結構時,須要檢查其連接情況,等等。
再者,對于程序的健壯性,使學生們認識到,一個程序。不僅僅輸入一個合法數據能得到一個正確的輸出。這個程序就是正確的。而輸入一個非法的數據,他也能給出一個合理的輸出,這才是一個正確的、健壯的程序。例如,輸入三角形的三邊,求面積。如果我們輸入三個數據。就出一個面積數據,那這就不是一個健壯的程序,必須是輸入的三個數據能構成三角形,才輸出面積;如果構不成三角形,就應該輸出一行提示:輸入非法。這樣的程序才是個正確的程序。
,
關鍵詞: 數據結構;教學方法;實踐
中圖分類號:G642文獻標識碼:A文章編號:1009-3044(2009)32-9017-02
A Exploration for Teaching Reform of Data Structure Course in the Application-oriented Undergraduate Colleges and Universities
WANG Jun, ZHOU Ming-zheng
(Dept. of Comp. Sci. & Engn, Anhui University of Technology and Science, Wuhu 241000, China)
Abstract: Under the background of popular education, it is important to improve teaching effectiveness for computer major courses "data structure" in the application-oriented undergraduate colleges and universities. In this paper, for the purpose of cultivating application-oriented undergraduate, analyzing the problems in the current teaching data structure, a preliminary exploration of the reform is put forward for data structure course materials and teaching methods with some thoughts, which is expected to enable students to have a better knowledge of the course.
Key words: data structure; teaching method; practices
在當今的大眾化教育大背景下,對于應用型本科高等院校,計算機科學與技術專業的培養目標已經發生了改變,其主要培養的不再是理論性的研究型人才,而是培養掌握計算機硬件、軟件與應用的基礎理論、基本知識、基本技能和方法,有一定系統級的認識能力和抽象能力、具備很強的設計能力和工程實踐能力的應用型人才。
針對這種情況,“數據結構”課程在整個專業中的教學體系也要隨著這種培養目標的改變而改變。“數據結構”是計算機學科的一門綜合性的專業基礎課,也是計算機學科的核心課程,在整個學科知識體系中占據非常重要的地位。通過該課程的學習,不僅為后續課程打好理論基礎,而且相對于培養目標的“很強的設計能力和工程實踐能力”來說,提高學生對數據的組織能力,利用程序設計處理數據的能力更為重要。
本文在分析當前應用型本科計算機科學與技術專業“數據結構”課程教學中存在的問題的基礎上,針對數據結構課程內容的高度抽象性和實踐性強的特點,從教材到教學方法進行了一系列的改革實踐。不再強求對數據結構中抽象數據類型的重點掌握,而是從應用出發,著重強調培養學生對數據的組織和處理能力的提高,以編程實踐為主要實踐手段,達到提高學生解決實際問題的應用能力和工程實踐能力。
1 應用型本科計算機專業“數據結構”教學中存在的問題
“數據結構”課程內容多、概念多、方法多、邏輯性強、高度抽象、技巧性強、實踐性強。沿襲精英教育的“數據結構”教學多以傳授知識、抽象描述數據結構及算法為主, 輔以一定的編程實踐, 大部分學生在學完該門課程后, 普遍感到能看懂數據結構的算法描述, 卻無法根據實際問題動手設計數據結構及其算法, 更不用說應用所學知識編程解決問題了。造成這種原因是多方面的,筆者根據大學擴招已來幾屆學生的數據結構的教學體會,認為主要問題表現在以下幾個方面:
1) 數據結構的預備知識掌握不牢。由于其前導課程掌握不好或沒能熟練掌握,導致學習本課程困難。數據結構所需的預備知識對不同的專業可能有所不同,但一般必須要先行修過“離散數學”和一門高級語言的程序設計(如PASCAL、C、C++等)。計算機作為以數學和電子技術為基礎發展起來的學科,里面用到很多數學理論,在進行抽象數據類型的介紹時,要有一定的代數理論;作算法分析時,就必須有一定的概率理論作基礎;作非線性結構的分析時,就必須用到離散數學中的樹形結構和圖論的知識。而作為計算機專業的最基本的程序設計語言來說,“數據結構”中的算法大多由類PASCAL或類C、C++語言描述而成,在學習數據結構前PASCAL或C或C++已經講授過了,但由于學生剛剛開始接觸程序設計語言,對程序設計語言的掌握往往集中在計算機語言的語法上,而忽略了程序編寫能力的培養,實踐能力很弱,沒有建立起基本的程序設計思想,不能利用計算機解決問題,更談不上把所學的知識融會貫通,學生在學完程序設計之后,甚至對程序設計有了恐懼情緒。
2) 教材理論性、抽象性太強。在“數據結構”課程教材的選擇上,很多高校沿襲精英教育時代選擇清華大學嚴蔚敏老師的《數據結構》教材,該教材曾獲“第二屆普通高等學校優秀教材全國特等獎”和“1996年度國家科學技術進步獎三等獎”。嚴蔚敏老師的教材理論完善,邏輯性、抽象性強,對培養計算機專業學生的邏輯思維,數據抽象能力有很好的效果,成為中國高等院校計算機專業的最為經典的教材之一,累計發行超過了100萬冊,對我國的計算機教育的發展作出了杰出貢獻,筆者當年也從該教材中獲益匪淺。但從1992年出版已來,實質內容一直沒有發生根本的改變,只是根據算法的描述語言進行了修改。在大眾化教育的今天,在以培養應用型的計算機工程技術人才的普通高等院校,該教材筆者認為在理論上顯得深了些,特別是該教材嚴格采用算法設計的語言來描述算法,對于計算機語言不是很熟練,程序設計思想尚未完全建立的學生來說,很難將課本的中的含有一定設計技巧的算法轉換為程序,上機調試通過,在一定程度上挫傷了學生編寫程序的積極性,阻礙了學生實踐能力的提高。
3) 教師本身的教學方式和方法單一,不能充分地調動學生的情緒,使學生的思維跟上教師的思維。在傳統教學中,教師為了讓學生理解相關的概念、算法等內容,常需要大量的板書配合文字、圖表等加以說明,學生隨著教師的思路分析問題,,能有充分時間作筆記,但由于課程內容抽象難懂、教師多忙于板書和講解,學生忙于作筆記,雙方嚴重缺乏互動,課堂氣氛沉悶,學生提不起學習的興趣,往往出現“一邊教師唾沫橫飛、嘶聲力竭,而學生則唉聲嘆氣、一臉困惑的情景”。采用多媒體課件后,教師可以充分利用多媒體技術將算法、圖表等內容形象、生動地表現,學生學習興趣也有很大提高,卻又容易導致學生既要關注屏幕內容又要忙著作筆記,無暇思考問題,課后難以消化,“聽課”則又變成了“看課”。
2 應用型本科計算機專業“數據結構”教學的幾點思考
大眾化教育大背景下,由于普通高校生源質量的下降,對“數據結構”課程的預備知識掌握不牢,對于應用型本科高等院校“數據結構課程”的教學,不能再強求對數據結構中抽象數據類型的掌握,而是從應用出發,選擇合適的教材,采用多種教學手段的綜合,著重強調培養學生對數據的組織和處理能力的提高,以編程實踐為手段,達到提高學生解決實際問題的應用能力和工程實踐能力。
2.1 教材的選擇
由于應用型本科高等院校的計算機專業培養目標是很強的設計能力和工程實踐能力的應用型人才,因此教材的選擇,筆者認為理論性、抽象性太強的教材不一定適合這一層次的高校使用。一方面學生的學習能力不能和研究型大學相比,理論性、抽象性太強的教材學生往往不能夠掌握,學得很吃力。另一方面教師不僅要將算法原理講述清楚,有時,為了學生能夠將算法轉換為程序,還需要額外的學時將算法如何轉換描述清楚,甚至要補講程序設計語言的內容,造成學時不夠。例如,在算法描述的時候,對于數據類型,絕大部分的教材都是利用抽象數據類型的形式描述算法,這樣學生在實踐的過程中將算法轉換為程序時,出錯較多,基礎差點的甚至根本就不會轉換,給學生造成該門課程我用的錯覺,打擊了學生學習的積極性,不利于學生編程能力的提高。因而,應用型本科高等院校的“數據結構”教材,在描述算法時,應該盡量用貼近編程語言的形式描述算法,降低學生將算法轉換成程序的難度,同時為了兼顧算法的描述,可以對比較復雜的算法以流程圖的形式先行介紹算法思想。
2.2 教學內容的組織
在教學中,始終以算法實現的兩種基本的存儲結構順序結構和鏈式結構為主線,對數據結構的三種數據組織形式線性結構、樹型結構、網狀(圖形)結構,以點線面體的形式進行立體組織授課。整個教學體系是在線性表、樹、圖各個數據結構知識點的基礎上,以數據組織的兩種存儲結構為貫穿整個課程的兩條主線,注重培養學生掌握各個知識點之間的聯系,形成數據結構的理論教學面;在數據結構的實驗教學方面,同樣采用順序和鏈式兩種存儲結構為主線,以編程實現線性表、樹、圖的數據組織和算法為手段,提高學生的動手能力;最后將理論和實驗兩者結合起來進行數據結構課程的課程設計實踐,進一步提高學生解決實際問題的能力。例如對線性結構的教學,重點講授線性結構的兩種存儲結構下的實現,而對線性結構的抽象表示以線性結構特征的形式體現即可。由于數據的線性組織方式是整個“數據結構“課程的基礎,務必讓學生掌握透徹,提高對該門課程的興趣。在完成理論教學之后,實踐上以應用為切入點,提出線性結構的數據組織和處理的實例,進行編程實踐,培養學生的工程實踐能力。
2.3 綜合運用多種教學手段
根據數據結構這門課的特點,在不同的教學階段運用不同的教學手段。單一的教學模式和教學手段在數據結構教學中是不適合這門課的特點的,效果也肯定不會很佳。勿庸置疑,現代教學手段能提高教學效果,現代的多媒體教學課件,網絡資源,立體化教材等,對提高某些課程的教學效果作用很大,但對理論性很強的數據結構課程的課堂教學,只能起一定的輔助作用。在講某種數據結構,如線性表、樹、圖等,是可以輔以多媒體課件直觀表示,但完全用多媒體教學效果就不一定好,在講述算法思想的時候學生更喜歡教師用粉筆邊寫步驟邊解釋。現代教學手段有它的用武之地,也有它的適用范圍,不應在什么方面都用現代教學手段。筆者認為,對數據結構中的數據的組織形式和算法的實現可以利用多媒體進行演示,而對于算法思想的講述,在黑板上雖然講解速度慢但比多媒體對學生的影響更深刻,這樣結合,可發揮兩者的長處。
3 結束語
《數據結構》是一門理論性和實踐性都很強的課程,筆者認為,對于應用型本科而言,理論教學固然重要,但應將著重點放在實踐環節,強調學生編程動手能力的培養。以培養學生的動手實踐能力為主線,兼顧理論教學,在實踐中總結理論,綜合運用多種教學手段比較適合應用型本科學生的接受能力,也符合培養目標的要求。
參考文獻:
[1] 汪軍,周鳴爭,《數據結構》課程教學方法的改革與實踐[J].蘭州工業高等專科學校學報,2004(3):20-22.
[2] 周鳴爭,汪軍,計算機科學與技術課程綜合化的嘗試[J].高等工程教育研究,2003(4):74-76.
論文摘要:該文分析了程序設計在計算機學科中的地位以及程序設計有關的知識和能力構成,結合自己多年的計算機專業教學實踐,探討了在計算機教學中培養學生程序設計能力的有效策略。
計算機科學是一種創造性思維活動,其教育必須面向設計。計算機的本質是“程序的機器”, 只有懂得程序設計,才能懂得計算機,真正了解計算機是怎樣工作的。培養學生程序設計能力對計算機專業的學生來說不僅是培養職業技能的需要,也是培養大學生創造性思維的重要途徑。學習程序設計語言可以培養學生運用算法來解決實際問題的能力,這種解決問題的方式是計算機所獨有的,也只有通過對計算機的程序設計語言和程序設計方法的學習才有可能獲得這種解決問題的能力。
1 程序設計在計算機學科中的地位
程序設計是利用某種計算機語言,編制完成某一特定功能的程序的過程,是涉及描述、開發及有效實現求解的一系列活動,是利用計算機實現自動化的重要手段。
計算機學科主要是系統地研究信息描述和變換的算法過程,包括它們的理論、分析、設計、效率、實現和應用。可以這樣說,一切算法的基本問題是“什么能被自動化”以及“如何有效地自動化”。這個自動化的過程就是程序設計的過程。
程序設計語言是人們學習計算機的最基本的工具,也是人們學習計算機基礎與應用知識的基本課程。通過學習,使學生掌握程序設計的基本概念、基本知識和基本方法,養成良好的程序設計風格,得到一定的程序設計訓練,具備初步編寫程序解決實際問題的能力。程序設計也正是有形表達抽象思維的方法,在程序設計過程中貫穿閱讀判斷、分析思考、工具利用、抽象表達、綜合創造等多項技能,是理論、抽象、設計和應用的綜合能力培養過程。因此程序設計是計算機學科教學的重要內容之一,對計算機專業人才素質的培養至關重要。
2 程序設計的知識和能力構成
根據循序漸進的原則,與程序設計有關的教學內容主要有:計算機基礎知識和操作、程序設計語言和基本的程序設計方法、最基本的數據結構及其基本算法、常用的算法設計方法等。在學習這些知識的同時,必須與能力的訓練有機地結合起來。程序設計能力表現在以下幾個方面:
1)自然語言能力。要有較強的運用自然語言描述現實事物的能力,只有運用背景知識正確且清晰地陳述問題及其求解目標,才能確定程序的功能。
2)數學描述能力。程序設計是為了告訴計算機做什么和如何做。這就需要利用定義、定理、公式、函數等數學工具把問題形式化,建立數學模型。
3)數據結構設計能力。選擇合理的存儲結構,在計算機中表示數學模型,是程序設計的一個重要方面。
4)算法構造能力。好的程序由精心構造的、好的算法構成。給出問題求解的離散化計算過程,是程序設計中最具有創造性的工作。
5)程序編碼能力。用某種程序設計語言表達算法,盡管這種能力往往被認為技術含量不高,但也需要對程序設計語言的熟練掌握和對算法設計的深刻理解。
6)程序調試能力。程序調試能力是一種專業綜合技能,需要對程序設計語言和程序結構有深刻的理解,需要熟練的操作技能,需要會設置測試數據和設置程序斷點,這些都有待于學生在實踐中逐步積累經驗。
可以說,程序設計能力的高低很大程度上反映在駕馭自然語言、數學語言和計算機語言的能力上。這3種語言是人們畢生有用的3種通用智能工具。前兩者是后者的基礎,良好的英語和數學訓練是學好程序設計語言和培養程序設計能力的重要基礎。
3 培養程序設計能力的有效策略
知識的價值在于運用,知識的運用需要技能,而技能的形成則依賴訓練。程序設計知識的學習和能力的培養需要各方面的知識基礎,它是一個系統的教育訓練過程,需要多個教學環節的緊密配合才能完成。
1)明確教學要求
程序設計語言課程一般是為應用性教學而設置的,因此,課程的教學不僅僅是傳授知識,而且應該強調應用性,應該以培養學生的能力為主。程序設計語言的內容比較豐富,在教學中如果面面俱到,必會耗費較多課時,而且教學效果不一定好。因為過分強調程序設計語言的系統性和完整性就可能會轉移學生對課程重點的注意力,關鍵在于教會學生如何正確運用程序設計語言編寫程序,訓練實用編程能力。所以必須突出重點,突出應用性,側重教思想,即把程序設計語言的基本思想、基本環境、基本概念、基本知識和基本方法教給學生,使他們在學習中對硬件、軟件環境、程序設計的基本思想和基本技巧,所學程序設計語言的基本概念和使用方法以及編程技術有一個比較全面的感性認識,從而提高解決實際問題的能力。
2)打好數學基礎。嚴格的數學訓練是程序設計能力的基礎,學習和加強排列與組合、數列、數學歸納法等離散系統的數學方法對提高程序設計能力尤為重要。問題描述和建立數學模型是程序設計的前奏,數學歸納法、窮舉法、構造證明法等證明技巧是算法設計方法的基礎。
3)強化英語水平。程序設計語言的符號系統以英語為基礎,程序設計文檔語言首選英語。英文資料是計算機最新和最大的技術資料來源,英語水平是我國軟件產業發展和參與國際競爭的制約因素。
4)重視閱讀訓練。從某種意義上來說,程序設計是用程序設計語言和方法進行的一種寫作。可以想象,如果學生沒有閱讀過一份完整、規范、有實用價值的標準程序,即使記住了有關語言的語法規則,也不可能寫出像樣的程序。所以,大量閱讀、分析、修改和擴充典型的算法和程序,是提高程序寫作能力的有效途徑。而這個重要學習環節往往未得到應有的重視,缺乏配套的程序設計閱讀分析教材。教師應經常指導學生閱讀程序,理解程序,提高學生分析程序的能力。
5)注重算法設計,突出數據結構內容。瑞士科學家、PASCAL語言和MODULA-2語言的發明者沃思(Wirth)教授提出了著名的公式:程序=算法+數據結構。這個公式表達了程序的實質,說明對于一個程序設計問題來講,算法與程序設計是緊密聯系的,絕不能脫離數據結構去講解算法設計。程序設計語言的教學應該結合數據結構的基本內容。對于同一個計算問題,選用不同的數據結構,其算法大不一樣,算法的優劣程度也不同。因此,要教會學生對不同的問題選擇合適的數據結構。在整個程序設計課程中,必須強調算法設計方法,通過不斷的算法設計訓練,使學生切實掌握迭代、枚舉、遞歸、分類等常用算法設計方法。
6)更新教學內容。計算機學科是一門綜合性學科,而且程序設計語言的應用領域在不斷擴大和發展。因此,在教學中應結合專業的特點和教學的要求,將軟件工程的思想方法貫穿于整個教學過程,介紹程序設計語言的最新發展和應用,重視面向對象程序設計方法的引入,搞好教材內容的更新。如圖形程序設計、下拉式或彈出式菜單、計算機病毒防治等等。這樣不僅能把最新的知識和最新發展動態充實到教學上來,大大豐富了教學內容,而且使學生加深對程序設計語言的理解和掌握,保持對信息技術和專業的興趣,及時跟上信息技術日新月異的發展趨勢,在今后工作中保持領先地位。
7)采用先進教學手段。用傳統的課堂教學方法講授動態的算法和數據結構是十分低效的,像排序、遞歸等抽象動態的內容講解就常常是費力不討好。應該根據課程特點,采用先進的現代教學方法,如直觀教學方法:利用掛圖、教具等講解,以及計算機輔助教學(CAI)和計算機輔助學習(Computer Aided Learning,簡稱CAL)進行教學,通常開發利用與課程內容與教學特點相適應的多媒體課件進行教學。它們是講解算法和進行程序設計訓練的最佳教學平臺,既能增加學習的趣味性,又可利用圖形的直觀性幫助抽象和動態過程的理解。
8)加強實踐環節,強化創造性思維能力培養。在教學中,常常聽到學生提出這樣的問題:“程序設計語言有什么用?”,有的學生還反映:“程序設計語言并不難學,就是不知道如何應用?”一些學生學到了一定的科學知識,但上機動手水平低。這種現象與普遍忽視實踐環節有關。為了扭轉這一局面,在整個教學過程中,必須強調實踐環節的重要性,充分安排上機實踐時間,加強系統訓練和實踐能力的培養,強化創造性思維能力培養。根據課程特點,在教學中,采用案例驅動教學,進行興趣引導;在實踐中,可以精心組織一系列由易到難、由淺入深、配套銜接、結合學科學習、有一定設計技巧的程序設計作業,最后再安排一次綜合性強、有一定難度的課程設計實踐,對學生進行項目訓練,提高學生應用能力。通過上機作業和課程設計的完成,使學生獨立思考,各顯才干,總結經驗,培養他們的動手能力和編程能力,以及分析問題和解決問題的能力。
4 結論
總之,培養學生計算機程序設計能力的方法和途徑很多,但是編程序不難,編好程序不易。作為教師,必須從培養學生編程思維的角度出發,按照以上策略認真進行編程知識的教學和技能的培養,加強實踐,提高學生科學思維的能力,真正學會程序設計的真本領。
參考文獻:
[1] ,王楠.淺談程序設計語言課程教學方法[J].吉林大學學報(信息科學版),2005(S2).
[2] 徐進華.提高學生程序設計能力的幾個措施[J].計算機時代,2005(11).
[3] 李凌.淺談高級語言程序設計課堂教學方法[J].淮北職業技術學院學報,2005(04).
關鍵詞:課程;課程群;課程群建設
精品課程建設項目是高等教育質量工程的主要組成部分。德州學院從2003年啟動精品課程建設工作以來,先后建成23門省級精品課程、160多門校級精品課程,在課程建設上取得了長足的進步,學校的教學質量也有了更進一步的發展。由“離散數學”、“數據結構”、“數學建模”和“復變函數論”組成的信息與計算科學專業基礎平臺課課程群,經過幾年的建設取得了明顯的教學效果,于2012年被評為省級精品課程。由其組建的信息與計算科學教學團隊被評為省級教學團隊,促進了教學質量的提高和特色專業的建設。
1. 課程群建設的內涵
關于課程群的建設,目前學術界有多種論述,歸納起來不外乎兩種情況:一是基于學科劃分的課程群;再就是突破學科限制的課程群。但兩者有一個共同的特點,就是同一課程群的課程之間內容必須密切相關。我們認為,課程群就是內容緊密聯系、內在邏輯性強、屬于同一培養能力范疇的課程的有機整體,可以是同一學科的,也可以是不同學科的。
專業知識結構可分為五個層次:知識點、知識單元、課程、課程群、專業教學計劃,由此可見,課程群建設是專業建設的子集,是課程建設的超集,它打破了課程內容的歸屬性,從培養目標層次把握課程內容的分配、實施和技能的實現等。研究課程群建設,更易于專業教學計劃的實施,更易于培養目標的實現。
課程群建設把傳統的教學組織的兩層架構進化為三層架構,使技能要求獨立于課程,形成目標明確的課程群層次,嵌在課程和培養方案之間。由課程群承載技能培養目標,協調課程之間的關系,使目標明確。課程群建設弱化了課程的獨立性,強化了課程之間的親和性,凸顯它們為確定的共同培養目標的服務特征,突出各課程所蘊含的技能定位,把圍繞一個技能培養目標的、含有若干課程中的技能點抽象出來,在一個更高層次上連貫起來,使該技能的培養隨課程教學的推進而不斷遞進、加深和拓展,逐步實現與培養目標的重合。
一個課程群一般要由3門以上的課程組成,各課程教學內容具有不可重復性,同時知識點之間存在相對獨立和離散性,知識點之間關系親和,教學實踐環節或技能培養環節是連貫、遞進的。課程群的建設要符合在組織、內容、結構等方面的教學規約,具有顯著的技能屬性,教學目的性更明確,培養方向性更突出,技能培養的過程連續并不斷加深,外延不斷拓寬,課程的開放性更友好。課程群注重技能培養,弱化課程個性概念,強化課程內容之間的融合、交叉和關聯。
2. 課程群建設的目的與原則
對于信息與計算科學專業基礎平臺課課程群建設,我們認為必須涵蓋普通高等院校人才培養所必需的基礎理論、專業基礎理論、專業基本技能和專業核心技能的精華。在此基礎上,信息與計算科學專業基礎平臺課課程群建設首先要有助于專業培養目標的定位和培養目標的實現。確立信息與計算科學專業基礎平臺課課程群,以集中人力、物力來加強課程的研究和建設,從而加速專業素養和專業技能的培養,提高教學質量,取得重點突破的效果。這是課程群建設的目的所在。
課程群建設,要堅持五個“有利”的原則。一要有利于專業教學計劃的組織和實施;二要有利于深化教學改革、整合教學內容、提高教學質量;三要有利于教材建設和其他教學資源建設;四要有利于學生綜合素質和實踐技能的培養;五要有利于學生的就業。
3. 信息與計算科學專業基礎平臺課課程群的建設
(1)專業基礎平臺課課程群的構建。信息與計算科學專業基礎平臺課課程群建設應側重于“理論與實踐并重”的要求,問題的分析與計算模型的設計。而“離散數學”、“數據結構”、“數學建模”、“復變函數論”等屬于理論與實踐并重、計算模型設計類的專業基礎平臺課。“離散數學”是以研究離散量的結構及相互關系為主要目標,充分描述了計算機科學離散性的特點。通過該課程的學習,訓練學生具有嚴密的思維方法,嚴格證明的推理能力,應用自如的解題技巧,以及訓練有素的演算能力,使學生能掌握處理各種離散結構事物的描述工具與方法,為后續課程“數據結構”、“復變函數論”、“數學建模”的學習奠定了良好的基礎。數據結構主要研究數據的各種組織形式以及建立在這些結構之上的各種運算的實現,為計算機語言進行程序設計提供方法性的理論指導。通過該課程的學習,培養學生對算法的計算復雜性進行正確分析的能力,為“數學建模”和“復變函數論”中的編程解決實際打下堅實的基礎。復變函數論(雙語)主要研究解析函數。通過該課程的學習,培養學生的邏輯思維能力和抽象思維能力,同時提高學生編程解決實際問題的能力。“復變函數論”課程中的應用部分,要用到數學建模的思想、技術以及數據結構算法的思想,并且通過該課程的雙語教學,可以提高學生的英語表達能力和英語寫作能力,為學生參加美國大學生數學建模奠定良好的外語基礎。數學建模是一門理論與實踐相結合的課程,主要講述建模方法、運籌學模型、微分方程模型、統計分析、插值與擬合、預測與評價等理論內容,以及用MATLAB、SPSS等數學軟件編程求解各種數學模型的實踐教學內容。數學建模作為聯系數學與實際問題的橋梁,是數學在各個領域廣泛應用的媒介,是數學理論知識和應用能力共同提高的最佳結合點。數學建模的思想也融入了其他3門課程的教學中。通過該課程的學習,培養學生學會運用數學方法建立數學模型,并應用數學軟件解決實際問題。由此可見,離散數學、數據結構、數學建模和復變函數論4門課程具有強相關性,將其組合在一起共同建設,對于學生形成合理的知識結構、促進知識的交融、利用所學知識解決實際問題有著重要的作用。
(2)專業基礎平臺課課程群教學團隊建設。加強精品課程建設是提高高等教育教學質量的根本措施。要建好精品課程,最關鍵的是教學團隊建設。由離散數學、數據結構、數學建模和復變函數論4門課程的骨干教師組成的教學團隊由16人組成,其中教授4人,副教授8人,具有博士學位的教師4人,具有學科交叉背景的教師4人,2人為校級教學名師,1人為校級學術骨干。團隊中教學名師和學術骨干分別來自不同的著名高校,具有先進的教育理念、活躍的學術思想、強烈的開放意識、嚴謹求實的優良學風和突出的質量意識。由于對課程群建設的重視,經過多年的建設,已形成了一支學術思想活躍、教學科研緊密結合、學術嚴謹、老中青結合的教學團隊。這也是我校教學團隊建設的基本特色和基本經驗。
(3)教學內容和教材的整合與優化。由于信息與計算科學專業基礎平臺課課程群中各門課程之間存在門數多、學時多、相互之間內容重復、實踐環節薄弱等不足,我們重新修訂完善了教學大綱,制定了新的教學計劃。對不同課程之間內容重復或交叉的部分進行了有機的整合,更好地體現了“專業性”和“基礎性”;對各門課程的理論課時數和實驗課時數進行了調整,使之更合理;設計了體現課程間關聯的綜合性和設計性實驗,力求理論與實踐的緊密結合,突出了學生實踐技能的培養;在內容安排上,力求符合學生的認知規律,優化知識結構,突出專業培養特色。
該課程群中的每一門課都有完整的、較好體現培養目標和教學大綱要求的教材,對教學內容進行了整合和優化,加強了實踐教學環節,并且都配有實驗指導、多媒體課件、習題答案等,符合立體化教材建設的要求,更好地體現了課程群建設的思想,突出了課程之間的聯系和融合,突出了學生綜合利用所學知識解決實際問題能力的培養。
(4)教學模式和教學方法改革。在教學中,采用“三結合、四訓練、五注重”的教學模式和雙主線的教學設計、三層階梯式的教學架構、四級實踐教學體系。三結合是指“教學內容與上機實驗相結合”,“課堂教學中理論與實例相結合”,“課程設計與創新能力培養相結合”。四訓練是指基礎訓練、技能訓練、綜合訓練和開發訓練。五注重是指在教學中,注重通過情景創設激發學生的求知欲,注重通過問題質疑培養學生發現問題的能力,注重通過探索導引培養學生解決問題的能力,注重通過項目合作培養學生的合作意識,注重通過問題擴展培養學生的創新意識和自學能力。雙主線的教學設計是指,第一條主線就是教學過程中貫穿從簡單到復雜的認識過程,第二條主線是教學過程中貫穿解決實際問題能力的培養。三層教學架構是指在教學過程中引入創新思維,對課程的教學內容、教學模式和教學手段三個方面進行了相應的研究與設計。四級實踐教學體系是指采用興趣與項目雙驅動的實踐教學模式,強化實踐能力和創新精神培養,通過實驗強化基礎理論、課程設計鍛煉基本開發能力、創新大賽激發實踐熱情、學生科技創新項目與教師實際科研項目雙重交叉實訓等培養解決實際問題的應用能力。
在教學方法方面,我們主要采取了“啟發式”、“雙向互動式”、“研討式”等教學方法。①啟發式教學法:堅持以學生為主體,教師為主導的原則,以啟發式教學理論為導向,構建以準備、誘發、釋疑、轉化、應用為基本要素的傳動結構的教學模式。在課堂教學中,教師通過精心設計的問題進行誘發導引,并結合課堂練習精講啟發,及時總結學生討論交流結果,針對學生普遍存在的疑難問題進行講解,突破教學難點,將知識遷移轉化為學生能力,從而讓學生掌握解決實際問題的技能技巧,進而實現備教材、備教法、備學生的三結合。②雙向互動式教學法:教學中既要注重教師的教又要注重學生的學,采取合作互動的方法,即在老師的指導下,讓學生自己學會提出問題、分析問題、解決問題,充分發揮學生的積極性。變以“教師為主”的教學方式為以“學生為中心”的教學模式。③研討式教學法:首先教師精心設計問題,然后學生按教師傳授的方法進行獨立探索,并展開交流討論,最后由教師進行歸納總結和講評。這種教學模式突出了學生在學習過程中的主體地位,能夠充分調動學生的學習積極性和創造性,有利于培養學生的綜合能力,提高學生的綜合素質。
(5)課程網站建設。課程網站資源建設是課程教學改革中最重要的“物”的因素,是實現現代教育思想與理念、推行現代教學模式與方法、革新教學內容的有力載體和工具。我們開發了各門課程的課程網站,網站資源豐富,實現了在線學習、在線交流等多種功能,為教師和學生的交流和學習提供了良好平臺。
4. 信息與計算科學專業基礎平臺課課程群建設取得的成效
通過課程整合優化,密切了不同課程之間的聯系,增強了不同專業和不同課程之間的相互交融,減少了課程之間的相互重疊,增加了實踐環節的課時。由于各課程之間內容不再重復,知識具有遞增性,理論教學與實踐教學課時分配更趨合理,綜合性設計實驗密切了課程之間的聯系,應用技能為主的思想得到更好的體現,因而促進了課程體系的整體優化和協調發展。
課程群中的課程都開設了不同層次的實驗項目,以強化學生實踐能力的培養。通過基礎實驗鞏固學生所學課程的理論、方法和基本技能;通過綜合實驗,培養學生的創新意識及探索技能;通過開展課程設計,培養學生解決實際問題的實踐能力;通過組織學生參加全國大學生數學建模等科技競賽活動,進一步培養學生通過分析問題來建立數學建模、編程實現解決實際問題的能力。
通過對課程的整合優化,更加明確專業發展方向,并在不同課程群的建設中實現分類施教、差異培養的人才培養目標。學生在學習過程中,積極性、主動性增強了,興趣更加濃厚,同時對企業和社會的適應能力更強,系統觀念、整體觀念和分析能力都得到較好的培養,并且對自身的認識和發展方向更加明確。對教師來說,教學改革積極性空前高漲,多門課程之間甚至跨學科之間的交流和研討進一步加強,教師在教學、研究、技術開發等多個領域打開了更多的空間與通道。通過課程整合優化,形成了獨特的專業優勢。
實踐證明,信息與計算科學專業基礎平臺課課程群的建設取得了較好的教學效果,對于其他課程群的建設有很好的借鑒和示范作用。
參考文獻:
[1] 李慧仙.高校課程群的建設與評審體系[J].理工高教研究,2006(5).
[2] 胡發勝,劉貴真.國家精品課程運籌學的教學改革與實踐[J].中國大學教學,2006(7).
[3] 孫烔,郝建文,楊聯貴.數學精品課程建設的實踐與思考[J].中國大學教學,2008(1).
[4] 譚萍,庹清.高等學校精品課程的內涵建設研究[J].高等理科教育,2009(5).