劉忠民 陳英 段喜龍 鄭巍




基金項目:國家自然科學基金地區項目“基于全局交互網絡的大學生利他協作學習模式研究”(61867004);全國高等院校計算機基礎教育研究會項目“基于建構主義的數據結構理論課堂教學研究”(2019-AFCEC-275);江西省高校教改課題“《數據結構》課程實驗差異化教學的研究和實踐”(JXJG-14-8-12)
第一作者簡介:劉忠民(1968-),男,漢族,江西南昌人,碩士,副教授。研究方向為計算機基礎課程教學和網絡信息安全。
DOI:10.19980/j.CN23-1593/G4.2024.06.034
摘? 要:數據結構存在前修課程基礎不扎實、學生實驗課前準備不充分和實驗結果考核困難的問題。該文總結夯實基礎、任務驅動、全員考核、強化訓練“四位一體”的實驗教學改革。從理論課堂彌補學生編程短板入手,結合任務驅動教學方法,明確布置實驗編碼任務,要求實驗課前學生必須完成并提交實驗代碼,在實驗課堂采用覆蓋每個學生并要求重寫核心算法代碼的考核方法,分批次考核學生實驗結果,并借助PTA平臺對學生進一步強化訓練。實踐表明,該教學改革措施有利于促進學生的自主學習,不僅達成比較好的學習效果,而且有助于培養學生的綜合能力。
關鍵詞:數據結構;實驗教學;自主學習;建構主義;任務驅動
中圖分類號:G642.0? ? ? 文獻標志碼:A? ? ? ? ? 文章編號:2096-000X(2024)06-0144-05
Abstract: The data structure course faces issues such as students having an unstable foundation from prerequisite courses, insufficient preparation before experimental classes, and difficulties in assessing experimental results. This paper summarizes the "four-in-one" experimental teaching reform of solidifying the foundation, task-driven, full-staff assessment, and intensive training. Starting from compensating for students' programming weaknesses in theoretical classes, combined with task-driven teaching methods, clear coding tasks are assigned for experiments. Students are required to complete and submit experiment codes before the lab class. In the experimental class, an assessment method that covers each student and requires rewriting of core algorithm codes is adopted. Students' experiment results are assessed in batches, and further intensive training is provided to students through the PTA platform. Practice has shown that this teaching reform measure is conducive to promoting students' self-learning. It not only achieves relatively good learning results but also helps cultivate students' comprehensive abilities.
Keywords: data structure; experiment teaching; self-regulated learning; constructivism; task driven
數據結構課程是軟件工程等專業的一門重要的學科核心基礎課,是數據庫原理、操作系統和算法設計與分析等課程的重要基礎。該課程理論與實踐并重,承載著培養學生的計算機程序設計能力和計算思維能力的重任,對學生的后續專業學習帶來重大影響。傳統的數據結構實驗教學面臨很多困境,在工程教育專業認證背景下,如何貫徹“以學生為中心,以產出為導向,持續改進”的教育理念,有效利用各種教學資源,提高課程教學效果,培養具有實踐能力的應用型人才,是當下需要不斷改革探索并深入研究的重要課題。
一? 數據結構實驗教學困境
(一)? 前修課程基礎不扎實
程序設計基礎是數據結構課程最主要的前修課程,由于大班授課、學時有限、學生自主性差和實踐不足等原因,學生的C語言編程基礎普遍不太扎實,而數據結構課程的理論和算法都需要借助于類C語言來進行描述、講解和實現。再加上程序設計基礎課程教學側重語法知識,后續指針、結構體及其應用等介紹不多,而這些內容卻是數據結構課程中要用到的主要知識。這樣造成學習前后銜接不夠,基礎不扎實,這直接增加了學生學習數據結構課程的難度,學生在學習中壓力太大,難以產生興趣,學習的深度和廣度達不到基本要求,是造成學生無法做到學以致用的原因之一[1-2]。
(二)? 學生實驗課前準備不充分
在一般實驗教學中,教師根據課程進度將實驗任務布置給學生,學生按任務要求課下準備實驗,上實驗課時教師檢查學生實驗完成的情況并給予評分。整個過程表面上并沒有什么不妥,現實的結果讓任課教師很無奈,很多學生往往實驗課前準備不足,結果導致實驗課時完不成實驗任務,無法接受檢查,少數學生會選擇抄襲期望蒙混過關。
(三)? 實驗考核困難
數據結構的實驗考核包括實驗結果考核和實驗報告兩部分,其中實驗報告部分相對好辦,制定好評分標準對報告進行評分即可。而實驗結果的考核卻困難得多,不能只看程序運行結果是否正確,需要通過對代碼和算法提問來確定是否自主完成實驗,而這不僅判斷困難而且費時費力。為了準確判斷,教師需要針對代碼和算法各至少要問2~3個問題,學生回答問題再加上交流,檢查一個學生短的耗時2~3 min,時間長的需要4~5 min,如果一個班30多個學生都接受檢查實驗課上根本檢查不完,而且由于檢查的時間緊任務重,檢查的結果也未必準確,教師兩節課下來容易身心俱疲。
最終教師為了防止魚目混珠,保證實驗評分的準確性,往往會選擇增大檢查難度,單個學生的檢查會耗費更長的時間,檢查無法覆蓋到每個學生。最終不少學生實驗課只是為了出勤,獲得一個基本分,實驗課時不認真去完成實驗并思考和動手解決遇到的問題,實驗變成了走過場和拼湊報告。
二? 促進自主學習的“四位一體”教學改革
自主學習是指學習者在一定程度上從認知、動機和行為方面積極主動地參與自己學習活動的過程,其核心是學生積極主動控制、調節自己的學習[3]。自主學習理論在課程教學中已經多有應用[4-7],本文描述的實驗教學改革主要依據自主學習理論以及由此衍生的建構主義理論,構建了如圖1所示的夯實基礎、任務驅動、全員考核、強化訓練“四位一體”的實驗教學體系。教學實踐中結合理論課堂盡量彌補學生的編程短板,夯實學生自主學習基礎;理論課后馬上布置一些微實驗任務要求學生完成并落到實處,而在實驗課前明確布置編寫實驗代碼的作業任務,通過任務驅動學生自主學習;采用覆蓋全體學生的實驗考核方法,通過嚴格考核起到督促學生自主學習的目的;結合線上資源進一步對學生進行強化訓練,通過給予評分晉級的舉措激勵學生自主學習。
圖1? 數據結構“四位一體”實驗教學體系
改革舉措盡可能引導學生采用馬上應用、做中學等如圖2所示的學習金字塔理論[1]中更底層的學習方式,這些更底層的學習方式能達到更好的知識識記效果,有利于學生達到更有效的知識建構吸收目的。
圖2? 學習金字塔理論
(一)? 理論課堂注重夯實學生編程基礎
高質量的理論教學有助于實驗教學的良好開展,在理論課堂注重去彌補學生前修課程基礎不扎實問題,這樣做是必要的也是相對容易把控的。但如果不能清醒地認識到這一點,只關注學生對數據結構知識本身的掌握,結果只能是事倍功半。
最初采用過設立預備實驗的辦法來彌補學生的編程短板,編寫了包括函數、指針和結構體三個實驗項目的預備實驗指導書,指導書包含較多的導學內容,要求學有困難型的學生必須參加,其他層次學生根據自身的情況選擇參加[8]。實踐發現學生參與意愿不夠強,需要教師額外投入比較多的時間精力,成效不容易掌控。
依據建構主義理論,課堂上講解到學生沒掌握好的編程知識時,通過恰當的演示方式盡力構建有效的學習情境,用課堂作業和課后微實驗等任務驅動的辦法引導學生在課內課后及時動手演練,促使學生主動建構、內化吸收知識。其中微實驗是指給學生布置一些針對特定編程知識的實驗任務,這樣的實驗任務牽涉面少,工作量相對較小,從多方面來說都容易見成效。主要做法如下。
1)講解到線性表的順序存儲結構和算法時,學生對存儲結構中的“ElemType *elem;”及算法中的“*(p+1)=*p;”等部分最不容易理解。在課堂馬上編寫一個簡單的C語言程序給學生演示這些語句達到的效果,這很容易做到,花的時間也少,但卻能為學生構建這些編程知識的較好學習情境;課后再布置一個微實驗任務讓學生模仿教師做一次,并要求學生將實驗結果截圖發到教學用QQ群,這樣要求比較有效,不斷有實驗結果發到群中對未完成實驗的學生有很好的督促作用,否則的話學生容易忽略這個任務。
2)講解到線性表的鏈式存儲結構時,學生對結構體定義大都不太熟悉,課堂直接通過電腦演示兩種結構體的定義方式:先定義結構體,再利用結構體定義需要的結構體類型和指向結構體的指針類型;直接通過結構體定義出需要的類型。讓學生直觀發現兩種定義方式實際上是等價的,能達到更好的解惑效果。
3)講解鏈表操作時的處理比較有迷惑性,教學實踐中使用過編程演示方法但效果并不好,也許對大多數學生來說鏈表操作知識欠缺太多、難度太大,編程演示并不能帶來直接、清晰的觀感,反而會有霧里看花的感覺。更有效的做法是使用板書來演示,板書前插法、后插法以及中間插入和刪除各種情況下該怎樣寫代碼,再利用板書靈活多變的特點,把每一行代碼達到的效果更形象地表達出來,包括一些典型的錯誤代碼(如指針操作代碼前后調換順序)達到的效果。
板書完后做一個總結:不管是插入還是刪除, 核心語句都只有兩行或者三行代碼——這會對學生造成很大的心理沖擊,學生會驚訝發現,原來鏈表操作難度遠比想象的要小。這能很好地幫助學生克服畏難心理。接下來趁熱打鐵,馬上布置準備好的鏈表操作練習,要求短時間內當堂寫完,當堂上交,下一堂課挑一些典型錯誤代碼再分析一下。
4)講解到函數的引用參數(前面加&的參數)時也采用課堂上快速演示加課后微實驗任務驅動的辦法。
(二)? 布置編寫實驗代碼硬性任務
平常布置的一般作業過了截止時間未提交作業的學生屈指可數,而一般實驗教學中只有部分學生能真正做好準備,有少數學生甚至在上實驗課時才開始編寫代碼。分析原因有兩方面,一方面是由于實驗考核困難,每次實驗課只能考核到部分學生,導致部分學生學習壓力不足;另一方面是由于實驗任務布置不夠明確。
比較有效的做法是,在布置了實驗任務后,通過超星發布一次編寫實驗代碼的作業,明確要求實驗課前必須完成實驗代碼編寫,并且強調實驗課前必須完成實驗,實驗課時只是接受檢查并評分。明確布置的實驗編碼硬性任務可以對學生產生更多的驅動力,督促學生圍繞任務展開自主學習,結果在實驗課前幾乎所有學生都在超星提交好了實驗代碼,不再有在實驗課上臨時編寫代碼的情況,實驗準備的狀況有很大的改善。
(三)? 實驗課堂全員考核
科學合理的實驗考核方法會增強學生自主學習的主動性,激發學生創新意識,開展實驗教學考核改革是促進實踐教學內涵建設、提升學生自主學習能力與實踐創新能力的重要途徑[6]。對實驗結果的客觀評價不僅可以對學生的學習效果有一個準確的檢測,了解學生當前的學習狀況,還可以通過評價使學生對自己有一個正確的認識,端正自己的學習態度[7]。
本文介紹的實驗結果考核方法覆蓋到每一位學生,加上實驗課前明確布置編碼任務,學生能深刻領會到實驗是必須完成的學習任務,通過任務的驅動,學生不僅實驗課前需要做大量的準備工作,實驗課上仍然要盡力通過檢查,對每個學生都能起到很好的督促作用。實驗課上經常能觀察到學生之間在交流學習,杜絕了“出工不出力”的現象。具體的實驗教學改革要點如下。
1? 實驗考核覆蓋到每個學生
第一次實驗課前要注意介紹清楚實驗考核的具體方法步驟,強調每次實驗課將考核到每個人,根據實驗完成情況評定成績。實驗時嚴格檢查到每一位學生,無法接受檢查的學生就沒有成績,這樣才能給每個學生足夠的壓力,自主投入時間精力去完成實驗任務。
2? 考核的辦法是讓學生重寫核心算法代碼
為了核實學生是否自主完成實驗,重寫所有代碼是不現實的也是沒有必要的,每個實驗項目都包含一個或多個算法,重寫核心算法代碼是可能的也是有益的,能進一步促進知識的掌握。
考核某個學生時先驗證程序運行結果的正確性,然后刪除某一段或多段核心算法代碼讓其重寫,重寫過程中很容易觀察到學生的熟練程度,重寫完后教師通過回退功能很容易判定是否拷貝。再次核實正確性的情況下,按照重寫代碼花費的時間長短及熟練程度進行評分,評分時不再需要費盡心力提問,評判相對輕松,評判結果相對準確有效,無法正確補出代碼的學生本次實驗暫時就沒有成績。
3? 按機房物理布局分批次檢查
每次實驗考核分批進行,學生按機房的物理布局自然分成多個檢查批次,一般可以8個人一組(如背靠背兩小排各4個學生),一個行政班級30多個人,一般4~5個批次檢查完,每個批次時間控制在20 min以內。
每個批次人數的多寡還可以視實驗項目難度和實驗課的剩余時間靈活掌握,如果難度比較大或時間比較緊,一個批次的人數可以多一些,但不管多少人,物理上應該處于機房的相鄰區域,否則教師跑來跑去過于辛苦檢查難以為繼。
4? 教師適當來回巡視以杜絕作弊現象
讓學生當場重寫代碼等同于考試,個別學生會有作弊的動機。學生重寫代碼時教師要注意適當巡視,特別是前幾次實驗課時要更加留心。學生偶爾有翻看教材、查看手機以及同學支招的現象,也出現過學生復制一份要補的代碼再對著敲的現象。從實踐的情況來看,這些現象在前兩次實驗課就比較少見,在之后就幾乎不會出現了。
5? 給一次補查的機會
學生的學習能力有較大的差異性,有少部分學生無法按時完成實驗任務。每次實驗課的前一刻鐘左右留給沒有完成上次實驗的學生,給他們一次檢查上次實驗的機會,不過補查的成績一般只給到及格分,但如果是平時表現比較好的同學某一次馬失前蹄,補查成績可以適當給高一些,一些特殊情況下可以按正常給分,以充分保護學生的學習積極性。
6? 控制考核節奏,穩步推進考核
一個批次學生在逐個核實完實驗結果及刪除了核心算法代碼后,開始緊張地重寫代碼,重寫代碼的速度會快慢不一,過程當中老師只需要來回巡視,留意不同學生的表現,在有學生報告完成代碼重寫后予以核查并評分。同批次絕大多數學生評分完成后就可以啟動下一個批次的檢查,不要因為個別學生影響整體考核進度。未能在自己的批次中完成代碼重寫的學生一般給及格分,當然前提還是重寫代碼后運行結果正確并且沒有作弊。對這些學生的檢查不用做到實時響應,可以利用當前批次檢查的空閑時間穿插進行。整體實驗考核進度能夠按計劃穩步推進,在課內時間能比較從容地完成對所有學生的考核。
(四)? 結合線上資源強化訓練
針對數據結構的十個實驗項目精心準備了10組共20道強化學習編程題,每個實驗項目對應一組試題,每組2道題,題目難度相對更小,但完全契合對應線性表、隊列、堆棧等數據結構知識的掌握。在PTA平臺與對應實驗項目同步發布,目的是對尚不夠熟練的學生進行強化訓練。系統能夠自動對學生編程結果進行評判。
為了激發學生的自主學習積極性,制訂以下獎勵規則:特定實驗項目評分在A-之下的任何學生,如果能夠在PTA上成功完成對應組別的2道編程題,原先在C檔位(分C-、C、C+三個檔位)或以下檔位的實驗評分在原來基礎上往上浮動2級,原先在B檔位(分B-、B、B+三個檔位)的往上浮動1級。
三? 數據結構實驗教學改革成效分析
本實驗教學改革主要基于全員覆蓋的考核方法,給予了學生足夠的壓力,能夠達到促進學生自主學習的效果,下面從實驗考核成績、期末考試成績和學生能力三方面來分析實驗教學改革實踐所取得的成效。
(一)? 實驗考核成績
實驗考核成績具有一定的主觀性,這里使用筆者多年自帶的班級實驗考核成績作為分析基礎,以避免不同教師評分尺度的差異帶來的對成績數據的影響。本文統計了六年自帶班級的實驗考核平均成績,圖3是2016—2021級學生數據結構實驗考核平均成績變化情況,其中2016—2018級使用的是常規方法檢查實驗,2019—2021級采用了本文所述實驗教學改革方法。從數據可以看出使用了本文方法后的實驗考核成績明顯更好,并且成績穩定,數據表明實驗教學改革的成效是顯著的。
圖3? ?2017—2022年數據結構課程實驗考核平均成績
2017—2019年成績有一個明顯的波動,2017級的成績在2017—2019年中比較突出。分析原因在于筆者在教學改革中經歷了多年的探索過程,2016級使用的是常規實驗教學和實驗考核方法,結果明顯不理想;2017級使用了分層實驗教學改革[8],有一些效果,但還是覺得不夠理想;然后在2018級積極探索,以建構主義理論為依據,希望通過理論課堂營造更好的學習情境來達到促進學生吸收內化知識的目的,做了比較多的實戰演練,很多算法是一邊介紹算法思路一邊編碼實現并當場調試運行出結果,要求學生自帶筆記本電腦當場跟著做,結果發現編程能力弱的學生無法跟上進度,實驗教學還是采用的常規做法,非常遺憾效果并不理想。經過仔細思考歷年的教學改革探索過程,認識到關鍵是激發學生自主學習的熱情,才能達到事半功倍的效果,總結提煉歷年的教學改革方法,保留以前教改的一些積極有效的做法,比如要想辦法彌補學生編程短板、教學過程中充分考慮到學生的差異性、在課堂極力構建有效學習情境等,結合任務驅動教學方法的引入,最終凝練出目前的實驗教學改革方法并取得明顯成效。
(二)? 期末考試成績
數據結構課程期末考試使用筆試并流水閱卷,卷面成績評判相對客觀,能比較好地反映出學生掌握知識的好壞,因此這部分使用橫向比較方式,將采用傳統教學方法的學生平均卷面成績與采用本文所述教學改革方法學生成績進行橫向比較。表1是2019—2021級學生該課程的期末成績數據情況,使用本文所述實驗教學改革方法后,三個年級的學生成績均明顯好于未使用該方法的學生,說明良好的實驗教學促進了數據結構知識的掌握和吸收。
表1? 2019—2021級學生數據結構期末成績表? 分
(三)? 學生能力
實驗教學改革加強了實驗教學各個環節的管理,使學生各個環節的學習落到實處,促進了學生各種能力的成長。通過對筆者所帶2019—2021級學生調查問卷反饋,96%以上的學生認可通過課程的學習提高了自主學習能力、實踐應用能力以及時間規劃能力。
同時,2020—2022年,作者所帶班級的學生在學科競賽方面,獲得國家級獎項13項、省級獎項32項,其中,ICPC、GPLT和藍橋杯信息競賽均實現了金獎或者一等獎的突破。有學生被推免到西北工業大學,還有學生考上了如中國科學院大學、香港大學等知名學府,另外還有學生入職騰訊、字節跳動等知名IT企業。
四? 結束語
本教改在工程教育專業認證背景下,以學生為中心,以產出為導向,在理論課堂注重夯實學生編程基礎,明確布置實驗編碼任務,課上課下通過任務驅動方法讓學生及時建構內化知識,彌補學生編程短板,實驗課上使用覆蓋全員的重寫核心代碼的實驗考核方法,考核過程相對簡單可控,考核結果準確有效,結合線上資源進行強化訓練,促進學生自主學習。多次實踐表明,學生理論課堂和實驗課堂參與度都非常高,教學成效比較明顯,對其他編程類課程也有借鑒作用,有一定的推廣價值。
參考文獻:
[1] 徐新愛,朱恩芳.數據結構課程實踐教學改革探索與實踐[J].實驗室研究與探索,2021,40(9):186-192.
[2] 劉端陽,徐衛,劉志,等.基于PBL的數據結構課程的融合式實驗教學[J].實驗技術與管理,2014,31(5):225-229.
[3] ZIMMERMAN B J.A social cognitive view of self-regulated academic learning[J].Journal of Educational Psychology,1989,(3):329-339.
[4] 喬世坤,李明,董光輝.基于自主學習能力培養的數字系統設計實驗考核改革[J].實驗科學與技術,2022,20(5):123-127.
[5] 陳黎,孫界平,琚生根,等.自主學習模式在“計算機網絡”課程中的應用[J].實驗技術與管理,2017,34(8):176-179.
[6] 任相花,王竹萍,姜云霞,等.自主學習理論在數據通信原理課程教學中的應用[J].教育探索,2011(6):83-84.
[7] 趙丹.以學生自主學習為中心的任務驅動教學模式探討[J].教育與職業,2013(12):98-99.
[8] 劉忠民,李廣瑞.數據結構課程實驗分層教學的探索和實踐[J].計算機教育,2018(6):128-130.