侯向輝 徐衛(wèi) 李琰琰
摘 要: ACM/ICPC程序設(shè)計(jì)競賽是世界上最具影響力的計(jì)算機(jī)類學(xué)科競賽之一,能夠最直接體現(xiàn)學(xué)生對專業(yè)知識(shí)的掌握以及實(shí)踐能力。ACM/ICPC集訓(xùn)在選手日常訓(xùn)練方面都有一套行之有效的機(jī)制,對學(xué)生的學(xué)習(xí)興趣、分析解決問題能力、創(chuàng)新能力等方面的培養(yǎng)都起著推動(dòng)作用,ACM競賽是對學(xué)生實(shí)踐能力最直接的考核。因此整合在線判題系統(tǒng)建設(shè)實(shí)踐平臺(tái),將ACM/ICPC模式引入計(jì)算機(jī)專業(yè)實(shí)踐教學(xué),是提高計(jì)算機(jī)專業(yè)學(xué)生實(shí)踐能力的途徑之一。
關(guān)鍵詞: ACM/ICPC; 程序設(shè)計(jì)競賽; 實(shí)踐教學(xué); 在線測評
中圖分類號(hào):G420 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2018)07-94-03
Abstract: The ACM/ICPC programming contest is one of the most influential discipline competitions of computer science in the world, which can most directly reflect the students' mastery of professional knowledge and the ability to practice. ACM/ICPC training has an effective mechanism for the daily training of player, which plays an important role in the cultivation of students' interest in learning, their ability to analyze and solve problems, and the ability of innovation. Therefore, it is one of the ways to improve the practical ability of computer majored student to integrate the online judgment system, build the practice platform and introduce the ACM/ICPC model into the practice teaching of computer specialty.
Key words: ACM/ICPC; programming contest; practical teaching; online judge
0 引言
國際大學(xué)生程序設(shè)計(jì)競賽ACM/ICPC(Association for Computing Machinery/International Collegiate Programming Contest)是世界上最大、歷史最長、影響最廣泛的計(jì)算機(jī)類學(xué)科競賽[1]。程序設(shè)計(jì)競賽對參賽學(xué)生的思維能力、腦力體力、協(xié)同編程能力等方面有極高要求,是各個(gè)國家計(jì)算機(jī)高等教育成果最直接的體現(xiàn)。程序設(shè)計(jì)競賽從能夠幫助學(xué)生全面掌握專業(yè)領(lǐng)域的基礎(chǔ)知識(shí)、促進(jìn)學(xué)生提高學(xué)習(xí)積極性、全面激發(fā)學(xué)生潛能、培養(yǎng)學(xué)生的團(tuán)隊(duì)寫作能力和加強(qiáng)學(xué)生對解決實(shí)際問題等創(chuàng)新能力的培養(yǎng)[2-3]。
1 ACM/ICPC競賽訓(xùn)練機(jī)制
科學(xué)的訓(xùn)練機(jī)制能更好地提升競賽成績,高效的程序設(shè)計(jì)訓(xùn)練方法可以引導(dǎo)和增強(qiáng)學(xué)生的程序設(shè)計(jì)能力,比賽過程中好的組隊(duì)策略、良好的團(tuán)隊(duì)合作和答題抉擇等競賽戰(zhàn)術(shù),也是取得競賽成績的必要因素。
程序設(shè)計(jì)競賽命題涉及計(jì)算機(jī)科學(xué)、軟件領(lǐng)域、信息學(xué)、數(shù)學(xué)和英語能力,通過以賽代練的方式,加強(qiáng)學(xué)生的思維能力。但是,由于程序設(shè)計(jì)競賽題目的特殊性,每次比賽都是以實(shí)際問題或科研項(xiàng)目中關(guān)鍵問題為原型的,考核目標(biāo)點(diǎn)均不相同的9-12道題目,且以往期題目不重復(fù)[4-5]。程序設(shè)計(jì)競賽題目以現(xiàn)實(shí)問題為出發(fā)點(diǎn),其解題方法并不唯一且并無現(xiàn)成算法可以借用,只有全面培養(yǎng)學(xué)生的創(chuàng)造能力,才是最好的辦法,同時(shí),高強(qiáng)度的訓(xùn)練,長時(shí)間壓力的比賽,都對學(xué)生的智力和毅力等品質(zhì)提出了更高的要求。由于競賽題目的難易程度差別懸殊,大量做題無法客觀的評價(jià)一個(gè)學(xué)生真實(shí)的計(jì)算機(jī)編程水平。創(chuàng)新平臺(tái)中新引入的題目考慮增加難度系數(shù),比賽結(jié)束進(jìn)入訓(xùn)練題庫,學(xué)生日常訓(xùn)練成績,將以加權(quán)分值的方式客觀反映學(xué)生的訓(xùn)練刻苦程度。
ACM集訓(xùn)隊(duì)日常訓(xùn)練主從知識(shí)范疇、訓(xùn)練方法和競賽策略等幾個(gè)方面展開。每年秋季學(xué)期開設(shè)新生訓(xùn)練營,培訓(xùn)主要圍繞基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)、概率論、組合數(shù)學(xué)、圖論、計(jì)算幾何等知識(shí)點(diǎn)展開。由于ICPC只作為培養(yǎng)學(xué)生編程興趣的一種手段,在有限時(shí)間里要全面學(xué)習(xí)和掌握這些知識(shí)點(diǎn)是非常困難的,因此,組隊(duì)?wèi)?yīng)考慮隊(duì)員之間的能力及擅長相互補(bǔ)充。例如,隊(duì)員1側(cè)重學(xué)習(xí)計(jì)算幾何,隊(duì)員2和隊(duì)員3偏重學(xué)習(xí)數(shù)學(xué)知識(shí)和數(shù)據(jù)結(jié)構(gòu),這使得組隊(duì)在短時(shí)間內(nèi)獲得更好的比賽成績,從長遠(yuǎn)來看,要想成為一名優(yōu)秀的參賽隊(duì)員,須具備“一專多能”的素質(zhì),“一?!笔蔷ㄖ辽僖环N類型的不同難度的題目,“多能”是指能解決其他類型的一般題目。這樣組成的參賽隊(duì)伍往往會(huì)有1+1+1>3的比賽效果。ACM集訓(xùn)隊(duì)通過個(gè)人實(shí)時(shí)排名、競賽成績、解題數(shù)量統(tǒng)計(jì)等來量化隊(duì)員的成績??梢园l(fā)現(xiàn),通過團(tuán)隊(duì)之間的協(xié)作以及適當(dāng)?shù)母偁幙梢栽黾訉W(xué)生的學(xué)習(xí)熱情,激發(fā)其學(xué)習(xí)潛力。
2 基于在線判題系統(tǒng)的實(shí)踐平臺(tái)建設(shè)
ACM/ICPC程序設(shè)計(jì)競賽一般專門的訓(xùn)練平臺(tái)在線判題系統(tǒng)OnlineJudge,簡稱OJ,將其引入到程序設(shè)計(jì)能力的教學(xué)及訓(xùn)練中,建立了在線實(shí)踐平臺(tái),將教學(xué)和實(shí)踐緊密結(jié)合,鼓勵(lì)學(xué)生在網(wǎng)絡(luò)平臺(tái)中開展練習(xí)、討論、測試等自主學(xué)習(xí)活動(dòng),同時(shí)競賽、實(shí)踐教學(xué)和學(xué)生上機(jī)考試的要求。
本系統(tǒng)平臺(tái)的目標(biāo)是集成在線程序判定系統(tǒng)、實(shí)踐教學(xué)在線練習(xí)系統(tǒng)和上機(jī)考試系統(tǒng)為一體的Web應(yīng)用系統(tǒng)。
在線程序判定系統(tǒng),客戶端電腦先調(diào)試自己的解題程序,然后將代碼提交給系統(tǒng),隨后系統(tǒng)將產(chǎn)生一條數(shù)據(jù)庫記錄保存本次提交,同時(shí)保存用戶提交的代碼,接著調(diào)用用戶提交時(shí)選擇的編譯器對用戶的代碼進(jìn)行編譯,在啟動(dòng)編譯好的程序,并將測試數(shù)據(jù)輸入該程序,通過輸入輸出流的重定向,獲取用戶程序的輸出結(jié)果,與標(biāo)準(zhǔn)答案比較,最后將比較結(jié)果寫入數(shù)據(jù)庫同時(shí)反饋給用戶本次判定的結(jié)果。
實(shí)踐教學(xué)在線練習(xí)系統(tǒng)和上機(jī)考試系統(tǒng)以在線程序判定系統(tǒng)為基礎(chǔ),根據(jù)不同的應(yīng)用場景,來設(shè)計(jì)不同的web應(yīng)用管理系統(tǒng)。
根據(jù)現(xiàn)有程序設(shè)計(jì)競賽和學(xué)生上機(jī)考試的需求,系統(tǒng)平臺(tái)包括三類用戶:管理員、教師和學(xué)生。
⑴ 管理員:進(jìn)行系統(tǒng)日常的維護(hù),能保證系統(tǒng)正常無異常的運(yùn)行。
⑵ 教師/教練:進(jìn)行系統(tǒng)數(shù)據(jù)維護(hù),如添加試題、新增考試、手動(dòng)判斷題目等等。
⑶ 學(xué)生/選手:未注冊之前,可以查看題目,查看題目提交的狀態(tài),但不能提交代碼。在注冊并登之后,學(xué)生就可以提交代碼,查看自己提交代碼的情況,以及歷史情況,個(gè)人的成績等等。
平臺(tái)的主要功能模塊如下:題庫管理、競賽管理、考試管理、訓(xùn)練管理、用戶管理和系統(tǒng)管理。它負(fù)責(zé)啟動(dòng)運(yùn)行編譯好的用戶程序,需要完成的工作流包括:啟動(dòng)程序,設(shè)置安全,重定向輸入/輸出流,寫入測試數(shù)據(jù),獲取輸出答案,比較答案,以文件形式返回。
實(shí)踐教學(xué)在線練習(xí)系統(tǒng)和上機(jī)考試系統(tǒng)采用JavaWeb+BootSrtap開源前端框架進(jìn)行項(xiàng)目開發(fā),并同時(shí)部署在校內(nèi)校外兩臺(tái)服務(wù)器上,校內(nèi)服務(wù)器主要用于在線上機(jī)考試,為了防止連接互聯(lián)網(wǎng)進(jìn)行作弊,而校外服務(wù)器主要用于學(xué)生的日常聯(lián)系,可以不受訪問地點(diǎn)約束。
3 利用實(shí)踐平臺(tái)促進(jìn)實(shí)踐教學(xué)途徑
按照ACM程序設(shè)計(jì)競賽的集訓(xùn)隊(duì)選手訓(xùn)練方式,以點(diǎn)帶面地提升計(jì)算機(jī)專業(yè)的實(shí)踐教學(xué)質(zhì)量。將ACM/ICPC競賽引入到程序設(shè)計(jì)能力的教學(xué)及訓(xùn)練中,將教學(xué)和實(shí)踐緊密結(jié)合,并鼓勵(lì)學(xué)生在網(wǎng)絡(luò)平臺(tái)中開展練習(xí)、討論、測試等自主學(xué)習(xí)活動(dòng)。由于ACM/ICPC競賽題目絕大多數(shù)來自于計(jì)算機(jī)實(shí)踐的抽象,要想很好地解決這些問題,要求學(xué)生必須掌握相關(guān)知識(shí),擁有數(shù)量的編程調(diào)試技術(shù),并且具備一定的創(chuàng)新實(shí)踐能力。
對于計(jì)算機(jī)類專業(yè)學(xué)生而言,最基本實(shí)踐能力就是具備良好的編程能力。由于ACM/ICPC競賽題目絕大多數(shù)來自于計(jì)算機(jī)實(shí)踐的抽象,引入到程序設(shè)計(jì)能力的教學(xué)及實(shí)驗(yàn)中,與“程序設(shè)計(jì)基礎(chǔ)”、“數(shù)據(jù)結(jié)構(gòu)”等課程的理論授課相合,要想很好地解決這些問題,需要根據(jù)不同的學(xué)生水平,題庫實(shí)驗(yàn)項(xiàng)目有一定的區(qū)分度,分別面向C/C++的授課學(xué)生,程序設(shè)計(jì)愛好者,ACM集訓(xùn)隊(duì)員。題庫中涵蓋數(shù)學(xué)、計(jì)算方法、數(shù)據(jù)結(jié)構(gòu)、數(shù)值分析等方面的專題題目。以分值標(biāo)定題目難度,題庫實(shí)驗(yàn)項(xiàng)目來源于實(shí)際的項(xiàng)目或標(biāo)準(zhǔn)應(yīng)用,且有一定的創(chuàng)新性,根據(jù)理論知識(shí)的內(nèi)容進(jìn)行改造和提煉,方便學(xué)生通過創(chuàng)新實(shí)踐平臺(tái)中開展練習(xí)、討論、測試等自主學(xué)習(xí)活動(dòng)。
自從2015年開始,為了進(jìn)一步提高學(xué)生在“程序設(shè)計(jì)基礎(chǔ)C”課程中的學(xué)習(xí)效果及實(shí)際動(dòng)手能力,在考核的形式和內(nèi)容上做了改進(jìn)。計(jì)算機(jī)學(xué)院面向所有專業(yè)設(shè)置了程序設(shè)計(jì)基礎(chǔ)通關(guān)考試。實(shí)施在線實(shí)踐與判題打分,學(xué)生在線做題,系統(tǒng)實(shí)時(shí)判題,這就要求學(xué)生能夠靈活應(yīng)用所學(xué)知識(shí)解決實(shí)際問題。2015-2017年,共有1458名學(xué)生參加了通關(guān)考試,其中1344名學(xué)生通過了測試。每學(xué)年平均通過率約為92.34%。2017年開始,在線判題系統(tǒng)的實(shí)踐平臺(tái)成為“程序設(shè)計(jì)基礎(chǔ)C”的期中考試平臺(tái),學(xué)生在該平臺(tái)中考試的成績,作為大類招生改革實(shí)施后考核學(xué)生課程學(xué)習(xí)情況以及專業(yè)潛能測試的一個(gè)主要依據(jù),用于電氣通訊與計(jì)算機(jī)大類2017級學(xué)生的專業(yè)分流。
自2016年起,教育部高等學(xué)校計(jì)算機(jī)類教學(xué)專業(yè)指導(dǎo)委員會(huì)、教育部高等學(xué)校軟件工程類教學(xué)專業(yè)指導(dǎo)委員會(huì)等主辦了中國高校計(jì)算機(jī)大賽-團(tuán)體程序設(shè)計(jì)天梯賽,旨在檢驗(yàn)并提高高校程序設(shè)計(jì)實(shí)踐教學(xué)的總體水平。比賽由北京大學(xué)、浙江大學(xué)等來自29個(gè)省級行政區(qū)的200余所高校參加。我校在2016年、2017年連續(xù)兩年獲得了全國高校一等獎(jiǎng)基礎(chǔ)上,2018年獲得全國高校特等獎(jiǎng),反映出我校ACM/ICPC程序設(shè)計(jì)競賽對計(jì)算機(jī)專業(yè)整體實(shí)踐教學(xué)的促進(jìn)作用。
4 結(jié)束語
綜上所述,將ACM/ICPC集訓(xùn)隊(duì)員的培養(yǎng)機(jī)制引入到計(jì)算機(jī)專業(yè)的實(shí)踐教學(xué)過程中,可以彌補(bǔ)現(xiàn)有計(jì)算機(jī)教學(xué)對學(xué)生編程能力、調(diào)試能力等動(dòng)手缺少有效評估的不足,通過整合在線判題系統(tǒng)建立教學(xué)實(shí)踐平臺(tái),將教學(xué)、實(shí)踐、訓(xùn)練三者緊密結(jié)合,并鼓勵(lì)學(xué)生在網(wǎng)絡(luò)平臺(tái)中開展練習(xí)、討論、調(diào)試、測試等主要計(jì)算機(jī)實(shí)踐教學(xué)環(huán)節(jié),對提高計(jì)算機(jī)專業(yè)實(shí)踐教學(xué)水平,繼而提升計(jì)算機(jī)專業(yè)整體教育質(zhì)量有著重要的參考價(jià)值。
參考文獻(xiàn)(References):
[1] 鄺祝芳,余紹軍,楊衛(wèi)民.ACM/ICPC對培養(yǎng)信息學(xué)科創(chuàng)新型人才的作用[J].計(jì)算機(jī)教育,2013.3:8-10
[2] 劉海霞,冉宇瑤.基于ACM競賽模式的程序設(shè)計(jì)類課程實(shí)踐教學(xué)改革的探討[J].工業(yè)控制計(jì)算機(jī),2016.29(3):39-40
[3] 李環(huán).基于ACM競賽的程序設(shè)計(jì)類課程教學(xué)改革研究[J].計(jì)算機(jī)教育,2016.255(3):115-118
[4] 王春平,王衛(wèi)紅,韓姍姍等.ACM-ICPC訓(xùn)練方法與競賽策略[J].計(jì)算機(jī)教育,2014.6:91-94
[5] 吳海波,夏新軍.基于ACM/ICPC的計(jì)算機(jī)實(shí)踐教學(xué)研究[J].當(dāng)代教育理論與實(shí)踐,2014.5:125-126