王榮芝
(呼倫貝爾學院 計算機學院,內蒙古 呼倫貝爾 021008)
程序設計類課程是高校計算機相關專業開設的基礎性課程,主要有C、C++、Java、數據結構、算法設計與分析等,旨在培養學生扎實的程序設計能力、良好的邏輯思維能力和一定的研究能力和創新能力。程序設計能力的強弱是檢驗軟件類畢業生是否合格的重要標準。程序設計類課程實踐性非常強,傳統以語言語法描述為主線的教學方式、模式化的實驗內容,使教學重點自覺或不自覺地偏向理論,降低了對學生實踐能力的有效監管和考核,無法充分鍛煉和提高學生的程序設計能力,這一問題在后序的軟件工程實踐類課程會進一步彰顯,嚴重阻礙了學生的專業發展。
在線評測系統(Online Judge,簡稱OJ)是一種基于Web的軟件系統,其主要功能包括題庫管理、在線提交和實時評測、網上考試、論壇、系統監控和管理等。該系統源于國際大學生程序設計競賽(ICPC),是服務于ICPC競賽的評測和練習平臺。ICPC在國內備受關注,每年各省區、高校都舉辦各類級別的競賽,為學生提供展示才華的舞臺,也為IT企業和計算機人才提供了對話機會[1]。該競賽要求參賽學生具有扎實的程序設計能力、良好的數學功底和數學建模能力、較強的團隊協作能力和壓力下分析、解決問題的能力。
自20世紀90年代,隨著信息技術的發展,E-Learning在教育領域得到迅速的應用和推廣,促進了教育理念和教學模式的革新,打破了傳統課堂的時空限制,徹底改變了傳統教學結構中的師生關系和地位,使教學從以教為主向以學為主轉變,在培養學習者自主學習能力、探究能力和創新能力等方面表現出了巨大的優勢。然而,在E-Learning應用實踐過程中,也存在許多不足,如網絡教學對動作技能類目標教學效果不太理想,網絡學習受限于學習者的自控能力等。由于學習過程缺乏監管,網絡評價真實性存疑,因此其學習效果無法跟傳統課堂教學相比擬[2]。為此,人們提出了混合學習的概念,其目的是把傳統學習的優勢和E-Learning的優勢結合起來,既要發揮教師引導、啟發、監控教學過程的主導作用,又要激發學生作為學習主體的主動性、積極性和創造性。只有將這二者有機結合起來,形成優勢互補,才能獲得最佳的學習效果[3]。在形式上,混合學習是在線學習與面對面學習的混合,但從廣義的層次來說,還包括了基于建構主義、行為主義、認知主義等不同教學理論的教學模式的混合、教師主體活動和學生主體活動的混合、課堂教學與在線學習不同學習環境的混合、自主學習和協作學習不同學習方式的混合、不同教學媒體和教學資源的混合等。混合學習原理的核心就是強調教師主導作用和學生主體地位的有機統一,始終關注兩者的自主性、創造性,在教學中根據不同情況、不同問題和要求,采用不同的教學方式來解決問題,從而有效提高學生學習的效果和效率[4]。
混合學習是一種以學習者為中心,基于一定的教學目標,把傳統的面對面課堂教學與現代的網絡學習有機地融合,實現學習目標最優化的教學模式[5]。隨著信息技術及移動網絡的飛速發展,許多高校在教學中都應用了網絡課程或MOOC,課程內容包括教學短視頻、PPT、作業提交與批閱、題庫、測試、論壇等,網絡學習成為課堂教學的擴展和有益補充,與課堂教學結合成為混合學習的基本形式。程序設計類課程實踐性非常強,不但要求學生掌握理論知識,更要鍛煉提高學生的編程實踐能力,但網絡課程不具備實訓功能,無法達到該類課程的學習目標。在線評測系統在實踐訓練方面獨具優勢,是開展程序設計類課程混合學習模式的最佳選擇。OJ是一種基于Web的自動判題系統,用戶根據題目要求編寫程序,在線提交程序源代碼,由系統對源代碼進行編譯和運行,通過預先設定的測試數據與運行結果進行比對來檢驗源代碼編寫的正確性。為考查算法的優劣,題目設計者可以對程序進行內存使用、運行時間和安全等限制。系統將檢驗結果返回給用戶,一般包括正確、答案錯誤、編譯錯誤、超時、運行錯誤、超內存等[6]。
OJ的優勢主要有:①基于互聯網的開放性,系統搭建后無需人工操作,學生可以隨時登錄提交編程,系統自動評測,及時反饋,學生能夠立即看到結果,對錯分明;②保證評測結果的公平性,避免人為批閱出現的漏評、錯評;③將教師從繁重的批改作業中解放出來,可以更專注于課堂教學設計、學習指導及課下學習活動和任務的設計;④提高學生的學習興趣,學生通過刷題,不斷提高編程技能,解題排名隨之上升,容易產生成就感,進一步激勵學生完成更多的題目。
混合教學模式的設計要突破各種界限,將多項內容有機融合,以達到有效提高學生學習效率和效果的根本目標。程序設計類課程混合學習設計中并非因OJ的引入而拋棄其他網絡資源,而是將各種資源有機融合,發揮各自所長,形成促進學習的不同手段和形式。基于此,筆者設計了基于OJ的程序設計課程混合學習模式(如圖1所示)。該模式整合了傳統多媒體課堂教學、基于網絡MOOC學習和課外活動3種學習形式,同時還整合了各種教學資源和多樣化的學習模式,如課堂學習、自主學習、小組學習、任務驅動、協作項目實踐活動、第二課堂興趣小組、學科競賽等,形成了一個完整教與學活動的混合。在模式中,OJ作為重要的教學環境并非只支持課堂之外的學習,還將與課程緊密結合支持課堂教學和課外活動,使混合學習成為一個有機的整體。在課堂教學中,教師通過OJ驗證教學案例,布置課堂訓練題目;在網絡學習中,學生通過OJ完成課下作業和擴展訓練;學有余力的學生還可以通過OJ組成程序設計興趣小組進行高級培訓和開展競賽。OJ還可以進一步與MOOC資源進行整合,構成綜合性的網絡課程平臺,更好地為師生服務。

圖1 程序設計類課程混合學習模式
在校園服務器中搭建OJ,根據課程知識點加入由易至難的測試題庫。將在線評測平臺與網絡課程或MOOC資源進行整合,提供一站式服務,學生登錄系統可以學習課程資源也可以在線提交編程。為保證系統穩定運行,教師要對系統進行監管,并定期備份數據庫,保證后臺數據庫的負載和數據存儲的安全。初期加入程序設計基礎課程題庫,后期逐步加入數據結構、算法設計與分析、程序設計競賽等題目。教師將課堂教學案例、學生課上課下實訓與OJ有機結合,課堂的每個案例,在OJ平臺中都有與其知識點對應的練習題目及大量的擴展題目,學生課上完成基本練習,課下進行鞏固和擴展練習,有效保證了對課程知識的掌握和應用。
將傳統多媒體課堂教學、網絡學習和課外活動3種學習形式有機融合、統一設計,課堂教學內容的組織摒棄傳統以語言知識講解為主的形式,教學內容遵循兩條主線,以程序設計為主,語言知識為輔;采用多媒體機房授課,課堂教學以案例式為主。教師精心設計案例,將知識點融合于案例中,每個案例的知識點在OJ平臺都有3~5道配套練習題,題目是由易到難、由單一知識點到多個知識點的綜合;提倡教師精講學生多練,重視學生的課前預習和課下訓練,課前可以通過MOOC學習讓學生初步了解知識,通過課堂案例進一步理解和應用,再通過課下練習不斷鞏固和熟練掌握。學生的課下訓練以OJ平臺為主,除完成固定的作業題目外,提倡學生通過探究和協作完成更多更復雜的題目,讓學生體驗解決問題的成就感,逐步對編程產生興趣,形成學習的內驅力,從而有效并長效地進行學習。成立ACM第二課堂興趣小組,聘請學院教師做導師,有經驗的高年級學生擔任組長,招募和選拔成績優異的學生加入興趣小組,組織月賽、講座和算法討論會,進一步提高學生編程的能力和解決問題的能力。每年由學校組織舉辦一次校級競賽,選拔成績優秀的學生代表學校參加省級競賽,參賽選手通過與其他高校的參賽隊同場競爭,提高自信、增長見識,為將來的良好就業奠定了基礎。學校通過獎勵獲得榮譽的學生,進一步激發大家的學習興趣,鼓勵更多的同學通過OJ交流學習,形成教學的良性循環。
為達到程序設計類課程的知識、能力和素質目標,教師在教學中將多種教與學的方法有機融合,在混合學習框架內采用的教學方法有案例式教學法、發現式教學法、任務驅動式教學法,自主探究式學習法、協作學習法等。課堂教學以案例式教學為主,將知識點融于生動案例中,以提出問題、分析問題、解決問題的思路調動學生學習積極性,以小結的方式總結案例的知識要點,讓學生既掌握思路方法又掌握原理;學生實訓采用任務驅動模式,在OJ布置任務由學生獨立編程提交。在任務的驅使下,學生邊學習邊實踐,充分發揮學生的主動性和創造性。為保障學生對知識點的有效掌握,課程組設計了課堂案例、課堂練習及課下作業一體化的題目體系,形成由簡到難、由點到面的知識學習進程。例如,針對循環的學習,課堂案例為:求sum=1+2+3+…n的和。練習題目為:①求sum=1+1/2+1/3+1/4+…+1/n;②sum=1+1/3+1/5+…的前n項之和。課下任務為:①1-1/4+1/7-1/10+1/13-1/16+…的前n項之和;②求sum= 1-2/3+3/5-4/7+5/9-6/11+…的前n項之和。學生從案例模仿入手,先了解循環語句的基本功能和結構,再通過練習題目修改循環條件、循環體語句掌握循環的知識要點,最后通過完成課下任務達到對循環知識的融會貫通。不僅讓學生親身感受認知的過程,而且通過題目難度的不斷提高進一步激發學生的學習興趣和積極性,激發學生更加強烈的解題欲望,從而培養和提高學生解決實際問題能力和創新意識。在課下任務的完成上,既倡導自主探究,又贊同協作學習,針對難題,同學間相互討論、相互啟發、取長補短,共同完成任務。在學習的過程中促進良好人際關系和協作精神的培養,進而促進形成良好的班風、學風。
程序設計課程的學習目標是掌握編程語言的語法規則、程序設計的基本原理與方法,培養扎實的程序設計能力、良好的邏輯思維模式,并具備一定的自主探究能力、合作能力和創新能力。為有效發揮考試的檢測作用和對教學的促進作用,以C語言程序設計課程為例,課程采用了“分階段+多種形式”的考核方式。將診斷性評價、過程性評價和總結性評價貫穿于整個課程混合學習活動過程中,以全面檢測學習者的學習水平和能力。具體課程考試方案如表1,課程總評成績由平時考核、階段考核和結課考核3部分組成:平時考核以課堂表現、OJ平臺月解題數量和MOOC學習效果為主,鼓勵學生課前預習、平時多做題,通過量的積累達到質的升華;階段考核為基于OJ平臺的在線編程測試,分別安排在選擇結構、循環結構和數組3個模塊后,針對每個模塊知識點測試4~5個題目;結課考核為整合客觀題與編程題于一體的上機綜合考試,客觀題主要包括選擇、填空、判斷類題目,課程組建立題庫,抽取考題網上考試,自動評分。設置該類考試的目的是為保障學生對原理知識理解掌握的系統化、全面化,避免過于強化OJ平臺導致學生對某些知識一知半解,不能全面掌握。

表1 C語言程序設計課程考試方案
基于在線評測系統的程序設計類課程混合學習模式在應用后一定程度上能解決該類課程重理論輕實踐的弊端,為學生提供在線學習體驗,提高了學生的實踐動力能力,給師生提供更多教與學的自由,并提升了網絡時代教師的教學能力和學生的學習能力。該混合學習模式是基于目前程序設計自動評判系統和高校大量開發和應用的MOOC等網絡課程來考慮,重點探討程序設計類課程混合學習模式的實施形式、內容、方法和評價策略,對理科實踐類課程具有一定的指導性,可參照此混合學習模式,結合各課程特點,開展高校混合學習實踐。