緒論:寫作既是個人情感的抒發,也是對學術真理的探索,歡迎閱讀由發表云整理的11篇數據結構實驗報告范文,希望它們能為您的寫作提供參考和啟發。
隨著計算機處理的數據量越來越大,數據之間的關系也越來越復雜。“數據結構”這門課介紹最常用的數據結構,闡明數據結構的內在邏輯關系,討論它們在計算機中的存儲表示,并結合各種典型應用,說明它們在進行各種運算時的動態性質及實際的執行算法。“數據結構”的研究不僅涉及到計算機硬件,還和計算機軟件密切相關。計算機科學各領域及有關的應用軟件都要用到數據結構[1]。
1實驗教學在“數據結構”教學中的地位
“數據結構”的前導課是高等數學、高級語言程序設計、離散數學;它又是操作系統、編譯原理、數據庫原理、算法分析、人工智能、圖像處理等專業課程的前導課,具有承上啟下的作用。在計算機碩士研究生入學考試中都設有這門課,并且分值最高,所以該課被我校選入第一批重點建設課。它又是一門實驗性很強的課程,CC2001對該課程及相關內容和相關度進行了明確的描述。“數據結構”課程要讓學生掌握計算機處理非數值運算問題時的一般原理和方法,熟悉解決各種問題的基本模型,培養學生運用已有的算法語言編寫準確、清晰程序的能力。另外,通過本課程理論體系的學習,學生在設計軟件系統時應學會合理選擇數據結構,并能對所選模型進行初步評價,學生通過學習,能夠設計一個“好”的程序[2]。
實驗是學生檢驗所學理論知識是否牢固,并探索和運用知識的過程。通過實驗,學生不僅可以進一步理解數據結構的基本知識,通過對不同存儲結構和相應算法的對比及上機編程練習,提高根據求解問題性質選擇合理的數據結構并控制求解算法的時間、空間復雜度的能力,而且能進一步提高軟件設計和編程水平,提高學習的積極性和主動性,形成科學的思維方法和嚴謹的科學態度[3-4],因此“數據結構”的實驗十分重要。
2 “數據結構”實驗教學的改革和實踐
2.1更新教材和實驗報告
要推進實驗教學的改革,首先要改革現有教材,應重視學生實驗能力的培養,體現以學科為基礎的學科特色。在“數據結構”教學中,重點是讓學生通過實驗環節學習數據結構,讓學生明白哪些知識是基本點,哪些是難點和重點,明確學習目的和作用。在這樣的指導思想下,我們在2005年組織課題組成員,按照CC2001的要求,結合我國計算機的發展和2009年考研大綱,編寫了C++描述的《數據結構與算法》教材,于2008年秋季開始使用,效果良好。每過一學期,我們都根據當前情況和學生意見及時更新實驗報告。比如最初的實驗報告有一道字符串的實驗題,隨著計算機的發展,不論是C++語言還是Java語言,已經有現成的字符串庫函數,學生只要會使用庫函數即可,不需自己編寫,而且考研大綱也不作要求,所以我們及時更新了教學內容和實驗內容,并在實驗題目中增加了ACM大賽的實驗題,為學生參加程序設計大賽打下良好的基礎。
2.2設計合理的實驗題目
實驗報告是“數據結構”實驗環節的重要內容,題目的選取要符合學生的實際水平,而且要有跨度,否則會白白浪費學習時間。2001年,我們調研了清華、北大等各院校的教學改革情況,并征求了畢業生和已學過這門課的在校生意見,發現我們的教學沒有從學生的實際情況出發,很難調動學生的學習興趣。為此,我們從2002年開始編寫實驗報告,把實驗題分成三個層次,有驗證(改進)型、綜合型和設計型題目。驗證型題目是對教科書上典型算法的實現,也有驗證改進型的,即是對書上算法稍加修改,這就要求學生必須事先看懂書上的算法才能修改;綜合型題目是將不同的實驗進行組合,綜合解決較復雜的問題,要求學生利用各種知識解決新的問題;設計型題目是教師提出實驗目的和要求,學生自行設計,完成實驗內容,要求學生的基礎比較好,一般安排在課外進行,極大豐富了第二課堂。學生可根據自己的能力選擇不同層次的實驗題目,大大提高了學習積極性。
我們還鼓勵學生對教材中的遺留問題進行自行設計,也鼓勵學生根據自己的愛好做一些小的系統實驗。這不但使學生的基本知識和實驗技能得到鞏固,還可以提高學生的創新能力。實驗報告的每道實驗題都有明確的“對問題的描述”、“實驗目的”、“實驗內容及要求”、“測試數據”和“思考”,學生每做一道題,都明白實驗的目的和要求,完成后,教師還要根據“思考”題目及時向學生提出問題,學生可以自行設計實驗方法來解決,教師也可以引導學生設計疑問,主動將教材上的驗證性實驗轉變為設計性實驗,教會他們舉一反三,促進學生的思維向新和深的層次發展,加深他們對所學知識的理解。
實驗題目還要新穎、有趣。比如我們的實驗報告有猴子選大王、迷宮等問題,學生可以使用動態規劃、回溯法、分支限界法等算法,將幾個算法的實際執行時間進行比較,從實驗結果證明理論分析的正確性。
2.3建立“以老帶新,青年為主”的教學梯隊
我們的教學梯隊平均年齡35歲,教授、副教授占40%,講師占40%,助教占20%。青年教師中有碩士和博士研究生,他們接受新鮮事物快,精力充沛且動手能力強,但缺乏教學經驗,所以我們要求青年教師至少帶兩年的實驗輔導和習題課,在第一次主講之前至少要聽有經驗教師一學期的課,而有經驗的教師還要不斷試聽青年教師的課,指出不足之處,幫助他們盡快提高教學水平。經過幾年的鍛煉,青年教師陸續登上講臺,共有3人在內蒙古大學“青年教學技藝大賽”中獲得了1個一等獎和2個二等獎,其中1人獲得高等院校第四屆青年教師課題教學技能大賽理科組一等獎,成為這門課的骨干教師。
2.4加強上機輔導和課后輔導
編程是高強度的腦力勞動,不是聽會的,也不是看會的,而是自己練會的。剛開始,大部分學生上機前沒有編好程序,而是上機時現編程序,白白浪費寶貴的上機時間;有些教師輔導時發現學生的程序有錯,就動手幫助調試,而不是給學生指出錯誤的原因,讓學生明白后自己修改。結果雖然程序調試好了,但學生不知道是什么原因,以后再有錯誤時就依賴教師修改,輔導教師很累,而教學效果并不好,學生和教師都有怨言。針對這些情況,我們要求每個學生上機之前就把程序編好,上機調試過程中有問題要及時問老師,最大限度地利用上機時間;教師輔導時既要認真負責,又要講究方式方法,學生有問題,教師要指出錯誤所在,讓學生明白錯誤的原因,然后讓學生自己改。這樣既可以提高學生的編程能力,又使每個學生的問題都能及時解決。
每做一道實驗題前,教師都會大致解釋題目的含義、用到的知識模塊,有的還要引導學生查閱一些參考資料。每當一個模塊結束后(以一個邏輯結構為一個模塊),我們都要把幾個班的學生組織在一起(平時上課是小班),對已經驗收過的較好程序和普遍存在的問題進行統一講解和總結。通過總結,學生加深對實驗的理解,知其然,也知其所以然。通過融會貫通已完成的各部分實驗,自然引出下一模塊的實驗。
由于現在學生都沒有固定教室,教師沒有輔導的固定地點,我們每周一至周四下午安排一名教師在辦公室答疑,哪個班的學生都可以到指定辦公室問問題,值班教師在辦公室的機器上修改學生的程序,這樣比在教室里單純講解理論的效果要好得多。
2.5加大對實驗環節的考核力度
學計算機的,不動手是學不會編程的,學不會編程也就等于沒有學會計算機,所以要提高學生的編程能力,就要加大對學生實驗環節的考核力度。在“數據結構”課程考核中,平時成績、實驗成績和理論考試成績比例為1∶4∶5。為了杜絕考前突擊復習的現象,我們在第一節課就講清要求,讓學生從上課的第一天起就重視這門課,真正掌握這門課。在實驗環節的考核中,驗證型題目一般要求1周內完成,綜合型題目一般要求2~3周內完成,對于綜合型題目,學生先按2~3人分成一組,每人完成一個模塊,通過接口的調用組成一個完整的程序,最后隨機抽取小組中的一名代表講解編程的設計思路,演示程序執行情況,輔導教師根據完成情況給出一個代表小組的分數。學生要在規定的時間請輔導教師驗收實驗題,過期不驗收,視為自動放棄,本次實驗題沒有成績。
經過七年實驗教學的改革與實踐,我們取得了明顯效果。2007年6月,在哈爾濱工業大學舉行的“東軟杯”ACM/ICPC中國•東北地區首屆大學生程序設計競賽中,我院選派了3支代表隊,結果分獲一、二、三等獎;2007年11月,在計算機學會、高等學校計算機教育專業委員會主辦,內蒙古大學承辦的第二屆ACM/ICPC
大學生程序設計競賽中,我院分獲團體、一、二、三等獎;2008年,在ACM程序設計相關比賽中,我院獲自治區級一等獎、2個二等獎,獲東北賽區1個三等獎、2個優秀獎。
實踐證明,這樣教學改革不僅能激發學生學習的積極性,還能鍛煉他們的團隊精神,讓他們學會軟件開發的整個過程,為他們編程能力的提高、畢業論文設計和走向工作崗位打下良好基礎。
3結束語
從2009年開始,計算機碩士研究生入學考試采取全國統考的方式,“數據結構”是必考科目,而且占分值最大,這更能說明這門課在計算機專業中的重要性。這些年來,我們一直致力于這門課的建設,從教材選用、課程體系建設、師資隊伍、課程教學、實驗教學等各個環節進行了不斷的實踐和探索[5]。我們相信,通過加大對“數據結構”教學,特別是實驗環節的改革和實踐,一定能進一步調動起學生學習這門課的積極性,激勵他們熱愛計算機,熱愛科學,成為IT業的優秀人才。
參考文獻:
[1] 殷人昆. 數據結構[M]. 北京:清華大學出版社,2007.
[2] 王昭榮,曾衛東,魯興萌. 改革實驗教學及管理模式,培養創新型本科人才[J]. 高等理科教育,2007(1):63-65.
[3] 汪沁. 基于“數據結構”實驗的探討和研究[J]. 中國教育信息化,2007(4):17-19.
[4] 徐大華. 程序設計語言教學方法探討[J]. 高等理科教育,2007(1):36-38.
[5] 趙艷紅,邵定宏.“數據結構”教學的探索與研究[J]. 計算機教育,2008(9):131-132.
Reform and Practice in Data Structure Course’s Experimental Aspects
ZHAO Yu-lan
中圖分類號: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.
關鍵詞:研究型教學;實驗教學;智力能力培養;教學方法;數據結構
社會的發展對當前我國高等教育提出了具體的要求,所培養的學生必須具備全面發展的素質,包括掌握科學的學習方法和具有會學習的本領,具備積極創新的能力和生動活潑的特征。這一特征,使得高校教育改革應該不斷地向更高、更深刻、更全面的層次上發展。教學改革是教育改革中最為重要的一部分。如何創造良好的學習環境和條件,革新教學手段和方法,全方位地培養學生的智力和能力,關鍵是要轉變教育觀念,改革人才培養模式,改進教師的教學方式,增強學生學生的學習的主觀能動性,積極采取啟發式、研討式等研究型教學方式。
但是在高等教育過程中對研究型教學的認識程度還不夠高,開展的深度與廣度都還不夠,從而成為制約教學質量進一步提高的一個瓶頸而引起了各高校的普遍關注。本文結合我們開展研究型教學的實踐,對《數據結構》課程的實驗教學改革進行了一定的嘗試,取得了初步的教學效果。
一、研究型課程教學的基本理念
國內研究型教學的實踐,一方面是對國外先進教育方式的借鑒,另一方面也是對國內實施已久的高校學習與科技興趣小組活動乃至啟發式、討論式、發現法教學方式等經驗的系統提升。
1、赫爾巴特“主知主義”課程理論。赫爾巴特的課程理論被稱為“主知主義”,它是以知識作用為本位的課程論,同時還明確主張學生從總體上對教師保持被動狀態,強調教師的權威意志和主導責任。因而,人們把赫爾巴特視為“教師權威論”或“教師中心論”的代表人物。
2、杜威的“實用主義”課程。杜威主張教育要“以學生為中心”,要求教育的一切措施圍繞著學生來組織,以促進學生的個性發展。他認為學生的學習不應是被動接受知識的過程,而類似科學家研究發現知識的主動探究過程。杜威的教育思想深刻地影響了20世紀初至當代的全部教學論的發展。教育家陶行知先生是杜威的學生,他將社威的教育思想引入我國,并在國內進行了卓有成效的教學實踐,創立了“知行統一”的課程理論,至今對我國教育界仍產生著深刻影響。
3、研究型課程理念。研究型課程教學的基本理念是:對歷史上傳統的教育學派的“主知主義”、“教師中心論”和進步教育學派的“實用主義”、“學生中心論”中合理的部分加以有機的整合,揚棄其狹隘、刻板僵化的部分,注重發揮教師的主導責任和學生的主體作用。它以促進學生的個性發展為宗旨,以改變學生單純地、被動地接受知識傳授的學習方式為著眼點,構建一種開放的學習環境,為學生提供一個多渠道獲取知識,理解自然、個人、社會等問題,并將學到的知識綜合應用于實踐的機會。它在幫助學生進行接受式間接學習的同時,形成一種對知識的主動式直接探索,以提高其解決實際問題的能力的研究型學習形式。
二、研究型課程教學的指導思想和教學原則
《數據結構》實驗教學是一種驗證型的教學模式,將課堂上所學的理論知識與計算機上機實踐相結合,通過利用高級語言環境對書本上的算法進行驗證,從而達到鞏固理論知識的目的。而研究型實驗教學的指導思想,不僅僅在于驗證書本知識和鞏固理論知識,而是更加重視理論知識的綜合應用,強調整個過程的參與和學習,發揮學生學習的主動性,激發學生的學習興趣和創造力,培養學生的團隊精神和協作意識。因此,全面培養學生的智力和能力,是研究型實驗教學的指導思想。
在上述教學思想指導下,在實驗教學過程中必須堅持的教學原則是:
1、教師指導與學生動手并重。雖然有效快捷的學習離不開教師的指導,但指導只是一種手段。在現代教學過程中,教師的指導旨在教會學生學會學習,這不僅是今后終身教育的要求,而且只有學會學習,掌握了科學的學習方法,學習主體才會真正具有一種參與到教學過程中去的能力。
2、面向結果的教學和面向過程的教學并重。面向結果的教學是指教師在教學活動中以使學生獲得令人滿意的結論作為教學的直接意義,它是傳統教學所強調的教學形式。面向過程的教學則是教師在教學活動中重視引導學生對知識形成過程的理解與實踐,并在理解和實踐中仔細體驗獲得這一知識的基礎和條件,以及它與其他知識的相互關系等。從主動學習的角度看,面向過程的教學會給學生主體帶來一種更高的價值。
3、一般能力的培養與創造品質的形成并重。學生能力的培養已成為現代教育的重心,然而在促進學生的一般能力有較全面提高的同時,教師應該對學生的創造能力的發展給予特別關注,因為創造品質已成為現代人素質結構中最重要的組成部分。
4、理論學習與實踐活動并重。理論來源于實踐,反過來又指導實踐。只有堅持理論聯系實際,才能有所發現,有所創造。
5、接受式學習與探究式學習并重。接受式學習是一種被動的學習過程,而探究式學習則是一種主動的學習過程,只有發揮了學生主體的積極性,才能使得學習收到事半功倍的效果。近年來,我們對《數據結構》實驗教學的研究型教學模式的探究,正是堅持了以上這些教學原則。
三、研究型《數據結構》實驗教學環節的設計與實施
研究型教學依據其內容的不同可分為認知理解類和實踐應用類。研究型《數據結構》實驗教學屬于實踐應用類。主要憑借算法構造思維方式,從具體操作規范入手,通過操作過程的構造實施,解決特定問題,理解、習慣、掌握算法思維方法是一個構造性、研究型方式的訓練過程,其核心內容就是通過學習結構技術的過程,培養學生算法設計能力以及創造性思維,培養舉一反三、觸類旁通的能力,以達到提高學生應用知識解決復雜問題的素質能力和的目標。計算機的程序設計是一項創造性的智力勞動,讓學生深刻掌握這一套算法構造思維方法,是實踐環節所要解決的核心問題。因此,我們注重為學生創設智力發展的環境與條件,設置智力因素和非智力因素相結合的條件。我們根據研究型《數據結構》實驗教學的指導思想和教學原則,考慮到培養計劃的安排,我們對每一次實驗課都進行了精心地策劃,并要求寫出實驗報告。主要分為確立問題階段、實踐體驗階段和成果交流階段等三個階段來進行。這三個階段并不截然分開,而是相互交叉推進的。實施流程通常為:“引出問題,建立假設”——“研討探究,驗證假設”——“得出結論,切磋交流”——“歸納總結,形成評價”。
⑴確立問題階段。教師介紹上機環境及算法在相應數據結構中的地位和作用,包括使用的編程環境,在驗證算法過程中需要注意的問題,講解如何查找相關資料,并展示歷屆學生的實驗報告樣本。學生3—4人自由組合成立研究課題小組,選出組長;通過查找相關資料,擴展相關算法,提出研究課題,寫出實施計劃。在此基礎上,教師組織各小組進行答辯,組長對研究課題的目的、背景資料、理論依據、技術方法、計劃和目標等進行解答,并回答教師提出的有關問題。
⑵實踐體驗階段。教師根據實驗室條件、答辯情況和課題難易程度等,有重點地抽查6—7組作為本次實驗教學課的指導對象,并強調在上機實踐過程中的注意事項與具體要求,講解實驗報告格式和撰寫方法,并要求各組人員進行具體分工。學生利用4節課的時間上機實踐,并記錄編程調試過程中的相關數據和出錯信息。
⑶成果交流階段。實驗完畢得出結果后進行資料整理,并開始撰寫實驗報告。教師對各組的實驗報告進行初審,提出具體修改意見。各組學生對實驗報告認真修改和補充,做到報告格式化、標準化,并正式提交給教師再次審查,教師根據情況評定成績,作為期末成績總評的參考依據,并在課堂上組織學生交流實驗感受及取得的成果。
通過實驗實踐內容的訓練,突出構造性、研究型思維訓練的特征,提高了學生組織數據與進行編寫大型程序能力;更好地理解和掌握了算法設計所需的技術,為整個專業學習打下了良好的基礎。學生通過完成《數據結構》實驗課程的設計任務,不僅把設計優良算法與掌握面向對象的編程技巧結合起來,而且能培養綜合運用所學知識來獨立解決實際問題的能力,給學生發展個性化以更加廣闊的天地。實驗教學的改革與實踐結果證明,貫穿于實驗教學環節的研究型實驗教學,使得理論教學與實驗教學有機的整合,收到了良好的教學效果。
四、研究型《數據結構》實驗教學在人才培養過程中的作用
1、研究型《數據結構》實驗教學有利于學生的智力開發和能力培養。
教學的目的不僅要使學生獲得知識,而且更要使學生獲得智力的發展,要使學生掌握點石成金的方法。能力與智力是兩個相對獨立的概念,二者有區別,又有密切聯系。二者之間不一定成正比例關系。智力屬于認識活動的范疇,而能力屬于實際活動的范疇。智力是保證人們有效地認識客觀事物的較穩定的心理特征的綜合,能力是保證人們成功地進行實際活動的較穩固的心理特征的綜合。智力結構由注意力、觀察力、記憶力、想象力和思維力5部分組成,能力結構由組織能力、定向能力、適應能力、操作能力和創新能力5部分組成。研究型《數據結構》實驗教學是全過程的教學,從給定的算法到算法擴展、從選題到實驗報告及其答辯的所有過程中,幾乎都是以學生為主體開展活動,教師僅僅負責組織和教學引導。特別是在科學研究方法和科技文獻的查找、科技報告的寫作訓練等方面,讓他們在低年級就能得到很好地鍛煉,為今后寫好畢業論文打下了堅實的基礎。所以,這種新型的教學方式對于全面培養學生的智力和能力是十分有利的。
2、研究型《數據結構》實驗教學可激發學生的求知欲和創造力。
教師要善于采取相應的改革措施,創設智力發展的環境與條件,用生動的實踐活動來鞏固和強化學生的求知欲,激發學生的好奇心、興趣、想象力和創造力。因為興趣是推動學生求知欲的強大內在動力,興趣往往是創造的先導,同時想象在人的智力活動中也占有極重要的地位。由于研究型《數據結構》實驗教學與中小型軟件開發結合起來,使學生們很感興趣。他們本來對軟件開發充滿了好奇與想象,在學習了《數據結構》以后,有了一定的算法理論基礎,可以根據自己的興趣,充分發揮想象力和創造力,對軟件開發進行有益的嘗試。
3、研究型《數據結構》實驗教學有利于培養學生動手動腦、理論聯系實際的能力。
研究型《數據結構》實驗教學要求學生動手動腦,手腦并用,既應用了已掌握的知識,又促進了思維力、理解力和創造力的發展。所以,我們認為知識與智力上的綜合訓練是發展智力的重要條件。在實驗教學活動中,學生們不僅動手編制了相關的應用程序,而且還掌握了使用相關編程工具的方法,并通過實踐和反復總結后,理解了對同一算法可以從多種不同的角度來實現的深刻內涵。
4、研究型《數據結構》實驗教學能培養學生的團隊精神和協作意識。
學生積極參加研究型《數據結構》實驗教學活動,不僅促進智力和能力的發展,而且能很好地培養學生的團隊精神和協作意識。由于我們的整個教學活動是以小組進行的,無論是在上機編程,還是在查閱資料、撰寫和修改實驗報告,各小組成員都能認真參與,并很好地配合組長工作,表現出良好的團隊精神和協作意識。最后,當順利完成實驗報告并通過教師驗收時,他們感到有一種來之不易的集體成就感和榮譽感。所有這些,使他們更加堅定了自信心,激發了學習興趣,鍛煉了能力,提高了智力。
當然,同傳統的實驗教學相比,研究型《數據結構》實驗教學對教師的要求更高了,付出的也更多了,同時得到的也更多。因為這是一種過程的學習和參與,學生和教師都從中受益匪淺。因此,只要我們提高了對研究型實驗教學的認識,端正了態度,掌握了科學的指導方法,就會去不斷地創新,必將能培養出智力和能力全面發展的一流人才。
參考文獻
[1]文輔相. 素質·方法·創新[J].高等教育研究,1999.
[2]陸國平,江瑩,李松.研究型大學與思想庫[J].高等教育研究,2001.
[3]沈顯生,尹路明,李樹美,楊捷頻. 研究型野外實習教學的設計與實踐[J].教育與現代化,2002.3.
近年來,在產業界急需大量軟件開發人員的情況下,普通本科院校計算機專業學生的就業率持續走低。網絡、報紙等媒體對計算機本科教育現狀多有批評,甚至出現了大學不如培訓公司的極端觀點,嚴重影響了學生對專業課程的學習興趣、動力和信心。數據結構是計算機專業的核心基礎課程,上承程序設計語言、離散數學,下啟操作系統、編譯原理等課程,其重要性不言而喻。一方面,數據結構學科具有難度大、抽象層次高、概念繁雜等特點,學生很難掌握,更不要說將抽象理論與就業實踐需求相結合。另一方面,國內主流數據結構教材和相應的傳統教學模式側重于培養學生的計算機學科基礎理論素養,而將如何通過組織數據結構教學活動積極推動就業的問題留給了任課教師[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.
作者簡介:周芳(1984-),女,江西撫州人,桂林電子科技大學生命與環境科學學院,助教。(廣西 桂林 541004)
中圖分類號:G642.0 文獻標識碼:A 文章編號:1007-0079(2012)04-0060-02
“數據結構”是一門研究非數值計算程序設計中操作對象,以及這些對象之間的關系和操作的學科。該課程具有較強的理論性和實踐性,是一門公認的比較難學的課程,原因在于:本課程理論性和抽象性很強,需要學生從傳統的形象思維轉向科學的抽象思維,學習難度大,學習興趣低;教材采用類C語言作為數據結構和算法的描述語言,有的學生由于前修C語言程序設計課程掌握得不好,影響到本課程的學習;本課程作為非計算機專業學生的專業限選課,共48課時,其中理論32課時,課時有限而課程內容繁多。針對這些問題,本文介紹和探討了一些切實可行的解決方法。
一、把握課程內容主線
為了整體把握好這門課,教師應弄清課程的基本內容、基本結構、各部分間的關系及貫穿全課程的基本線索。
“數據結構”所選教材為人民郵電出版社出版的嚴蔚敏編寫的《數據結構(C語言版)》。全書共八章,其中第一章為緒論,綜述數據、數據結構和抽象數據類型等概念;第二章至第六章從抽象數據類型的角度,分別討論線性表、棧、隊列、數組、樹和二叉樹以及圖等基本類型的數據結構及其應用;第七章和第八章分別討論查找和排序方法,除了介紹各種實現算法之外,還著重從時間復雜度、空間復雜度以及穩定性等方面進行定性或定量的分析和比較。貫穿全書的主線為邏輯結構、存儲結構和數據運算,如圖1所示。邏輯結構是從具體問題抽象出來的數學模型,從邏輯關系上描述數據。根據數據元素之間關系的不同特性,分為線性結構和非線性結構。存儲結構是邏輯結構在計算機中的表示,有順序存儲結構和鏈式存儲結構兩種。數據運算是指在某一類型數據結構上涉及的基本操作,有插入、刪除、修改、排序和查找等。
抽象數據類型是指由用戶定義的、表示應用問題的數學模型,以及定義在這個模型上的一組操作的總稱,具體包括三部分:數據對象、數據對象上關系的集合以及對數據對象的基本操作的集合。在講解每一種數據結構時都要緊扣課程主線,從抽象數據類型的觀點來討論。比如,將第二章線性表的知識點概括為兩大部分:線性表的抽象類型定義和線性表的應用,如圖2所示。定義中,數據元素之間邏輯上存在線性關系,在計算機中表示這種關系的兩類不同的存儲結構是順序表和鏈表,如圖3所示。對于順序表,元素存儲的先后位置反映出其邏輯上的線性關系,借助數組表示,對順序表的基本操作實質是對數組的操作。對于鏈表,是依靠指針來反映其線性邏輯關系的,對鏈表的基本操作實質是對指針的操作。緊扣主線,教學思路清晰,學生學起來系統性強,容易掌握。
另外,作為一門專業限選課,“數據結構”課時有限而課程內容繁多,教師不應把所有內容都填鴨式灌給學生,應啟發學生,拋磚引玉。比如,第八章排序方法很多,不可能一一講解。首先對其分類,每一類中講解一到兩種排序算法。重點是讓學生明白分類依據,深刻理解排序方法的基本思想、特點、實現方法、改進創新之處以及其性能分析。
二、解決學生對C語言知識掌握的不足
教材中采用類C語言作為數據結構和算法的描述語言。數據結構上機實驗課上要求學生使用C語言環境編寫代碼,完成實驗內容。因此,學生對C語言程序設計課程掌握的好壞直接影響數據結構課程的教學效果。
C語言程序設計不僅理論性強,而且應用性和操作性更強,要求學生具備分析問題的能力、構造算法的能力、編程的能力和調試程序的能力。C語言功能豐富、表達能力強、使用靈活方便,學生掌握不理想,而解決學生對C語言知識掌握的不足對數據結構課程教學大有裨益。總結數據結構課程中用到C語言的主要知識點有:
形參和實參概念,函數參數傳遞方式,包括按值傳遞、按地址―指針傳遞和按地址―引用傳遞三種方式;
地址和指針的概念,變量的指針,數組的指針;
定義結構體變量方法,結構體變量的引用,結構體數組,指向結構體類型數據的指針;
一維數組的定義和引用,二維數組的定義和引用。
以上四點是C語言難點,將這些知識點納入到教學內容中。這樣既可以復習以前的知識,加深印象,強化理解,又可以為數據結構課程的教學做鋪墊。
三、講好第一堂課
俗話說“好的開端是成功的一半”,第一堂課是“重頭戲”,好的開端能吸引學生的注意力,使學生產生強烈的求知欲,從而調動學生學習的主動性,從“要我學”變成“我要學”。
第一堂課多為緒論課,講解的內容不僅涉及課程的性質、地位和作用,課程的學科基礎,主要內容和知識結構,學習方法等方面,更側重強調它的應用前景。“數據結構”主要研究如何合理地組織數據、高效地處理數據,在現實世界中有很多應用,如線性表和學生信息管理系統;棧和八皇后問題、Hanoi塔問題;隊列和食堂、加油站的順序服務;樹和人類的族譜、公司組織結構;圖和通訊網絡構建、最短路徑。
興趣是最好的老師,而問題是興趣的源泉。學生真正關心的是學以致用,如何應用所學知識到現實世界中解決實際問題。因此,教師結合實際問題,激發學生學習的興趣,為以后的講課創造了良好條件。
四、加強實驗環節
“數據結構”具有很強的操作性和實踐性,設置實驗環節十分重要。通過實驗內容的訓練,一方面加深學生對課堂所學知識的理解,另一方面培養學生算法分析、算法設計的軟件開發思維模式,鍛煉學生上機編寫程序和調試程序的能力。
實驗課共8次,16學時,實驗內容安排如表1所示。其中,實驗一和實驗二復習C語言中函數參數傳遞方式和結構體使用;實驗三至實驗六涉及了順序表、單鏈表、棧以及隊列的基本操作及其應用;實驗七和實驗八分別是折半查找和排序方法。實驗內容涵蓋理論課的主要內容,使實驗課和理論課有機結合,相輔相成,加深學生對知識點的理解。
實驗課分為實驗預習、上機操作和實驗報告三部分。實驗前,學生閱讀實驗指導書,了解清楚本次實驗的目的、實驗要求和實驗內容。實驗中,教師首先對實驗所涉及的知識點進行講解。然后學生根據實驗內容完成算法分析、程序設計和調試測試,教師答疑指導。實驗結束后,要求學生完成實驗報告,重點體現知識點的總結,實現算法的流程圖以及調試過程中問題是如何解決的。
實驗課應充分調動學生學習的積極性,讓學生收獲實驗成果的喜悅。筆者根據自己的教學體會,總結出以下四點心得:
讓學生參與講解,體會知識分享快樂,激發學習熱情;
強調程序調試的重要性,不要在心里懼怕程序出錯;
鼓勵多進行交流,通過團隊合作的方式幫扶基礎差的學生;
及時批改實驗報告,發現問題,在下一次實驗時進行講解。
五、結語
“數據結構”課程由于受課時少和前修課程不足等因素的限制,教師想教好,學生想學好都有較大的難度。恰逢此時,為提升教師教學水平,筆者所在學校組織觀看北京理工大學龔紹文教授的“關于如何講好一堂課的十個問題”的培訓講座錄像,此次培訓使筆者受益匪淺,為此結合教學實踐從以上四個方面積極探索,取得了切實的效果。但對課程體系的建設,學生學習興趣的激發,教學方法的改進等問題仍需進一步研究。總之,講好數據結構課將是筆者今后追求的教學目標。
參考文獻:
[1]嚴蔚敏,李冬敏,吳偉民.數據結構(C語言版)[M].北京:人民郵電出版社,2011.
中圖分類號:TP3-4 文獻標識碼:A文章編號:1007-9599 (2011) 06-0000-01
Teaching Research on Data Structure Experiment
Zhang Xiujian
(Guangzhou University Sontan Collehe,Guangzhou 511370,China)
Abstract:Data structure is a course that emphasizes that exercise of logical thinking and programming ideas.In this paper,we argue that the appropriate experimental program and integration of software engineering can improve student’s innovative ability.
Keyword:Data Structure;Experiment;Programming;Teaching
《數據結構》,是一門重要的理論學科。通過調研看出,該科目在各個院校的實驗教學情況存在較大差異。學生學習理解過程緩慢,教師教學也不能得心應手,尤其是實驗課,由于部分學生對編程語言掌握不熟練,實驗內容抽象,而有較大畏難情緒,甚至不參加實驗課。雖然曾經有些教師參考了任務驅動、實例教學等方法,但過于強調某種教法,也會影響教學效果。所以,該課程宜結合課程特點設計教學,切實通過貼近于實際的方法傳道授業,結合實驗落實教學效果是非常重要的。
一、數據結構課程實驗教學中問題所在
(一)實驗課時欠缺。有的學校壓縮實驗時間,讓位于理論教學,這對學習效果的落實來說是本末倒置。沒有足夠的實驗課時,學生就無法把理論知識加以系統地整理,進而在實驗中消化吸收。
(二)綜合性、創新性實驗科目欠缺,系統性不強。開設的數據結構的實驗課程中,雖然安排了相關知識點的實例,但是對設計的創新性和綜合性上有待提高,要加強知識點的綜合運作。
(三)沒有很好地結合課堂教學和實驗教學。作為一門比較抽象的理論教學課,尤其要重視課堂和實驗教學相結合。實驗中要突出該課程的實踐性,教學中要注重理論和實踐的結合。現在,不少教師只重視知識的灌輸,在實驗中任務不明確,要求不明晰,讓學生在實驗中迷失了對理論的進一步實踐的方向。
二、實驗教學的改革探索
(一)教學模式的改變。基于數據結構課程理論難于理解的特點,要突出實驗課的效果,要注重“課堂.一章的基礎性實驗.綜合實驗”相結合的框架。注意從邏輯機構到存儲結構,再到實現基本算法,繼而具體應用的方法,一以貫之地落實到數據結構教學中去。算法的講授要先分析算法,再運用編程語言演練算法,最后進一步分析算法。如能采用多媒體演示算法的步驟,會使學生更加清晰地理解。課堂教學始終要把應用的要求作為做種目標,輔以實驗訓練,加強學生動手編程和自我創新的能力。
(二)基礎實驗環節要重視。實驗環節要讓學生進一步理解數據結構的特點,明確相關概念,熟練各種基本算法的實現。枯燥的理論講述的再多,也不如配合實驗讓學生一練,所以教學要重視基礎實驗環節。要想獲得扎實的教學效果,教師要提供實驗編程語言,Turbo C、Visual C++、Delphi等都可以。根據教材確定實驗方案,明確實驗目的、內容、要點和必備注意事項,最后安排幾個演練題目,比如矩陣的遍歷、數據的折半查找等。實驗課程要貼近學生的編程水平,不可偏離太過。實驗中,學生有章可循,對要點有較強的針對性,實驗效率就會大大提高,使學生真正能舉一反三。
(三)課程實驗要理論應用相結合。實驗要注意結合原理和應用,讓學生在解決實際問題時學會調用學過的知識點,養成動手練習語言編程的習慣,所以,這個層面的綜合實驗要求要高于普通的課下練習和基礎實驗,更貼近于應用。平時雖然側重練習簡單的算法程序,但綜合實驗課是軟件設計的高級訓練階段,融合了問題的分析,系統結構設計、操作界面設計、編程技能技巧,是軟件設計的系統工程。教師分階段擬定數據機構在實踐中的各種應用,比如:漢諾塔問題、約澀夫環問題、Huffman Coding方式、班級信息管理系統等,把任務分配給學生,讓學生組織課題公關。課題的結題要提供課題表述、基本要求、實驗數據、實現結果和關鍵實現步驟等內容,這能協助學生破題解題,以免形成錯誤的認識,同時也講解了程序設計的基本路線,確保實驗目標的實現。最后每個課題組都集中展示實驗過程接結果。試試證明,這樣的實驗環節,綜合了數據結構知識、編程語言技能和軟件工程思想,讓學生系統地理解各門課程的聯系,融合相關專業課的精髓,鍛煉了學生的團隊合作互助精神,提高了組織能力和管理水平
三、重點組織好教學實驗的各個環節
(一)實驗題目的設計。鑒于實驗環節教學時間的限制,學生的編程基礎和技能較為薄弱,所以,設計和擬定合適的實驗題目尤為重要。實踐題目應該由易到難循序漸進:
1.常用算法練習。主要講解各章節知識點,深入貫徹算法理論的理解;2.基礎性應用練習。主要讓學生針對單一的數據結構解決應用難題,其難度中等;3.綜合應用題目練習。要涵蓋多個章節的內容,系統性強,難度較高,可以組織學生成立課題組,在課外實驗環節共同研討解決,再集中展示。課題的設計要注意:(1)常用算法的練習要有一定代表性,重點練習各個章節的知識點,難度較小,目的在于理論知識的掌握。課堂教學要和實驗環節對應,學生在試驗中重點演練課上講授的內容。(2)基礎性應用練習難度要適中,既要帶動基礎薄弱的學生,又要注意發揮基礎好的學生的能動性,可以加以延伸,或是鼓勵提供多種解決方法,進行不同思路的性能的比較,讓各個層面的學生都能參與實驗。(3)綜合應用練習題不宜太難,但要引起學生的興趣,宜于結合實際中的事物或應用系統,讓學生宜于接受和理解,這樣才能促進學生的積極性。
(二)實驗環境的搭建。現在很多學校選取譚浩強教授出版的《數據結構(c語言版)》作為教材,應用C語言進行數據結構的設計語言,用TC搭建實驗環境。而在實際教學中,應用C語言講解數據結構常常對算法設計和實現上較為突出,對數據結構的系統性容易忽視。如果用C++進行數據結構的實驗練習,可以注重其整體性和系統性,先定義數據結構的類,再分析其邏輯特性,然后把存儲結構延伸到算法的實現中去,能幫助學生構建數據機構的概念。
(三)實驗過程的組織與實施。實驗中可以采取學生分組、一人負責的機制進行實驗。提倡互動探討和交流,既能讓學生接觸更多的實驗題目,也能提高學生的團隊合作精神。
(四)實驗結果的檢驗和考核。對實驗結果,教師要輔以必備的檢查來進行督導。對于實驗報告的書面匯報,要設計題目、要求、步驟、結構、程序代碼和改進方法,以及最后的體會等。教師通過實驗報告書可以詳細了解學生的實驗情況,進而發現共性的問題集中解決。
(五)實驗問題的總結與彌補。通過實驗,教師對于學生學習中存在的問題要進行系統總結和分析加以更正,有些不良的編程習慣,教師要著重強調。
四、結束語
《數據結構》的實驗課注重學生動手能力的培養,強調創新思維的養成,通過實驗,結合應用案例,能夠進一步提高該課程的教學質量,加深學生對知識點的理解,具有積極的現實意義。
關鍵詞:數據結構;教學內容;組織形式;考核方式
中圖分類號:G642
文獻標識碼:B
利用計算機來解決實際問題的步驟是:給出問題描述,將問題抽象成數學模型,根據數學模型寫出求解問題的算法,再根據算法寫出程序代碼,最后上機調試并分析結果。在上述過程中,非數值的數學模型是數據結構研究的主體,它操作實現主要是通過數據結構的實驗教學環節來完成的,在該教學環節中作為教學主體的學生,首先要具備抽象思維能力和語言基礎。往往在環節實施過程中,語言基礎是薄弱環節,以至于課時用完了,學生還是寫不出滿意的算法及代碼。鑒于此,我們在教學內容、組織形式、考核方式等教學環節中進行了一些設計,與大家一起來探討。
1教學內容
我們在教學內容上,圍繞課內、課外兩條主線進行改革,給學生較大的自主學習空間,有利于學生創新精神及實踐能力培養。整個實驗教學由淺入深,重在基礎、提高能力、挖掘潛力、拓展思路。在課時內的教學主要以基礎性實驗為主,安排一個綜合性實驗;課時外的教學主要以設計性實驗和綜合性實驗為主。
1.1學時內的教學內容
在我校數據結構課程共64學時,理論課48學時,實驗課16學時。安排了5個實驗項目,由于多數學生語言基礎不算太好,特別是指針的運用和結構體的定義是薄弱環節,所以在做實驗項目時,主要是從教材上的算法出發,使得學生有章可循:
項目1:順序表的操作
主要訓練學生對順序存儲結構的理解,掌握順序表的查找、插入和刪除等基本操作;同時引導學生對于靜態參數傳遞和動態參數傳遞的使用方法。
項目2:單鏈表的操作
主要是與順序存儲結構進行比較,完成線性表在鏈式存儲結構上的查找、求長度、插入、刪除等基本操作。
項目3:棧和隊列的應用―停車場的管理
深入了解棧和隊列的特征,以便在實際問題背景下靈活運用;利用兩個棧和一個隊列模擬停車場管理及相關操作。
項目4:二叉樹的遍歷
掌握二叉樹的結構特征,以及二叉鏈表存儲結構的特點;掌握二叉樹三種(先序、中序和后序)遍歷方法;熟悉并且掌握遞歸算法。
項目5:折半查找和快速排序
掌握折半查找和快速排序的方法,掌握要進行折半查找應該采取的存儲結構形式。并進行對其進行時間復雜度的分析。
對于每個實驗項目的實驗目的和實驗要求,提前2周放在教學平臺上。在實驗前1周,利用輔導課時間,以測試的形式,讓學生寫出算法代碼,由于每個實驗基本上可以在教材中找到源代碼痕跡,所以難度不大。
在實驗教學過程中,采用任務驅動式的教學模式,首先從總體思路上講解10分鐘左右,邊輔導邊發現問題,每半個小時總結1次。由于學生已經在課前作好了準備,在實驗室里他們贏得了更多的自主時間用來調試程序,分析結果。學生水平參差不齊,在上課過程中穿插實驗驗收考核,考核的形式是現場寫出主要操作的代碼,在規定的時間內進行調試、分析。驗收完一個模塊,學生再進行下一個任務。教師通過講課、輔導、驗收使得實驗課堂充實起來,由于學生每個時間段都有活干,所以課堂氣氛非常活躍,討論熱烈。
1.2學時外的教學內容
在學時外,以課程設計的形式,利用開放實驗室時間,嚴格按照軟件工程的思想進行訓練。
在課程設計時,教師列出多個設計課題,每個課題都有相應的要求或說明。各課題的難易度是有差異的,每個課題后以標準分的形式標出了難易度。例如:
課題1:設有n個人圍坐在圓桌周圍,現從某個位置m(1≤m≤n)上的人開始報數,報數到k的人就站出來。下一個人,即原來的第k+1個位置上的人,又從1開始報數,再報數到k的人站出來。依此重復下去,直到全部的人都站出來為止。試設計一個程序求出出列序列(難易度90)。
課題2:用遞歸算法和非遞歸算法實現下面問題,并比較其算法優勢。把一只老鼠放進一個無蓋的大箱內, 箱內設置若干隔板,使老鼠走動的方向受到阻礙,看其如何找到一條通道,走出大箱(難易度80)。
“難易度90”表示設計中的各項全部達到要求時的最高得分大致為90。因此,參加課程設計的學生首先要了解設計的任務,仔細閱讀各題的設計要求,然后根據自己的基礎和能力情況從中選擇一題。一般來說,選擇課題應以在規定的時間內能完成,并能得到應有的鍛煉為基本原則。課程設計的總體思路是:數據模型選取構造求解算法選擇存儲結構編寫程序代碼調試測試總結分析。
在做課程設計時,不再拘泥于語言環境的限制和存儲結構的限制,主要鍛煉學生的開放思維能力和綜合知識的應用能力。同時,引導學生從結構化程序設計到面向對象程序設計的思考。例如學生正在學習C#,在做課題1時,除了傳統的設計方法外,可以引導學生畫出類圖和順序圖,寫出C#的代碼。
設計結束后要寫出課程設計報告,以作為整個課程設計評分的書面依據和存檔材料。主要包括:需求分析、概要設計、詳細設計、調試分析、用戶使用說明、測試結果、參考文獻等。課時外的訓練主要是為畢業設計打下基礎,同時也培養了學生的團隊協作精神。
2組織形式
2.1學生的組織
對于學生進行分組,每組中按照好、中、差的學生進行搭配。由于學生水平參差不齊,早做完的學生,進行考核驗收。驗收合格,同時給出相關思考題,可以再對于思考題進行進一步的思考,鍛煉創新精神。同時,讓已完成任務的學生輔導未完成任務的學生,這樣培養了學生的團隊協作精神,課堂氣氛非常活躍,激發了學生學習的主動性。對于教師的工作也減輕了一些,教師主要是總體部署,分步考核,可以有充足的時間進行驗收,比較清楚地掌握總體情況,以便講評。這樣組織學生,可以解決“優等生吃不飽,差等生吃不了”的局面,實現了“因才施教”。
2.2內容的組織
對于每一個實驗項目的實驗目的、相關要求等,以實驗指導書的形式與學生見面,一本好的實驗指導書能給學生的上機實驗帶來事半功倍的效果。
首先,讓學生明確實驗目的和要求。每個實驗項目都給出了實驗目的,并且提出了具體要求。有了實驗目的,學生才有方向性;有了具體要求,學生實驗時才有章可循。對于要求,要按時間分塊執行。比如單鏈表的操作為2學時,第一個學時完成建立、查找、部分主函數工作;第二學時在第一學時基礎上完成插入、刪除操作,完善主函數。每一個學時在最后進行驗收,若有問題通過小組完成。
其次,讓學生掌握實驗步驟。每一個實驗項目按照軟件工程的思想去組織,先需求分析,抽象出數據結構模型,再明確數據類型,詳細設計,最后給出類C語言的算法描述。要求學生要嚴格遵循實驗步驟來思考問題,這樣,可以培養學生良好的工作作風和解決問題的方法,并且為后續課程做準備。
3考核方式
市場經濟體制下的學生不如計劃經濟體制下的學生好教育,特別目前高校擴招,入學的學生素質參差不齊,基礎相對薄弱,自學能力不強,不少學生在學習上存在畏難心理。而對于高等教育也不能降低要求,這樣就要求在教學模式上進行革新,我校對教和學提出兩個轉變,“變學生管理為學習管理,變管理學生為服務學生”。對于課程教學,不能再采取應試教育下的考核形式。鑒于此,在數據結構的教學過程中,特別是實驗教學,探索出了新的考核形式。
分數對學生來說是非常重要的,以此作為課程管理的抓手。對于教學計劃內的實驗項目成績分成兩個部分,一個是個人成績,一個是小組成績。個人成績主要考核學生個人能力,小組成績主要是考核學生的團隊協作精神。對于個人成績考核形式有兩個方面,一個方面是學生的程序代碼調試技能的測試,一個方面是書寫實驗報告,從實驗報告上可以考查學生的邏輯組織能力。筆者把該考核模式稱為“實驗2+2”模式。每個實驗項目結束前進行驗收考核,經常進行階段性考核,主要是激發學生的學習興趣,保證了課堂教學紀律,基本沒有缺勤的學生,讓學生找不出來不學習的理由,因為每處都與成績掛鉤,都在拼命的去“掙分”。
對于課程設計部分,實驗室開放時間結束時,由學生提交課程設計源代碼和設計總結報告。源代碼提交時,要生成可執行文件,對文件進行壓縮,壓縮文件名為“學號+姓名”形式,發送到指定郵箱地址。課程設計成績根據學生設計任務完成情況、設計報告、設計成果的質量以及答辯情況綜合評定。完成情況主要包括:功能實現情況和程序設計情況;設計報告包括課程設計報告格式,課程設計思路及設計過程,以及對設計的自我評價,收獲和體會等;答辯要求思路清晰,模塊關系清楚,回答問題敏捷。
對于學生的學業成績采用結構化成績,把100分不再作為一個整體看待,把它融進教學的全過程中去。學生的學業成績由平時成績、副卷成績和主卷成績構成,平時成績占20%,副卷成績占20%,主卷成績占60%。在平時成績中課程設計10分,作業和平時課堂表現5分,小考5分;副卷成績中個人成績15分(其中程序調試10分,實驗報告5分),小組成績5分。
4結論
通過實施驗證,效果是良好的。實驗的創新也帶動了整個課程的進步,特別是上課出勤率,基本上是全勤。課堂氣氛活躍,問題討論熱烈,學生的學習主動性大大提高了,網絡教學平臺登錄次數明顯增多。在問題答疑和考核驗收方面,雖然增加了教師的教學工作量,但是提高了教師的工作熱情。真正實現了“教”和“學”的良好互動,提高了教學質量。
參考文獻:
近年來,在產業界急需大量軟件開發人員的情況下,普通本科院校計算機專業學生的就業率持續走低。網絡、報紙等媒體對計算機本科教育現狀多有批評,甚至出現了大學不如培訓公司的極端觀點,嚴重影響了學生對專業課程的學習興趣、動力和信心。數據結構是計算機專業的核心基礎課程,上承程序設計語言、離散數學,下啟操作系統、編譯原理等課程,其重要性不言而喻。一方面,數據結構學科具有難度大、抽象層次高、概念繁雜等特點,學生很難掌握,更不要說將抽象理論與就業實踐需求相結合。另一方面,國內主流數據結構教材和相應的傳統教學模式側重于培養學生的計算機學科基礎理論素養,而將如何通過組織數據結構教學活動積極推動就業的問題留給了任課教師[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.
[4] 郝長勝,賈茹. 運用建構主義理論構建程序設計基礎的新型教學結構[J]. 計算機教育,2007(1):24-25.
[5] 嚴蔚敏,吳偉民. 數據結構(C語言版)[M]. 北京:清華大學出版社,2008:135-136.
Application of Constructivism Theory in Data Structures
SUN Lianshan, ZHAO Xiao
1. 引言
“數據結構”是軟件工程及其相關專業的一門重要專業基礎課程。它涉及數據在計算機的表示、組織和處理,以及相應結構上的算法設計和初步的算法性能分析技術,對培養學生良好的編程思想有很大的作用。我國“數據結構”課程的開設始于20世紀80年代初期,經過近三十年的建設,涌現出了多門國家級精品課程。缺憾的是大多是基于重點大學課程。我國的高等教育成功的從精英教育轉型到大眾教育,應用型本科的課程建設是擺在我們面前刻不容緩急需解決的重大課題。基于此我們從教學目標、教學方法和實踐教學等方面對數據結構的教學加以改革,增強學生對該課程的理解和應用能力。
2. 應用型人才特點
應用型本科與重點大學的研究型本科有著很大的不同,除了在生源、師資、教學條件等方面的較大差別外,主要有以下幾個方面。
2.1多樣性
研究型本科承擔社會所需要的創新型、理論性人才的培養和基礎性、原創性科學研究任務;而應用型本科則承擔社會各種各樣人才需求的培養任務,尤其是適應經濟發展需要的實踐應用型人才培養的任務。應用型人才更多的體現為一種人才培養目標的類型結構而不是層次結構,這種應用性表現在多方面,也可以區分為學術型、工程型、技術型和技能型等四種應用性人才類型。
2.2綜合性
應用型本科教育要避免“重專業技能、輕綜合素養”、過分重視人的技術價值、工具價值,忽視人自我發展的價值,要把片面強調學生的職業素質轉變為兼重綜合素質。應用型本科人才不僅要有一定的理論知識,同時還要有較強的理論技能;不僅要有一定的操作實踐能力,還要有較強的創新能力。更要具有較強的理論知識和技術的應用能力,要培養學生構建應用知識進行技術創新和技術的二次開發的能力、科學研究的能力。
2.3實踐性
高級應用型本科人才培養模式有別于研究型大學和中國傳統的專科教育。根據應用型本科人才多層次、多元化的能力特點,需要構建分類設計、分層施教、分步實施、獨立設置的選修與必修相結合的實踐教學體系。圍繞著社會對人才的創新、創業精神和實踐能力的要求,需要構建從課堂內系統的、綜合性的實踐技能訓練到課外的自助式開放實驗、貫穿校內學習全過程的專業素質拓展訓練和校外實習相結合的培養體系。
2.4生產服務性
應用型本科的發展不同于研究型本科的追求以研究生培養為主,以原創性、基本性理論研究為主旨的發展路徑;也不同于我國傳統的高等教育以學術性本科生培養為主,以研究型大學為發展目標和參照依據的辦學模式,而是在強調必須的學術性和基礎理論性的同時,要更加強調面向市場現實需要和學生的實際與未來發展需求,主動積極的為地方經濟建設和區域社會與行業發展服務,以服務求支持,以貢獻求發展。通過產學研合作教育培養高技能應用型人才的同時要積極從事應用技術研究和實踐開發研究,積極致力于把原創性研究成果和學術性實驗成果直接推向市場,轉化為現實生產力和直接貢獻力。
3. 應用型人才培養的教學改革
3.1結合人才培養方案調整課程目標定位
2006年教育部計算機專業分委員會根據國內計算機科學與技術學科的現狀和發展趨勢,制定了計算機科學與技術學科《戰略研究報告》、《專業規范》和《評估方案》,為我國不同類型高校計算機科學與技術本科專業的改革提供了理論依據和參考執行方案。文件的核心觀點是“分類培養”,即不同類型的學校應該有不同的培養方案、教學計劃和課程教學內容。而數據結構課程是一門理論與工程實踐密切相關的綜合性課程,在計算機學科教學中具有十分重要的作用。大力加強該課程的建設,提高該課程的教學質量,有利于教學改革和教育創新,有利于創新人才的培養。結合應用型人才培養的特點,課程總體目標調整為通過本課程的學習,要求學生編寫的程序結構清楚、正確易讀,符合軟件過程的規范,從而培養學生的數據抽象能力,真正提高學生編程解決實際問題的綜合能力。通過對學生情感的引導,學習策略和方法的交流,知識和技能的指導培養學生熱愛《數據結構》課程,培養學生自學能力,獨立的程序分析能力和利用C語言開發實用系統的能力。
3.2授課過程設計
數據結構課程的難點在于學生聽得懂、看的明白,但當動手設計算法,解決實際應用問題時會感到無從下手。該課程一般在本科低年級開設,對于僅學過一門高級程序設計語言的學生,理解和掌握其中的原理比較困難。學生在學習時,對“數據結構”在計算機科學的算法理論和軟件設計中的重要性認識不足,缺乏學習興趣和學習動力。針對這些問題,注重課程設計、課程實驗等實踐環節設計是提高課程教學效果的主要措施。要精心選擇與課程教學內容密切相關的典型案例,通過典型案例培養學生獨立分析解決問題的能力。可把課程必須掌握的技能點設定為必修實驗(設計),對于技能延伸性技能點設為選做實驗(設計),供學生自由選擇,給學生以個性化發展的空間。以基礎性與先進性、綜合性相結合為原則,篩除部分傳統課程體系內的驗證性經典實驗,加大綜合性或設計性實驗數量,通過實踐環節,提高學生分析問題和解決問題的能力,強化學生的創新能力、技術開發能力培養。在實驗教學的方式上,要注重因果式引導、成果型訓練,刺激學生的成就感,激發學生的學習興趣與鉆研的好奇心。這種全方位、立體化、系統規范的培養模式創新和實踐,可使所培養人才符合社會對創新型、創業型人才的需要。
授課過程中注重理論與實踐的結合,采取CDIO模式。CDIO代表構思(Conceive)、設計(Design)、實現(Implement)和運作(Operate) ,以產品研發到產品運行的生命周期為載體 ,讓學生以主動的、 實踐的、 課程之間有機聯系的方式學習工程。CDIO培養大綱將學生能力分為工程基礎知識、 個人能力、 人際團隊能力和工程系統能力四個層面。
3.3 課程設計思想與內容
實踐教學既要注重對學生實踐能力的培養,又要重視培養學生的科學思維能力和創新意識與能力。基于此,我們形成如下設計思想:
1、強化基本技能訓練,增加提高性實驗項目,加強對學生動手能力的指導。
2、用科學研究的思維方式合理組織實踐教學內容和相關知識結構,強調理論聯系實際,將科學研究的方法引入實踐教學。
3、重視獨立實踐能力,團隊合作能力和嚴謹求是科學態度的培養。
4、強調以開放式教學模式指導實踐教學。
在實驗內容的選取上,一是已有的經典的材料,根據多年教學的積累和收集的經典材料,加工整理形成實驗選材;二是來源于先進技術,基于計算機科學發展的迅速性,學習積累學科前沿知識和先進技術;三是對科研項目的提煉,根據教師承擔的有關課題進行提煉。使其既能體現教學中的重要知識點,又能激發學生的實驗興趣。通過通俗易懂的案例,敘述復雜的概念。
3.4 考核檢查方式改革
根據教學大綱所規定的教學內容(包括實踐環節),改進了考試方式,采用了實驗與期末考試相結合的方法,強調了學生對計算機科學基本概念、核心問題以及基本方法的掌握。實驗考核注重學習過程。成績的考核包括平時實驗成績、實驗報告以及實驗考試成績四個部分,具體比例為:平時實驗成績占30%,實驗報告占30%,上機考試占40%。其中實驗報告以實驗課上講的主要知識點為主,平時實驗成績以實驗課的綜合作業為主,實驗考試采取抽簽的方式,要求在規定的時間內完成規定的實驗內容。
4. 結束語
數據結構課程實踐性強,技術更新較快,同時又是計算機科學、計算機應用技術、網絡工程、信息工程等專業的基礎課程,如何動態調整教學內容、教學模式,提高學生的實際操作能力、分析問題、解決問題的能力,是數據結構教學改革的必由之路。
參考文獻:
[1]謝柏青,張銘.計算機基礎教學方式改革研究[J].計算機教育,2005(10).
近年來,隨著軍隊信息化建設步伐的加快,各軍校都致力于信息類專業的建設[1]。作為信息類專業基礎課程和專業課程的結合點,“數據結構”的重要性不言而喻,我院也于2009年確定了“數據結構”重點課程建設,教學對象主要是生長軍官學歷教育指揮類學員。以建構主義教學理念[2]為指導,將“教員引導下的學員自主學習”教學思想貫徹于課程建設的全過程,把握合理的課程教學體系建設,是本重點課程建設的主要特色。下面,我們將就體現該特色的具體實踐過程及其所包含的教學內容體系建設、教學方法改革以及教學團隊建設等組成環節進行闡述。
1教學內容體系建設
在課程教學體系中,教學內容是基礎,不同的教學內容決定著不同的教學形式與方法,對于學員的知識能力建構的效率和效果也有著不同的影響。目前,各高校普遍壓縮了專業基礎課教學課時,因此,為了讓學員在有限的學時內進行有效的學習,我們必須首先考慮課程教學內容體系建設問題。
一般講,“數據結構”課程包括線性結構、樹型結構、圖狀結構、查找與排序等內容,并以抽象數據類型、算法度量與評價貫穿其中[3]。各類院校根據其人才培養方案及學員特點,在課程內容組織上也有明顯區別:有突出數據邏輯結構的,有側重算法實現及度量的;有用C語言描述的,有用C++或Java描述的。結合我院信息類專業課程體系設置以及學員特點,根據ACM/IEEE CC2005[4]和教育部CCC2006[5]學科規范,我們在課程內容體系建設方面主要實施了以下幾點措施。
1.1采用彈性課程內容體系
由于“數據結構”課程課時有限,本院數據結構課程僅為50學時,課程內容設置不可能面面俱到,必須結合建構主義思想及學員的具體特點確定教學內容。在此次課程建設中,我們在課堂講授和實踐教學環節中均采用了彈性內容體系,在課程講授內容設置上,我們主要采用了“基本模塊”+“擴充模塊”的體系,其中“基本模塊”包括算法度量基礎、線性結構、字符串與模式匹配、樹、圖、排序、檢索等7個模塊共16個二級知識點,要求教員必須全部講解完成;“擴充模塊”則包括廣義表、AVL樹、倒排序及一些前沿應用譬如XML的DOM樹、OWL的分類樹等,由教員根據學員學習情況靈活掌握實施。
在實踐教學環節,我們采用分層次的實驗內容體系,自主編寫實驗教程,設立驗證性實驗、提高性實驗、課程設計等三層次實驗要求。其中最基礎的驗證性實驗指課本知識點的具體實現,譬如,線性表存儲結構以及其插入、刪除、替換、檢索等算法的實現等,側重加深學員對基本數據結構的理解以及基本編程能力的培養;提高性實驗則從實際問題解決出發,綜合2至3個數據結構的應用或對相關數據結構的算法擴展等,譬如銀行的多窗口排隊服務,多叉路口車輛調度等問題,需要將現實世界抽象成數據模型并應用相關數據結構的知識解決,有一定建模與實現難度;實驗內容體系的頂層是課程設計,以一定規模的實際問題解決為目標,以具體任務為驅動,覆蓋數據結構的多種模型,鍛煉學員抽象建模和解決問題的能力。根據學時的要求及數據結構教學目標的把握,共計設計了20個實驗,其中驗證性實驗12個,提高性實驗7個,課程設計性實驗1個,要求學員在數據結構實踐過程中至少完成15個實驗,包括12個驗證實驗,任意4個提高性實驗以及參加課程設計。
1.2采用C++結合STL(Standard Template Library)框架的描述方法
根據CCC2006的建議,選擇面向對象語言C++作為數據結構描述語言,從數據結構的邏輯描述到物理存儲及算法實現過程均采用面向對象的分析與設計思路;同時考慮到主流編程語言C++、JAVA及C#等都不同程度地應用了STL框架并提供了常用的數據結構類,譬如Vector、List、Set、Stack、Queue等,在數據結構課程內容中增加了對于主流語言中常用數據結構模板類的分析與編程,以增強學員對數據結構應用的理解。例如,對于STL中的Vector類,其實現功能為大小可動態增長的數組。教學中不僅僅要求學員能夠應用該類型,同時要求能夠分析理解該類型,譬如要求學員找出其動態增長性實現的代碼段,并對其插入、刪除算法進行歸納總結等。通過分析STL框架相關類的實現,擴展講解面向對象思想與概念在實現該類過程中的應用,以提高學員面向對象分析與設計能力。
1.3規范化的教學文檔建設
教學是否符合先進的教學理念,是否采用了合理的教學方法,我們從教學文檔中就可以看出來,教學文檔的形式十分重要,而更重要是教學文檔的內容。在本次課程建設中,我們采用了規范化的模板,對課程標準、課程設計、教學計劃、教學大綱、教案等進行了統一的設計與規范。譬如,在教案設計中,哪些內容易于CAI展現,哪些內容適合傳統板書,我們都進行了仔細研究。譬如概念定義、背景知識、計算結論等,可以擬制要點并進行文本展示;公式定理推導過程如二叉樹的性質推導,必須進行板書;原理與過程展示如遞歸過程分析、樹的遍歷、排序過程等,推薦使用動畫。同時,我們要求教員授課時必須將教材、課件、教案、教學實施表(包括課程標準、大綱、計劃)等文檔備齊并通過教學組審核。課建組認為:嚴格規范的教學文檔看似傳統的要求,實則是課程教學是否成功的前提條件。譬如,課程標準體現了課程的知識體系,即知識建構的基礎;教學計劃、課程設計與教案則體現了知識的傳遞體系,即合理地引導學員完成知識的掌握與新知識的建構。通過教學文檔建設,提高了課程教學的規范化。
2教學方法改革
在本次“數據結構”重點課程建設中,教學方法改革是研究重點。傳統“教員教,學員學”的方法已不能適應“以學員為中心”的學習需要;而照本宣科式的“PPT課件播放朗讀”已嚴重束縛了學員學習過程中的主動性與創造性,與素質教育目標背道而馳。對此,我們在本次課程建設中以建構主義理念為指導,結合“信息化教學”的特點,提出了“網絡化協作學習方法”、“基于興趣的學習模式”兩種教學方法并進行了研究嘗試。
2.1網絡化協作學習方法
“網絡化協作學習”是一種以WEB網站和信息資源為依托的新型學習方式[6],在信息資源平臺面前,教員和學員、學員和學員之間更加平等,它提高了學員的學習自主性,有利于以學員為中心的學習。在“數據結構”重點課程建設中,我們通過引入“網絡化協作學習”,引導學員在課后進行有效的自主學習,從而達到能力培養的要求。在“網絡化協同學習”教學方法實施過程中,我們始終把握兩個要點:網絡課堂的開設與網絡化協同學習的實踐。
2.1.1信息資源建設與網絡課堂開設
開設網絡課堂主要依賴網絡教學平臺和課程信息資源。此次“數據結構”網絡課堂建設采用了總部統一配發的網絡課程教學平臺,該軟件平臺不僅提供了章節知識點的構建、關聯、、檢索,而且可以通過公共信息、小組信息、點對點的信息支持交互,該平臺能夠較好滿足教員與學員之間、學員與學員之間的協同學習。基于該網絡教學平臺,以“數據結構”課程的內容體系為依據,課題組將該課程的章、節、知識點進行了統一的組織,不僅設定了章、節、知識點的隸屬關系,還以數據的邏輯結構為線索,將相關知識點進行了關聯,形成了“數據結構”課程的知識網,這樣做有利學員整體把握該課程;同時,為每一章、節都設置了教學目的、學習方法、學習進度、習題參考、實驗練習等欄目,這有利于學員進行自主學習。
2.1.2網絡化協同學習方法實踐
信息資源的建設是基礎,而基于信息資源的“網絡化協作學習”實踐則是該教學方法改革的重點。 “網絡化協作學習”方法實質上是一種建構主義理念指導下的信息化教學方法,它即不同于遠程教育模式,也有異于絕大多數的自學網站,“網絡化協同學習”強調在教員引導下的學員自主學習和協作學習。在該方法學習中,教員是“導演”,是“總指揮”,教員需要完成學習場景組織、學習進度管理、學習效果評價等活動;學員則可扮演“演員”與“分隊指揮”雙重角色。作為“演員”,學員需要提出學習計劃、實施自主學習;作為“分隊指揮”,學員需要組織學習小組、分解學習任務、合成工作成果。
例如,針對模擬實現XML解析器這樣的實際應用問題,教員的活動應包括:1)提出應用問題:模擬實現XML文件的DOM存儲機制(要求模擬程序能讀入、存儲XML文件并將XML文件中節點關系按樹型顯示);2)提示講解內容:XML文件的DOM存儲原理;3)提示學習任務:樹型結構的邏輯表示與存儲方法、樹型結構的遍歷、樹型結構的顯示;4)分配任務給各學習小組,明確學習進度要求;5)驗收并講評學員實驗報告等。學員的活動應包括:1)學習任務計劃;2)樹型結構相關知識學習與交流;3)XML解析器設計;4)XML解析器實現;5)撰寫并提交實驗報告和相關代碼。以上學習活動,主要通過網絡課堂所提供的信息、信息瀏覽、BBS、文件傳送進行支持,并通過教員策劃組織、學員協作實施的方式完成,是一種有效的“網絡協作學習”方法。
2.2基于興趣的學習模式
“基于興趣的學習模式”以教育心理學為理論基礎,結合“數據結構”課程內容特點,從課程引入、課程展開以及課堂氣氛營造等方面進行以提高學員學習興趣為目標的相關方法研究。該模式的詳細論述見文獻[7],此處作一簡介。
在課程引入階段,我們將“數據結構”與學員所學專業領域問題相結合,讓學員認識到學習“數據結構”課程的現實意義,引發學員的學習興趣。在課程展開階段,我們采用“循序漸近式教學”與“任務驅動式學習”兩種方法增強學員學習興趣。“循序漸近式教學”主要指重視先導課與當前課程的銜接,讓學員“能夠學”;而“任務驅動式學習”則通過應用情景創設提高學員學習知識、解決問題的興趣,讓學員“有興趣學”。“基于興趣的學習模式”的第三個主要措施即課堂氣氛營造,通過多種方法譬如小組競賽、知識競答、結對互助活躍課堂學習氣氛,使學員“樂于學”。
3教學團隊建設
加強教學團隊建設是重點課程建設一項重要內容。教學隊伍建設的質量,直接關系到課程教學的質量和人才培養的水平。因此,在課程建設初期,我們根據教研室和課建設小組的具體情況制定了“引進
來,走出去”的教學團隊建設策略和具體的教員培養計劃,在兩年內引進教員2~3名,送學培養2~3名。目前,我們已引進3名具有碩士學位的教員,其中1名教員加入課程建設小組;選送2名教員攻讀博士,1名教員攻讀碩士學位,其中,1名脫產2名在職;我們還通過短期培訓的方式選送教員學習相關專業知識,拓寬視野;通過參加學術會議的方式選派教員參與交流,學習兄弟院校的先進經驗。上述措施使教員整體業務水平有了明顯提高,教員隊伍培養計劃圓滿完成。此外,通過課程建設活動,我們培養了一批年輕教員,其中有些教員已成為教學骨干。在兩年的課程建設中,我們大膽啟用年輕教師,每年都有意識地安排部分年輕教員承擔“數據結構”的課程教學任務,積極推薦和支持他們參加院舉辦的各類教學競賽活動,并指派經驗豐富的老教員進行跟蹤指導。在這些年輕教員中,先后有5人在課件制作、教學研究以及優質授課比賽中獲獎,并取得了一定成績。
4結語
此次“數據結構”重點課程建設以建構主義教學理念為指導,在教學內容、教學方法、考核方式及教學團隊等方面進行了改革與實踐,特別是一些改革后的、具有通用性的內容和方法,如“數據結構”課程彈性內容體系、基于興趣的“數據結構”學習模式以及網絡化協作學習方法在本次課程建設得到應用,它為下一階段的軟件基礎類課程群的建設打下了基礎。
參考文獻:
[1] 候喜貴. 軍隊信息化建設研究[M]. 北京:出版社,2002:17-19.
[2] 張建偉,陳琦. 從認知主義到建構主義[J]. 北京師范大學學報:社會科學版,1996(4):75-82.
[3] 嚴蔚敏,吳偉民. 數據結構(C語言版)[M]. 北京:清華大學出版社,2001:2-3.
[4] ACM/AIS/puting Curricula 2005[EB/OL].(2007-05-08)[2010-12-20]./education/
curric_vols/CC2005-March06Final.pdf.
[5] 教育部高等學校計算機科學與技術教學指導委員會. 高等學校計算機科學與技術專業發展戰略研究報告暨專業規范(試行) [M]. 北京:高等教育出版社,2006:38-40.
[6] 陳文漢,張建奇. 高等教育網絡化教學研究綜述[J]. 比較教學研究,2003(9):46-52.
[7] 張立,王偉嘉,石巖,等. 基于學習興趣開展數據結構教學[J]. 計算機教育,2010(13):95-97.
Key Course Construction for Data Structure Base on Innovative Teaching Ideology
ZHANG Li,SHI Yan,ZHANG Hongping,WANG Weijia,YU Congbin
中圖分類號:G642 文獻標識碼:B
文章編號:1672-5913(2007)12-0053-03
數據結構課程是信息與計算科學專業的主要基礎課程之一,其實驗課的教學是整個教學環節中的一個重要子系統。但是,傳統的數據結構實驗教學是“灌輸式”的,從實驗目標、內容、步驟、注意事項,甚至程序的調試以及可能的實驗結果都面面俱到地由老師講解,然后由學生“按方抓藥”地操作。這使學生處于消極被動的地位,影響其學習主觀能動性的發揮,嚴重阻礙了學生的全面綜合素質的培養。為了能在實驗教學中充分培養學生的動手能力和創造能力,使其掌握基本的算法設計與程序設技能,提高綜合素質,我們在教學內容、教學方法及實驗考核體系等方面做了改革。
1更新教學內容:實現實驗課程與設計課程分學期開設
由于基礎實驗課程的教學重點是打基礎,主要是為將來高年級綜合性的專業實驗課或科研工作提供基本方法、基本技能和科學思維的保障。因此,教學內容必須要立足于基本技能、基本方法的講授,不能片面追求革新而動搖“雙基”教學。我們的具體調整方法是將基礎實驗內容進行優化、組合,使其具有從易到難、由基礎到綜合的獨立系統性。同以往相比,它打破了實驗課依附于一門相應的理論課的教學模式,既不受理論課教學進程的制約,而又與理論課教學相互配合。
數據結構設計課程是學生在學完C/C++語言和數據結構兩門課后,進行知識綜合訓練的一個實踐環節。其教學目的主要是培養學生的知識綜合能力、軟件開發能力和軟件的調試技術。數據結構實驗課和設計課是面向本科二年級學生開設的基礎實踐課程。但這兩門課程各具特點而教學側重點有所不同。數據結構實驗課是一種驗證型的教學模式,將課堂上所學的理論知識與計算機上機實踐相結合,通過利用高級語言環境對書本上的算法進行驗證,從而達到鞏固理論知識的目的。而數據結構設計課教學的指導思想是重視理論知識的綜合應用,強調整個過程的參與和學習,發揮學生學習的主動性,激發學生的學習興趣和創造力,培養學生的團隊精神和協作意識。根據上述特點,我們于2006年將這兩門實踐課程分別在不同的學期開設。數據結構實驗課在前,重基礎,重驗證;數據結構設計課在后,重綜合,重設計。通過適當調整實踐內容,使得前后科學合理地銜接。從實際教學情況來看,我們的改革取得了成功。通過這種獨立的連續實踐課程的學習,學生無論是在實踐基本功還是在綜合實踐能力方面都得到了明顯提高。
數據結構實驗課的傳統教學內容以驗證型實驗為主,幾乎沒有綜合型或設計型實驗。我們考慮到本學科的特色,刪除了部分落后的驗證型實驗項目,保留有價值的驗證型和技能型實驗內容,大幅度地增加新的探索型實驗內容,或將原先的驗證型實驗改為探索型實驗。例如,以前在做“Huffman樹及Huffman編碼”實驗時,從算法的理解、算法的實現過程以及可能的輸出結果等都由教師詳細講解,學生只要在計算機上編輯并調試通過就可以了。現在,我們要求學生在教師上課講解相關理論知識后,自己動手編輯、調試并出結果,尤其是選擇其中權值最小的兩個結點的簡單算法,需要學生自己編寫,同時要求學生思考有幾種不同的方法實現Huffman編碼算法。做完實驗后,還引導學生思考Huffman編碼的解碼算法應該如何設計和實現。由于學生須獨立地完成這一系列過程,不僅掌握了較復雜算法的驗證及實現方法,還體驗了算法設計的過程,了解了與Huffman編碼算法相關聯其它知識,更重要的是鍛煉了學生的動手能力,培養了他們的探索精神和創新能力,使我們的教學取得了事半功倍的效果。
2革新教學方法:充分調動實驗過程中的學習主體
華裔科學家楊振寧先生在比較中美的教學方法時指出:中國傳統的教學方法重演繹、推理、按部就班,所以嚴謹認真,基礎扎實,但缺少創新意識;美國的教學方法重歸納、分析、滲透、綜合,是一種“體會式”的教學方法,其效果是獨立思考能力和創造能力強,易于較快地進入科學發展的前沿,但根基不扎實。如何讓兩種教學方法取長補短,充分調動學生的主觀能動性,激發學生創造性思維,這就要求我們對傳統的教學方法進行一系列的改革。我們根據數據結構實驗教學的指導思想和教學原則,考慮到培養計劃的要求,對每一次實驗課都進行精心地策劃,主要從課前預習階段、實踐體驗階段和成果交流階段等三個階段共五個方面進行改革:
2.1課前預習階段
要求學生課前充分預習,并要求學生初步了解實驗目的和原理、實驗環境的使用、操作方法和實驗步驟等。教師在講課之前或講課過程中通過提問以檢查預習的情況,經常鼓勵學生自由發言,大家共同探討實驗原理、實驗方案以及實驗技術難點等,必要時還要介紹上機環境及算法在相應數據結構中的地位和作用,包括使用的編程環境,在驗證算法過程中需要注意的問題,講解如何查找相關資料,并展示歷屆學生的實驗報告樣本等。通過課前預習,保證了學生在實驗前有了足夠的理論儲備,使學生在實驗中思路清晰,能及時發現問題,其分析問題和解決問題的能力也得到增強,也就更易于取得實驗的成功。
2.2實踐體驗階段