鄭秋生,王 璐,王文奇,劉鳳華,夏敏捷
(中原工學院 計算機學院,河南 鄭州 450007)
程序設計課程是計算機專業的核心基礎課程,對學生專業學習發展和就業都具有極為重要的意義,因此其教學質量非常關鍵,關于教學模式和教學方法的研究和探討也一直吸引著各級教學人員的極大關注。總體而言,各種教學模式主要圍繞兩類:以培養計算思維為導向或者以培養應用實踐能力為導向。具體教學方法上,可以劃分為案例分析法、演示教學法、任務驅動教學法以及最近出現的慕課(MOOC)翻轉教學法等[1]。這些方法各有特點,對提高學生學習興趣和教學質量都起到了重要的作用。各種方法也都有一些共通的地方,主要目的還是提高學習興趣,力爭讓課堂更有趣、更貼近實踐(有用)。但大部分方法未對學生層次進行更為精細的劃分:哪些學生適合興趣引導?哪些學生適合嚴格督促?
普通本科院校學生的高考成績較一般,學習習慣、理解問題的能力以及精英意識與強校學生相比有一定的不足。通常可以將學生劃分為三大類:一類是能力較強、主動性較好的學生;一類是能力一般、學習愿望較強、需要幫助和推動的學生;一類是自我控制能力很弱、容易受干擾而在學習上投入極少的學生。筆者經常思考的問題是:如何讓能力強的學生更能發揮?如何推動第二類向第一類靠近?如何降低第三類學生的比例,讓更多的學生對程序設計感興趣?
泛在學習模式不僅強調個體享受無時無處不在的學習服務,更強調個體學習的差異和情境,為網絡學習空間的創新應用提供了良好的視角與契機[2]。另外,由于程序設計課程普遍壓縮學時,課內實踐有限,更適用泛在教學模式。筆者針對普通本科院校學生特點,吸取了多種有益的泛在教學經驗[3-4],明確提出以興趣和壓迫作為不同學生的教學模式,打破學習的時空局限,提高訓練量和力度,通過隨時的更緊密的教學關系,為第二、三類學生提供更多幫助和鼓勵。這是泛在學習模式的實際應用,也體現出了其核心優勢。
普通本科院校學生更關注就業,因此對程序設計課程大多數抱有較高的學習愿望,但學習能力和習慣有一定差異。因此,筆者根據學生的實際情況,以加強編程訓練為目標,以興趣+逼迫作為驅動,以多種互聯網手段作為輔助,為學生打造了跨越時空界限的豐富的泛在教學模式,見圖1。
程序設計課程從根本上說是實踐型課程,只有盡可能多的訓練才能提高編程水平,而正常課時有限,甚至有一定壓縮,教師只能增加課外上機時間,但也存在實驗室不可用或者輔導時間有限等各種問題。

圖1 以編程訓練為中心,綜合興趣與逼迫的泛在學習模式框架
ACM/ICPC競賽采用的在線判題系統(學生提交代碼后,系統自動運行并給出爭取與否的即時判決),為學生隨時隨地進行代碼訓練提供了很好的解決方案。很多高等院校都采用這種方式進行C語言等程序設計課程的改革,并且取得了非常好的效果[5]。
只要有課余時間,學生就可以在宿舍、圖書館甚至家里進行代碼練習。筆者從2008年參加河南省大學生程序設計競賽開始,在ACM/ICPC競賽及網站建設方面積累了較多的經驗。因此,筆者采用在線判題系統作為泛在訓練的手段。
ACM/ICPC競賽形式比較適合能力較強的學生,能夠充分調動學生的積極性,培養鉆研的學習習慣和興趣,但對于部分能力一般的學生而言,題目稍微有點難度就會造成畏難情緒,多次出錯后會逐漸失去訓練的動力和興趣。另外,由于訓練可以不在教師管理范圍內,學生容易產生惰性甚至放棄。
鑒于此類情況,筆者將C語言課程以及C++課程都改成了ACM/ICPC競賽形式上機考試,即所有題目設計為程序實現題,利用在線判題系統支持代碼提交及即時判決,從而逼迫有畏難情緒的學生通過請教、討論等方式多做題,客觀上增加了學生的訓練力度。
慕課(MOOC)教學是近幾年教學改革的重點,筆者也建立了自己的慕課課程,將各章知識點碎片化,將多種調試方法做成視頻發布和監督學習。此外,通過慕課系統發布和搜集作業,監督學生學習進度,采用翻轉課堂的方法做了3~4期的示范教學。
為了給學生學習和訓練提供更多的幫助,筆者建立了程序設計討論的QQ群,邀請ACM/ICPC競賽訓練隊的學生作為助手,負責隨時解答學生關于ACM競賽類型題目以及語言本身的各種問題。通過這些方式,教師與學生的聯系已不僅僅是專門的課堂或課后答疑時間,而是隨時隨地交流和討論。
訓練系統基于NUAA的開源系統構建,題目設計主要為教材課后習題,并部分參考了杭州電子科技大學OJ和鄭州輕工業學院OJ的簡單題目,適合跟隨教學進度進行訓練,部分題目列表見圖2。

圖2 在線判題系統的題目列表
系統除了自動判題,還包含排名、統計等很多功能。特別是排名,對提高學生興趣起到了很大的作用,也出現了很多學生刷題直至凌晨的情況,見圖3。當然為了學生健康,筆者還是對學生進行了勸導。
MOOC教學系統是學校與超星公司合作開發的,包含教學視頻、作業、考試、討論等諸多內容。C++課程的MOOC系統首頁及學習情況統計見圖4、圖5。MOOC系統主要用于課前課后的預習和復習以及翻轉課堂(數組部分),在學生自主和隨時隨地學習方面起到了重要作用,也對課后訓練起到了很好的支撐作用。

圖3 在線判題系統的用戶排名及投送情況

圖4 MOOC系統的首頁

圖5 MOOC系統中學生登錄學習的情況統計
為及時跟蹤學生學習情況,及時聽取反饋和回答問題,保證課后隨時隨地交流,筆者為15級、16級學生建立了C/C++學習訓練的QQ群。
不僅教師和學生可以交流,群中加入了校ACM競賽訓練隊員以及部分高年級學長,在學生學習訓練過程中提供了強有力的輔助。一旦經過初期的適應,同級學生之間的交流討論更加頻繁和緊密,其效果遠遠超出了單一的教師答疑。
部分學生自我控制力較弱,易受游戲、手機、網絡電影電視的影響。因此,只能通過不斷強化考試壓力,逼迫其轉向學習。
考試形式采用了ACM競賽同樣的系統,即必須投題準確無誤才可得分,從而逼迫學生不得不練習。此外,為保證考試安全,筆者修改了開源ACM競賽代碼,加入了IP檢查、重復代碼檢測、生成多套試題、百分制分數及考試結果導出等,使開放的ACM競賽平臺能夠適用于考試要求。圖6是計算機學院15級學生考試后的統計分析結果。

圖6 機考結果的成績分布及分析
為提高學生編程興趣、活躍學習氣氛,中原工學院每年針對全校各專業舉辦程序設計競賽。此外,還組織參加河南省大學生程序設計大賽、ACM/ICPC區域賽以及藍橋杯、CCF、CSP等,在帶動學習興趣、鼓勵編程方面起到了明確的推動作用。
程序設計類課程通常給人的印象是難學、枯燥,為此很多教學方法采用應用驅動、案例分析等,目的都是為了提高學習興趣。因此,筆者在設計檢驗指標時,著重考慮了學習興趣的影響,兼顧后續影響因素。其中,在設置學習興趣評價時,參考了王曉東[6]和鄧銳[7]的興趣量表,從課堂學習情緒、注意力、參與度、思維活躍度、課外交往能力5個方面[8],選擇了10個條目(由于條目內容完全來自上述2篇文獻,這里不再贅述。)。此外,在后續影響方面編制了4個條目以及2個調查問題(未列入統計)。所有條目采用李克特5點量表進行評價。采取抽樣調查的形式,在計科、網絡、軟件3個專業,每專業抽30人,均勻分布于期末考試不同的成績范圍,見表1。

表1 教學效果評價量表之后續影響評價
評價統計結果中總得分超過50的人數達到73人,占到總樣本的81%左右,表明絕大多數學生在興趣和實際能力方面都達到了較好的效果,收獲了繼續編程的信心。
2015—2016學年一年級學生共參加校程序設計競賽、河南省程序設計競賽、ICPC區域賽以及CCF計算機軟件能力認證等合計60多人次,獲得省賽三等獎和ICPC區域賽現場賽資格(1隊)。此外,參加校內各項目組進行開發訓練的學生達到50%以上。
為提高學生對程序設計類課程的興趣和實踐能力,筆者展示了應用泛在式學習模式進行在線訓練、MOOC學習、討論群等方面的實踐。考慮到學生類型的因素,通過機考、競賽等進一步增強學生的學習動力。實踐結果表明,該策略組合有效提高了學生的興趣,促進了廣泛的編程訓練。當然,該策略也存在諸如學生時間有限,如何分配時間進行各項目學習的問題。這些都將在今后的實踐中繼續完善。
[1]丁海燕. 高級語言程序設計課程教學方法的分類與探討[J].云南農業大學學報, 2015, 9(5): 93-97.
[2]楊玉寶, 吳利紅. 泛在學習視角下網絡學習空間的創新應用模式[J].中國電化教育, 2016(7): 29-35.
[3]王宏, 王萍. 基于泛在學習環境的主題探究學習案例設計與實踐[J].中國電化教育, 2016(10): 126-132.
[4]林曉凡. 一種提升學生21世紀技能的路徑:基于混合式移動學習活動的實證研究[J]. 中國電化教育, 2016(11): 39-44.
[5]吳舜歆, 梁寶蘭. OnlineJudge在C++程序設計課程實踐教學中的應用[J].高教學刊, 2016(9): 164-167.
[6]王曉東. 算法與數據結構學習興趣影響因素分析[J]. 計算機教育, 2010(12): 73-76.
[7]鄧銳. 計算機專業學生學習興趣量表設計與分析[J]. 現代計算機, 2008(2): 117-119.
[8]牛虧環. 學習興趣研究進展分析[J]. 教育學術月刊, 2014(10): 33-36.