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