劉嘉 趙宏
[摘 要] 程序設(shè)計(jì)是大學(xué)生必須掌握的基本技能,但受限于總學(xué)時(shí)和專業(yè)知識(shí)的學(xué)習(xí),高校無法在學(xué)生程序設(shè)計(jì)技能培養(yǎng)方面開設(shè)大量課程來提高學(xué)生的程序設(shè)計(jì)能力。以組織學(xué)生參加“天梯賽”程序設(shè)計(jì)大賽為例,從“天梯賽”賽制和考查的知識(shí)點(diǎn)出發(fā),論述學(xué)生通過程序設(shè)計(jì)基礎(chǔ)課、計(jì)算機(jī)專業(yè)課和賽前強(qiáng)化訓(xùn)練等環(huán)節(jié)覆蓋“天梯賽”考查的知識(shí)點(diǎn),提升學(xué)生程序設(shè)計(jì)能力的過程。最后以成績優(yōu)秀參賽隊(duì)員的畢業(yè)去向,說明“天梯賽”對(duì)程序設(shè)計(jì)類課程的教學(xué)和學(xué)生編程能力提升所帶來的正面影響。
[關(guān)鍵詞] 計(jì)算機(jī)教學(xué);程序設(shè)計(jì);“天梯賽”;數(shù)據(jù)結(jié)構(gòu);算法設(shè)計(jì)
[基金項(xiàng)目] 2021年度蘭州理工大學(xué)高教研究項(xiàng)目“以競賽促進(jìn)學(xué)生程序設(shè)計(jì)能力的探索”(GJ2021C-12)
[作者簡介] 劉 嘉(1976—),女,寧夏銀川人,計(jì)算機(jī)應(yīng)用技術(shù)碩士,蘭州理工大學(xué)計(jì)算機(jī)與通信學(xué)院講師,主要從事操作系統(tǒng)與人工智能研究研究;趙 宏(1971—),男,甘肅西和人,計(jì)算機(jī)應(yīng)用技術(shù)博士,蘭州理工大學(xué)計(jì)算機(jī)與通信學(xué)院教授,主要從事高性能計(jì)算與嵌入式系統(tǒng)研究。
[中圖分類號(hào)] G642.0 [文獻(xiàn)標(biāo)識(shí)碼] A [文章編號(hào)] 1674-9324(2023)32-0162-05 [收稿日期] 2022-06-29
一、“天梯賽”賽制介紹
教育部2021年頒布的“全國普通高校大學(xué)生競賽榜單”中有三個(gè)程序設(shè)計(jì)類競賽,分別是ACM-ICPC國際大學(xué)生程序設(shè)計(jì)競賽、中國高校計(jì)算機(jī)大賽-團(tuán)體程序設(shè)計(jì)天梯賽和藍(lán)橋杯全國軟件和信息技術(shù)專業(yè)人才大賽。其中的“天梯賽”是較晚成立的比賽,2022年是第七屆。近年來,“天梯賽”參賽人數(shù)快速增加,2019年參賽人數(shù)為7 603人,到2022年人數(shù)達(dá)到14 180人,四年間人數(shù)增長近一倍[1],由此可見,“天梯賽”在高校中的影響力不斷提升,吸引了越來越多的學(xué)生參加。究其原因,與“天梯賽”的賽制有關(guān),“天梯賽”以團(tuán)隊(duì)整體成績?yōu)榕琶罁?jù),考核學(xué)校整體的程序設(shè)計(jì)水平。通過參賽學(xué)生的成績,可以評(píng)估學(xué)生所在學(xué)校的計(jì)算機(jī)教學(xué)水平。
二、“天梯賽”賽題知識(shí)點(diǎn)剖析
(一)題目難易結(jié)合,知識(shí)點(diǎn)覆蓋全面
ACM進(jìn)入中國已有二十年,很多學(xué)校在將ACM與課程結(jié)合上已經(jīng)累積了很多經(jīng)驗(yàn),王宏在文獻(xiàn)[2]介紹了清華大學(xué)利用ACM“賽課結(jié)合”在計(jì)算機(jī)教學(xué)上取得了很好的成績。李環(huán)[3]分析了當(dāng)前傳統(tǒng)教育出現(xiàn)的問題,然后探討了利用ACM競賽解決這些問題的方法。ACM的全英文題目以及高難度算法使得比賽的參賽門檻很高,獎(jiǎng)項(xiàng)基本被一些競賽強(qiáng)校所壟斷,普通高校很難取得好的成就。與ACM競賽相比,“天梯賽”的最大特點(diǎn)是由不同難度的題目組成。“天梯賽”題目按難易程度分為三個(gè)等級(jí),分別為L1、L2和L3。L1級(jí)為基礎(chǔ)級(jí),設(shè)8道題,其中5分、10分、15分、20分的題各2道,滿分為100分;L2級(jí)為進(jìn)階級(jí),設(shè)4道題,每道題25分,滿分為100分;L3為登頂級(jí),設(shè)3道題,每道題30分,滿分為90分。三個(gè)等級(jí)共15道題,滿分為290分。
從近幾年“天梯賽”的成績看,2019年至2021年度競賽中均沒有滿分選手,2022年競賽中出現(xiàn)1名滿分選手,說明“天梯賽”能夠?qū)Σ煌綄哟螌W(xué)生的程序設(shè)計(jì)能力進(jìn)行考查,客觀評(píng)價(jià)學(xué)校整體程序設(shè)計(jì)教學(xué)效果。如表1所示,從2020年至2022年比賽成績分布可以看出,參賽學(xué)生成績主要集中在100分~175分之間,這個(gè)區(qū)間的學(xué)生主要完成了基礎(chǔ)的L1級(jí)和部分L2級(jí)的題目。高于這個(gè)成績(大于175分)即可獲得除團(tuán)隊(duì)獎(jiǎng)外的國家級(jí)個(gè)人獎(jiǎng),個(gè)人獎(jiǎng)的獲獎(jiǎng)比例大約在20%到30%之間,符合高水平人才分布的規(guī)律。
(二)考核知識(shí)點(diǎn)全面
“天梯賽”題目分為三級(jí),知識(shí)點(diǎn)覆蓋了高級(jí)語言、數(shù)據(jù)結(jié)構(gòu)和算法設(shè)計(jì)。如表2所示,L1級(jí)的題目基本不涉及算法,5分和10分題目為最簡單的基礎(chǔ)題,知識(shí)點(diǎn)為基本輸入輸出、表達(dá)式和簡單的分支結(jié)構(gòu);15分和20分的題目也是基礎(chǔ)題,但解題需要具有一定編程技巧,知識(shí)點(diǎn)多為選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、數(shù)組、字符串等,其中字符串類型在這一級(jí)中屬于較難的題目,曾出現(xiàn)過只有1%的選手獲得滿分的情況。L2級(jí)題目共有4道題,每題25分,滿分100分,這4道題主要考查數(shù)據(jù)結(jié)構(gòu)的內(nèi)容,包括堆棧、二叉樹、圖等基本的數(shù)據(jù)結(jié)構(gòu),排序、最短路徑等算法,解答這些題目需要學(xué)生具有較好的算法設(shè)計(jì)能力。L3級(jí)題目有3道題,每題30分,滿分90分,這部分題目可以選拔出頂級(jí)選手,題目包括數(shù)論、圖論、動(dòng)態(tài)規(guī)劃、高級(jí)搜索等算法設(shè)計(jì)類題目,需要選手具有較強(qiáng)的分析問題能力以及快速編程能力才能獲得分?jǐn)?shù)。
(三)專業(yè)覆蓋面廣,參與人數(shù)多
“天梯賽”題目難度具有坡度,與ACM相比參加門檻較低,使得很多對(duì)程序設(shè)計(jì)競賽感興趣的學(xué)生可以參加,尤其是非計(jì)算機(jī)專業(yè)學(xué)生,可以通過參加“天梯賽”鍛煉自己,提高程序設(shè)計(jì)水平。根據(jù)統(tǒng)計(jì),2019年參加“天梯賽”的學(xué)生專業(yè)數(shù)量為182個(gè),到2022年增加到270個(gè)。參賽專業(yè)數(shù)量的增加,說明“天梯賽”給各個(gè)專業(yè)的學(xué)生提供了一個(gè)學(xué)習(xí)平臺(tái),吸引更多學(xué)生參與,同時(shí),也說明“天梯賽”在高校中的影響力逐年擴(kuò)大。
三、學(xué)校課程對(duì)“天梯賽”的支撐
“天梯賽”試題分為L1、L2和L3三個(gè)等級(jí),分別面向程序設(shè)計(jì)的初級(jí)、進(jìn)階級(jí)和高級(jí)三個(gè)階段。我校開設(shè)的課程能夠部分覆蓋“天梯賽”的知識(shí)點(diǎn)。
(一)初級(jí)L1
“天梯賽”初級(jí)L1可以使用的語言有C、C++、Java和Python,大部分高校至少開設(shè)其中一門語言課程。以我校C語言為例分析程序設(shè)計(jì)課程對(duì)“天梯賽”的支撐:“C語言程序設(shè)計(jì)”課程開設(shè)在大一第一學(xué)期,課程目標(biāo)是通過學(xué)習(xí)C語言基本語法,使學(xué)生掌握利用計(jì)算機(jī)科學(xué)求解各學(xué)科問題的一般方法,具備高級(jí)語言程序設(shè)計(jì)能力,C語言課程的主要知識(shí)點(diǎn)如表3所示;“天梯賽”從2019年到2022年L1級(jí)共有32題,大部分全部為C語言的前5個(gè)知識(shí)點(diǎn);只有字符串不屬于C語言基本知識(shí)點(diǎn),但是字符串操作是C語言考試中常見考點(diǎn),因?yàn)閷?duì)字符串操作需要使用輸入輸出、循環(huán)結(jié)構(gòu)、數(shù)組操作等知識(shí),屬于C語言中較難的內(nèi)容;因?yàn)長1題目考核點(diǎn)在高級(jí)語言程序設(shè)計(jì),沒有涉及復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和算法,所以大部分學(xué)生在L1級(jí)的通過率很高。
(二)進(jìn)階級(jí)L2
L2級(jí)難度高于L1級(jí),除了需要學(xué)生具有較強(qiáng)的編程能力外,還需要具有一定的數(shù)據(jù)結(jié)構(gòu)知識(shí),能夠使用經(jīng)典算法解決問題。如表4所示,進(jìn)階級(jí)L2的知識(shí)點(diǎn)主要包含在“算法與數(shù)據(jù)結(jié)構(gòu)”課程中,例如一些復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和經(jīng)典算法。從近四年的“天梯賽”題目可見學(xué)生學(xué)習(xí)“算法與數(shù)據(jù)結(jié)構(gòu)”后即可獲得L2級(jí)所需的知識(shí)點(diǎn),但是2020年到2022年,L2得分超過75分(滿分100分)的人數(shù)分別約占30%、40%和10%,所以只是學(xué)習(xí)基本概念,還是無法正確解題。
(三)高級(jí)L3
“天梯賽”稱L3級(jí)為登頂級(jí),因?yàn)檫@一級(jí)的題目基本是程序設(shè)計(jì)競賽中最難的題目。L3級(jí)有3道題,2019年到2021年最后一題沒有得滿分的選手,L3的3道題得分率均低于3%,可見題目難度很高。L3級(jí)題目主要是一些復(fù)雜算法,例如2020年“天梯賽”有快速排序和圖的深度優(yōu)先搜索,2021年有字符串的模式匹配和快速排序。另外,L3中還會(huì)出現(xiàn)數(shù)論或組合論相關(guān)的題目,通常設(shè)置在最后一題,得分率不足0.5%,說明學(xué)生的數(shù)學(xué)相關(guān)知識(shí)不足。因?yàn)椤疤焯葙悺笔莻€(gè)人獨(dú)立完成比賽,計(jì)算機(jī)專業(yè)的學(xué)生沒有相關(guān)數(shù)學(xué)知識(shí)背景,無法完成與數(shù)學(xué)有關(guān)的題目;而數(shù)學(xué)專業(yè)的學(xué)生程序設(shè)計(jì)水平無法支撐其完成L3級(jí)的題目。這也是“天梯賽”很難有學(xué)生獲得滿分的原因。
四、“天梯賽”強(qiáng)化訓(xùn)練對(duì)課程知識(shí)的補(bǔ)充
(一)“天梯賽”對(duì)程序設(shè)計(jì)能力的提升
程序設(shè)計(jì)能力是計(jì)算機(jī)類專業(yè)學(xué)生的基本能力,也是檢驗(yàn)計(jì)算機(jī)類畢業(yè)生是否合格的基本標(biāo)準(zhǔn)[4]。程序是系統(tǒng)軟件和應(yīng)用軟件的本體,程序設(shè)計(jì)課程旨在訓(xùn)練學(xué)生的分析和解決問題能力、計(jì)算思維能力、軟件工程能力、團(tuán)隊(duì)協(xié)作能力等[5]。培養(yǎng)學(xué)生程序設(shè)計(jì)能力是高級(jí)程序設(shè)計(jì)語言課程的主要目標(biāo),通常程序設(shè)計(jì)語言課程開設(shè)在低年級(jí),學(xué)生還沒有學(xué)習(xí)專業(yè)課程,計(jì)算機(jī)基礎(chǔ)較差,所以設(shè)計(jì)合理的教學(xué)方法可以幫助學(xué)生更好地學(xué)習(xí)程序設(shè)計(jì)。
傳統(tǒng)程序設(shè)計(jì)語言課程的教學(xué)是以語法為中心,學(xué)生學(xué)習(xí)的重點(diǎn)是如何使用語法。這種教學(xué)方式忽略了程序設(shè)計(jì)能力的關(guān)鍵是要建立計(jì)算機(jī)思維方式,學(xué)習(xí)的是使用計(jì)算機(jī)解決問題的方法。2022年“天梯賽”L1-3“誰能進(jìn)圖書館”是一道10分的題目,分?jǐn)?shù)設(shè)置可見組委會(huì)認(rèn)為題目不難,但是很多能做出30分題目的選手這道題卻沒有得到滿分。這道題考核的是if-else語句的使用,只需要列出所有可能的條件,每個(gè)條件由一個(gè)if-else輸出即可。但是只需要使用簡單的語法,卻為什么會(huì)讓很多優(yōu)先選手在這里失分呢?原因是選手分析問題時(shí)沒有列出所有的情況。很多選手是從給出的數(shù)據(jù)出發(fā),考慮輸入的4個(gè)整數(shù)組合的所有條件,稍有不慎就會(huì)丟失一個(gè)條件,或條件重復(fù),導(dǎo)致某個(gè)測試點(diǎn)無法通過。這道題應(yīng)該采用逆向思維,從結(jié)果出發(fā)去推導(dǎo)出條件。這道題可能的結(jié)果有三個(gè),即:①2人全部可以進(jìn)入;②2人全部不可以進(jìn)入;③1人可以進(jìn)入1人不可以進(jìn)入。其中結(jié)果①只有一個(gè)條件,結(jié)果②有2個(gè)條件,結(jié)果③有3個(gè)條件,如表5所示。學(xué)習(xí)程序設(shè)計(jì)的關(guān)鍵不是語法怎樣使用,而是怎樣用程序解決問題。為了讓學(xué)生在學(xué)習(xí)中能夠?qū)W(xué)習(xí)的重點(diǎn)從語法轉(zhuǎn)向解決問題,在教學(xué)中可以采用任務(wù)驅(qū)動(dòng)教學(xué)法[6]或案例教學(xué)法[7],“天梯賽”的賽題非常適合作為案例進(jìn)行講解。
(二)“天梯賽”對(duì)算法設(shè)計(jì)能力的培養(yǎng)
算法是程序的靈魂,關(guān)系到程序的運(yùn)行效率,常應(yīng)用于人工智能、操作系統(tǒng)、數(shù)據(jù)庫、計(jì)算機(jī)網(wǎng)絡(luò)等方向,是計(jì)算機(jī)解決復(fù)雜工程問題的關(guān)鍵因素。經(jīng)過計(jì)算機(jī)行業(yè)幾十年的發(fā)展,經(jīng)典算法已有一百多種,算法競賽不是讓選手當(dāng)場設(shè)計(jì)一個(gè)新的算法,而是應(yīng)用已有算法完成特定問題的求解,同時(shí)還要滿足一些限制條件,例如時(shí)間和空間的限制。所以在競賽中要在很短的時(shí)間內(nèi)選擇合適的算法,然后使用算法求解題目,對(duì)選手綜合素質(zhì)有很高要求,選手必須熟練掌握大量經(jīng)典算法,才可做出正確選擇。
2022年“天梯賽”L2-4“大眾情人”,大部分學(xué)生在正確理解了題意后,能夠明白一個(gè)人的異性感就是距離最遠(yuǎn)的異性到你的距離,所以題目實(shí)際是要求最短路徑。在“算法與數(shù)據(jù)結(jié)構(gòu)”課程中求最短路徑的算法一般是Dijkstra算法,而本題中如果采用Dijkstra算法會(huì)導(dǎo)致超時(shí),題目要求的是多源點(diǎn)的最短路徑,所以應(yīng)該使用Floyd算法。很多選手卡在這道題,因?yàn)榻滩臎]有講到Floyd算法,選手熟悉的是Dijkstra算法。由于課堂教學(xué)學(xué)時(shí)有限,“算法與數(shù)據(jù)結(jié)構(gòu)”課程能夠講解的算法大概有30個(gè)左右,但是算法關(guān)系到程序設(shè)計(jì)運(yùn)行的準(zhǔn)確性和效率,掌握的算法數(shù)量也是衡量一個(gè)程序員能力強(qiáng)弱的重要標(biāo)準(zhǔn),所以很多學(xué)生會(huì)在課堂之外努力學(xué)習(xí)新的算法,“天梯賽”的訓(xùn)練就可以補(bǔ)充這部分課堂缺失的內(nèi)容,而且大量訓(xùn)練也可幫助學(xué)生提高程序設(shè)計(jì)能力。
五、我校近三年“天梯賽”成績和參賽隊(duì)員的去向
我校每年為“天梯賽”組建的團(tuán)隊(duì)有50人左右,參加“天梯賽”的隊(duì)伍有4~5隊(duì),排名取成績最好的三支隊(duì)伍的成績。2020年我校在“天梯賽”華山論劍賽道排名甘肅省高校第二名,2021年和2022年均在華山論劍賽道獲得甘肅省高校特等獎(jiǎng)。還有5人次在比賽中獲得國家級(jí)獎(jiǎng)項(xiàng)。
參加“天梯賽”的學(xué)生經(jīng)過三年的訓(xùn)練,均有較高的程序設(shè)計(jì)能力,畢業(yè)時(shí)無論是繼續(xù)學(xué)習(xí)還是工作都比較受歡迎。我校2017級(jí)到2018級(jí)共有23名“天梯賽”隊(duì)員畢業(yè),其中保研9名,考研4名,其余隊(duì)員均在秋招即簽約工作,平均薪金遠(yuǎn)高于普通學(xué)生。
結(jié)語
程序設(shè)計(jì)競賽在我國已經(jīng)開展二十余年,“天梯賽”也已經(jīng)舉辦7屆,參加“天梯賽”的學(xué)校從最初只有發(fā)達(dá)地區(qū)的重點(diǎn)院校發(fā)展到全國近兩百所學(xué)校。之所以“天梯賽”會(huì)在高校迅速推廣開,主要是我國經(jīng)濟(jì)發(fā)展從高速發(fā)展階段轉(zhuǎn)向高質(zhì)量發(fā)展階段,需要的人才也從數(shù)量的需求轉(zhuǎn)換為質(zhì)量的需求,這對(duì)高校提出了更高的要求。各個(gè)高校也在不斷探索新的教學(xué)方法,提高教學(xué)質(zhì)量,培養(yǎng)更具有時(shí)代特色的高素質(zhì)人才?!疤焯葙悺币约捌渌某绦蛟O(shè)計(jì)類競賽就是在計(jì)算機(jī)中探索出的一種有效的方法,一方面學(xué)校不斷提供各種資源促進(jìn)學(xué)校競賽的發(fā)展,鼓勵(lì)學(xué)生參加各種競賽;另一方面,通過競賽使學(xué)生綜合素質(zhì)得到提高。但是由于各個(gè)學(xué)校的生源不同,教學(xué)方式不同,如何結(jié)合學(xué)校特點(diǎn),發(fā)揮競賽優(yōu)勢,設(shè)計(jì)適合學(xué)生特點(diǎn)的教學(xué)模式,是每個(gè)高校都在研究的問題。
參考文獻(xiàn)
[1]競賽組委會(huì).“中國高校計(jì)算機(jī)大賽:團(tuán)體程序設(shè)計(jì)天梯賽”數(shù)據(jù)一覽[EB/OL].https://gplt.patest.cn/notification.
[2]王宏,吳文虎.清華實(shí)踐教學(xué)“賽課結(jié)合”新思路[J].計(jì)算機(jī)教育,2006(7):10-12.
[3]李環(huán).基于ACM競賽的程序設(shè)計(jì)類課程教學(xué)改革研究[J].計(jì)算機(jī)教育,2016(3):115-118.
[4]周榮輝,郝曉楓,趙宏宇.學(xué)生程序設(shè)計(jì)能力培養(yǎng)的思考[J].吉林大學(xué)學(xué)報(bào)(信息科學(xué)版),2005(S2):122-126.
[5]李環(huán).基于ACM競賽的程序設(shè)計(jì)類課程教學(xué)改革研究[J].計(jì)算機(jī)教育,2016(3):115-118.
[6]曹文平,寧彬.任務(wù)驅(qū)動(dòng)+過程反饋的Java教學(xué)方法研究[J].教育教學(xué)論壇,2021(4):165-168.
[7]劉國英,王煜龍,陳雙浩.數(shù)據(jù)結(jié)構(gòu)案例教學(xué):二叉樹在圖像分割中的應(yīng)用[J].安陽師范學(xué)院學(xué)報(bào),2016(2):128-131.
Promoting Teaching and Learning Through Competition: Analysis on the Influence of “Ladder Competition” on the Improvement of Students Programming Ability
LIU Jia, ZHAO Hong
(School of Computer and Communication, Lanzhou University of Technology, Lanzhou,
Gansu 730050, China)
Abstract: Programming is a basic skill that college students must master. However, limited by the total class hours and professional knowledge, colleges and universities cannot offer a large number of courses in the training of students programming skills to improve their programming ability. Taking organizing students to participate in the Ladder Program Design Competition as an example, starting from the knowledge points of the Ladder Competition system and examination, this paper discusses the process of covering the knowledge points of ladder competition investigation and improving students program design ability through the basic courses of program design, computer courses and pre competition intensive training. Finally, with the graduation destination of the excellent contestants, it shows the positive impact of the Ladder Competition on the teaching of programming courses and the improvement of students programming ability.
Key words: computer teaching; program design; Ladder Competition; data structure; algorithm design