韓建平, 劉春英, 胡維華
(杭州電子科技大學(xué) 計算機學(xué)院,浙江 杭州 310018)
“程序設(shè)計”是高校理工科類專業(yè)的核心課程之一,其教學(xué)目標(biāo)是使學(xué)生掌握程序設(shè)計的思想和方法,以及基本的程序設(shè)計過程和技巧,具備初步的分析問題和利用計算機求解問題的能力[1]。有效提升課程教學(xué)質(zhì)量,可以為后續(xù)學(xué)習(xí)和工作奠定堅實的基礎(chǔ)。
程序設(shè)計課程教學(xué)存在的主要問題是:教學(xué)模式單一、實踐能力弱化。課程的教學(xué)模式一般以課堂講授為主,實踐教學(xué)未得到足夠重視。作為深入接觸計算機領(lǐng)域知識的入門課程,學(xué)生往往難以理解程序設(shè)計的思維方式,因而缺乏學(xué)習(xí)信心,影響興趣和動力。此外,教師批改編程習(xí)題的工作量大,由此也帶來反饋滯后,課內(nèi)課外脫節(jié)。我們在教學(xué)實踐中,以強化實踐為核心對教學(xué)模式進行了有效的改革。
依托我校程序設(shè)計在線學(xué)習(xí)與評測系統(tǒng) (HDOJ)的優(yōu)勢,構(gòu)建了從課內(nèi)實驗、課外自主學(xué)習(xí),到訓(xùn)練與競賽的層次化、遞進式的程序設(shè)計實驗教學(xué)模式,有效地促進了課程教學(xué)質(zhì)量的提高。
ACM國際大學(xué)生程序設(shè)計競賽(ACM/ICPC)[2]是目前全球公認(rèn)水平最高、影響最大的編程賽事,比賽題目大多源于實際問題, 具有一定的趣味性和挑戰(zhàn)性,已得到國內(nèi)外眾多知名高校的積極響應(yīng)和參與。ACM競賽利用在線評測系統(tǒng)(Online Judgment)對提交的程序進行自動、實時評判,包括程序結(jié)果的正確性、運行時間、占用內(nèi)存資源和輸出格式的判別,其客觀、公正和實時的評價方式,得到學(xué)生普遍認(rèn)可。許多高校開發(fā)了基于ACM/ICPC的程序設(shè)計在線評測系統(tǒng)[3-6],提供程序設(shè)計競賽與訓(xùn)練的開放式環(huán)境,我校在線評測系統(tǒng)是其中最優(yōu)秀的系統(tǒng)之一。
典型的在線評測系統(tǒng)面向ACM/ICPC競賽,有助于培養(yǎng)優(yōu)秀學(xué)生的創(chuàng)新精神和團隊合作能力[7-11]。但由于題目難度大、評判要求嚴(yán)格,使程序設(shè)計初學(xué)者入手困難。將面向競賽的在線評測系統(tǒng)直接應(yīng)用于程序設(shè)計課程實驗教學(xué)[12-14],教學(xué)效果仍然存在較大的局限性。為了讓更多學(xué)生在編程能力培養(yǎng)方面受益,以強化課程實驗教學(xué)為目標(biāo),不斷推進HDOJ系統(tǒng)建設(shè),提供了以課程為中心的Exams、ACM Step、Virtual/DIY Contest等模塊,適應(yīng)不同階段、不同層次的程序設(shè)計訓(xùn)練需求,引導(dǎo)學(xué)生從課內(nèi)到課外,由課程學(xué)習(xí)至學(xué)科競賽,在平臺上訓(xùn)練提高程序設(shè)計水平。HDOJ深受受到了廣大師生與程序設(shè)計愛好者的青睞,注冊用戶幾乎涵蓋國內(nèi)所有重點高校,系統(tǒng)年提交量逐年攀升,不斷超越國內(nèi)外眾多同類系統(tǒng),2013全年提交量突破240萬[15],居全球數(shù)百個同類系統(tǒng)首位。
程序設(shè)計課內(nèi)實驗是課程教學(xué)的關(guān)鍵環(huán)節(jié),可以幫助學(xué)生鞏固課堂教學(xué)所授基本知識,掌握程序設(shè)計的基本方法和常用算法,掌握程序調(diào)試的基本技能。我們在教學(xué)實踐中,將課程教學(xué)與競賽相結(jié)合,課內(nèi)實驗以競賽方式組織實施(見圖1)。
考慮到完全ACM競賽模式評判苛刻且題目難度大,容易對初學(xué)者的信心產(chǎn)生不利影響。課程組一方面設(shè)計了一系列由簡單到綜合、循序漸進的練習(xí)題。另一方面優(yōu)化了評判方式,摒棄競賽模式對輸出格式的苛刻要求。使學(xué)生從第一次課開始,就可以在HDOJ平臺上編寫、提交程序,體驗“提交成功”的喜悅,并在一次次喜悅中掌握程序設(shè)計的思想和方法。
每一次實驗課,教師均在平臺上布置程序設(shè)計實驗任務(wù),學(xué)生規(guī)定時間內(nèi)完成程序的編寫和調(diào)試后提交程序源代碼,系統(tǒng)服務(wù)器端對提交的程序自動評判,實時反饋。成功解題的成就感非常有利于提升學(xué)生的學(xué)習(xí)熱情。同時,系統(tǒng)按照一定規(guī)則根據(jù)完成情況對學(xué)生進行排名,激發(fā)青年學(xué)生的競爭心理,提高學(xué)生的學(xué)習(xí)興趣。此外,自動評測能夠極大減輕教師批改作業(yè)的勞動強度,同時快速了解學(xué)生學(xué)習(xí)中的問題,從而使教師可以有更多精力來加強對學(xué)生學(xué)習(xí)過程及學(xué)習(xí)效果的反饋,構(gòu)成老師和學(xué)生互動的實驗教學(xué)環(huán)境,降低實驗組織的難度、提高實驗教學(xué)的效率。

圖1 競賽融入課內(nèi)基本訓(xùn)練
在大眾化教育的背景下,學(xué)生的基本素質(zhì)和學(xué)習(xí)能力參差不齊,這使得課外自主學(xué)習(xí)的重要性突顯。只有引導(dǎo)學(xué)生根據(jù)自己的學(xué)習(xí)情況在課外大量編程練習(xí),才能到達(dá)提升實踐與創(chuàng)新能力的目的,而有效吸引學(xué)生課外自主訓(xùn)練,激發(fā)興趣、營造氛圍是成敗的關(guān)鍵。課程組在將競賽融入課內(nèi)實驗教學(xué)的基礎(chǔ)上,進一步依托HDOJ構(gòu)建如圖2的實驗教學(xué)模式。將在線訓(xùn)練應(yīng)用到程序設(shè)計學(xué)習(xí)的各個階段,并根據(jù)不同階段的特點,提供適當(dāng)?shù)墓δ苣K,供學(xué)生選擇。

圖2 依托HDOJ的多層次程序設(shè)計訓(xùn)練模式
ACM Step模塊實現(xiàn)程序設(shè)計實驗從課內(nèi)延伸至課外的第一步,該模塊的主要特色是引進游戲的設(shè)計思路,吸引學(xué)生從游戲走向編程。將程序設(shè)計的核心知識點分成若干關(guān),每一關(guān)又分為若干節(jié),完成前面的關(guān),才能進入下一關(guān)答題,每一關(guān)都有一個主題,所有題目均和本章主題相關(guān)。ACM Step模塊的訓(xùn)練內(nèi)容與課程教學(xué)緊密相關(guān),但其評判方式采用完全的ACM競賽方式,題目難度也略高于課內(nèi)基本訓(xùn)練。
為了進一步激發(fā)廣大學(xué)生的程序設(shè)計興趣,并讓優(yōu)秀的學(xué)生脫穎而出,課程組從平臺和舉措上鼓勵學(xué)有余力和愛好編程的學(xué)生參加學(xué)科競賽。HDOJ平臺的DIY Contests、Virtual Contests等功能模塊為競賽提供了全方位、多層次開放的訓(xùn)練環(huán)境。DIY contest讓教師與學(xué)生都可以創(chuàng)建自己的在線比賽;Virtual Contests功能使得學(xué)生可以選擇任意一場已經(jīng)結(jié)束的比賽作為虛擬比賽的題目來源,系統(tǒng)將在比賽過程重現(xiàn)原比賽的提交信息和排名信息,學(xué)生一如穿越時空隧道與歷史人物同場競技。
學(xué)生在課外自主訓(xùn)練,提升至一定的水平后,可以參加一學(xué)期四次的程序設(shè)計校內(nèi)月賽,其中優(yōu)秀的學(xué)生被選拔進入校集訓(xùn)隊,進而參加ACM的預(yù)選賽和全球總決賽。依托HDOJ平臺形成從課內(nèi)實驗到自主訓(xùn)練,再到學(xué)科競賽的創(chuàng)新型人才培養(yǎng)良性循環(huán)。
程序設(shè)計課程考核的根本目的是為了客觀、準(zhǔn)確地評價學(xué)生,促進學(xué)生通過參與各種形式的編程實踐提高自己的應(yīng)用能力和創(chuàng)新能力[16]。
我們利用HDOJ在線實踐平臺這一優(yōu)勢,實施“全面機試,面向過程”的考核和評價方式。學(xué)生的每一次上機作業(yè)都在線提交,實時反饋,記載成績。學(xué)生最終取得的成績包含平時、期中和期終,分散在整個學(xué)期內(nèi)。除了平時上機以外,期中和期末考試也全部實行采用直接上機編程的“機考”考核方法,各部分的權(quán)重分別為30%、30%和40%,使得學(xué)生必須通過平時多上機,多實踐,真正熟悉程序設(shè)計和調(diào)試的各個環(huán)節(jié),才能取得好成績。
我們采用循序漸進的方式將課程實驗教學(xué)與ACM 競賽相結(jié)合,形成“課內(nèi)課外貫穿,競賽教學(xué)相互融合”的教學(xué)模式,這種模式既拓展了程序設(shè)計課程實驗教學(xué)的時間和空間,又大大激發(fā)了學(xué)生的學(xué)習(xí)興趣,推進了學(xué)生創(chuàng)造性思維的培養(yǎng)。
[1] 何欽銘, 顏 暉, 蘇小紅,等.“程序設(shè)計基礎(chǔ)”課程教學(xué)實施方案[J]. 中國大學(xué)教學(xué), 2010(5): 62-65.
HE Qinming, YAN Hui, SU Xiaohong,etal. Implementing Scheme of Programming Foundation Course[J]. China University Teaching, 2010(5): 62-65.
[2] The ACM-ICPC 國際大學(xué)生程序設(shè)計競賽主頁[EB/OL]. [2013-12-31]. http://icpc.baylor.edu/.
[3] 杭州電子科技大學(xué)在線評測系統(tǒng)[ EB/OL].[2013-12-31] http://acm.hdu.edu.cn/.
[4] 浙江大學(xué)在線評測系統(tǒng)[EB/OL].[2013-12-31]. http://acm.zju. edu.cn /onlinejudge/.
[5] 謝 迪,李文新,郭 煒.“百練”:一個程序設(shè)計技能訓(xùn)練與水平測試平臺[J]. 合肥工業(yè)大學(xué)學(xué)報(社會科學(xué)版) , 2008, 22(4): 172-175.
XIE Di, LI Wenxin, GUO Wei. “Bailian”:A Platform for Programming Skill Development and Evaluation[J]. Journal of Hefei University of Technology (Social Sciences), 2008, 22(4):172-175.
[6] 華中科技大學(xué)在線評測系統(tǒng) [ EB/OL].[2013-12-31].http://acm.hust.edu.cn/.
[7] 陳葉芳, 李 綱, 陳華輝. 以競賽培養(yǎng)模式推動理工科程序設(shè)計課程改革[J]. 計算機教育, 2010(13):39-42.
CHEN Ye-fang, LI Gang, CHEN Hua-hui . Promoting the Reform of Programming Course in Science and Engineering Through Contests[J]. Computer Education, 2010(13):39-42.
[8] 琚生根,廖 勇,周 剛,等. ACM競賽與實驗教學(xué)創(chuàng)新[J].實驗技術(shù)與管理, 2009(5): 125-126.
JU Shenggen,LIAO Yong,ZHOU Gang,etal.ACM contest and the experimental teaching innovation[J]. Experimental Technology and Management, 2009(5): 125-126.
[9] 皮德常,吳慶憲.國際大學(xué)生程序設(shè)計競賽與創(chuàng)新人才培養(yǎng)[J]. 電氣電子教學(xué)學(xué)報, 2008, 30(3):44-45.
PI De-chang ,WU Qing-xian.ACM International Collegiate Programming Contest and Cultivation of Innovative Talent[J]. Joural of EEE, 2008, 30(3):44-45.
[10] 袁國武,趙 楊,趙征鵬,等. 依托程序設(shè)計競賽,提高計算機專業(yè)學(xué)生培養(yǎng)質(zhì)量[J] . 計算機教育, 2009(15): 104-106.
YUAN Guo-wu, ZHAO Yang, ZHAO Zheng-peng,etal. Depending on the Programming Competition and Improving the Quality of the Students Majored Computer Science and Technology[J]. Computer Education, 2009(15):104-106.
[11] 郭嵩山,王 磊,張子臻. ACM/ICPC與創(chuàng)新型IT人才的培養(yǎng)[J]. 實驗室研究與探索, 2007, 26(12): 181-185.
GUO Song-shan, WANG Lei, ZHANG Zi-zhen. ACM / ICPC and Innovative IT Students cultivating[J]. Research and Exploration in Laboratory, 2007, 26(12): 181-185.
[12] 陳念年, 李郁峰, 李繪卓.基于在線評判系統(tǒng)的程序設(shè)計教學(xué)[J].計算機教育,2009(15):83-85.
CHEN Nian-nian, LI Yu-feng,LI Hui-zhuo. Programming Teaching Based on Judge Online System[J]. Computer Education, 2009(15):83-85.
[13] 徐紅云,江捷斯,周 釩.基于競教結(jié)合的“高級語言程序設(shè)計”實驗教學(xué)改革實踐[J].實驗技術(shù)與管理,2012,29(10):165-168.
Xu Hongyun, Jiang Jiesi, Zhou Fan. Practice of experimental teaching reform of Advanced Programming Language course based on combination of competition and teaching[J]. Experimental Technology and Management, 2012,29(10):165-168.
[14] 陳 志,李夢澤,馬 嫣,等.基于ACM 程序設(shè)計競賽的常規(guī)教學(xué)改革[J]. 電氣電子教學(xué)學(xué)報, 2011,33(6):18-20.
CHEN Zhi,LI Meng-ze,MA Yan,etal. Reform of Conventional Teaching based on ACM Programming Contest[J]. Joural of EEE, 2011,33(6):18-20.
[15] HDOJ在線評測統(tǒng)計圖 [ EB/OL].[2013-12-31]. http://acm.hdu.edu.cn/statistic/ submit_graph.php?statistic=4.
[16] 張麗萍,劉東升,王春暉.程序設(shè)計類課程考核評價方法的改革與實踐[J]. 計算機教育,2010(2):17-20.
ZHANG Liping, LIU Dongsheng. WANG Chunhui, Reform and Practice of Evaluation Method for Programming Courses[J]. Computer Education, 2010(2):17-20.