袁國武,岳 昆,楊旭濤,王 津,薛志敏,譚明川
(云南大學(xué)信息學(xué)院,云南昆明 650504)
計算機(jī)相關(guān)專業(yè)作為實(shí)踐性很強(qiáng)的工科專業(yè),程序設(shè)計能力是衡量畢業(yè)生質(zhì)量的核心指標(biāo),是影響學(xué)生今后發(fā)展的一項重要技能[1-2]。計算機(jī)專業(yè)學(xué)生需要熟練掌握程序設(shè)計、數(shù)據(jù)結(jié)構(gòu)以及算法基本知識,能夠選用合適的編程語言,準(zhǔn)確、熟練地完成給定問題的編程和調(diào)試工作,實(shí)現(xiàn)程序預(yù)期目標(biāo)。計算機(jī)專業(yè)作為當(dāng)前“新工科”建設(shè)的最重要專業(yè)之一,隨著人工智能國家戰(zhàn)略和“互聯(lián)網(wǎng)+”行動計劃等的不斷推進(jìn),數(shù)據(jù)密集型科學(xué)研究范式廣泛應(yīng)用,國家治理、科學(xué)研究、技術(shù)研發(fā)、公眾生活等各個領(lǐng)域幾乎都離不開計算機(jī)技術(shù)的有力支撐。
然而,當(dāng)前的程序設(shè)計相關(guān)課程考核通常以筆試為主,國家人力資源和社會保障部、工業(yè)和信息化部開展的傳統(tǒng)的計算機(jī)技術(shù)與軟件專業(yè)技術(shù)資格(水平)考試[3](原稱中國計算機(jī)軟件專業(yè)技術(shù)資格和水平考試)也完全以筆試為主,注重基本概念,用卷面考試某些知識點(diǎn),缺乏上機(jī)編程調(diào)試能力測試,導(dǎo)致出現(xiàn)高分低能現(xiàn)象:卷面成績很好,但實(shí)際上機(jī)編程能力很差。另外,研究生入學(xué)考試中,考核的數(shù)據(jù)結(jié)構(gòu)、程序設(shè)計、算法設(shè)計與分析等科目,也大多以筆試為主。盡管部分院校復(fù)試中加入了上機(jī)測試,但是絕大部分高校的計算機(jī)專業(yè)要通過此過程選拔出編程能力優(yōu)秀的學(xué)生仍不容易。部分考研學(xué)生甚至在大三、大四放棄了上機(jī)編程實(shí)踐,把精力全部投入考研科目知識點(diǎn)復(fù)習(xí)中。云南大學(xué)計算機(jī)專業(yè)研究生招生中,曾出現(xiàn)多例初試分?jǐn)?shù)高但從未編過程序的考生,這些考生基本不具備計算機(jī)專業(yè)的工程素養(yǎng),也缺乏程序設(shè)計的邏輯思維能力,給后續(xù)培養(yǎng)帶來極大困難。
根據(jù)教育部專業(yè)目錄[4]和相關(guān)數(shù)據(jù)統(tǒng)計,2019 年全國高校有專業(yè)代碼0809 開頭的計算機(jī)類專業(yè)點(diǎn)3 736 個,在校學(xué)生約150 萬人,在所有專業(yè)中排名第一。根據(jù)國家統(tǒng)計局公布數(shù)據(jù),IT 行業(yè)年平均工資2017 年為130 366 元,2018 年為141 962 元,2019 年為161 352 元,畢業(yè)生待遇多年穩(wěn)居榜首。但是,計算機(jī)專業(yè)整體就業(yè)率沒有處在絕對領(lǐng)先地位,部分省份計算機(jī)類專業(yè)就業(yè)率甚至被亮黃牌。一方面計算機(jī)專業(yè)學(xué)生對就業(yè)的期望很高,另一方面不少企事業(yè)單位找不到滿意的計算機(jī)專業(yè)畢業(yè)生。就業(yè)單位問卷調(diào)查顯示,原因主要是畢業(yè)生動手能力不強(qiáng),程序設(shè)計、軟件開發(fā)能力嚴(yán)重不足,達(dá)不到用人單位要求。因此,如何真正提高計算機(jī)專業(yè)學(xué)生程序設(shè)計實(shí)踐能力,成為計算機(jī)專業(yè)本科學(xué)生培養(yǎng)的關(guān)鍵問題。
近年來,很多高校開展改革實(shí)踐以提高計算機(jī)專業(yè)學(xué)生程序設(shè)計能力,主要包括:廣州中醫(yī)藥大學(xué)譚定英等[5]提出依托程序設(shè)計建設(shè)課程群,利用課程群教學(xué)平臺提高學(xué)生編程實(shí)踐能力;貴州師范學(xué)院向程冠等[6]在數(shù)據(jù)結(jié)構(gòu)課程教學(xué)中使用Online Judge 系統(tǒng),有效提高學(xué)生的編程水平;中南林業(yè)科技大學(xué)肖卓宇等[7]改革以人才培養(yǎng)為目標(biāo)的教學(xué)方案,提升大學(xué)生程序設(shè)計實(shí)踐能力;許昌學(xué)院王亞[8]通過調(diào)整課程內(nèi)容的先后次序,將設(shè)計項目與課程內(nèi)容緊密結(jié)合,將實(shí)踐考核加入到最終考核中,以此提高學(xué)生程序設(shè)計能力;山東理工大學(xué)張先偉等[9]提出一種以競賽促進(jìn)教學(xué)、以教學(xué)帶動競賽的競教相長為特色的程序設(shè)計能力培養(yǎng)模式;湖北工業(yè)大學(xué)王春枝等[10]提出課程整合和強(qiáng)化實(shí)踐等一系列方法與措施,用以改進(jìn)程序設(shè)計能力培養(yǎng)模式;浙江師范大學(xué)韓建民等[11]提出“教學(xué)—訓(xùn)練—競賽一體化”程序設(shè)計能力培養(yǎng)體系;云南大學(xué)袁國武等[12]通過引入課程群分類培養(yǎng)、校企合作協(xié)同育人、計算機(jī)職業(yè)資格認(rèn)證、校內(nèi)實(shí)習(xí)基地和創(chuàng)新基地建設(shè)等策略,進(jìn)行計算機(jī)科學(xué)與技術(shù)卓越人才培養(yǎng),提高學(xué)生的編程能力;北京信息科技大學(xué)李淑琴等[13]利用任務(wù)驅(qū)動實(shí)踐法將總目標(biāo)分解到各個課程實(shí)踐任務(wù)中,通過層次、遞進(jìn)式地完成具體任務(wù),達(dá)到培養(yǎng)學(xué)生編程能力的目的。
程序設(shè)計能力培養(yǎng)是一個循序漸進(jìn)的過程,云南大學(xué)計算機(jī)科學(xué)與技術(shù)專業(yè)從程序設(shè)計類課程建設(shè)、程序設(shè)計能力認(rèn)證、程序設(shè)計類競賽3 方面做了相關(guān)工作:①在程序設(shè)計類課程安排上,確保大一到大三上機(jī)編程考核不間斷;②在程序設(shè)計能力認(rèn)證上,確保每位學(xué)生都能在中國計算機(jī)學(xué)會軟件能力認(rèn)證考試(CCF CSP)中取得一定成績;③在程序設(shè)計類競賽上,鼓勵本科生至少參加一次程序設(shè)計競賽。
本文從課程、認(rèn)證、競賽3 個層面構(gòu)建“立體式”和“正反饋”的云南大學(xué)計算機(jī)專業(yè)程序設(shè)計類課程體系,延伸程序設(shè)計課程課堂教學(xué)鏈條,拓展了程序設(shè)計能力提升渠道,夯實(shí)了程序設(shè)計能力培養(yǎng)基礎(chǔ),實(shí)施效果良好。
針對計算機(jī)科學(xué)與技術(shù)專業(yè)能力培養(yǎng)目標(biāo),結(jié)合工程教育認(rèn)證要求,確立程序設(shè)計類課程群總體目標(biāo)。重新梳理該類課程之間的關(guān)系,形成遞進(jìn)式、層次化的程序設(shè)計能力培養(yǎng)課程教學(xué)體系。
在前3 年,保證每學(xué)期至少有1 門程序設(shè)計類必修課程,使學(xué)生編程不間斷。從第3 學(xué)期開始,逐漸加入程序設(shè)計類選修課程,學(xué)生根據(jù)自己的興趣愛好進(jìn)行選擇。從第5 學(xué)期開始綜合實(shí)踐類課程,進(jìn)行科研訓(xùn)練、創(chuàng)新實(shí)驗、畢業(yè)實(shí)習(xí)、畢業(yè)設(shè)計等提升學(xué)生的綜合能力,這些環(huán)節(jié)都涉及編程環(huán)節(jié)。在專業(yè)實(shí)習(xí)中安排一些企業(yè)課程,利用第6 學(xué)期期末考試完成后、暑假開始前兩周集中開展專業(yè)實(shí)習(xí)。最近兩年實(shí)施的云計算、大數(shù)據(jù)、路由與交換等基本是華為企業(yè)課程,華為工程師到校兩周,開展約80 課時的校內(nèi)專業(yè)實(shí)習(xí)實(shí)訓(xùn),之后參加華為相關(guān)認(rèn)證。
《程序設(shè)計能力測試》要求每位學(xué)生的中國計算機(jī)學(xué)會計算機(jī)軟件能力認(rèn)證(CCF CSP)成績達(dá)到當(dāng)年學(xué)院規(guī)定的基本合格線,或通過全國計算機(jī)技術(shù)與軟件專業(yè)技術(shù)資格(水平)考試程序員或軟件設(shè)計師級別,才可取得該課程學(xué)分。
在云南大學(xué)計算機(jī)科學(xué)與技術(shù)專業(yè)培養(yǎng)方案中,程序設(shè)計類相關(guān)課程分為必修、選修、綜合實(shí)踐3 大類,其中,必修和綜合實(shí)踐類每位學(xué)生都需要修讀,選修類修讀課程不一樣,但是要達(dá)到選修課的最低學(xué)分要求。3 大類程序設(shè)計相關(guān)課程見表1。
通過這些課程安排,保證學(xué)生在4 年本科學(xué)習(xí)過程中不斷進(jìn)行編程訓(xùn)練,持續(xù)提高編程能力。通過程序設(shè)計能力測試課程考核,用第三方標(biāo)準(zhǔn)強(qiáng)制要求學(xué)生達(dá)到一定的程序設(shè)計能力。
表1 程序設(shè)計相關(guān)課程安排
程序設(shè)計類實(shí)驗教學(xué)中,任課教師人工逐一檢查學(xué)生代碼工作量大、效率低,且無法檢查代碼抄襲情況。有時同一題目的代碼在班級有幾個版本,多數(shù)學(xué)生拷貝別人的代碼應(yīng)付老師檢查,嚴(yán)重危害學(xué)生動手能力培養(yǎng)。
系統(tǒng)代碼自動查重、自動評分是一種很好的方法?;ヂ?lián)網(wǎng)上已經(jīng)有一些免費(fèi)的程序設(shè)計在線判題系統(tǒng),但鑒于系統(tǒng)使用權(quán)限、資源管理模式、安全隱私保護(hù)等因素,這類系統(tǒng)仍不能有效用于教學(xué)。對此,借鑒GitHub 思想,本文搭建了程序設(shè)計類課程網(wǎng)絡(luò)教學(xué)平臺,既有教學(xué)組織管理功能,也有開源程序持續(xù)集成模塊。在該平臺上,任課教師可以新建課程,在課程下新建編程實(shí)驗題目和測試用例,導(dǎo)入學(xué)生信息,學(xué)生登錄后,按照要求完成相應(yīng)的編程題目。代碼提交后,系統(tǒng)進(jìn)行代碼查重,自動編譯運(yùn)行,用測試用例判斷程序的對錯和效率。按照運(yùn)行對錯、時間空間效率給出提交代碼的測試分?jǐn)?shù)、班級排名等。任課教師可以查看學(xué)生提交代碼的次數(shù)、得分、代碼重復(fù)比例以及哪位同學(xué)重復(fù)等信息。
通過該平臺,任課教師可以客觀、準(zhǔn)確地了解每位學(xué)生的編程情況,并且實(shí)驗課不受時間空間限制,代碼和案例日益豐富完善,學(xué)生只需具有計算機(jī)和網(wǎng)絡(luò)就可以“零安裝”方式使用,實(shí)時提交代碼并自動進(jìn)行版本管理,且知道代碼對錯、效率高低、班級排名,極大提高了學(xué)生編程熱情。
之前課程期末考核中,紙質(zhì)卷面成績占總成績的70%,實(shí)驗環(huán)節(jié)所占比例太低。本專業(yè)調(diào)整考核方式,主要舉措有:①部分實(shí)驗課程與理論課程分開,成為單獨(dú)的實(shí)驗課程,完全按照上機(jī)實(shí)踐情況考核,這些課程有計算機(jī)程序設(shè)計實(shí)驗、數(shù)據(jù)結(jié)構(gòu)實(shí)驗、計算機(jī)圖形學(xué)實(shí)驗、數(shù)據(jù)庫技術(shù)實(shí)驗、操作系統(tǒng)實(shí)驗、軟件工程實(shí)習(xí)等;②將課程申請為考試改革課程,取消紙質(zhì)試卷考核,加大實(shí)驗課程比例,如數(shù)學(xué)建模與實(shí)驗、Web 應(yīng)用軟件開發(fā)實(shí)訓(xùn)、大數(shù)據(jù)基礎(chǔ)、人工智能導(dǎo)論等。
通過搭建程序設(shè)計類課程網(wǎng)絡(luò)教學(xué)平臺,提高課程考核改革效率,更高效、準(zhǔn)確地考核學(xué)生程序設(shè)計能力,使學(xué)生具有計算機(jī)專業(yè)的工程實(shí)踐能力。
目前,國內(nèi)有知名度和影響力的在線考核編程能力的評價考試主要包括中國計算機(jī)學(xué)會主辦的計算機(jī)軟件能力認(rèn)證(Certified Software Professional,CSP)[14]和浙江大學(xué)主辦的計算機(jī)程序設(shè)計能力考試(Programming Ability Test,PAT)[15],兩者比較見表2。
表2 CSP 與PAT 比較
兩種認(rèn)證考試都著重考察分析解決問題和實(shí)際編程能力,科學(xué)評價計算機(jī)程序設(shè)計人才,相比傳統(tǒng)的計算機(jī)技術(shù)與軟件專業(yè)技術(shù)資格(水平)考試的紙質(zhì)測試方式,更能反映學(xué)生的實(shí)際動手能力。兩種認(rèn)證考試各有優(yōu)劣,都是國內(nèi)含金量高的程序設(shè)計認(rèn)證考試。
CSP 認(rèn)證共有5 個小題,每題100 分,總分500 分,難度依次增加,考試時間為4 小時,考察學(xué)生的基礎(chǔ)語言能力、簡單算法能力、結(jié)構(gòu)組織能力、模型構(gòu)建能力水平。
CSP 認(rèn)證考試在考生提交代碼后服務(wù)器僅保存源代碼,不作測評,考生不能實(shí)時得知自己的得分??荚嚱Y(jié)束后,考場服務(wù)器把考生源代碼上傳至中國計算機(jī)學(xué)會CSP認(rèn)證總服務(wù)器。首先,服務(wù)器會對所有考生源代碼進(jìn)行交叉查重,檢測是否有作弊抄襲行為。如果有作弊抄襲行為,將會公示這些考生信息,取消成績,并對認(rèn)證點(diǎn)進(jìn)行警告;然后,對交叉查重通過的代碼進(jìn)行成績評定。CSP 認(rèn)證的成績評測為黑盒測試,每道題目共有10 個測試點(diǎn),每個點(diǎn)各10 分。每位考生的代碼采用測試用例判斷程序輸出是否正確,通常每個題目有10 個測試用例,每個測試用例在規(guī)定的運(yùn)行時間和內(nèi)存占用空間內(nèi)輸出正確得10 分。
考生不知道這些測試用例,并且測試用例的考察邊界條件、數(shù)據(jù)規(guī)模也不同。如果考生的代碼在邊界設(shè)置上不嚴(yán)謹(jǐn),或者算法效率不高,就可能在一些測試用例上扣分。由于完全由服務(wù)器用測試用例驗證程序是否正確和高效,所以考生必須嚴(yán)格按照題目要求讀入數(shù)據(jù)和輸出結(jié)果。讀入數(shù)據(jù)錯誤或輸出格式錯誤,輸出多字符、少字符,與測試用例只要有差異均為0 分。
根據(jù)CSP 認(rèn)證技術(shù)委員會主席陳文光教授總結(jié),CSP認(rèn)證題難度描述[16]見表3。
表3 CSP 認(rèn)證各題難度描述
由于每次CSP 認(rèn)證題目不同,所以每次的平均分會有差異。近3 年來,在100-160 分之間波動。截至2019 年12 月,對已經(jīng)舉辦的前18 次CSP 認(rèn)證進(jìn)行成績分?jǐn)?shù)段統(tǒng)計[14],得到圖1。在前18 次CSP 認(rèn)證中,共有121 219 人次參加認(rèn)證,150-199 分?jǐn)?shù)段分布最多,約25%,其次是100-149 分?jǐn)?shù)段,約19%。300 分以上的考生約3%,所以取得CSP 認(rèn)證300 分以上的高分很不容易。
圖1 截至2019 年12 月前18 次CSP 認(rèn)證成績分?jǐn)?shù)段統(tǒng)計
云南大學(xué)信息學(xué)院與中國計算機(jī)學(xué)會合作,于2017年4 月引入計算機(jī)軟件能力認(rèn)證(CSP),為云南高校學(xué)生及企事業(yè)單位工作人員進(jìn)行認(rèn)證考點(diǎn),為云南大學(xué)計算機(jī)類6 個本科專業(yè)程序設(shè)計類課程的教學(xué)改革提供新方向,為云南大學(xué)20 余個開設(shè)程序設(shè)計類課程的學(xué)生提供檢驗編程能力的平臺,以此為突破口穩(wěn)步提高學(xué)生培養(yǎng)質(zhì)量。
在2017 版計算機(jī)科學(xué)與技術(shù)專業(yè)人才培養(yǎng)方案修訂中,本專業(yè)在綜合實(shí)踐模塊增加《程序設(shè)計能力測試》課程,要求每位學(xué)生的CSP 成績都要達(dá)到當(dāng)年學(xué)院規(guī)定的基本合格線,或通過全國計算機(jī)技術(shù)與軟件專業(yè)技術(shù)資格(水平)考試程序員或軟件設(shè)計師級別,才可取得該課程學(xué)分。通過該措施,保障畢業(yè)學(xué)生在程序設(shè)計能力上達(dá)到一定水平。通過CSP 認(rèn)證,還可拓展學(xué)生的就業(yè)渠道。
截至2019 年12 月,云南大學(xué)考點(diǎn)已經(jīng)開展8 次認(rèn)證,報名學(xué)生1 400 余人次,實(shí)際參加認(rèn)證學(xué)生1 100 余人次,具體統(tǒng)計數(shù)據(jù)見表5。云南大學(xué)計算機(jī)類專業(yè)計算機(jī)科學(xué)與技術(shù)、軟件工程、網(wǎng)絡(luò)工程、物聯(lián)網(wǎng)工程、智能科學(xué)與技術(shù)、信息安全、數(shù)字媒體技術(shù)均有學(xué)生參加考試,占據(jù)參加考試學(xué)生的90% 以上,電子類專業(yè)、數(shù)學(xué)類、物理類專業(yè)有少量學(xué)生報名參加。
2017 年開考的前兩次,由于學(xué)生不熟悉考試方式和題型,考點(diǎn)平均分及計算機(jī)科學(xué)與技術(shù)本科生平均分均不理想。本專業(yè)隨之在計算機(jī)科學(xué)與技術(shù)專業(yè)本科生課程中開展程序設(shè)計類課程建設(shè)與改革。
為檢驗改革效果,本考點(diǎn)從每次認(rèn)證報名學(xué)生中將計算機(jī)科學(xué)與技術(shù)專業(yè)本科生提取出來進(jìn)行比較。在2018年和2019 年認(rèn)證中,本專業(yè)多數(shù)學(xué)生CSP 認(rèn)證成績能夠達(dá)到100-250 分。在最近5 次認(rèn)證中,本專業(yè)本科生平均成績都超過了全國平均分。近兩次認(rèn)證的平均分比2017年平均成績提高了50 分以上,學(xué)生的程序設(shè)計能力明顯增強(qiáng)。
表4 云南大學(xué)考點(diǎn)8 次CSP 認(rèn)證成績對比與分析
云南大學(xué)由于組織CCF CSP 認(rèn)證考試成績突出,2018年5 月成為39 個首批CCF CSP 認(rèn)證授權(quán)掛牌單位之一,2018 年7 月和2019 年7 月先后兩次被授予CSP 認(rèn)證優(yōu)秀單位。CSP 認(rèn)證成績優(yōu)秀的幾十位學(xué)生,已經(jīng)收到與中國計算機(jī)學(xué)會有合作的10 余家著名IT 企業(yè)邀請,參加企業(yè)招聘、實(shí)習(xí),為就業(yè)打下了良好基礎(chǔ)。
為更好地調(diào)動學(xué)生參與程序設(shè)計熱情,同時配合學(xué)校第二課堂開展,本專業(yè)通過參加CSP 認(rèn)證和校級程序設(shè)計競賽選拔,提高程序設(shè)計能力。通過競賽達(dá)到以賽促練、以賽促學(xué)效果,具體流程見圖2。
圖2 通過CSP 選拔程序設(shè)計競賽學(xué)生流程
主要措施如下:
(1)學(xué)校層面設(shè)立專項支持程序設(shè)計類競賽。2019年,為了更好地推進(jìn)一流本科專業(yè)建設(shè),云南大學(xué)設(shè)立學(xué)科競賽支持項目,“程序設(shè)計類學(xué)科競賽”項目獲得批準(zhǔn)立項,用于組織實(shí)施云南大學(xué)相關(guān)專業(yè)的程序設(shè)計類學(xué)科競賽。
(2)依托信息學(xué)院組織云南大學(xué)程序設(shè)計競賽。在云南大學(xué)信息學(xué)院科技節(jié)開展期間,學(xué)院主辦了云南大學(xué)程序設(shè)計競賽,分為初賽和決賽。初賽參與人數(shù)達(dá)到200 多人,參與學(xué)生來自6 個學(xué)院、16 個專業(yè),從中挑選60 名學(xué)生參加決賽,共決出一、二、三等獎20 余名,學(xué)生獲得證書、獎金以及第二課堂學(xué)分獎勵。
(3)積極組織參加各類競賽并取得優(yōu)異成績。通過校賽和CSP 認(rèn)證,云南大學(xué)選拔了一批學(xué)生參加中國計算機(jī)學(xué)會大學(xué)生計算機(jī)系統(tǒng)與程序設(shè)計競賽(CCF CCSP)、“藍(lán)橋杯”全國軟件和信息技術(shù)專業(yè)人才大賽等競賽,取得優(yōu)異成績。2019 年5 月,云南大學(xué)學(xué)生獲得CCF 大學(xué)生計算機(jī)系統(tǒng)與程序設(shè)計競賽西南賽區(qū)冠軍和季軍(2 項金獎),2019 年10 月獲得全國總決賽銀獎,取得云南省在該項賽事的最好成績。此外,云南大學(xué)還計劃參加ACM 國際大學(xué)生程序設(shè)計競賽(ACM-ICPC)、中國高校計算機(jī)大賽—團(tuán)體程序設(shè)計天梯賽(CCCC)、中國大學(xué)生程序設(shè)計競賽(CCPC)等。
計算機(jī)專業(yè)作為實(shí)踐性很強(qiáng)的工科專業(yè),程序設(shè)計能力是計算機(jī)專業(yè)學(xué)生最重要的能力之一。本文以云南大學(xué)為例,總結(jié)了近年計算機(jī)科學(xué)與技術(shù)專業(yè)在程序設(shè)計類課程安排與改革、程序設(shè)計能力認(rèn)證、程序設(shè)計類競賽組織3 個方面的探索和實(shí)踐,這些改革取得了良好效果。
針對云南地方經(jīng)濟(jì)社會發(fā)展需求,立足云南大學(xué)師資、生源、資源等方面實(shí)際,以計算機(jī)科學(xué)與技術(shù)卓越人才培養(yǎng)體系建設(shè)為目標(biāo),本文總結(jié)了云南大學(xué)在提高本科生計算機(jī)專業(yè)程序設(shè)計能力方面的工作,可為同類高校提供參考與借鑒。