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