張 仕,吳 聞,嚴(yán)宣輝
(福建師范大學(xué) 數(shù)學(xué)與計算機學(xué)院,福建 福州 350007)
ACM 國際大學(xué)生程序設(shè)計競賽(ACM international collegiate programming contest,簡稱ACM-ICPC或ICPC)是由美國計算機協(xié)會(ACM) 主辦的,是一項旨在展示大學(xué)生創(chuàng)新能力、團隊精神和在壓力下編寫程序、分析和解決問題能力的年度競賽[1]。隨著計算機專業(yè)的快速發(fā)展,計算機專業(yè)學(xué)生人數(shù)的急劇增加,就業(yè)競爭壓力也越來越大。學(xué)生為了能夠更好地提升自己的能力,提高就業(yè)競爭力,以ACM-ICPC為代表的程序設(shè)計類競賽越來越為計算機相關(guān)專業(yè)學(xué)生、老師和學(xué)校所重視。福建師范大學(xué)從2003年開始組織學(xué)生參加ACM-ICPC,并逐步參與了各類省級和國家級程序設(shè)計類競賽,逐漸摸索出一套適應(yīng)于自身學(xué)生、學(xué)校層次的以程序競賽為核心的學(xué)生培養(yǎng)體系。
目前,國內(nèi)部分院校進行了以競賽為驅(qū)動的軟件人才培養(yǎng),利用程序設(shè)計競賽拓展培養(yǎng)思路,深化課程改革[2-4]。然而,現(xiàn)有的教學(xué)實踐改革并沒有形成一套較為完整的,涵蓋基礎(chǔ)培養(yǎng)、選拔、訓(xùn)練、競賽考核、集訓(xùn)、退役的管理和培養(yǎng)體系。特別對于一些國內(nèi)非985、211院校,其學(xué)生素質(zhì)、自覺性和基礎(chǔ)都無法與頂尖院校相比,因此,有必要針對特定的學(xué)生層次,制定完整的以競賽為驅(qū)動的軟件人才培養(yǎng)方法、方案。我們對該方面發(fā)展現(xiàn)狀歸納為以下幾點:
(1)重視與ACM-ICPC為代表的程序設(shè)計類競賽相關(guān)課程的建設(shè),但輕視與后繼課程的銜接。在現(xiàn)有的一些以競賽為驅(qū)動的教學(xué)改革中,著重關(guān)注于如何為ACM-ICPC為代表的程序設(shè)計類競賽提供支持,以及如何提高學(xué)生在競賽中解決問題的能力。競賽與課程教學(xué)的銜接主要體現(xiàn)在課程為競賽提供支持,以便學(xué)生能夠盡早介入,而對于競賽后繼培養(yǎng)課程的銜接,對學(xué)生如何由程序設(shè)計能力轉(zhuǎn)向工程創(chuàng)新能力的討論則略顯不足。
(2)重視隊員的選拔和訓(xùn)練,輕視隊員后繼的培養(yǎng)。在現(xiàn)有一些對ACM-ICPC為代表的程序設(shè)計類競賽的討論中,各個學(xué)校老師都非常重視隊員的選拔和訓(xùn)練。然而,在實際的操作中,由于各種競賽的規(guī)定,有許多學(xué)生最后是沒有機會參加現(xiàn)場比賽的。這些二線隊員參加了整個訓(xùn)練,程序設(shè)計能力、解決問題的能力均得到了極大提高,但是缺少退役后的職業(yè)規(guī)劃、后繼培養(yǎng)。
(3)沒有把ACM-ICPC為代表的程序設(shè)計類競賽和創(chuàng)業(yè)創(chuàng)新競賽加以貫通。程序設(shè)計類競賽項目與創(chuàng)業(yè)創(chuàng)新類競賽項目的側(cè)重點不同,其中,程序設(shè)計類競賽培養(yǎng)學(xué)生解決某一具體局部問題的能力,也就是學(xué)生的程序設(shè)計能力、對軟件算法的理解;而創(chuàng)業(yè)創(chuàng)新類競賽則要求學(xué)生具有一定的工程實踐、軟件應(yīng)用和創(chuàng)新能力?,F(xiàn)有培養(yǎng)體系和研究缺少這兩者之間的銜接,特別對學(xué)生的指導(dǎo)方面缺少一個連貫的安排。
以ACM-ICPC為核心的學(xué)生培養(yǎng)體系建設(shè)主要從4個方面展開,主要包括重視基礎(chǔ)課程教學(xué)銜接、團隊的組建(隊員選拔)、訓(xùn)練和考核、教學(xué)培養(yǎng)體系的支持、工程創(chuàng)新能力等方面展開敘述。這4個方面與現(xiàn)有競賽相互促進,圍繞競賽展開,具體關(guān)系如圖1所示。
圖1 研究內(nèi)容的關(guān)系
程序設(shè)計類競賽團隊隊員來自于廣大學(xué)生,因此,我們首先需要重視程序設(shè)計基礎(chǔ)課程的教學(xué)工作。對于程序設(shè)計類的基礎(chǔ)性課程,我們將以提高學(xué)生動手實踐能力為主要抓手,為此,專門開發(fā)了程序設(shè)計訓(xùn)練平臺。通過程序設(shè)計訓(xùn)練平臺為學(xué)生提供平時作業(yè)、實驗測試、實驗考核等形式多樣的相關(guān)試題,增加學(xué)生動手實踐的機會,從而培養(yǎng)和提高學(xué)生的實戰(zhàn)能力。此外在訓(xùn)練平臺上設(shè)置賽課結(jié)合模塊,內(nèi)含豐富的訓(xùn)練題庫,為學(xué)有余力的學(xué)生提供更多的實踐機會。
而平時課程考核的方式在實際教學(xué)中起到指揮棒的作用,若沿用原有的以理論考核和期末考核為主的學(xué)生考核評價機制,那勢必會對學(xué)生動手能力、創(chuàng)新能力和工程能力的培養(yǎng)起反作用。因此,通過和任課教師共同商議優(yōu)化相關(guān)課程的考核方式,轉(zhuǎn)變軟件人才培養(yǎng)過程中的考核方式,改革學(xué)生學(xué)業(yè)評價制度,建立過程性評價和終結(jié)性評價相結(jié)合的課程考核方式,逐步加大過程性考核、階段性考核力度,提高平時成績在課程成績中的權(quán)重。
從2013級學(xué)生開始,我校計算機專業(yè)部分學(xué)生的“程序設(shè)計I——C語言程序設(shè)計”便通過學(xué)校的OJ平臺布置作業(yè),每周還額外布置兩題供學(xué)生練習(xí)使用。對2013級使用和未使用OJ平臺學(xué)習(xí)“程序設(shè)計I——C語言程序設(shè)計”的學(xué)生進行橫向比較發(fā)現(xiàn),無論是實踐考核還是后續(xù)課程體現(xiàn)出來的動手能力,使用OJ平臺的學(xué)生普遍優(yōu)于未使用OJ平臺的學(xué)生。
選拔隊員除了要注重其平時課程的考核成績外,還設(shè)置多重選拔的方式,特別增設(shè)實踐動手能力選拔上的一票否決權(quán)。
為了能夠促進學(xué)生廣泛參與,我們每年至少舉行一次高年級(主要針對二、三年級)程序設(shè)計競賽和一次低年級(針對一年級)程序設(shè)計競賽,為程序競賽人才的選拔提供良好的支撐。從2003年開始組織學(xué)院的程序設(shè)計競賽,到后面發(fā)展為學(xué)校的程序設(shè)計競賽,該競賽已經(jīng)開展了13屆。對于初次選拔進入培養(yǎng)預(yù)備隊伍的學(xué)生,則通過設(shè)置多次選拔的方式,讓學(xué)生時刻緊繃不上則下、不進則退的神經(jīng)。例如,通過設(shè)置季度賽等方式為預(yù)備隊員提供晉級機會,同時也給正式隊員危機感,從而實現(xiàn)能上能下的用人機制。
對于隊員的考核,除了需要考核日常訓(xùn)練任務(wù)的完成情況外,還要求其參加各個季度的晉級賽,從一定程度上實現(xiàn)以賽代考。對于各類競賽,也將通過設(shè)置積分的方式,作為日后代表學(xué)校參加高級別競賽的重要依據(jù),避免大賽前一次性選拔的偏頗性。
日常訓(xùn)練則以隊員為主,指導(dǎo)教師和領(lǐng)隊老師為輔的方式展開,包括講座、定期討論等方式,同時對一些典型題目、典型知識點通過專題訓(xùn)練的形式展開。此外,在日常的訓(xùn)練中讓老隊員和新隊員結(jié)對幫扶,從而充分利用老隊員在實際訓(xùn)練和比賽中所積累的經(jīng)驗。
當(dāng)前,計算機類基礎(chǔ)能力培養(yǎng)課程由“程序設(shè)計I——C語言程序設(shè)計”“程序設(shè)計II——C++語言程序設(shè)計”“數(shù)據(jù)結(jié)構(gòu)”“算法設(shè)計與分析”“高級程序員選講”形成了一個有效的體系,但是對于ACM隊員而言,若待這些課程都學(xué)習(xí)完成再參與至少需要一年時間的訓(xùn)練和競賽,那么在工程能力的培養(yǎng)和開拓上必定會有所滯后。為了解決這一問題,從2013級學(xué)生開始,在學(xué)生學(xué)習(xí)完程序設(shè)計I后,在大一下學(xué)期便開設(shè)程序設(shè)計競賽入門級選修課程“程序設(shè)計與問題求解”,為有興趣在程序設(shè)計上提高并參與競賽的學(xué)生提供一個利用程序求解實際問題的拔高課程。
此外,程序競賽指導(dǎo)團隊在暑假期間還申請學(xué)院機房,為有興趣的新生講授一些競賽中常用的知識和方法,例如STL、遞歸、分治、歸納、動態(tài)規(guī)劃、搜索算法、圖論等。具體實現(xiàn)由指導(dǎo)老師講授一個上午,接著一天半時間由老隊員輔導(dǎo)專題訓(xùn)練?!俺绦蛟O(shè)計與問題求解”和暑期的課程通常是一個大浪淘沙的過程,也就是開始時有大量學(xué)生參與,最后真正堅持下來的也就剩下30%~50%。
程序設(shè)計競賽是一項具有相當(dāng)難度的賽事,并不是所有的同學(xué)都可以通過努力獲得認(rèn)可,為此,我們形成一個專門指導(dǎo)學(xué)生項目開發(fā)、創(chuàng)新創(chuàng)業(yè)類競賽指導(dǎo)小組。該小組專門針對經(jīng)過嚴(yán)格程序設(shè)計訓(xùn)練、退役不再參與程序設(shè)計類競賽的學(xué)生。這些學(xué)生有良好的編程能力和解決問題能力,容易掌握J(rèn)ava EE、.Net程 序設(shè)計、軟件工程等課程,通過進一步地深入學(xué)習(xí),培養(yǎng)和提升這部分學(xué)生的工程能力和實踐創(chuàng)新能力。
具體到課程體系的優(yōu)化上(如圖2所示),著重于合理設(shè)置課程,使之能夠為程序設(shè)計類競賽提供支持,并且通過參與訓(xùn)練和競賽促進相關(guān)課程的學(xué)習(xí);對于經(jīng)過嚴(yán)格程序設(shè)計訓(xùn)練未取得參與競賽資格的學(xué)生,或退役不再參與程序設(shè)計類競賽的學(xué)生,我們將著重研究如何為這些學(xué)生設(shè)置工程訓(xùn)練類課程,從而使課程的學(xué)習(xí)和創(chuàng)新創(chuàng)業(yè)類競賽互相促進。從2016年開始,我們又陸續(xù)開設(shè)了大數(shù)據(jù)、人工智能等方面的課程。
由于有了良好的程序設(shè)計訓(xùn)練,這些學(xué)生在學(xué)習(xí)具體的項目開發(fā)類課程時也就有了更強的動手能力。近兩年來,從我們程序競賽團隊轉(zhuǎn)入創(chuàng)新創(chuàng)業(yè)類競賽的學(xué)生獲得了很好的比賽成績,如2016年的華為杯創(chuàng)新創(chuàng)業(yè)類競賽,我校2013級學(xué)生獲得了二、三等獎共5項。
計算機科學(xué)與技術(shù)專業(yè)是一個飛速發(fā)展的學(xué)科領(lǐng)域,其源動力來自于不斷創(chuàng)新。因此,創(chuàng)新能力是高質(zhì)量人才的靈魂?;诖?,培養(yǎng)體系還包括加強對經(jīng)過程序設(shè)計類競賽培養(yǎng)和競賽退役的優(yōu)秀軟件人才創(chuàng)新創(chuàng)業(yè)能力的培養(yǎng),從根本上提高這部分學(xué)生的創(chuàng)新和創(chuàng)業(yè)能力。對此,培養(yǎng)體系主要從以下幾個方面考慮并付諸實施。
圖2 課程設(shè)置與競賽的關(guān)系
(1)建立導(dǎo)師制,由導(dǎo)師在專業(yè)學(xué)習(xí)和科技創(chuàng)新方面對學(xué)生進行指導(dǎo)。鼓勵教師結(jié)合自己的科研課題,指導(dǎo)學(xué)生進行科技創(chuàng)新活動。該方面措施已經(jīng)在2012年全面推廣,從二年級開始,學(xué)生便可參與教師的相關(guān)課題,實現(xiàn)了導(dǎo)師制和畢業(yè)設(shè)計指導(dǎo)的統(tǒng)一。該措施讓學(xué)生的專業(yè)學(xué)習(xí)和能力拓展具有持續(xù)性,目標(biāo)明確,可以更早介入課題,提高自身實踐能力。避免因盲目性學(xué)習(xí)或頻繁更換指導(dǎo)老師和畢業(yè)指導(dǎo)老師帶來的無所適從。
(2)積極組織課外科技活動,通過大學(xué)生創(chuàng)新實驗平臺的建設(shè),以及學(xué)校、省級大學(xué)生創(chuàng)新實驗項目的申請立項等手段,培養(yǎng)學(xué)生的創(chuàng)新意識和創(chuàng)新能力。通過加大對大學(xué)生課外科技創(chuàng)新活動的經(jīng)費投入和政策支持力度,積極組織學(xué)生參加各類大學(xué)生課外活動,獲得多項校級、省級大學(xué)生科技創(chuàng)新項目,形成了一個較為完整的省—校—院學(xué)生創(chuàng)新創(chuàng)業(yè)的支持體系。
(3)以學(xué)科競賽、課外科技創(chuàng)新活動培養(yǎng)學(xué)生創(chuàng)新能力。創(chuàng)造條件,積極組織、資助學(xué)生參加學(xué)科競賽,依托實驗中心,建立大學(xué)學(xué)生課外科技創(chuàng)新平臺、機器人實驗創(chuàng)新平臺、嵌入式開發(fā)創(chuàng)新平臺等。該方面措施從2016年暑期開始試行,特別是通過開放實驗室、暑期實驗室設(shè)備外借等為學(xué)生提供相關(guān)軟硬件設(shè)備的支持。
(4)通過校企合作培養(yǎng)學(xué)生實踐能力,將企業(yè)的技術(shù)應(yīng)用能力和項目開發(fā)經(jīng)驗與學(xué)校師資力量相結(jié)合,培養(yǎng)學(xué)生的實踐能力、應(yīng)用能力與項目開發(fā)能力。我們經(jīng)常性地聘請企業(yè)工程師參與學(xué)生實踐培養(yǎng)環(huán)節(jié),還結(jié)合校外培訓(xùn)企業(yè)的免費公開課為學(xué)生提供介入實際項目的機會。對企業(yè)而言,也希望通過這種方式發(fā)掘一些苗子,加以重點培養(yǎng),為企業(yè)在人才爭奪中搶占先機。
(5)開展創(chuàng)業(yè)實踐活動,提供實踐平臺。在正常教學(xué)中增加實踐教學(xué)、創(chuàng)業(yè)實習(xí)環(huán)節(jié),開展社會實踐活動,鼓勵學(xué)生參加社會和企業(yè)的調(diào)查,讓學(xué)生深入社會、深入企業(yè),對就業(yè)市場和創(chuàng)業(yè)環(huán)境有初步的了解,培養(yǎng)自己的知識應(yīng)用能力;通過加強校企聯(lián)合和實踐基地建設(shè),讓學(xué)生的創(chuàng)業(yè)活動與企業(yè)之間形成良好的互動,推動學(xué)生的創(chuàng)業(yè)成果盡快產(chǎn)業(yè)化。該方面措施已經(jīng)在2015、2016級的卓越工程師班開展,例如,組織學(xué)生參觀網(wǎng)龍公司的VR園區(qū)等。由于經(jīng)費的限制,還未能在全院所有計算機類學(xué)生中推廣。
(6)對于工程、創(chuàng)新類的課程,我們將通過引入公司實際工程項目、以競賽的方式提出更高的要求,從而鼓勵學(xué)生更加深入學(xué)習(xí)。而且,在相關(guān)考核上,將充分考慮參與競賽所獲得的成績,引入以賽代考的方式。從2014級學(xué)生開始,我們便允許學(xué)生利用競賽成績抵部分選修課程的成績,這也就給學(xué)生更多個性化的發(fā)展機會。
從已經(jīng)畢業(yè)的2013級學(xué)生的培養(yǎng)效果來看,ACM隊員的就業(yè)情況明顯好于其他學(xué)生。而2014級和2015級學(xué)生在這種培養(yǎng)體系下,有更多的學(xué)生對自己的學(xué)業(yè)和未來發(fā)展具有明確的目標(biāo),對競賽培訓(xùn)和校內(nèi)外實踐的參與熱情和參與度都很高。
高素質(zhì)的工程技術(shù)人才對國家經(jīng)濟和科技進步起著巨大的推動作用,已成為影響一個國家核心競爭力的重要因素。結(jié)合社會需求、專業(yè)特色,開展以程序設(shè)計和創(chuàng)新競賽為驅(qū)動的軟件人才培養(yǎng)改革,提出一套以程序設(shè)計競賽和創(chuàng)新競賽為手段的、旨在提高學(xué)生軟件開發(fā)能力的培養(yǎng)模式,并在我校ACM現(xiàn)任隊員、退役隊員以及ACM新晉人員中進行具體實施,取得了良好的效果。我校積極實施卓越工程師培養(yǎng)計劃,從2015級和2016級開始,系里專門針對上述模式設(shè)立了一個卓越工程師班,其課程設(shè)置和培養(yǎng)思路按照這套已經(jīng)實踐過的方式制定,如果能夠持續(xù)取得較好的效果,將在全院所有計算機類學(xué)生中加以推廣。
[1]張仕, 吳聞. 基于PCOJ 的數(shù)據(jù)結(jié)構(gòu)實驗教學(xué)探索[J]. 計算機教育, 2015(3): 30-32.
[2]皮德常, 吳慶憲. 國際大學(xué)生程序設(shè)計競賽與創(chuàng)新人才培養(yǎng)[J].電氣電子教學(xué)學(xué)報, 2008(3): 46-47.
[3]郭嵩山, 王磊, 張子臻. ACM/ICPC與創(chuàng)新型IT人才的培養(yǎng)[J].實驗室研究與探索, 2007(12): 193-197.
[4]陳志, 李夢澤. 基于ACM程序設(shè)計競賽的常規(guī)教學(xué)改革[J]. 電氣電子教學(xué)學(xué)報, 2011(6): 18-21.
[5]嚴(yán)宣輝, 郭躬德. 計算機科學(xué)與技術(shù)專業(yè)工程實踐能力培養(yǎng)模式的探索[J]. 福建師范大學(xué)學(xué)報(自然科學(xué)版), 2011(3): 12-15.