陶小梅++黎辛?xí)?/p>
摘 要:為培養(yǎng)學(xué)生較高水平的程序設(shè)計能力和創(chuàng)新能力,該文探討了將ACM競賽引入程序設(shè)計類課程教學(xué)的方法,以ACM賽題為案例,驅(qū)動理論課講授,培養(yǎng)學(xué)生的抽象建模思維和邏輯思維,通過使用ACM在線評判系統(tǒng)OJ,將教學(xué)實踐環(huán)節(jié)從實驗課堂延伸到課外,加強(qiáng)學(xué)生在綜合運(yùn)用知識解決實際應(yīng)用問題方面的編程訓(xùn)練。
關(guān)鍵詞:ACM競賽 程序設(shè)計 教學(xué)教改
中圖分類號:TP3-4 文獻(xiàn)標(biāo)識碼:A 文章編號:1672-3791(2017)05(a)-0146-02
程序設(shè)計類課程是計算機(jī)專業(yè)人才培養(yǎng)計劃中一系列與程序設(shè)計相關(guān)的核心課程,主要有C語言程序設(shè)計、C++面向?qū)ο蟪绦蛟O(shè)計、Java程序設(shè)計、數(shù)據(jù)結(jié)構(gòu)和算法設(shè)計與分析等,一般以專業(yè)基礎(chǔ)課或?qū)I(yè)課的形式開設(shè)。程序設(shè)計類課程的教學(xué)效果,直接影響了人才培養(yǎng)目標(biāo)的實現(xiàn),在一定程度上決定了所培養(yǎng)的專業(yè)人才素質(zhì)水平的高低,因此,各個學(xué)校普遍都很重視程序設(shè)計類課程的教學(xué)和教學(xué)建設(shè)。
然而,程序設(shè)計類課程由于理論性和實踐性都比較強(qiáng)、學(xué)習(xí)難度大等特點,使得在教學(xué)過程中一直存在著較多的問題。一方面,程序設(shè)計教材偏重于語法和小型例題講解,使得學(xué)生在根據(jù)實際問題建立模型和設(shè)計算法方面的抽象思維訓(xùn)練不夠,很多學(xué)生能掌握程序設(shè)計的基本方法,但程序設(shè)計的水平并不高。另一方面,模塊式實驗項目的實踐環(huán)節(jié)設(shè)置,使學(xué)生在綜合運(yùn)用知識解決實際問題方面的鍛煉不足,加上實驗課時的限制,因練習(xí)和投入時間的不夠,也影響了學(xué)生程序設(shè)計能力的培養(yǎng)和提高。
在程序設(shè)計類課程教學(xué)中引入ACM競賽模式,可以彌補(bǔ)傳統(tǒng)教學(xué)方式的這些不足,促進(jìn)學(xué)生程序設(shè)計能力和創(chuàng)新能力的提高。
ACM / ICPC (Association for Computing Machinery / International Collegiate Programming Contest)國際大學(xué)生程序設(shè)計競賽,由計算機(jī)界具有悠久歷史的權(quán)威性組織機(jī)構(gòu)ACM學(xué)會主辦,是世界上公認(rèn)的規(guī)模最大、水平最高、參與人數(shù)最多的大學(xué)生程序設(shè)計類競賽[1]。
1 以ACM競賽題目驅(qū)動理論教學(xué)
首先,教師在課堂上將ACM賽事活動推介給學(xué)生。通過對競賽的了解、練習(xí)和參與,讓學(xué)生體會到學(xué)習(xí)的成就感,激發(fā)學(xué)生對程序設(shè)計的學(xué)習(xí)興趣和學(xué)習(xí)動機(jī),并且更明確課程的學(xué)習(xí)目標(biāo),以高水平的程序設(shè)計能力標(biāo)準(zhǔn)要求自己。
其次,教師在理論課授課時,引入ACM競賽內(nèi)容,可以挑選與授課內(nèi)容知識點相關(guān)的典型競賽題作為案例驅(qū)動教學(xué),進(jìn)行教學(xué)設(shè)計。ACM的賽題,題目類型廣泛,涉及的知識面相對較廣,一般是針對實際應(yīng)用問題而設(shè)計[2],有一定的問題背景描述,對算法和程序的要求隱藏在背景中,因此,需要對實際問題進(jìn)行分析建模,才能明確問題和梳理出算法思路。通過賽題的分析和算法設(shè)計過程的講解,引導(dǎo)學(xué)生在抽象思維方面的訓(xùn)練,使學(xué)生把程序設(shè)計學(xué)習(xí)的重點更多地放在分析問題、抽象建模和算法設(shè)計等方面,而不是僅僅關(guān)注語法的學(xué)習(xí)。
通過將典型競賽題目嵌入到理論教學(xué),既帶動相關(guān)語法的講解,也引導(dǎo)學(xué)生進(jìn)行抽象建模和邏輯思維方面的鍛煉。同時,以有實際問題背景的ACM賽題做授課案例,讓學(xué)生看到通過編程得到了實際問題的解決結(jié)果,看到了程序設(shè)計的廣闊應(yīng)用前景,增強(qiáng)了學(xué)生對它的學(xué)習(xí)興趣和學(xué)習(xí)動力,變被動學(xué)習(xí)為發(fā)自內(nèi)心的渴望求知的主動學(xué)習(xí)。
在作為教學(xué)案例的賽題選取上,一方面注重賽題的有趣性和實用性;另一方面,要注意題目對知識點的覆蓋,以及難度適中。應(yīng)當(dāng)選取中等難度或難度稍微偏上的例子,以此向?qū)W生展示,相對復(fù)雜問題的分析建模和算法設(shè)計過程,既強(qiáng)化學(xué)生在程序設(shè)計思維方面的訓(xùn)練,也激發(fā)學(xué)生的好奇心和挑戰(zhàn)困難的學(xué)習(xí)興趣。
除了抽象思維和邏輯思維方面的訓(xùn)練,也注意引導(dǎo)學(xué)生在猜想與驗證和逆向思維方面的訓(xùn)練。每道ACM賽題都有嚴(yán)格的題目形式,包括問題描述、輸入樣例和輸出樣例[2]。詳細(xì)的題目輸出樣例,方便用于向?qū)W生展示逆向思維的問題求解分析方法,引導(dǎo)學(xué)生可以根據(jù)輸出結(jié)果要求,逆向推理及猜想可能的算法,并對設(shè)計的算法進(jìn)行靜態(tài)運(yùn)行的結(jié)果驗證。這些都是高水平程序設(shè)計者需要鍛煉和培養(yǎng)的基本能力和素質(zhì),要在這方面對學(xué)生進(jìn)行引導(dǎo)和認(rèn)識上的意識強(qiáng)化。
2 以ACM在線系統(tǒng)競驅(qū)動實踐教學(xué)
程序設(shè)計類課程是實踐性較強(qiáng)的課程,一般都包括了一定學(xué)時的實驗課時。但傳統(tǒng)的基于單元知識點設(shè)計的實驗題目,在實際應(yīng)用價值、難度及綜合性等方面往往不夠,滿足不了一些基礎(chǔ)和水平較好的學(xué)生的學(xué)習(xí)需求,影響了學(xué)生在實踐環(huán)節(jié)高水平程序設(shè)計能力培養(yǎng)方面的鍛煉??梢詮腁CM題庫中選取難度各異、知識點相關(guān)的、有一定實際應(yīng)用價值的題目,讓學(xué)生上機(jī)時完成,以適應(yīng)不同層次水平的學(xué)生的需求。
再者,傳統(tǒng)模式的實驗課,學(xué)生練習(xí)成果的檢查對教師是個問題。傳統(tǒng)實驗課中,教師主要靠查看程序運(yùn)行結(jié)果和閱讀程序的方式檢查學(xué)生程序設(shè)計的正確性,不僅花費(fèi)時間大,而且由于思維慣性,容易導(dǎo)致誤判與參考答案不同的程序設(shè)計算法。針對這些問題,可以在實踐環(huán)節(jié)引入ACM的在線評判系統(tǒng)做實驗實訓(xùn)平臺。
ACM競賽經(jīng)過多年的發(fā)展,國內(nèi)外出現(xiàn)了很多優(yōu)秀的Online Judge(簡稱OJ)系統(tǒng)。國內(nèi)比較知名的OJ系統(tǒng)有北京大學(xué)的POJ、哈爾濱工業(yè)大學(xué)的HOJ、浙江大學(xué)ZOJ等;國外比較知名的系統(tǒng)有OJ SGU、UVa Online Judge等。OJ系統(tǒng)集成實時評判、答題統(tǒng)計、排名等功能[3]。
教師要求每個學(xué)生在OJ系統(tǒng)上注冊自己的賬號,上課時,讓學(xué)生登錄系統(tǒng),在規(guī)定的時間內(nèi)完成指定范圍內(nèi)的題目,并提交結(jié)果。OJ對提交程序的實時評判,包括程序結(jié)果的正確性、運(yùn)行時間、占用內(nèi)存資源和輸出格式的判別。學(xué)生可以通過OJ系統(tǒng),查看評判結(jié)果以及程序運(yùn)行效率,以及根據(jù)這些反饋信息對程序進(jìn)一步改進(jìn)。教師也可以通過OJ系統(tǒng)查看學(xué)生做題數(shù)量和正確率,以了解學(xué)生的學(xué)習(xí)掌握程度。同時,通過ACM在線系統(tǒng),可以將課程的實踐環(huán)節(jié)從課堂延伸到課外,鼓勵學(xué)生利用課余時間,多做競賽題目練習(xí)。
ACM在線系統(tǒng)還提供了針對賽題的討論交流功能,學(xué)生可以在上面找到對編程興趣愛好濃厚的“志同道合”者,對練習(xí)過程中碰到的難題能及時地交流和討論,或參考借鑒別人程序的思路,在一定程度上,降低了學(xué)習(xí)的難度。通過在程序愛好者中的交流與分享自己的學(xué)習(xí)成果,也讓學(xué)生收獲了成就感,增強(qiáng)了學(xué)生的信心,激發(fā)更濃厚的學(xué)習(xí)興趣。ACM在線系統(tǒng)的運(yùn)用,也解決了傳統(tǒng)實驗課教學(xué)由于課時少,學(xué)生人數(shù)多,問題多,學(xué)生碰到難題被卡住時,不能及時得到老師指導(dǎo)的問題。
通過加入ACM競賽內(nèi)容的實踐環(huán)節(jié)訓(xùn)練,使學(xué)生具備扎實的編程基礎(chǔ)和較高水平的編程能力,達(dá)到可持續(xù)發(fā)展的IT人才培養(yǎng)目標(biāo),在以后工作的實際應(yīng)用中,碰到大型復(fù)雜程序設(shè)計問題時,能厚積薄發(fā),自如地將所學(xué)專業(yè)知識綜合運(yùn)用發(fā)揮,快速的解決問題,適應(yīng)專業(yè)的工作需要。
3 結(jié)語
在程序設(shè)計類課程中引入ACM競賽內(nèi)容,可以激發(fā)學(xué)生的學(xué)習(xí)興趣和動力,變被動學(xué)習(xí)為主動學(xué)習(xí)。以ACM賽題驅(qū)動理論課講授和實踐環(huán)節(jié),可改變傳統(tǒng)講授方式中對學(xué)生在抽象建模和邏輯思維方面訓(xùn)練引導(dǎo)不足的問題。大量的賽題練習(xí),促使學(xué)生打下扎實的編程基礎(chǔ),對高水平的程序設(shè)計人才的培養(yǎng)有積極的促進(jìn)作用。
參考文獻(xiàn)
[1] 于世華,王榮芝.ACM競賽探討與技能型人才的培養(yǎng)[J].大學(xué)教育,2015(2):113-117.
[2] 朱月秀.基于ACM競賽的C++程序設(shè)計課程教學(xué)改革[J].漳州師范學(xué)院學(xué)報:自然科學(xué)版,2012(1):113-117.
[3] 李環(huán).基于ACM 競賽的程序設(shè)計類課程教學(xué)改革研究[J].計算機(jī)教育,2016(3):115-117.