熊啟軍 程格平 谷瓊



摘要:針對程序設計類課程實驗教學的現狀,提出了分組合作實驗教學模式。通過與項目式實驗教學模式的比較,闡述了其優勢、具體實施步驟和方法。實踐證明分組合作實驗教學模式可有效提高學生學習的參與度、積極性,從而顯著提高實驗效率和成績。
關鍵詞:分組合作;程序設計;實驗教學
中圖分類號:G642? ? ? ? 文獻標識碼:A
文章編號:1009-3044(2021)28-0250-03
開放科學(資源服務)標識碼(OSID):
1 引言
目前,各級各類高校日益重視實驗實踐教學,從校院兩級管理機構的主導措施來看,主要有增大校內實驗室硬件建設投入、增加實驗學時、增多實驗類型(驗證型、設計型、綜合型、創新型等)、增強實驗項目的趣味性和實用性、改革實驗考核和評價方式、與企業合建校外實訓實習基地、引進企業實際案例、培養和引進雙師型教師等[1];從教師的日常教學角度來看,更多的則是改革教學模式,如普遍采用案例式、演示式、啟發式、項目式、平臺式、競賽式、導師制等[2][3]。
雖然學校、教師都在不斷完善和實施多種實驗教學改革措施,即求變;但部分學生、特別是地方院校的學生似乎“任憑風吹雨打我自巋然不動”,即不變,導致教學效果“理想很豐滿、現實更骨感”。因為都明白:前者只是外因、只起輔助作用,后者才是內因、起決定作用。
對于特別強調計算思維和動手能力的程序設計類課程來說,在完成實驗作業時,部分學生要么毫無頭緒、要么錯誤連篇、要么百度、要么拷貝……極易滋生和蔓延拖沓、抄襲、墮落、放棄等現象。問題的癥結在于學生缺乏學習的主動性、積極性,如何解決這一難題則是提高教學質量的關鍵。
2分組合作實驗教學模式
“項目式”是一些設計類、實踐類課程常采用的教學或考核方式,其主旨上是引進公司項目開發流程和管理策略、實行角色分工以及各司其職、通過團隊協作最終完成項目設計與開發,呈現出通過分組來實現項目式教學。該模式在實際實施過程中,存在兩個明顯缺陷:一是因角色分工而職責固定,不能達到全面訓練和鍛煉學生能力的效果;二是團隊內只有部分成員在踏踏實實地進行設計與開發,個別人則濫竽充數或充當添頭,根本沒有實質性參與、根本達不到團隊合作的效果和目的。
“分組合作”雖與“團隊項目式教學”有些相近,但更存在不同。
“分組合作”,首先是分組。以一個寢室作為一個實驗組,一個寢室內通常有4~6名學生,他們朝夕相處,在生活習慣、個人愛好等方面一般具有共性,且寢室為溝通交流提供了更為便捷的場所;或者志趣相投的4~6名學生組成一組,這樣的自愿組合為問題的深入探討提供了強大的基礎和凝聚力。
其次是輪流主持。即組內每次實驗研討的主持人實行輪流坐莊,“莊主”負責主持、記錄每人的發言(紙質記載和手機錄音錄像)。研討只涉及算法設計、疑難討論,不涉及具體編碼,每人都必須發言、極力避免一言堂或大包大攬、以及出工不出力等現象。
第三是獨立編碼。即根據上一步研討得出的算法,組員各自獨立完成實驗題的編碼、調試,出現個人不能解決的問題,可以再次組織討論和尋求幫助。
第四是答辯和評價。各組派主持人闡述本組解題算法、特點、優勢或創新,全組成員回答其他小組的提問和質疑、甚至刁鉆或拓展性的問題等。在闡述、回答、辯論、評比過程中,教師可以適時地進行點評、啟發、拓展等,這就是實驗翻轉。
第五是撰寫實驗報告。根據個人、組內和組間的發言、教師的意見等,撰寫個人的實驗報告。實驗報告的重點是實驗項目解決方案及其優缺點、程序調試心得、啟發、感悟等。
第六是教師評分。教師根據闡述、問答、辯論、評比、實驗報告等對各小組及其組員進行綜合評分、評語,從而調控分組合作教學的全過程。
“分組合作”常態化、貫穿于實驗教學過程之中,它雖存在分組、但更強調合作,組內成員全程參與實驗設計、討論,最重要的是實行輪流主持,從而提高實驗參與率;組間通過分享實驗成果、評比、相互借鑒和吸收,從而提高實驗質量。
3 分組合作的實例
3.1 實驗題設計
分組合作實驗模式以志同道合的學生分組、恰如其分的實驗題設計為基礎而展開。譬如,在學習了《C語言程序設計》中的數組、函數之后,圍繞運用數組和自定義函數求最值,設計了如下實驗題:
(1)求最大值的下標;
(2)求最大、最小值的下標;
(3)歌詠比賽中若干評委給一名歌手打分,求歌手的最后得分。評分方式是:去掉一個最高分和一個最低分后的平均值就是該選手的最后得分;
(4)求最大、次大值的下標;
(5)求最大值出現的位置及次數(若存在多個最大值,它們必然相等);
(6)實現類似于考試成績排名的輸出效果(成績相同則名次相同);
(7)實現數字黑洞[4](查閱資料了解什么是數字黑洞);
(8)在一個整型數組中,求和最大的連續子序列[5](求得和及其起始位置)。例如:在{-2,11,-4,13,-5,-2,3}中,和最大的連續子序列是{11,-4,13},和是20,起止位置分別是1和3。
3.2小組討論
學生在小組討論時,主要圍繞函數參數的選取、算法設計及其效率、測試數據的設計、算法有無Bug、算法改進等方面進行討論。
3.2.1討論實驗題特點
一組內的同學圍坐在一起進行討論:對這些題目進行歸類分析,可以確認它們涉及的知識點、性質、難度。下面是某一小組經討論后確認的實驗題特點,如表1所示。
由此可見,這批題目按照由易到難、由簡入繁、逐步加深、拓展應用的思路進行設計。這種循序漸進的設計思路有利于發現知識點的雛形、有利于鞏固基本原理、有利于擴展知識應用范圍、有利于開拓解題思路、有利于引導創新思維等。
3.2.2討論模塊化
結構化程序設計的基本原則是“模塊化”。模塊化通過函數來實現,重點考慮模塊的劃分、從而體現函數的重用性,盡量不要將函數需要的數據固化在代碼之中;還需考慮函數內的高內聚、函數間的低耦合。
3.2.3討論函數原型設計
如何設計函數的參數個數和類型是初學者使用函數面臨的重點、難點,因為函數的參數個數和類型這兩個問題相互交織、相互影響。函數的參數個數取決于題目的已知條件和求解結果(返回值)的個數;函數的參數傳遞可分為傳值和傳址,什么情況下使用普通值作為參數、什么情況下使用指針作參數,是初學者常常困惑的問題。上述這批題目都需要使用指針作為函數參數、且指針型參數可能有多個。如第一題的函數原型可以設計成下面幾種形式:
intcalMax(int array[],int n);
intcalMax(int *array,int n);
voidcalMax(int *array,intn,int *pMaxNo);
通過實驗可以回顧和鞏固課堂知識、總結規律。譬如,對于函數形參設置的規律性結論:若需要通過函數運算得到多個返回值,則應該通過函數參數來解決、且對應參數必須使用指針型的;凡是涉及到數組的問題,相關自定義函數至少包括兩個參數:一是數組的首地址(指針),二是數組的元素個數。
3.2.4討論算法及其效率
在程序設計之中,對于簡單的問題應講究效率第一、清晰第二,對于復雜的問題應遵循清晰第一、效率第二的原則。
譬如,實驗題中的(2)、(4),應該使用一個循環中包含if-else的嵌套來實現,而不是使用兩個獨立的循環或者單分支的if來分別求解。
3.2.5討論測試數據
對于任意一個程序,僅僅使用一組測試數據不足以檢驗其正確性。
譬如,實驗題中的(4),在測試時至少包含四組數據:遞增序列、遞減序列、雜亂序列、重復序列,否則很難發現代碼中可能存在的Bug。
在選擇測試數據時,數據相差太大、毫無規律將會給人工判斷結果、辨別程序的正確性帶來困難和不便、從而花費較多的人工時間。因此,測試數據的選擇應該遵循簡單但不失一般性的原則。
3.2.6 討論Bug
程序是否存在Bug,雖不是《C語言程序設計》要重點關注的問題,但毫不關心則有可能導致錯誤的算法、程序代碼、實驗結果。
譬如,對于實驗題中的(4),若采用常規的算法來實現,在測試數據的第一個值就是最大值時將會得到錯誤的次大值,隨之而來的則是算法的改進;仔細研究還會發現若測試數據中存在多個相等的最大值,哪個才是次大值呢?不同的同學可能存在不同的觀點和結論。所以,提出了(5)題。
4 實驗效果
在我院計算機類2018級兩個平行班(各70人)分別實施普通教學和分組合作教學,選取上面的實驗題作為測試數據,得到如圖1、圖2所示結果。
1班沒有開展討論和交流、學生完全自主完成實驗題,因而對于難度較大的題目,程序代碼正確率不高、而雷同率頗高;2班開展分組合作教學,程序代碼的正確率、質量顯著提高。由此可見,分組合作教學能顯著提高實驗成績。
5結語
實施分組合作教學,重點是將全員討論、集思廣益落到實處。因為只有群策群力、“一個都不能少”才能促進和提高學生學習的主動性、積極性,否則任何改革都是紙上談兵、緣木求魚。分組合作實驗教學下一步研究的重點是圍繞知識點設計高質量的實驗題。
參考文獻
[1] 張士輝,朱冬光,王國英.計算機網絡相關專業校企合作創新人才培養模式研究[J].實驗技術與管理,2017,34(2):189-193.
[2] 鄧雪妍.三結合課堂教學方法研究[J].中國大學教學,2011(7):62-63.
[3] 武春嶺,童世華,何歡,趙鵬舉.高職“產學制、項目制、導師制”創新型人才培養模式研究[J].中國職業技術教育,2017(7):58-61.
[4] 數學黑洞[EB/OL].https://baike.so.com/doc/6032390-6245392.html.
[5] 沙丁魚的沙堡. 最大連續子序列求和(5種)[EB/OL].https://blog.csdn.net/qq_41879767/article/details/82791028,20180920.
【通聯編輯:王力】