陳 英,鄭 巍,楊豐玉,段喜龍
(南昌航空大學(xué) 軟件學(xué)院,江西 南昌 330063)
隨著科學(xué)技術(shù)的快速發(fā)展,各大公司相對以往更加關(guān)注畢業(yè)生的綜合素質(zhì)。在此要求下,各高校應(yīng)適應(yīng)這種變化,更有針對性地加強在校大學(xué)生綜合素質(zhì)的培養(yǎng),以期提高大學(xué)生畢業(yè)找工作的競爭力[1]。而對計算機專業(yè)的相關(guān)學(xué)生而言,程序設(shè)計類競賽能夠有效提高學(xué)習(xí)的主動性、思考的創(chuàng)造性、團隊的合作性[2]。
近年來,國內(nèi)高校學(xué)生可以參加的程序設(shè)計類競賽主要有以下幾種[3-4]:①ACM國際程序設(shè)計競賽,中國區(qū)域賽網(wǎng)絡(luò)賽的時間為9-10月,現(xiàn)場賽的時間為10-12月;②“藍橋杯”全國軟件和信息技術(shù)專業(yè)人才大賽,初賽時間約為4月初,國賽時間為5月底;③團體程序設(shè)計天梯賽,比賽時間為3月底4月初;④中國大學(xué)生程序設(shè)計大賽(CCPC),網(wǎng)絡(luò)賽時間為9月,現(xiàn)場賽的時間為10-12月。從以上幾種比賽的時間看,基本跨越了全年。如何保證學(xué)生以好的狀態(tài)把握上述比賽的機會,是各個高校教練要面對的事情。分析各個取得好成績的高校實踐結(jié)果表明,組織集訓(xùn)隊是一個不錯的措施。
學(xué)生是比賽的主體,選拔優(yōu)秀的學(xué)生是形成集訓(xùn)隊的先決條件。然而對一般高校而言,絕大多數(shù)學(xué)生都是零基礎(chǔ)的,即高中階段沒有接受過系統(tǒng)程序設(shè)計競賽的訓(xùn)練,這是一個短時間內(nèi)無法改變的事實。針對這種情況,學(xué)院主要采用三步走的學(xué)生選拔策略:①廣撒網(wǎng):在PAT平臺上布置200道基本題目(以C語言和簡單的數(shù)據(jù)結(jié)構(gòu)為主),為每一個剛?cè)雽W(xué)的大一新生分配一個賬號,通過入學(xué)宣講說明參加程序設(shè)計競賽的重要性,并告知他們兩個月后根據(jù)做題數(shù)量的多少進行淘汰;②重點捕魚:根據(jù)做題數(shù)量以及完成的質(zhì)量,淘汰大多數(shù)新生,只留下積極性比較高的學(xué)生;③多輪次考核淘汰:制定每兩個月一次的淘汰機制,進行末位淘汰,淘汰后的學(xué)生將無法再次進入集訓(xùn)隊。
程序設(shè)計類競賽的知識點非常多,且難度非常大,對于學(xué)生而言,不可能期望知識點全覆蓋。因此,按照從簡到難對知識點梳理排序,同時結(jié)合學(xué)生的特點,選擇其中的部分知識點進行專題講解和訓(xùn)練,通過對部分例題的講解,讓學(xué)生掌握知識點的特點、解題的思路、多知識點的結(jié)合等。在此基礎(chǔ)上,布置難度稍高的題目,讓學(xué)生自行解答,做到對知識點的真正掌握。例如,對于動態(tài)規(guī)劃(Dynamic Programming,DP)這個知識點,操作如下:①講解該知識點的理論基礎(chǔ);②在杭電OJ(Online Judge)上布置2~3道針對DP的題目,要求學(xué)生在2個小時內(nèi)完成;③對集訓(xùn)隊員完成情況進行點評,并講解題目;④在此基礎(chǔ)上,布置10道DP題目,要求學(xué)生在5個小時內(nèi)完成。
針對參加集訓(xùn)的學(xué)生,制訂詳細的集訓(xùn)制度,主要包括:①出勤制度,規(guī)定簽入、簽出的時間,要求每位學(xué)生保證其出勤時間,不能遲到,有事請假,不能無故缺勤;②考核制度,要求學(xué)生做到出工出力,不能出現(xiàn)“身在曹營心在漢”的情況;③遞補制度,任何學(xué)生違反了制度,都將被淘汰出集訓(xùn)隊伍,轉(zhuǎn)而由候補隊員加入,給學(xué)生一定的威懾力。
對普通院校而言,學(xué)生生源質(zhì)量一般,基本都是零基礎(chǔ),學(xué)院采用循序漸進、分步走的策略,要求學(xué)生在掌握基本知識點的基礎(chǔ)上,逐步提升難度,做到一步一個腳印,穩(wěn)扎穩(wěn)打。例如,按照如下的順序制訂計劃:①在學(xué)生自學(xué)的基礎(chǔ)上,強化計算機語言(C、C++等)的使用能力;②要求學(xué)生熟練掌握數(shù)據(jù)結(jié)構(gòu)的基本操作;③要求學(xué)生熟練掌握基本算法的設(shè)計與實現(xiàn);④要求學(xué)生掌握一定的數(shù)學(xué)知識(如數(shù)論、組合代數(shù)、計算幾何等);⑤要求學(xué)生掌握更高難度的算法。
為了讓學(xué)生有良好的集訓(xùn)環(huán)境,應(yīng)給予硬件和軟件的保證,在硬件方面,有獨立的集訓(xùn)教室、人手一臺高配置電腦,高速暢通的網(wǎng)絡(luò)環(huán)境,高清的投影儀、空調(diào)等。在軟件方面,配備了有經(jīng)驗的教師和高年級學(xué)生給學(xué)生輔導(dǎo),也積極參加第三方的暑假多校賽,例如杭電的多校賽、牛客網(wǎng)的多校賽、亞洲訓(xùn)練聯(lián)盟的多校賽等。
高強度的集訓(xùn)會讓學(xué)生在身體上感覺累,“攻堅克難”也會使學(xué)生在心理上壓力較大,而壓力的持續(xù)性會使學(xué)生感覺“身心俱疲”。這種狀態(tài)將降低學(xué)生學(xué)習(xí)的積極性,使其集訓(xùn)狀態(tài)下降,而單個學(xué)生的消極狀態(tài)將傳染給其他人,讓整個集訓(xùn)團隊的效率降低。面對這種可能出現(xiàn)的狀況,教師需要不定期地對學(xué)生進行心理輔導(dǎo),從各方面教育他們正確面對集訓(xùn)過程中遇到的困難和問題,例如講勵志故事、玩真心話大冒險游戲等,更重要的是教師要成為學(xué)生的朋友,讓學(xué)生愿意傾訴他們的心里話。
為了對比分析,選用兩組學(xué)生作為分析樣本:其中一組學(xué)生為集訓(xùn)隊隊員,人數(shù)為56人,其中2015級13人、2016級18人、2017級25人;另一組學(xué)生為學(xué)院對應(yīng)的同年級學(xué)生,人數(shù)為300人,其中2015、2016、2017級各100人。為了說明方便,本文稱后一組學(xué)生為非集訓(xùn)隊。同時,為了使對比結(jié)果更加科學(xué),兩組樣本的對比數(shù)據(jù)為相對數(shù)。
興趣是最好的老師,學(xué)生從集訓(xùn)隊的“傳幫帶”氛圍中,體會到了相互幫助、共同提升的樂趣,也培養(yǎng)了編程的興趣。“三人行必有我?guī)熝伞保诩?xùn)隊的氛圍中,每位隊員都充分和教師、隊員進行溝通交流,各種思想碰撞會產(chǎn)生思維的靈感,而這些靈感有助于解決編程過程中的困惑,讓隊員們充分感受編程帶給他們的快樂;采用循序漸進、由淺入深的策略,集訓(xùn)隊員每做出一道題都會有很大的成就感,久而久之隊員對編程的熱情就越來越濃。以“你對編程感興趣嗎”為題進行數(shù)據(jù)統(tǒng)計,統(tǒng)計的結(jié)果見圖1。該結(jié)果表明,集訓(xùn)隊成員的編程熱情遠遠高于非集訓(xùn)隊學(xué)生的編程熱情,其中,集訓(xùn)隊員對編程非常感興趣的比例高達98%,而非集訓(xùn)隊員只有50%;沒有集訓(xùn)隊員對編程不感興趣,而對編程不感興趣的非集訓(xùn)隊員占比6%。

圖1 學(xué)生編程熱情對比
高效能的習(xí)慣意味著踏上了成功的快車,只有行動才能捕獲命運。養(yǎng)成良好的編程習(xí)慣,就要每天保持一定的編程時間,并持之以恒。集訓(xùn)隊的隊員每天制定的小目標包括:①給自己規(guī)定學(xué)習(xí)算法知識點的數(shù)量;②明確查看并理解經(jīng)典算法的數(shù)量;③明確做算法題的數(shù)量;④相互講解題。每天結(jié)束時,隊員們均會總結(jié)每天的得失,也相互監(jiān)督這些目標是否完成。本文以“你每天有幾個小時用于編程”為題進行數(shù)據(jù)統(tǒng)計,統(tǒng)計的結(jié)果見圖2。該結(jié)果表明,集訓(xùn)隊成員每天的編程時間遠遠大于非集訓(xùn)隊學(xué)生。進一步分析可以發(fā)現(xiàn):集訓(xùn)隊的成員每天都會主動編程,每天超過2小時的比例超過了35%,每天超過3小時的比例達14.29%;而非集訓(xùn)隊的學(xué)生每天超過2小時的比例不足15%,每天超過3小時的比例只有5.43%。

圖2 編程時長對比
以“截止到5月1號,你在各個OJ上做題的數(shù)量為多少”為題進行數(shù)據(jù)統(tǒng)計,為了使統(tǒng)計結(jié)果更加集中,主要統(tǒng)計了杭州電子科技大學(xué)的OJ、計蒜客、牛客網(wǎng)以及PTA這幾個OJ平臺上的做題數(shù)量,并對其求均值,統(tǒng)計的結(jié)果見圖3。該結(jié)果表明,集訓(xùn)隊員均會主動在OJ上做題,并隨著習(xí)慣的養(yǎng)成,做題的數(shù)量均穩(wěn)步上升。進一步對比可以發(fā)現(xiàn),集訓(xùn)隊和非集訓(xùn)隊在做題的數(shù)量上差距是非常大的,當(dāng)然這也可能與非集訓(xùn)隊的學(xué)生平時沒有使用這幾個OJ平臺有關(guān)。

圖3 編程數(shù)量對比
“量變引起質(zhì)變”,學(xué)生持續(xù)努力做題,結(jié)果就是學(xué)生的編程能力水漲船高。本文統(tǒng)計2015級學(xué)生的數(shù)據(jù)結(jié)構(gòu)和算法設(shè)計分析A這兩門課程的期末考試成績分布區(qū)間,對比結(jié)果見圖4和圖5。從圖4可以看出,集訓(xùn)隊學(xué)生的數(shù)據(jù)結(jié)構(gòu)這門課程分數(shù)分布在80~99這兩個區(qū)間的占比超過90%,而非集訓(xùn)隊只有38.04%;集訓(xùn)隊沒有學(xué)生成績不及格,而非集訓(xùn)隊有4.35%的學(xué)生不及格。

圖4 數(shù)據(jù)結(jié)構(gòu)分數(shù)分布區(qū)間對比

圖5 算法設(shè)計與分析A分數(shù)分布區(qū)間對比
從圖5可以看出,集訓(xùn)隊學(xué)生的算法設(shè)計與分析A這門課程分數(shù)分布在80~99這個區(qū)間的占比為84.62%,而非集訓(xùn)隊只有35.37%;集訓(xùn)隊沒有學(xué)生成績不及格,而非集訓(xùn)隊有6.10%的學(xué)生不及格。綜合圖4和圖5可知,作為大學(xué)本科程序設(shè)計的兩門主要課程,集訓(xùn)隊學(xué)生的成績遠遠高于非集訓(xùn)隊學(xué)生的成績,這說明集訓(xùn)起到了重要作用。
為了進一步說明問題,筆者以學(xué)院2018年3月份參加“程序設(shè)計天梯賽”的30位學(xué)生作為樣本進行內(nèi)部對比。這30位學(xué)生分別由2015、2016和2017級組成,人數(shù)分別為7人、9人和14人。按照不同的年級,對比數(shù)據(jù)分別為各年級學(xué)生比賽所得分數(shù)的平均分和標準方差,統(tǒng)計對比結(jié)果見圖6。從該圖中可以看出,就平均分而言,2015級最高,2016級居中,2017級最低,這符合高年級學(xué)生分數(shù)更高的基本規(guī)律。但是,進一步分析后可以發(fā)現(xiàn),2017級相對2016級的平均分差為-18.26,而2016級相對2015的平均分差為-25.39,這種現(xiàn)象也更說明了集訓(xùn)的重要性。再分析標準方差可以看出,雖然這是2017級第二個學(xué)期取得成績,但其成績的分布最穩(wěn)定。

圖6 程序設(shè)計天梯賽的成績對比分析
在軟件企業(yè)中項目開發(fā)都是以團隊為單位,沒有團隊協(xié)作能力將舉步維艱,每個成員都應(yīng)該具有與其他成員協(xié)作的能力。ACM-ICPC、CCPC、程序設(shè)計天梯賽都是以3人或者10人作為一個團隊進行競賽的,而學(xué)院平時的集訓(xùn)也要求學(xué)生以團隊形式進行。針對每個學(xué)生不同的特點,進行分工合作,這樣有效地提高了他們的溝通能力和團隊協(xié)作能力,具體表現(xiàn)為:①每個小組成員能夠包容其他成員的失誤;②解題思路能夠得到小組成員的支持;③獲得的資源能夠共享;④組員之間相互給予了最大程度的信任;⑤把自己當(dāng)做集體的一員,評價和管理自己的行為,并承擔(dān)自己的責(zé)任。
作為相對本科教學(xué)難度更大的程序設(shè)計類競賽,其涉及的知識面廣且深,這就要求學(xué)生具備自學(xué)能力。通過集訓(xùn),學(xué)生的自學(xué)能力也得到很大的提升,具體表現(xiàn)為:①對程序設(shè)計有強烈的興趣愛好,經(jīng)常對某一類問題嘗試采用不同的算法進行解決;②有強烈的求知欲,能夠主動、自主進行學(xué)習(xí);③能夠?qū)σ颜莆盏乃惴ㄟM行組織和歸類,舉一反三,解決新出現(xiàn)的問題。
程序設(shè)計類競賽,其考核的知識點不論是廣度還是深度,都遠遠超過了課程的一般要求。為了讓學(xué)生能夠在程序設(shè)計類競賽中取得一定的成績,學(xué)院采用在選拔學(xué)生的基礎(chǔ)上,集中進行培訓(xùn),并已經(jīng)取得成績,對比分析證明集訓(xùn)是非常有效果的。