摘要:針對石油專業“數據結構”實驗教學中存在的問題,在分析數據結構課程特點、教學現狀的基礎上,探索了具有鮮明石油特色專業的數據結構實驗層次化教學方法。構建該課程面向專業導向的“實驗教學體系層次化、實驗教學內容專業化、實驗教學過程可視化”的教學模式。教學實踐表明,此方法能夠充分發揮學生的實驗興趣,對培養學生系統的工程能力和創新能力有明顯作用。
關鍵詞:數據結構;實驗教學;課程體系;算法
數據結構是計算機專業的一門核心課程,是研究非數值計算的程序設計問題中計算機操作對象以及它們之間的關系和操作等的一門學科。課程概念多,理論教學抽象,為了使學生更好地理解數據對象、數據關系在計算機中的存儲表示、運算以及執行算法,必須與實驗教學緊密結合。我校的一些具有深厚石油背景的非計算機類專業,例如勘察、測井、資信以及測控等專業都開設了數據結構課程;非計算機專業實踐教學過程確實存在一定的困難,主要表現為:學生對實驗課缺乏學習興趣、理論基礎薄弱以及解決實際問題能力差等。筆者作為該課程的主講教師,結合自己在數據結構教學中的一些體會,談談自己關于目前數據結構實驗課程體系研究與探索的認識。
1數據結構實驗教學的現狀
1.1前導課程知識缺乏
現有的數據結構教科書的算法描述語言主要分為C語言版、C++版和Java語言版3個版本。根據我校的具體實際情況,C語言程序設計和C++面向對象程序設計被列為數據結構兩個主要的前導課程。學生對它們的熟悉、掌握程度,直接關系到數據結構實驗課程的教學效果。我校有多個院系在大學一年級第一學期開設C語言課程,課時設置為64學時,其中8~16學時的實驗課時不等。不同院系所開設的“C語言程序設計”的教學內容與教學要求并不完全一致。作為學生最先接觸的程序設計語言課程,教師由于課時有限、內容多,使C語言的教學內容處于初級階段,課堂上講解基本概念及簡單程序的編寫占用了大部分教學時間。由于對數組、結構體、指針等復雜數據類型講解不夠,導致石油類專業學生對指針和結構體的認識和理解不深。然而,這些知識點不僅是數據結構算法實現的重要基礎,也是未來工作或深造學習過程中使用頻率很高的內容。因此,在數據結構實驗教學中,盡管老師費盡唇舌,學生仍然模糊不清,致使實驗效果不理憨,學生甚至喪失了對該課程學習的興趣與信心。
1.2教學內容安排不盡合理
目前我校有些院系的C語言與C++語言的實驗教學內容基本相同。部分學生為了滿足計算機課程學分的需要,在一個學期同時學習C語言和C++語言,這導致同學缺乏足夠的時間對所學內容進行沉淀和吸收。在數據結構實驗內容設置過程中,實驗課時沒有根據石油專業具體需求進行合理設置,教師在面向不同的專業的學生時采用相同的實驗案例,學生在練習的教師指定的題目時只是簡單地實現教科書中以章節劃分為主的知識點,缺乏處理復雜問題的機會, 缺少創新性以及與學生本專業相結合的實驗聯系。由于只注重了計算機專業課程知識點的驗證性實驗,而忽略了非計算機專業學生的專業背景,這使得非計算機專業學生很難產生“共鳴”,教學效果達不到理想的目標。
1.3實驗環境搭配與專業需求脫節
目前我校數據結構的實驗環境不能完全適應專業教學發展需要。在Windows操作系統下,課題組一般采用Visual C++6.0作為平臺,讓學生搭建基于Console控制臺工程,在命令行的方式下運行。由于我校具有鮮明的石油特色,特別是在石油的勘探與生產中需要評估潛在的石油資源,準確直觀地定位油氣資源的空間分布及其特征,并需要高效融合衛星影像、航拍地圖、地震勘探、地表地質研究、地下橫斷截面影像以及現有井位等信息。這需要開源的可視化平臺以及地理信息系統來滿足面向專業的實驗需求。筆者在指導學生上機實驗的過程中發現,石油專業學生普遍反映數據結構上機實驗遠離當前專業所需要的開發環境,缺乏友好的圖形用戶界面,因此對實驗重視程度不夠。
1.4實驗過程流于形式
數據結構課程本身較強的邏輯性和抽象性決定該課程的難度較大,學生首先從心理上畏懼數據結構,害怕實踐,拿到實驗任務到上機實習,常常茫然不知如何動手。實驗教學過程中缺乏合適的監督管理和獎懲制度,大多數學生因程序設計基本功不扎實,當任務無法按時完成時就采取抄襲方式交差,企圖蒙混過關。在實驗過程中常出現這種現象:當某個題目暫時無人做出來時,同學們還能靜下心來實踐;當某位同學做出來以后,結果程序很快就會傳播,部分同學再也“無心戀戰”了。因此,有的學生一學期下來做了多次實驗,自己卻一個程序也未能調試通過,逐漸養成了“坐享其成”的習慣,久而久之,q/dOYBuE5iJ3Bva32ybZLGIHR67H9P63Vt6yT73h81w=對編程失去興趣,根本就不會編程序調程序,程序設計的能力也就可想而知了。
2數據結構實驗課程體系
2.1加強經典算法及其衍生方法的教學實踐
在“數據結構”課程實驗設計中,由于算法眾多,編程實現所有算法是不實際也是不必要的。因此應該重點編程實現典型算法,同時注意講解該算法在石油行業的應用以及該算法目前主要的衍生算法。這樣一個典型的算法往往能夠起到以點帶面的作用,只要掌握了這些算法的實現方法以及后續的改進策略,就可以將知識點構筑成立體的知識網,也就掌握相關數據結構的本質。當然,在選擇典型算法的時候,要考慮算法的代表性、難易程度、綜合性等因素。
2.2面向專業學生的課程群建設
目前,國內高校在數據結構教學研究中的實驗教學方法、教學模式和教學內容優化等方面取得了一些實踐性成果,但在課程綜合體系建設方面仍然有一些不足[1]。我校非計算機專業實驗教學時尤其要強調數據結構與其他相關課程,特別是石油信息科學之間的緊密銜接,并將離散數學、數據庫、地理信息系統、并行計算等課程的主要知識點分散、穿插、融入到數據結構的教學中,從而優化整個課程體系結構。課題組在上機實驗之前,在課堂上以程序實例的形式剖析C語言中的指針、結構體和函數等知識點,尤其要在學生難理解、容易混淆和犯錯誤的地方,布置涉及這些知識點的課外編程作業,通過作業批改發現問題后集中重點講解。
2.3建立面向不同專業實驗考核方式
針對不同院系制訂合理的數據結構實驗考核指標,加大對學生實驗環節的考核力度,杜絕學生“等”、“要”、“靠”。在實驗環節的考核中,概念基礎層題目一般要求1周內完成,綜合型題目一般要求2~3周內完成,對于綜合型題目,學生先按3~4人分成一組,確定小組成員的角色與任務,每人完成一個模塊,通過統一的實驗環境接口組成一個完整的程序,最后隨機抽取小組中的一名代表講解編程的設計思路,演示程序執行情況。在這個過中程中教師提供必要的與測井、勘探數據處理相關的學習資料、參考方法等,為學生完成任務提供智力支持,使學生透徹地理解各種數據對象的特點,學會數據的組織方法和實現方法,選擇合適的數據結構,甚至改造基本的數據結構,并進一步培養基本的良好的程序設計能力。學生要在規定的時間請輔導教師驗收實驗題,過期不驗收,視為自動放棄,本次實驗題沒有成績。
2.4實驗教學體系層次化
以往的實踐教學中實驗大都由教師按教材單元統一組織進行,先理論后實踐,實踐只是對理論知識的簡單驗證,教師只關心學生是否來做實驗,而不關注學生的專業實驗需求、實驗的效果如何。結果是學生對實驗越來越沒興趣,不利于學生創新意識的培養和實踐能力的提高。針對數據結構課程抽象性強、難度大的特點,構建一個漸進式、層次化的實踐教學體系勢在必行。我們嘗試著按基礎性C語言實驗、結合面向對象思想的C++實驗、數據結構可視化實驗和基于CUDA的創新性實驗4個層次構建“數據結構”課程的實驗教學體系,如圖1所示。
第1層次,基礎性C語言實驗。針對教科書某種數據結構的基本運算如插入、刪除、查找等算法設計實驗項目,其目的是讓學生掌握基本概念基礎知識和基本操作,通過實驗學會如何從算法轉變為程序。如隊列結構的基礎實驗可以是隊列的插入(入隊算法)或刪除運算(出隊算法)。
第2層次,結合面向對象思想的C++實驗。在一個實驗項目中封裝某種數據結構的一些基本運算函數,提高學生抽象分析能力。如線性表結構的C++實驗包括鏈表的創建、插入、刪除、遍歷等基本函數。
第3層次,數據結構可視化實驗。可視化實驗是一個面向工作的開發技能提高過程。以期縮短學生在數據結構上機實驗與當前主流專業軟件集成開發環境之間的距離。
第4層次,基于CUDA的創新性實驗。我校地質勘探專業的教學中,地震數據處理一直是主要教學內容,尤其是疊前深度偏移、地震相干數據體分析等內容更是教學過程中的重點和難點。然而,隨著地震采集技術的進步,地震數據量越來越大,對處理速度的要求也越來越高,這就對高性能計算設備提出了更高的要求。由于GPU擁有大規模的并行處理單元,因此它特別適合于需要進行密集型數據處理和并行計算的地震數據處理。
在GPU計算領域,CUDA提供了一個良好的并行計算軟件開發環境,得到了GPU計算軟件開發者的普遍青睞。由于CUDA提供C語言編程接口,因此在勘探專業的數據結構實驗教學中,針對專業問題給學生自主設計并行算法的選擇的空間,引導學生深化現有問題,鼓勵學生提出新的問題,分析新問題以及解決新問題。
2.5可視化數據結構實驗框架研究
俗話說,“萬事開頭難”。如果要求學生從頭開始編寫程序,學生常感到無從下手,浪費了寶貴的教學時間,因此有必要為學生提供一個輔助的開發環境。數據結構實驗環境是數據結構計算機輔助教學軟件的重要組成部分[2]。為了達到實驗教學過程可視化目的,我們設計了可視化數據結構實驗框架。學生利用框架,只須將精力集中在實現數據結構模型本身就可以利用本實驗框架達到可視化的效果,把抽象的數據結構在屏幕上通過圖形用戶界面形式顯示出來,這樣學生可以在不需要實現可視化的代碼的情況下實現可視化數據結構實驗,既增加了學習興趣,又提高了學習效率[3]。可視化實驗框架采用模型、視圖和控制器框架,通過MVC模式將數據結構中的集合關系、線性關系、樹狀關系和圖狀關系等數據模型本身和可視化部件有機結合起來。根據我校勘探、地質等不同石油專業現有的實際集成開發環境以及相應的專業需求,我們提供兩種實驗框架備選:方案一,選用Visual C++6.0 + MFC實現“數據結構”中所有經典算法的實驗框架,共計21個;方案二,采用Visual C++9.0 + QT4.0。由于地理信息系統在石油勘探、生產開發、設備管理、管道管理、運輸管理、銷售規劃以及地面建設方面具有廣泛的應用,因此我們提供的QGIS作為基礎開發框架。
2.6實踐教學過程工程化
信息科學工作者應具備科學的工作方法和良好的工作作風,使學生從實驗課每個實踐環節得到應有的工程訓練。特別是在問題分析、抽象設計階段,可以采用“任務驅動式”教學,以“任務書”的形式將設計問題下達給學生,要求學生按照軟件工程的開發流程進行實踐。我們將由課題組印制的具有統一格式的實驗文檔下發給學生,在實驗報告中規定了實驗題目的描述內容,包括專業問題描述、實驗目的、實驗內容及要求、需求分析、概要設計、界面設計、詳細設計、測試數據、程序調試問題以及結合專業思考等。
教師根據“調試問題”以及“結合專業思考”的內容可以及時做出針對性解答并向學生提出問題,教會他們舉一反三,促進學生的思維向新和深的層次發展,加深他們對所學知識的理解。
3結語
數據結構實驗是培養具有扎實的計算機理論知識和創新能力的應用型人才的重要環節。我校石油特色鮮明,呈現多學科協調發展的學科專業布局。如何在專業跨度大、工學背景強、學時相對少的情況下,“數據機構”課程實驗教學工作仍然能夠取得良好的效果,是當前具有挑戰性的課題。本文結合自身實驗教學的經驗,根據石油專業的特點,通過合理、有效、系統地組織實驗內容、強化試驗考核以及開發可視化實驗環境平臺來強化理論教學的效果、提高學生分析問題和解決問題的能力。從我校的數據結構教學實踐看,采取了這些措施和方法后,鞏固了同學“獻身石油的理想”、增強了自信心、激發了學習數據結構的興趣,真正實現了“教”和“學”的良好互動,提高了教學質量。
參考文獻:
[1]