梁寶蘭, 徐翔, 吳舜歆
(電子科技大學(xué)中山學(xué)院,廣東 中山 528400)
數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)各專業(yè)的專業(yè)核心課程,它在各門專業(yè)課中,起到了承上啟下、聯(lián)系左右的作用,是計(jì)算機(jī)學(xué)科知識結(jié)構(gòu)的核心和技術(shù)體系的基石。但是數(shù)據(jù)結(jié)構(gòu)課程概念多、算法靈活和抽象性強(qiáng),造成一些學(xué)生在學(xué)習(xí)過程中對概念理解不透徹、形象化不夠以及編程訓(xùn)練不足,難以學(xué)以致用等問題。對于基礎(chǔ)相對薄弱的獨(dú)立學(xué)院的學(xué)生來說,必須保持良好的學(xué)習(xí)習(xí)慣,付出更多的實(shí)踐時間與努力,才能克服課程自身困難,達(dá)到良好的學(xué)習(xí)效果。學(xué)習(xí)興趣是良好學(xué)習(xí)習(xí)慣養(yǎng)成的內(nèi)在的驅(qū)動,有效監(jiān)督則是外在的保障。因此,在數(shù)據(jù)結(jié)構(gòu)的實(shí)踐教學(xué)過程中,如何提高學(xué)生的學(xué)習(xí)興趣,如何了解學(xué)生學(xué)情并給予精準(zhǔn)的指導(dǎo)與幫扶,成為提高該課程教學(xué)質(zhì)量的關(guān)鍵問題。
數(shù)據(jù)結(jié)構(gòu)課程的教學(xué)內(nèi)容較多,主要包括線性表、棧、隊(duì)列、字符串、數(shù)組與廣義表、樹結(jié)構(gòu)、圖結(jié)構(gòu)、查找和排序。同時數(shù)據(jù)結(jié)構(gòu)本身建立在抽象的數(shù)據(jù)模型基礎(chǔ)上,抽象性、理論性和邏輯性都極為強(qiáng),即使有現(xiàn)代化的教學(xué)工具輔助也無法將課件中的理論知識很直觀地全部表現(xiàn)出來,對于基礎(chǔ)相對薄弱的應(yīng)用型本科院校學(xué)生來講,需要付出更多的時間與努力來理解與消化課程內(nèi)容,才能真正運(yùn)用課程中所學(xué)知識進(jìn)行實(shí)踐練習(xí),因此在課程的理論教學(xué)與實(shí)踐教學(xué)之間的學(xué)時分配時,往往是傾向于理論教學(xué),實(shí)踐教學(xué)學(xué)時捉襟見肘,因此需要調(diào)動學(xué)生的學(xué)習(xí)積極性,在充分利用課堂外的學(xué)習(xí)時間夯實(shí)理論基礎(chǔ)的同時,加強(qiáng)實(shí)踐訓(xùn)練,提高分析和解決實(shí)際問題的能力。
學(xué)生在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)課程前,雖然已經(jīng)學(xué)習(xí)了程序設(shè)計(jì)基礎(chǔ)課程,具備一定的編程基礎(chǔ),但絕大多數(shù)學(xué)生均為初學(xué)者,尚未形成良好的程序設(shè)計(jì)思維,平常所閱讀與編寫的程序只是入門級的程序,短小易調(diào)試,且往往不涉及指針、結(jié)構(gòu)體、文件讀寫等在程序設(shè)計(jì)基礎(chǔ)課程中相對較難的內(nèi)容。而在數(shù)據(jù)結(jié)構(gòu)課程學(xué)習(xí)時,學(xué)生需要理解抽象的算法,更要利用這些算法解決實(shí)際的復(fù)雜問題,實(shí)踐的難度相比之前有了階躍式的提高,在尚未具有良好的集成開發(fā)工具的調(diào)試技巧與能力的情況下,無論是閱讀或者是編寫都受到了較大的束縛,導(dǎo)致部分學(xué)生產(chǎn)生學(xué)習(xí)挫敗感,從而失去學(xué)習(xí)信心與耐心。因此針對復(fù)雜問題,教師需要指引學(xué)生對問題進(jìn)行合理的步驟分解,制定遞進(jìn)式的程序設(shè)計(jì)目標(biāo),從簡到難迭代編寫程序,讓學(xué)生在各階段目標(biāo)達(dá)成的過程中提升成就感。
學(xué)生在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)課程之前,所做實(shí)踐項(xiàng)目往往是Windows 控制臺空項(xiàng)目,缺乏用戶界面,程序的運(yùn)行通過控制臺窗口進(jìn)行數(shù)據(jù)輸入與結(jié)果輸出,學(xué)生難以直觀地發(fā)現(xiàn)輸入與輸出之間因果聯(lián)系;枯燥乏味的人機(jī)交互方式與執(zhí)行結(jié)果展示方式也難以讓學(xué)生在實(shí)踐中收獲解決問題后的成就感與滿足感。因此,需要改變Windows 控制臺空項(xiàng)目的傳統(tǒng)編程實(shí)踐訓(xùn)練,適當(dāng)引入圖形化的編程,增強(qiáng)程序運(yùn)行結(jié)果的直觀性與趣味性,豐富人機(jī)交互方式,提升學(xué)生的編程體驗(yàn),從而提高學(xué)習(xí)興趣。
適當(dāng)合理的作業(yè)有利于學(xué)生溫故知新、查漏補(bǔ)缺,提高學(xué)習(xí)成效。但相對于一本院校的學(xué)生,獨(dú)立學(xué)院中部分學(xué)生的學(xué)習(xí)習(xí)慣不良、學(xué)習(xí)積極性與自控力較弱,在作業(yè)不能得到及時檢查與點(diǎn)評的情況下,容易出現(xiàn)學(xué)習(xí)松懈情況。但由于數(shù)據(jù)結(jié)構(gòu)編程實(shí)踐作業(yè)因代碼偏長、學(xué)生邏輯思路多樣等原因,批改起來十分困難。在學(xué)生人多作業(yè)多的情況下,僅依靠人工批改的方式,任課教師很難做到關(guān)注每位學(xué)生的每份作業(yè),不能充分掌握學(xué)生的學(xué)情。因此需要智能化的作業(yè)批改模式,既能分擔(dān)教師批改作業(yè)的工作量,也能客觀定量分析學(xué)生的學(xué)情,讓教師根據(jù)學(xué)情分析情況有針對性地對每位同學(xué)提供相應(yīng)的教學(xué)關(guān)注與輔導(dǎo)。
Educoder 平臺是一個“學(xué)、測、練、研”四位于一體,支持計(jì)算機(jī)、軟件工程、大數(shù)據(jù)、云計(jì)算等專業(yè)課建設(shè)的工程教育平臺。
Educoder 平臺所提供的自動評測功能,可通過設(shè)定的多組測試用例檢驗(yàn)學(xué)生所撰寫代碼是否符合編程任務(wù)要求,如果所有測試用例均可通過即為通關(guān),若有錯也會給出不同測試用例,根據(jù)學(xué)生所撰寫代碼的輸出結(jié)果,幫助學(xué)生反推所撰寫代碼中的邏輯問題,并加以改正。教師可通過平臺中所收集的學(xué)生實(shí)踐任務(wù)通關(guān)情況、歷史代碼提交情況、在線編程實(shí)踐等學(xué)習(xí)軌跡等數(shù)據(jù),充分掌握學(xué)生的整體學(xué)情及每位同學(xué)的學(xué)習(xí)畫像,針對普遍的學(xué)習(xí)薄弱環(huán)節(jié)可及時進(jìn)行教學(xué)調(diào)整,針對個別的學(xué)習(xí)習(xí)慣不良的同學(xué)也可以及時進(jìn)行督促與指導(dǎo)。
筆者根據(jù)數(shù)據(jù)結(jié)構(gòu)課程主要內(nèi)容,設(shè)計(jì)了包括“實(shí)踐準(zhǔn)備”“線性表”“棧與隊(duì)列”“圖”“查找”“排序”等七個實(shí)訓(xùn)項(xiàng)目,其中代碼量級別代表完成該任務(wù)大于需要的代碼行數(shù),每單位代表約40行代碼。
筆者在過去兩年的數(shù)據(jù)結(jié)構(gòu)實(shí)踐教學(xué)過程中,學(xué)生利用Educoder平臺完成了上述的實(shí)訓(xùn)任務(wù),從系統(tǒng)的學(xué)情數(shù)據(jù)結(jié)合課程的問卷調(diào)查結(jié)果中,可以反映出學(xué)生的編程實(shí)踐的積極性和實(shí)際編程時間,均比傳統(tǒng)教學(xué)有所提高,教師也在經(jīng)歷首次建課的繁重工作后,享受了重復(fù)利用課程的便利,同時也大大減輕作業(yè)批改的工作量。這些優(yōu)點(diǎn)均與課程建設(shè)之初的設(shè)想完全一致,但在實(shí)際的實(shí)踐教學(xué)過程中發(fā)現(xiàn),若學(xué)生的編程基礎(chǔ)尚薄弱,程序調(diào)試技巧尚不成熟的時候,完全使用Educoder 平臺進(jìn)行實(shí)踐練習(xí),會產(chǎn)生一些副作用。副作用一:學(xué)生過于依賴Educoder的編程環(huán)境,而忽視使用集成開發(fā)環(huán)境,特別當(dāng)出現(xiàn)邏輯錯誤時,不善于使用集成開發(fā)環(huán)境所提供的調(diào)試功能快速定位錯誤,而是在Educoder平臺上耗費(fèi)較多的時間與精力。副作用二:嚴(yán)格的評測標(biāo)準(zhǔn)讓部分粗心大意的學(xué)生因?yàn)閷ζ┤巛敵龈袷?、邊界情況等的考慮不周導(dǎo)致評測頻頻不通過,學(xué)生的編程自信大受打擊,反而會失去學(xué)習(xí)的興趣與動力。
EasyX 是針對C/C++的圖形庫,提供了用于簡單易用的圖形常用函數(shù)庫,適合具有簡單的C/C++編程基礎(chǔ)的人員快速上手圖形、動畫和游戲編程。基于EasyX的圖形化編程實(shí)踐任務(wù)對學(xué)生的編程基礎(chǔ)要求不高,可以利用鼠標(biāo)進(jìn)行類似用戶界面的人機(jī)交互,且實(shí)踐任務(wù)完成的作品所呈現(xiàn)的效果相比控制臺窗口的字符輸出更有視覺沖擊力,比如學(xué)生普遍認(rèn)為雖然都是僅需要一條簡單的語句,但是在繪圖窗口中繪制出基本圖形比在控制臺窗口上輸出一行文字更直觀、生動、有趣,也更有成就感。
筆者圍繞數(shù)據(jù)結(jié)構(gòu)的主要內(nèi)容,設(shè)計(jì)了難度適中且頗具趣味性的基于EasyX的圖形化編程訓(xùn)練任務(wù),以制作動畫的方式,讓學(xué)生在充分理解相關(guān)結(jié)構(gòu)與算法等理論知識的同時,加強(qiáng)了編程解決復(fù)雜問題的能力。
基于EasyX 的編程實(shí)踐訓(xùn)練雖然不能進(jìn)行自動評測,但是可以讓學(xué)生使用集成編程工具,熟練編程調(diào)試技巧;同時不會設(shè)定標(biāo)準(zhǔn)答案,對一些小錯誤更具包容性,更能調(diào)動學(xué)生的創(chuàng)造力;也可以適應(yīng)不同層次同學(xué)的實(shí)際情況,讓學(xué)生選擇不同難度的動畫呈現(xiàn)方式,這些恰好可以彌補(bǔ)完全使用Educoder平臺開展實(shí)踐訓(xùn)練所產(chǎn)生的副作用。以動畫作品作為編程實(shí)踐訓(xùn)練作業(yè)的交付品,不僅方便教師了解并點(diǎn)評學(xué)生作業(yè),更方便了優(yōu)秀的展示、學(xué)習(xí)與模仿。兩種實(shí)踐任務(wù)相輔相成,取長補(bǔ)短,最大限度地激發(fā)學(xué)生自覺性、成就感、創(chuàng)造力,從而營造良好的學(xué)習(xí)氛圍。
近幾年,筆者利用課程問卷調(diào)查的方式,調(diào)查了學(xué)生對數(shù)據(jù)結(jié)構(gòu)課程的學(xué)習(xí)情況,學(xué)生普遍認(rèn)同該課程的實(shí)踐教學(xué)改革成效。從表1與表2中可見,完成所有基于Educoder平臺的編程實(shí)踐練習(xí)任務(wù)和基于EasyX的圖形化編程任務(wù)大約需要學(xué)生編寫3 500行的有效代碼,平均每周大約需要編寫200行,一周累計(jì)編程時間約8小時。本課程的課程問卷調(diào)查反映出,在學(xué)生所編寫的代碼總量上,有89.5%的同學(xué)超過2 000行,55.3%的同學(xué)超過3 000行,17.4%的同學(xué)超過了4 000行;在平均每周的編程時間上,89.1%的同學(xué)平均超過6小時,55.2%的同學(xué)超過8小時,5.1%的同學(xué)超過12小時;87.5%的同學(xué)認(rèn)為基于EasyX的圖形化編程任務(wù)非常有趣;有85.4%的同學(xué)認(rèn)為課程的總編程任務(wù)量適中,有97.8%的同學(xué)認(rèn)為自己修習(xí)本課程后編程能力有較大或非常大的提升。上述數(shù)據(jù)可見,學(xué)生普遍認(rèn)同本課程的編程任務(wù)設(shè)置,且能較自覺有效地去完成,達(dá)到了本課程改革的預(yù)期成效。
表1 近四年筆者所教授數(shù)據(jù)結(jié)構(gòu)班級考試成績
表2 2020年秋季課改班與非課改班總評成績對比
筆者在所教授的2019年秋季的數(shù)據(jù)結(jié)構(gòu)班級上,開始在該課程的實(shí)踐教學(xué)中,設(shè)計(jì)并使用基于EasyX的圖形化編程任務(wù),在2020年秋季,開始使用基于Educoder平臺自動評測實(shí)踐任務(wù)。近四年,筆者所教授的所有數(shù)據(jù)結(jié)構(gòu)班級最終成績統(tǒng)計(jì)數(shù)據(jù)如表1所示。
從表1可以發(fā)現(xiàn),在數(shù)據(jù)結(jié)構(gòu)的實(shí)踐教學(xué)中,2020年和2021 年秋季班同時使用了基于Educoder 平臺的自動評測編程任務(wù)及基于Easyx 的圖形化編程任務(wù)后,學(xué)生的卷面平均分、綜合平均分、及格率、優(yōu)秀率等均有了較大的提升,特別是優(yōu)秀率,更幾乎有翻倍的提升,表明了教學(xué)成效有明顯的提升。
從表2 與表3 中可以發(fā)現(xiàn),近兩年課改班與非課改班的成績統(tǒng)計(jì)數(shù)據(jù)對比中,課改班的綜合及格率與優(yōu)秀率較明顯地高于非課改班,也表明了課程教學(xué)改革的成效。
表3 2021年秋季課改班與非課改班總評成績對比
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)教學(xué)能讓學(xué)生將抽象的理論用具體代碼描述,實(shí)現(xiàn)提供指導(dǎo),通過良好的實(shí)驗(yàn)設(shè)計(jì),學(xué)生可以通過編寫代碼實(shí)現(xiàn)具體算法的方式將理論知識融會貫通,為后續(xù)的專業(yè)學(xué)習(xí)、升學(xué)和工作打下良好的基礎(chǔ)。筆者在多年的數(shù)據(jù)結(jié)構(gòu)課程教學(xué)過程,不斷總結(jié)教學(xué)經(jīng)驗(yàn),針對課程自身特點(diǎn)與學(xué)生的情況,探索出了采用圖形化編程任務(wù)自動評測編程任務(wù)結(jié)合的實(shí)踐教學(xué)模式,并經(jīng)過兩年的實(shí)踐試用,初見成效,未來將以學(xué)生需求為導(dǎo)向,進(jìn)一步完善課程的實(shí)踐任務(wù),推廣該教學(xué)模式,提高該課程的教學(xué)成效,同時也為其他程序設(shè)計(jì)類課程提供教學(xué)模式的參考。