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