常合友 周愷

【摘要】針對《數(shù)據(jù)結(jié)構(gòu)》課程內(nèi)容抽象,學生普遍有對知識點掌握不牢的問題,本文分析了當前數(shù)據(jù)結(jié)構(gòu)教學實踐過程中存在的主要問題,探討了以OBE為目標,利用OJ對課程的教學實踐和課程評價環(huán)節(jié)進行改革。通過注重過程化考核、加大實踐教學力度、設計針對性題目、開展探究式教學,提高教學質(zhì)量和學生的創(chuàng)新能力。
【關(guān)鍵詞】數(shù)據(jù)結(jié)構(gòu)? 教學改革? OBE? OJ系統(tǒng)
【基金項目】國家青年自然科學基金(NO. 61806098);江蘇省高等學校自然科學研究面上項目(18KJB520029);南京曉莊學院青年專項(2017NXY49)。
【中圖分類號】G642 【文獻標識碼】B/A 【文章編號】2095-3089(2021)10-0116-02
隨著我國綜合實力和國際地位的不斷提升,高等工程教育正面臨著由大國向強國轉(zhuǎn)變的歷史機遇。目前,我國高等工程教育改革的主流方向是與國際接軌,培養(yǎng)得到國際認可的工程技術(shù)人才。OBE(即Outcomes?Based Education)是一種基于學生學習產(chǎn)出為導向的教育模式。在目前的中國工程教育專業(yè)認證體系中,要求將OBE工程教育理念貫穿于人才培養(yǎng)目標、課程體系設計、教學內(nèi)容與教學要求、教學評價等各環(huán)節(jié)[1]。在實際的教學環(huán)節(jié)中,如何建設課程內(nèi)容、改進教學過程,培養(yǎng)學生的抽象思維能力,提高學生的計算機應用能力是計算機工程教育教學所需考慮的重要問題。
《數(shù)據(jù)結(jié)構(gòu)》作為計算機學科理論性和實踐性較強的專業(yè)基礎必修課,其教學目標是要求學生掌握各種常用數(shù)據(jù)結(jié)構(gòu)的定義、特點以及基于這些數(shù)據(jù)結(jié)構(gòu)的基本算法,具備一定的數(shù)據(jù)抽象能力,學會分析算法復雜度、比較算法性能和優(yōu)化算法,提高應用計算機技術(shù)解決實際問題的能力。由此可見,通過該課程教學目標的實現(xiàn),將對學生達到工程認證畢業(yè)要求,如具備解決復雜工程問題所具有的扎實的工程知識、問題分析能力、深度研究能力以及終身自主學習習慣等起到重要的支撐作用。
雖然工程知識和基礎理論可通過課堂教學傳授獲得,但是如何分析實際問題,通過數(shù)據(jù)抽象建立數(shù)學模型,并選擇合適的數(shù)據(jù)結(jié)構(gòu)將問題轉(zhuǎn)換為計算機能夠處理的形式等抽象思維過程很難在傳統(tǒng)的課堂教學模式中培養(yǎng)出來。學生只有通過針對性的系統(tǒng)化實踐訓練,才能真正培養(yǎng)和提高抽象思維能力,理解和掌握課程的內(nèi)容,培養(yǎng)主動和深入學習的習慣,提高分析和解決問題的能力,達到專業(yè)認證對學生素質(zhì)和能力的要求。
1.教學實踐環(huán)節(jié)存在的問題
由于《數(shù)據(jù)結(jié)構(gòu)》課程包含的知識點多、邏輯性強且抽象性高,涉及各種常用數(shù)據(jù)結(jié)構(gòu)的定義、特點以及基于這些基本數(shù)據(jù)結(jié)構(gòu)的基本算法等,教師常常重點講授理論知識,使用偽代碼來描述數(shù)據(jù)結(jié)構(gòu)及其算法實現(xiàn),教學內(nèi)容比較抽象[2]。學生被動地接收理論知識,普遍感覺課程內(nèi)容過于抽象,對抽象數(shù)據(jù)類型(Abstract Data Type, ADT)的理解比較膚淺,不知道如何利用 ADT 進行相關(guān)算法的設計,無法滿足工程認證教育的基本要求。
作為實踐性較強的專業(yè)基礎必修課程,實踐教學環(huán)節(jié)是數(shù)據(jù)結(jié)構(gòu)教學的重要組成部分。然而有限的實踐教學往往過于注重基本理論的驗證性實驗,實驗題目比較陳舊,多是圍繞消化課堂內(nèi)容而設計的一些碎片式的題目,缺乏系統(tǒng)化的實踐題目設計,尤其缺乏對數(shù)據(jù)結(jié)構(gòu)的核心內(nèi)容,即ADT的系統(tǒng)性訓練,導致學生無法實現(xiàn)算法從偽代碼到實際代碼的真正轉(zhuǎn)換。此外,在編程實驗過程中,學生遇到問題時無法與教師保持溝通,導致學生無法及時獲得教師的指導,影響學生的學習積極性。由于算法設計能力并未從實踐環(huán)節(jié)中得到實質(zhì)性的鍛煉和提高,學生普遍對實踐教學的積極性不高,缺乏學習能動性,實踐教學效果不好。這種狀況顯然不利于學生分析和解決問題能力的培養(yǎng)。
為了真正領悟和掌握抽象思維能力,學生不僅需要從理論上掌握基本的知識點,還需要通過大量的課后訓練來提高算法設計能力,只有這樣才能將具體的數(shù)據(jù)結(jié)構(gòu)和相關(guān)算法應用于解決實際問題。然而,大多數(shù)學生的自主學習能力較差,很難自覺地完成課下訓練。此外,《數(shù)據(jù)結(jié)構(gòu)》課程大多以書面和理論知識考核為主,對實驗部分的考核則主要通過實驗報告。由于課后作業(yè)和課程實踐報告中普遍存在抄襲現(xiàn)象,教師無法全面了解學生對知識的實際掌握情況。
2.教學實踐改革探討
為了解決上述教學實踐過程存在的問題,我們在教學實踐中引入OJ(Online Judge)系統(tǒng),并圍繞該系統(tǒng)對教學方法、實踐方法以及課程評價方法進行改革。通過引入OJ,引導學生從實際問題出發(fā),將所學知識應用到具體問題中,通過編寫程序解決問題來加深學生對概念和算法的理解和掌握,進而提升學生的獲得感和學習積極性[3]。
OJ系統(tǒng)主要用于在線檢測程序源代碼的正確性。當學生提交程序后,該系統(tǒng)可以快速地返回學生一個狀態(tài):通過、答案錯誤、超時、超出輸出限制、超內(nèi)存、運行時錯誤、格式錯誤或無法編譯、未知錯誤,并返回程序使用的內(nèi)存、運行時間等信息。目前廣泛應用于世界各地高校學生程序設計的訓練、參賽隊員的訓練和選拔、各種程序設計競賽等。
與程序設計競賽不同,《數(shù)據(jù)結(jié)構(gòu)》課程的目標是培養(yǎng)學生按照ADT定義實現(xiàn)數(shù)據(jù)結(jié)構(gòu)的能力,按照預定義的結(jié)構(gòu)實現(xiàn)函數(shù)的能力以及選擇合適的算法解決問題的能力。因此需要根據(jù)實際需求對OJ系統(tǒng)進行改進,才能有效地將OJ系統(tǒng)嵌入到《數(shù)據(jù)結(jié)構(gòu)》課程的教學中。
2.1案例化、層次化教學
從實際問題出發(fā),進行問題驅(qū)動教學,激發(fā)學生的學習興趣,刺激學生進行自主探究。例如在講解線性表內(nèi)容時,從圖書館借書開始,讓學生思考如何才能快速定位到圖書,進一步探討如何擺放圖書可以提高定位效率;再比如講解圖相關(guān)內(nèi)容時,提出如下問題:從學校東門步行到地鐵站,有幾條路線可以選擇?哪條路線耗時最少?通過案例教學法幫助學生理解復雜問題,引導學生思考問題,利用所掌握的知識解決實際問題。
利用OJ系統(tǒng),教師可以針對知識點布置隨堂作業(yè)。針對學生的不同能力,作業(yè)分為必做和選做兩部分。必做題重點考核學生對基礎知識點的掌握情況;選做題涉及更多的知識點,主要針對學習能力較好的學生。只有在完成必做題的前提下,學生才能打開選做題。比如在二叉樹的遍歷部分,必做題包括給定二叉樹,利用遞歸思想實現(xiàn)先序、中序和后序遍歷。選做題則要求學生利用線性表、棧和隊列等知識,完成非遞歸方式的二叉樹先序、中序和后序遍歷。得益于其強大的后臺統(tǒng)計能力,教師可以快速掌握學生對知識的理解程度,進而開展針對性、層次化教學。通過有重點地講解,幫助學生理解和掌握難度較大的知識點。
2.2有效整合教學和實踐環(huán)節(jié)
利用OJ系統(tǒng),教師可以將理論教學與實踐教學合二為一,即全部課程均在機房完成,教師在講授知識點后,學生立刻進入OJ系統(tǒng)進行實踐訓練,從而打破傳統(tǒng)理論教學和實踐教學的異步性問題,提高教學效率。另外,OJ系統(tǒng)可以對學生的實踐結(jié)果進行快速地判別,幫助教師及時發(fā)現(xiàn)學生存在的問題,便于教師開展指導,保證問題得到及時解決,進而提高學生的獲得感。在教學實驗過程中,我們在OJ系統(tǒng)中增加交流平臺。教師可以通過該平臺與本班學生進行交流,回答學生的提問,進而更好地了解學生對知識的掌握程度。通過增加師生的交流和了解,促進教師因材施教,提高教學質(zhì)量。OJ系統(tǒng)還可以自動檢測代碼的重復度。通過引入懲罰機制,可以有效杜絕抄襲現(xiàn)象,培養(yǎng)學生獨立完成作業(yè)的習慣。
2.3注重過程化考核,優(yōu)化考核方式
借助OJ全天候開放的優(yōu)點,學生可以隨時隨地進行練習。通過提交程序代碼,鍛煉自己分析問題、解決問題的能力。為了強化學生實踐動手能力,有效監(jiān)督學生保質(zhì)保量完成訓練任務,課程改革中強調(diào)過程化考核,即期末總分=隨堂練習部分×20%+課下練習部分×30%+實驗作業(yè)部分×20%+期末考試×30%。值得注意的是,四部分均在OJ環(huán)境下完成,OJ系統(tǒng)會記錄學生使用系統(tǒng)的信息,包括練習、作業(yè)、實驗以及交流情況,保證考核和評價的客觀性。通過不斷優(yōu)化考核方式,逐步建立起完善的評價與管理機制。
2.4題庫設計
基于數(shù)據(jù)結(jié)構(gòu)教學大綱,適應工程認證教育的要求,我們重新設計了數(shù)據(jù)結(jié)構(gòu)的實踐題目。目前,試題庫已包含了 200 余道題目,15個專題試題集。這些題目的內(nèi)容包括:(1)數(shù)據(jù)結(jié)構(gòu)(線性表、鏈表、棧、隊列、二叉樹、最優(yōu)樹、圖)的完整 ADT 設計;(2)建立在 ADT 基礎上的數(shù)據(jù)結(jié)構(gòu)應用算法題目;(3)算法設計實現(xiàn)部分(結(jié)構(gòu)體、排序、查找)題目等。上述三部分內(nèi)容環(huán)環(huán)相扣,層層遞歸。ADT設計考查學生對數(shù)據(jù)結(jié)構(gòu)的掌握程度,應用算法題目要求學生按照給定的ADT實現(xiàn)特定的數(shù)據(jù)結(jié)構(gòu),算法設計實現(xiàn)部分則要求學生根據(jù)算法的定義實現(xiàn)特定算法,解決特定問題。
3.實踐案例
以圖為例,我們安排了18道實訓題目,如表 1 所示。題目可對應于四個階段:階段 1,建立圖的鄰接矩陣、鄰接表存儲結(jié)構(gòu);階段 2:在圖存儲結(jié)構(gòu)之上,完成各種遍歷操作,包括深度優(yōu)先遍歷、廣度優(yōu)先遍歷,完成后將其加入到圖的 ADT 基本操作集中。階段 3:在存儲結(jié)構(gòu)及各種遍歷算法的基礎上,實現(xiàn) ADT 的其他基本操作,包括拓撲排序、連通分量、生成樹等,完成后將其加入到二叉樹的 ADT 基本操作集中。階段 4:通過完成的圖的抽象數(shù)據(jù)類型,完成簡單的應用算法設計。
實訓內(nèi)容包含的知識要點滿足OBE要求,題目從易到難并環(huán)環(huán)相扣,有助于學生鞏固所學理論知識并加以應用,幫助不同水平層次的學生提升算法設計能力。
4.結(jié)語
本文針對當前《數(shù)據(jù)結(jié)構(gòu)》課程教學過程中存在的問題進行了探討,提出了以OBE為目標,將OJ系統(tǒng)全方位引入到該課程的教學和實踐改革中的幾點措施。通過幾年的建設,《數(shù)據(jù)結(jié)構(gòu)》課程在教學實踐方法、實驗內(nèi)容和考核方式等越來越系統(tǒng)化,能夠滿足多層次、多角度的實驗教學活動。《數(shù)據(jù)結(jié)構(gòu)》課程的教學實踐改革不僅促進了學生動手能力和思維能力的培養(yǎng),還提高了學生應用數(shù)據(jù)結(jié)構(gòu)知識解決實際問題的能力,有效地提高了教學效果。在未來的教學實踐過程中,我們會繼續(xù)從實踐教學方法和手段等多個方面入手,不斷完善《數(shù)據(jù)結(jié)構(gòu)》課程的OBE建設,提高課程的實踐教學水平。
參考文獻:
[1]駱小紅,馬永紅.基于OBE理念的數(shù)據(jù)結(jié)構(gòu)教學設計[J]. 科技視界,2018(30):112-113.
[2]譚定英,陳平平,劉慧玲.以問題為中心的案例教學法在數(shù)據(jù)結(jié)構(gòu)與算法課程中的應用[J].計算機教育,2013(12):50-53.
[3]張仕,吳聞,郭躬德,等.基于PCOJ的數(shù)據(jù)結(jié)構(gòu)實驗教學探索[J].計算機教育,2015(3):30-32.
作者簡介:
常合友,男,講師,研究方向為機器學習,模式識別。
周愷,男,實驗師,研究方向為智能交通。