王樹鋒 曹寶香
摘要:分析數(shù)據(jù)結構課程教學中存在的問題及其原因,提出一種以實驗教學深化理論教學的新的教學模式,闡述這種教學模式的內(nèi)涵、特點和實施過程,介紹模式的應用效果。
關鍵詞:實驗教學;教學改革;教學模式;數(shù)據(jù)結構
0、引言
編程能力是軟件工程專業(yè)中最重要的專業(yè)技能,也是評價學生專業(yè)素養(yǎng)和專業(yè)水平的首要指標。這種能力的培養(yǎng)必須通過對程序設計語言、數(shù)據(jù)結構和算法分析與設計等課程的學習,與課程對應的課內(nèi)實驗練習以及針對具體工程問題的實訓幾個環(huán)節(jié),按層次遞進式地進行。在這種能力培養(yǎng)過程中,數(shù)據(jù)結構課程教學、實驗和實訓處于核心地位,通過培養(yǎng)學生設計良好風格的算法,提高解決具體問題的能力,為計算機應用軟件的研制打下堅實的理論和實踐基礎。通過對“數(shù)據(jù)結構”教學中存在問題及產(chǎn)生原因的分析,筆者提出了以“實驗教學”深化“理論教學”的新的數(shù)據(jù)結構教學模式,強化數(shù)據(jù)結構基本知識和基本技能的培養(yǎng),以期實現(xiàn)軟件工程專業(yè)規(guī)范中提出的“加強學生實踐和動手能力的培養(yǎng)”這一目標㈣。
1、數(shù)據(jù)結構教學中存在的問題及原因分析
1.1 存在的問題
數(shù)據(jù)結構教學包括教和學兩方面。從教的角度看,課程理論性強,講起來枯燥,學起來困難,如算法實現(xiàn)受制于對程序設計語言的掌握,往往很難給出一個直觀的結論。從學的角度看,該課程是專業(yè)基礎課,是軟件開發(fā)和設計的基礎,也是考研的科目之一,學生從態(tài)度上十分重視。然而在學習過程中,由于課程與離散數(shù)學、程序設計語言的掌握程度密切相關,本身邏輯性強,學生往往一次沒弄懂,接下來就比較惘然,課程結束了也不知道學了什么,更不會利用學過的知識去解決具體問題。
1.2 產(chǎn)生的原因
數(shù)據(jù)結構課程邏輯性強,但教師授課時不能將離散數(shù)學和程序設計語言課程中的內(nèi)容以及數(shù)據(jù)結構課程本身的知識點聯(lián)系起來,不能對共性問題進行提煉歸納,使知識點系統(tǒng)化。
邏輯性強的算法很抽象,即使采用類語言描述,算法執(zhí)行的結果也不能直觀地表示出來。教師在講授高級語言時更強調(diào)掌握語言的基本知識,很少關注培養(yǎng)編制程序解決具體問題的能力。受課時的限制,教師無法在課堂上用高級語言實現(xiàn)所有算法的傳授。有限的幾次課內(nèi)實驗也往往由于學生編程能力的欠缺,不能順利完成,使學生完全失去對課程的興趣和學習的信心。
受到上機實驗時間以及學生偏弱的編程能力的限制,上機實驗就只能練習規(guī)模小、針對基本原理的小程序,當面對具體復雜的綜合性問題時,學生不知道如何合理地運用所學的數(shù)據(jù)結構知識解決問題。
顯然,課程的教學一方面要加強理論指導,進一步培養(yǎng)學生的邏輯和抽象思維能力;另一方面要加強實驗操練,進一步訓練學生使用程序設計語言的能力,通過課程中典型算法的實現(xiàn),提高學生使用指針、復雜數(shù)據(jù)描述和處理問題的能力。實驗教學既是對學生理論學習的檢驗,也是對學生綜合能力的鑒定,因此,實驗教學是深化理論教學的關鍵。
2、教學模式設計
理論教學讓學生掌握數(shù)據(jù)結構課程的基本理論和基本原理,這是課程教學的最終目的,因此理論教學不能忽視。教師在精心講解的同時,也要強化實驗和實訓,將基本理論中的知識點細化為實驗內(nèi)容,通過精心設計多層次的實驗,鞏固和強化理論知識的學習。加強實驗環(huán)節(jié)的過程管理可以強化理論教學的效果。我們按照軟件開發(fā)的工程化思想,綜合應用基本知識,針對具體問題開發(fā)應用軟件。教學模式的設計包含下面3個環(huán)節(jié)。
2.1 以教材章節(jié)中的一個或幾個知識點設計基礎實驗內(nèi)容
數(shù)據(jù)結構基礎實驗可以在線性表、堆棧、隊列、二叉樹、圖、查找、排序等章節(jié)中分別進行設計。教師在設計時要明確每個實驗強化的基本知識點,選擇難度適中的典型算法進行訓練,讓實驗內(nèi)容涵蓋課程的主要知識點。學生用規(guī)范的軟件開發(fā)方法和程序設計語言實現(xiàn)算法,既加深了學生對算法的理解,又提高了他們的編程能力。
加強實驗過程的管理。實驗前,要求學生理解實驗涉及的基本知識點,編寫好程序。進入實驗室后,學生要集中精力進行程序的調(diào)試和修改,提高語言的使用能力。實驗結束后,學生要寫出實驗報告,重點寫出調(diào)試過程,成功和失敗的經(jīng)歷,寫好實驗總結,提高軟件文檔的寫作能力。
2.2 以教材中相關的某幾個知識點設計綜合性實驗內(nèi)容
設計需要用幾個知識點解決的、有一定具體含義和應用背景的綜合性題目,要求學生以小組為單位合作完成。這些綜合性題目設計的基本要求是運用書本中學到的幾種算法解決一個實際問題,要求學生分析問題、組織數(shù)據(jù)、提出解決方案。
在實驗過程中,首先,按照軟件工程化的思路進行問題規(guī)劃、任務分工、團隊協(xié)作,具體實驗步驟包括:問題分析、任務分解、數(shù)據(jù)類型描述、系統(tǒng)概要設計、詳細設計、編碼、調(diào)試和實習報告編寫。其次,題目的設計采用招標的形式,可以讓學生自己設計題目,征集解決方案;也可以從多種解決方案中選擇優(yōu)秀的方案進行實施。第三,指導教師要充分參與到學生的實驗過程中,通過論壇等形式收集學生的反饋信息,及時了解學生對知識的掌握情況、題目的完成情況以及學生的意見。
2.3 增加激勵措施,改革成績評價機制
加大實驗課程成績在總成績中的比例,給予實驗課程優(yōu)秀的學生參加競賽和參與教師科研的優(yōu)先權,激發(fā)學生學習的主動性和創(chuàng)造性。
3、教學模式實施
我們設計了一組課內(nèi)實驗和訓練的題目,涵蓋了數(shù)據(jù)結構課程的主要知識點。在實施這種教學模式的過程中,我們采用了嚴格的實驗過程管理,經(jīng)過兩年的實踐,教學效果良好。學生不僅掌握了數(shù)據(jù)結構的基本知識和程序設計的基本技能,而且鍛煉了解決問題的能力和團隊合作精神,在機器人競賽和軟件外包服務編程大賽中取得很好的成績。具體實施過程包括下面的幾個環(huán)節(jié)。
1)強化理論教學。
筆者結合教學體會,編制了數(shù)據(jù)結構補充講義,內(nèi)容包括c語言的高級技巧(指針的使用和函數(shù)的設計)、數(shù)據(jù)結構中典型算法和算法設計方法(分治法、遞歸、優(yōu)化算法、線性規(guī)劃等)幾個方面;給出了典型的練習題目和詳細的答案;另外,對考研大綱進行了解析,提出了復習的方法和措施。這些內(nèi)容的梳理讓同學對整個課程的基本知識點有了更清晰的了解。
2)重視基礎實驗。
根據(jù)數(shù)據(jù)結構中的知識點設計對應的基礎實驗,采用基礎實驗與課堂教學同步進行的方式,要求學生在學習該知識點后,在實驗課中完成對應的實驗內(nèi)容,通過這樣的訓練,強化對基本知識點的掌握?;A能力實驗及知識點對照見表1。
3)設計綜合性實訓。
首先通過對大型程序的分析,學生了解和掌握基于軟件工程的大型程序開發(fā)的模型和方法,了解團隊合作的意義和步驟,了解軟件文檔寫作的基本步驟和規(guī)范。我們從多個征集的實訓題目中挑選了有代表性的訓練題目,見表2。
根據(jù)是否給出詳細的設計和解決方案,將這些題目分為不同等級,便于學生的合作和成績的評定。
(1)等級1提供詳細的系統(tǒng)分析過程和算法流程,提供程序設計的框架,訓練學生綜合應用基本知識的能力。學生1人一組,獨立完成,分數(shù)從60分起評。
(2)等級2提供初步的系統(tǒng)分析過程和算法的基本過程描述,要求學生自己設計算法,訓練學生項目開發(fā)的能力。學生1~2人一組,合作完成,分數(shù)從75分起評。
(3)等級3要求學生自己查閱相關資料,寫出詳細的系統(tǒng)分析、設計算法,2~3人一組,訓練學生利用軟件工程的思路,獨立設計開發(fā)應用軟件的能力。分數(shù)從85分起評。
4)改革成績評定辦法。
期末考試成績中理論成績占總成績的30%,課內(nèi)實驗占30%、綜合實訓占40%。學生以團隊形式,獨立提出問題,經(jīng)過合作完成任務的給予加分。選拔成績優(yōu)秀的學生參加各類程序設計競賽,吸收在課題研究中表現(xiàn)突出的學生到學院各類橫向或縱向課題的研究梯隊中,開展初步的科學研究。
4、結語
數(shù)據(jù)結構課程是培養(yǎng)學生程序設計能力的基礎學科,理論性和實踐性都很強。課程的學習需要理論教學的結果來指導實驗教學的過程,更需要實驗教學的過程來強化理論教學的效果。這種以實驗教學深化理論教學的教學新模式,將理論教學中的知識點分解到相應的實驗實訓環(huán)節(jié)中,通過系統(tǒng)、科學地安排實驗教學,鞏固和強化了學生對理論問題的理解和掌握;利用實驗過程和實驗結果的直觀性,激發(fā)學生學習的興趣,培養(yǎng)了學生動手解決實際問題的能力,實現(xiàn)了“加強學生實踐和動手能力的培養(yǎng)”的軟件工程專業(yè)人才培養(yǎng)目標。endprint