高春曉,許晟華
(北京理工大學 計算機學院,北京 100089)
數(shù)據(jù)結(jié)構(gòu)是計算機專業(yè)的基礎課程,也是其他專業(yè)的必修課程,比如自動化專業(yè)和通信類專業(yè),其重要性不言而喻?,F(xiàn)在,國家對高校進行“雙一流”建設,“雙一流”建設首先需要對課程進行變革,于是基于學習結(jié)果的教育(outcomebased education,OBE)再度引起國內(nèi)高校的重視。我們需要結(jié)合OBE 的工程教育模式對數(shù)據(jù)結(jié)構(gòu)課程進行重新設計,使學生加深對課程知識點的理解,真正掌握動手編程解決問題的能力。
基于學習結(jié)果的教育于1981 年由Spady 等人提出[1],Spady 對 OBE 作出如下解釋:“對教育系統(tǒng)中的每個環(huán)節(jié)進行清晰地聚焦和組織,確定一個學習的目標,圍繞這一目標使學生在完成學習過程之后能夠達到預期的結(jié)果?!監(jiān)BE 已成為美國、英國和加拿大等國家教育改革的主流理念[2]。
OBE 理念強調(diào)要讓學生主動學習,在學習的過程中有反饋,最終達到一個好的學習效果。OBE 理念下的教學是以學習結(jié)果為導向的。那么如何評價學習結(jié)果呢?OBE 理念下的評估不再是簡單地以分數(shù)來作為評估,而是采取多樣化的評估方案。
國內(nèi)研究方面,文獻[3]總結(jié)OBE 教育模式包含的“兩個目標、三個假設和四個原則”,并且指出“如果不是以這四項原則為落實的中心,它就不能被稱為真正的以結(jié)果為基礎”。文獻[4]對OBE 教育模式進行充分研究的基礎上,對在汕頭大學具體實施OBE 教育模式進行實踐和探索,為建設有彈性、高水平和可持續(xù)的 OBE 工程教育模式提供了有意義的借鑒。
數(shù)據(jù)結(jié)構(gòu)是計算機專業(yè)的基礎課程,同樣也是自動化、通信等相關專業(yè)的必修課程,數(shù)據(jù)結(jié)構(gòu)課程的重要性不必多言。傳統(tǒng)的數(shù)據(jù)結(jié)構(gòu)教學模式中的主要驅(qū)動力是理論知識的傳授,需要學生掌握迭代、遞歸、分治等算法設計方法,理解線性表、棧和隊列、數(shù)組和廣義表、樹和圖等典型數(shù)據(jù)結(jié)構(gòu),掌握數(shù)據(jù)結(jié)構(gòu)的設計方法和算法復雜度的設計方法。學生在學習過程中往往難以深入理解相關概念和原理,當然這主要是與數(shù)據(jù)結(jié)構(gòu)課程本身理論性較強有很大關系。由于學生往往針對課程的評價方式去針對性的學習,更導致了學生往往掌握了很強的應試能力,但實際對知識的理解還差一些。傳統(tǒng)的數(shù)據(jù)結(jié)構(gòu)課程教學主要存在以下幾方面的問題。
在上大學之前,高中有相應的課程讓大家接觸計算機知識和編程技巧,由于老師和學生的重視程度不夠,學生也并沒有掌握得很好。大學一開始會有程序語言課程,目前國內(nèi)高校大多會選擇C 語言進行教授。數(shù)據(jù)結(jié)構(gòu)的內(nèi)容是程序設計課程的深入和延續(xù)。在剛進入大學時,學生一方面沒有意識到程序語言課程的重要性,一方面沒有編程語言的底子,對程序語言課程畏難情緒十分大,學習效果不盡人如意。當學生的先導課程沒有學好的時候,何談應用數(shù)據(jù)結(jié)構(gòu)去解決實際問題呢?當學生沒掌握程序的調(diào)試方法,又如何寫出能解決問題的完整代碼呢?
傳統(tǒng)的數(shù)據(jù)結(jié)構(gòu)教學強調(diào)知識導向的教學模式,往往造成了學生只是去單純地學習這個知識本身,而忽略了“為什么要學這個知識點”“這個知識點應該怎么用”“這個知識點和其他知識點的聯(lián)系是什么”這些問題的思考。結(jié)果就是老師一直在“輸出”,學生一直在“輸入”,中間缺乏交流和思考。具體來說數(shù)據(jù)結(jié)構(gòu)課程概念抽象,從 C 語言的簡單數(shù)據(jù)類型一下子躍遷到數(shù)據(jù)結(jié)構(gòu)的抽象數(shù)據(jù)類型ADT,學生不易接受這種表示方式,學習興趣難以調(diào)動,算法跟著老師能理解,但自己獨立做題時選擇數(shù)據(jù)結(jié)構(gòu)和設計算法就無從下手,出現(xiàn)“能聽懂,不會寫”的現(xiàn)象[5]。從原來的程序語言課程過渡到現(xiàn)在的數(shù)據(jù)結(jié)構(gòu)課程,代碼量也有著極大的飛躍,更是讓先導課程沒學好的同學望洋興嘆,無法通過上機實踐來加深對數(shù)據(jù)結(jié)構(gòu)的理解。而當數(shù)據(jù)結(jié)構(gòu)的前面線性結(jié)構(gòu)都沒有真正掌握的話,那么后面的圖、樹就更加難以掌握。
傳統(tǒng)的數(shù)據(jù)結(jié)構(gòu)課程教學強調(diào)以教師為中心,學生按照教師的要求完成學習任務,整個教學過程按照既定的教學計劃、時間、進度開展學習。目前多數(shù)高校重理論輕實踐體現(xiàn)得非常明顯,因為數(shù)據(jù)結(jié)構(gòu)是理論與實踐并重的課程,所以這一重理論輕實踐的現(xiàn)象是非常不利于學生學好數(shù)據(jù)結(jié)構(gòu)的。目前高校的解決辦法就是寄希望于學生課下準備好,但是由于大學生的學習意愿不如高中強烈,加上還有各種學生會、社團等活動牽扯大量精力,這種解決辦法在多數(shù)情況下都是失敗的。那當學生準備不足,實踐時間又比較緊張,老師又急著要學生完成作業(yè),就會導致一種不好的風氣——學會或者應付了事,或者參考同學完成。這樣無論是老師的時間還是學生的時間都被浪費掉了。學生通過百度去查找題目,機械地重新敲一遍代碼,這樣的方式對學生又有什么真正的提高呢?當學生無法高質(zhì)量地完成實踐環(huán)節(jié),教師不得不給學生講解,那實踐課又與理論課有什么區(qū)別呢?理論和應用完全脫節(jié),課程很難達到預期效果。實踐題目不夠靈活,也沒有針對性。不同的學生,肯定也是掌握程度不一致,那么面對掌握程度不同的學生,要有差異化教學方案。目前數(shù)據(jù)結(jié)構(gòu)課程的實踐課程題目往往沿用多年前的題目,更新周期太長,并不能對學生有針對性的練習。
成績考核的方式?jīng)Q定著學生怎樣學習。當考核方式是以期末試卷考試為主,那么就會造成學生在考前突擊,死記硬背,通過題海戰(zhàn)術大量練習。當考核方式以上機實驗為主,那么就會造成學生事先查找上機問題的答案,花大量的時間去撰寫實驗報告,去做所謂的“面子工作”,實際的動手能力并沒有得到真正的練習。試卷考核和上機考核的線性組合貌似科學,但這種評價方式不能真實反映學生應用知識解決實際問題的能力,容易滋生針對考核方式去練習的現(xiàn)象,不利于學生真正提高。
定義學生的學習產(chǎn)出目標是OBE 教育模式的關鍵[6]。沒有清晰的目標,整個課程建設會十分混亂,無法科學有序進行。我們主要圍繞專業(yè)認證、行業(yè)能力需求和學校畢業(yè)要求三個方面來確定產(chǎn)出目標。本課程的教學改革把專業(yè)認證作為一個重要參考,還與奧克蘭大學進行了大量的交流,探討了要達到OBE 效果需要設立怎樣的教學目標。我們通過走訪和調(diào)查部分專業(yè)相關的用人單位和畢業(yè)生,了解他們的具體要求。結(jié)合北京理工大學畢業(yè)要求指標點,最終確定了基于OBE 的教學目標如下。
(1)掌握迭代、遞歸、分治等算法設計方法,掌握它們與對應數(shù)據(jù)結(jié)構(gòu)的關系,解決基本非數(shù)值計算問題的算法設計問題。對應于北京理工大學的畢業(yè)要求指標點:能夠運用數(shù)學和自然科學知識進行計算機算法的設計與實現(xiàn)。
(2)知悉和理解線性表、棧和隊列、數(shù)組和廣義表、樹和圖等數(shù)據(jù)結(jié)構(gòu)的邏輯關系、存儲結(jié)構(gòu)和操作特點。掌握數(shù)據(jù)結(jié)構(gòu)的設計方法,解決典型工程問題的模型表示、數(shù)據(jù)邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)的設計問題。對應于北京理工大學的畢業(yè)要求指標點:具備將數(shù)學和自然科學基礎知識應用于正確表述復雜工程問題的能力。
(3)掌握算法復雜度的定義和分析方法,形成計算思維模式。擁有根據(jù)所掌握的數(shù)據(jù)結(jié)構(gòu)和算法設計方法,針對各種典型的計算機應用問題設計數(shù)據(jù)結(jié)構(gòu)和算法的能力,形成算法思維模式。對應于北京理工大學的畢業(yè)要求指標點:具備數(shù)據(jù)抽象能力,能夠針對特定需求確定數(shù)據(jù)的結(jié)構(gòu)、關系并設計算法,能夠?qū)λ惴ǖ挠嬎銖碗s性進行正確分析。
基于OBE 的教學改革,并不是僅僅只改革數(shù)據(jù)結(jié)構(gòu)這門課程,改革的是整個體系,而數(shù)據(jù)結(jié)構(gòu)這門課程是知識體系中的一個節(jié)點。在整個體系中,數(shù)據(jù)結(jié)構(gòu)的先導課程程序設計課程、計算機科學導論等課程要通過改革達到一定的OBE教學,這樣數(shù)據(jù)結(jié)構(gòu)課程才能更好地展開。而數(shù)據(jù)結(jié)構(gòu)課程又是自然語言處理、計算機視覺等應用類課程的基石。整個計算機教育體系要合理有序,逐層遞進,才能使學生教育達到OBE 結(jié)果。比如就數(shù)據(jù)結(jié)構(gòu)的先導課程程序設計課來說,首先經(jīng)過科學有效的討論,對標國外名牌大學,選擇合適的先導課程,是選擇C 語言還是選擇Java抑或是Python?在上數(shù)據(jù)結(jié)構(gòu)課程之前還需要哪些課程?當然,整個計算機教學體系OBE 教學設計是一項十分浩大的工程,我們僅討論數(shù)據(jù)結(jié)構(gòu)課程的OBE 設計??傊?,我們希望有合理的教學體系,在數(shù)據(jù)結(jié)構(gòu)課程之前,學生就養(yǎng)成了一定的編程能力和計算機基礎知識,這樣才有利于學生更好地學習數(shù)據(jù)結(jié)構(gòu)與算法課程。
數(shù)據(jù)結(jié)構(gòu)課程的理論部分要以學習效果為導向,不以知識教授為導向。往往大學里的教育都強調(diào)“教”,老師按照自己的教學大綱,依照教學計劃,將課程的知識按部就班地“介紹”完,就算教完一門課程。這樣做的一大弊端就是忽略了“學”,忽略了學生的學習效果。萬丈高樓平地起,試想在課程伊始,學生沒有學懂,而老師只是一味地“教”,學生愈發(fā)聽不懂。所以需要對整個教學進行改革設計。在教學內(nèi)容上,通過結(jié)合具體項目案例來講授知識點,案例的選取要貼近生活,具有一定實際應用價值,而不是講抽象的數(shù)據(jù)結(jié)構(gòu)知識。案例的設計需要花費大量的精力,要做到生動有趣,是學生們?nèi)粘K姟⒂|手可及的,這樣學生才能真正地參與進來。在教學方式上,采用學生知識講授、指導建模、自主學習、小組討論等多樣化的教學手段,充分調(diào)動學習積極性,有效實現(xiàn)OBE。
數(shù)據(jù)結(jié)構(gòu)課程的上機部分要考慮到每位同學對知識的掌握程度不相同,上機題目要有層次性,可以分為多個子問題,難度漸升。在上機的過程中,要注重于學生的交流,給予學生具體的指導。當教師資源不夠的時候,可以采用學長幫扶的形式去完成上機實踐。
傳統(tǒng)的教學評價往往是期末考試與上機成績的線性組合,這種方式可能導致學生進行針對性的練習,出現(xiàn)“高分低能”的現(xiàn)象。我們需要設計多元化的評價方式來達到OBE 效果。在理論環(huán)節(jié),我們需要考查識記能力、理解能力和表達能力。在實踐環(huán)節(jié),我們需要考查動手能力、人際交往與合作能力和創(chuàng)新意識。在考查的過程中增加學生自評、組內(nèi)互評和組間互評環(huán)節(jié),還可以通過在教學過程中交流來確定學習效果。
在具體的數(shù)據(jù)結(jié)構(gòu)教學中,我們會遇到一個不可避免的問題,那就是如何在有限的時間內(nèi)達到一個較好的教學效果?
在實踐中需要采用學生知識講授、指導建模、自主學習、小組討論等多樣化的教學手段。
關于學生知識講授。通常來講,學生有時也很難判斷自己是否真正掌握了一個知識點,可能會出現(xiàn)這樣的一種情況:學生想當然地以為自己掌握了這個知識點,但是掌握得深度是不夠的。所以我們采用這樣一種形式:學生用半個課時來講授知識點,接著同學自由提問,最后由老師進行總結(jié)。講解的學生通過講解和答疑,一定會加深這個知識的理解。而提問的同學更是開動腦筋,一是對知識點有了初步的了解,二是帶著問題去學接下來老師講授的知識,學習效果更好。
指導建模指的是老師為了鞏固學生所學知識,提出一個實際問題,讓學生去編程解決,但考慮到教師資源有限,可以通過學長幫扶、指導建模這樣一個形式去幫助學生完成這個任務。因為學長們肯定比學生理解得更加深入,也更熟悉學生在哪些點上會遇到困難,哪些點上容易犯錯誤。學長們也會比教師更有熱情,這也是這種形式的另一個優(yōu)點。
自主學習指的是課后學生去了解知識點背后的趣味歷史。我們希望學生不僅僅只學到這個知識本身,更希望學生學到為什么產(chǎn)生了這個知識點。而獲得這種能力的一個有效途徑就是去了解發(fā)展的歷史,而且考慮到我們也不能給學生課后布置太難的任務,不然會打擊其學習積極性。然后每次上課在最后讓學生分享給大家,一方面增加課程的趣味性,一方面讓學生清楚知識點的來龍去脈,還可以鍛煉學生的表達能力。
小組討論指的是在每講授一個知識點之后,讓學生自由討論自己的疑惑,并嘗試著給其他同學解答疑惑。在實際的學習過程中,每個人都有著不同的疑問,指望老師在備課時考慮到所有的情況是不現(xiàn)實的。所以我們讓學生自己去提問,找同學去解答,同學解答不出的由老師講解。這樣一方面解放教師在答疑方面所花費的精力,另一方面鍛煉了學生思考問題的深度以及如何給別人講解的能力。
以上的方式,形式上多種多樣,但最終的目的都是將數(shù)據(jù)結(jié)構(gòu)課程的重點從“教”變成“學”。當然形式上不局限于上面的形式,只要是基于OBE 的教學創(chuàng)新都可以去嘗試,結(jié)果要通過實踐來檢驗。
在教學效果的評價上,我們通過學生互評,組長打分,學長打分收集學生的平時成績。在這里我們根據(jù)平時成績得分獲取平時成績的排名,然后我們將排名映射到正態(tài)分布,這樣無論采用什么考核問題、得分形式,對學生來說都是公平的,學生都是在和身邊人去比較,也不會存在整體得分偏高和整體偏低的情況。最后我們根據(jù)得到的平時成績,上機成績和試卷成績進行加權(quán),最終獲得學生的課程成績。我們可以采用F1 score 評價方式,對這三個成績加權(quán)。
基于OBE 數(shù)據(jù)結(jié)構(gòu)課程設計,以學生為教學主體,采用知識講授、指導建模、自主學習、小組討論等多樣化的教學手段,將數(shù)據(jù)結(jié)構(gòu)課程的教學與專業(yè)實踐應用相結(jié)合,相信會在提高數(shù)據(jù)結(jié)構(gòu)課程的教學質(zhì)量和提高學生程序設計的實踐能力方面取得了較好的效果。以后我們還要在課外教學過程控制和組織方面進一步探索和實踐,以期教學的各個環(huán)節(jié)都得到有效的控制和評價。