陳卓艷,仇麗青
(山東科技大學 計算機科學與工程學院,山東 青島 266590)
程序設計類課程是計算機類專業的專業基礎課,是數據結構、操作系統等計算機核心課程的前導課[1]。程序設計能力是高校理工科學生,特別是計算機類專業學生所應具備的基本能力,尤其是當今超級計算、大數據和云計算風起云涌的時代,對于高校學生程序設計能力的培養提出了更高層次的要求。
然而,目前程序設計類課程教學存在的主要問題是[2]。
傳統教學模式存在“重知識、輕技能,重語法、輕思維”的弊端,課程之間無法達到無縫銜接。
學生對于程序設計的理解水平、應用能力是千差萬別的,單一的教學模式無法適應眾多學生的需求。
學生無法及時獲得學習效果反饋,缺乏在編程中的自我判斷能力。
傳統的教學中,師生的互動交流較少。一方面不能很好的發揮學生的主觀能動性;同時,教師對學生的學習情況掌握不足。因此,學習的效果大打折扣。
2015年4月,教育部下文就“關于加強高等學校在線開發課程建設應用與管理”,提出了若干任務。2018年1月15日,教育部召開新聞發布會,推出了首批490門“國家精品在線開放課程”。在線開放課程,可以為教師開展線上線下混合式教學,為學生進行自主學習提供支持服務。在線開放課程,對促進課程教學改革與創新,提升教學質量,降低教育成本,促進教育公平起到重要作用[3]。
除了在線開放課程以外,針對程序設計類課程的程序編程實踐的需求,教學團隊自主研發了程序在線評測系統SDUSTOJ,該系統可對用戶提交的程序源代碼進行自動、實時的在線評判并給出錯誤提示,包括對程序輸出結果、格式、運行時間、占用內存資源等的判別[4]。
在線開放課程對于專業教學團隊建設、學生學習方式轉變、課程教學模式改革、考核評價方式改革、優質教育資源共享等方面有著積極的促進作用;而將OJ系統引入到程序設計類課程教學中,可以構建“課內實驗—課外作業—綜合實踐—科技競賽”多層次的實踐教學鏈[5],大大提高學生的實踐能力。
實踐證明,在線開放課程和OJ系統相結合,能有效促進程序設計課程的教學質量。
教學團隊開展在線開放課程和 OJ相結合的混合式教學模式[6],其教學模式如圖1所示。

圖1 在線開放課程+OJ混合式教學模式Fig.1 Mixed teaching mode based on online open course + OJ
網絡平臺是在線開放課程的重要支撐,其包含的教學資源有:課程簡介、教學大綱、教學日歷、電子課件、電子教案、課程視頻、課后作業和學習討論等。在課程的預習環節、導入環節和鞏固環節,學生利用電子課件、課程視頻、學習討論等資源完成課程學習,而教師則可通過課后作業、在線討論、學習評價等手段,了解學生的學習情況,并對課程進行完善。
教學活動采取“線上+線下”的混合式教學新模式,該模式已成為教育教學發展的基本趨勢。所謂“線上”教學,是指教師利用網絡教學平臺發布教學資源,給學生提供課件、教學視頻、練習題等,學生充分利用課外時間完成知識的學習,該階段應當在課前完成;而“線下”教學,則是教師通過各種教學手段完成知識的內化,由傳統課堂的教材內容的講解轉變為教學重點、難點的深度解析,進行課堂引導和互動,將以老師為主體的傳統課堂變成以學生為主體的高效課堂。老師由原來的“主演”轉變角色為“導演”,學生則轉變角色為課堂的主人。角色的轉變,將大大激發學生的學習積極性,突出學生的主人翁意識。
傳統的程序設計類課程考核,更注重期末考試結果,存在期末一考定成績的片面性,無法對課程展開全面的評價。團隊改革課程考核方式,采取“過程考核+期末考核”和“課堂考核+課下考核”相結合的方式,建立以注重學習過程為主的全面、科學的評價體系。為此,將平時成績和期末成績的比例,由原來的30%和70%調整為40%和60%,目的是強調過程考核。
過程考核采取“線上+線下”考核相結合的方式,線上考核主要包括:實驗,作業,討論參與頻次和質量等;線下考核主要包括:出勤,課堂活動等。期末考核采用學院統考,機試形式,全部采用編程題,秉承“共性+個性”理念,同一學院的所有專業統一題目,不同學院的根據學生特點可作答“個性”題目。
程序設計類課程的實踐性非常強,因此,實踐教學是其重要環節。對于程序設計類課程的實踐教學方面,教學團隊結合 ACM 國際大學生程序設計競賽指導經驗,以在線評測系統SDUSTOJ為平臺,提出了競教結合的實踐教學方法[7]。實踐證明,該方法能夠大大激發學生學習編程的興趣。其主要內容有以下三個方面。
實踐證明,在大眾化教育的背景下,學生對于程序設計的理解水平、應用能力是千差萬別的。為此,教學團隊建立了“分層次、個性化”的程序設計實踐教學培養模式,如圖2所示。面向一年級本科生,教學團隊組建了程序設計互助與提高群;面向學生中編程興趣高、有一定動手能力的學生,組建了程序設計協會;面向高水平、高年級學生,通過選拔成立ACM集訓隊,培養高水平編程人才。團隊將科技競賽融入程序設計實踐教學中,并依托SDUSTOJ平臺,為競賽提供全方位、多層次開放的訓練模塊。另外,通過舉辦新生挑戰賽,校內月賽,ACM預選賽等多種比賽,激發興趣、營造氛圍,并選拔優秀學生進入集訓隊,進而參加各種程序設計競賽。

圖2 分層次程序設計實踐教學培養模式Fig.2 Multi-level teaching mode of programming courses experiments
教學團隊以“理解鞏固課程內容,鍛煉程序設計技能,規范軟件開發習慣,培養計算思維能力”為目標,在實踐教學內容革新的具體實施過程中,遵循客觀的教學規律,“取其精華,去其糟粕”,利用新的知識點進行更新和替換,并對實踐內容進行層次劃分,最終凝練為“課內實驗—課外作業—綜合實踐—科技競賽”的多層次的實踐教學鏈[8]。同時,教學團隊利用一個具有一定規模的軟件開發案例,要求學生分別用結構化編程方法和面向對象程序設計方法分別實現,從中體會兩種編程方式的異同和優缺點。該教學鏈如圖3所示。

圖3 多層次、一貫制實踐教學鏈Fig.3 Multi-level and consistent process of experiments
教學團隊自主研發了在線評測系統SDUSTOJ,可對提交的程序進行自動、實時評判,包括程序結果的正確性、運行時間、占用內存資源和輸出格式的判別,其客觀、公正和實時的評價方式,得到學生普遍認可。學生在線提交程序可得到程序狀態和排名的實時反饋,這非常有利于提升學生的學習熱情和激發學生的競爭心理;教師可以實時監控學生實驗過程和結果,及時發現問題并予以指導,統計分析實驗的效果和存在的問題,大大提高教師與學生的交互效率[9]。在線評測系統SDUSTOJ的學生排名情況和程序提交狀態分別如圖4和圖5所示。

圖4 在線評測系統-排名狀態Fig.4 Online judge-standing

圖5 在線評測系統-提交狀態Fig.5 Online judge-status
教學改革經過近幾年的實踐,計算機學院本科生程序設計實踐能力和培養質量得到明顯提升,程序設計類課程教學獲得了學生的一致認可。自2011年程序在線評測系統首次在教學中使用以來,題目數量達到 1400余道,學生在系統中累計完成程序1336231個。從2012年~2019年,程序設計協會的參加人數從100余人上升到500余人,ACM集訓隊的招收人數從22人上升至65人,學生來源從計算機學院擴展到礦業、地科、電子等7個學院,在全校學生范圍內形成了較大影響。團隊成員指導的學生多次獲得ACM國際大學生程序設計競賽、“藍橋杯”全國軟件和信息技術專業人才大賽獎項。隨著學生程序設計能力大幅度提高,在就業方面也顯現出良好增長態勢,越來越多的畢業生入職阿里巴巴、小米、百度等知名IT公司。
近年來,團隊在程序設計課程體系、能力培養模式、教學資源、人才培養等方面取得了重要成果,應用效果顯著;對于其它學校、專業開設程序設計課程和實踐能力培養具有較好的借鑒和示范作用[10]。
基于在線開放課程+OJ的教學模式是現代信息技術與網絡信息技術快速發展下的一種教學改革。筆者在自身經驗積累的基礎上,以程序設計類課程為例,對該教學模式進行探索。實踐證明,該方法對于激發學生的學習積極性,提高編程能力有較好效果[11]。
由于本文選取的是程序設計類課程,因此研究結果可能存在局限性。同時,該教學模式仍有些問題尚未解決,例如學生的自律性和主動性存在差異、兩級分化現象等[12],這些不足之處還需要在后續研究和應用中進一步改善。