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