周健 鄭誠(chéng)
摘要:分析影響學(xué)生程序設(shè)計(jì)能力提高的關(guān)鍵因素,建立立體化的程序設(shè)計(jì)能力培養(yǎng)方法,以案例為中心進(jìn)行教學(xué),以問(wèn)題驅(qū)動(dòng)進(jìn)行程序設(shè)計(jì)實(shí)踐,在師生之間、課堂內(nèi)外、學(xué)生之間形成一個(gè)立體化互動(dòng)學(xué)習(xí)網(wǎng)絡(luò)。
關(guān)鍵詞:程序設(shè)計(jì)能力;立體化培養(yǎng)方法;案例教學(xué);問(wèn)題驅(qū)動(dòng);學(xué)生互動(dòng)
0 引言
人才是當(dāng)代國(guó)家的核心競(jìng)爭(zhēng)力,培養(yǎng)創(chuàng)新型高級(jí)專門(mén)人才已經(jīng)成為社會(huì)不斷向前發(fā)展的源動(dòng)力。高等教育承擔(dān)著培養(yǎng)高級(jí)專門(mén)人才、發(fā)展科學(xué)技術(shù)文化、促進(jìn)社會(huì)主義現(xiàn)代化建設(shè)的重大任務(wù)。提高人才質(zhì)量是高等教育發(fā)展的核心任務(wù),是建設(shè)高等教育強(qiáng)國(guó)的基本要求。目前,軟件人才需求以每年40萬(wàn)的規(guī)模增長(zhǎng),預(yù)計(jì)在2014年將達(dá)到400萬(wàn)左右。軟件人才在我國(guó)依舊缺乏,軟件人才需求缺口大。對(duì)高校而言,如何提高計(jì)算機(jī)專業(yè)學(xué)生的程序設(shè)計(jì)能力,是廣大程序設(shè)計(jì)類課程教師面臨的新課題。
1 計(jì)算機(jī)專業(yè)學(xué)生程序設(shè)計(jì)能力培養(yǎng)現(xiàn)狀
程序設(shè)計(jì)能力是計(jì)算機(jī)專業(yè)學(xué)生必備的一項(xiàng)基本技能。程序設(shè)計(jì)能力培養(yǎng)不僅包含技能培養(yǎng),還包含學(xué)生分析問(wèn)題、解決問(wèn)題以及創(chuàng)新能力的培養(yǎng)。為此,各高校從大一開(kāi)始就開(kāi)設(shè)了高級(jí)語(yǔ)言程序設(shè)計(jì)課程以及后續(xù)一系列課程,以提高學(xué)生的程序設(shè)計(jì)能力。然而,即使各高校設(shè)置了豐富的程序設(shè)計(jì)能力培養(yǎng)課程,學(xué)生的程序設(shè)計(jì)水平也沒(méi)有得到大幅度提高。
當(dāng)前軟件企業(yè)招不到合適的人才,計(jì)算機(jī)專業(yè)學(xué)生找不到工作,這種局面的形成歸因于學(xué)生的程序設(shè)計(jì)能力并未達(dá)到軟件企業(yè)預(yù)期的要求。調(diào)查表明,企業(yè)新招聘員工中只有15%直接來(lái)自高校畢業(yè)生,而85%來(lái)自社會(huì)招聘,因?yàn)樯鐣?huì)招聘人員動(dòng)手能力強(qiáng),入職后能很快適應(yīng)工作崗位。程序設(shè)計(jì)能力層次見(jiàn)表1,從表1可以看出,要?jiǎng)偃纹髽I(yè)軟件開(kāi)發(fā)工作,至少需要100000行代碼量;對(duì)于本科畢業(yè)生,至少需要有10000行代碼量,而目前計(jì)算機(jī)專業(yè)大多數(shù)學(xué)生本科4年的代碼量均在1000行,有的甚至更低。
1)程序設(shè)計(jì)類課程依然重教學(xué),輕實(shí)踐。理論教學(xué)依然是程序設(shè)計(jì)類課程的重點(diǎn),理論學(xué)時(shí)多,實(shí)踐學(xué)時(shí)少。教師花費(fèi)大量時(shí)間進(jìn)行語(yǔ)法、數(shù)據(jù)結(jié)構(gòu)概念、算法理論講解,因此也使得有針對(duì)性的實(shí)踐太少,基于相關(guān)知識(shí)和理論的案例教學(xué)不足,學(xué)生很難將所學(xué)知識(shí)點(diǎn)和理論用于解決實(shí)際問(wèn)題。
2)實(shí)踐環(huán)節(jié)枯燥,學(xué)生無(wú)法提高學(xué)習(xí)積極性。
在傳統(tǒng)程序設(shè)計(jì)實(shí)踐教學(xué)中,教師布置3~6道作業(yè)題,學(xué)生當(dāng)堂完成,然后將代碼以及運(yùn)行結(jié)果截圖打包上傳到服務(wù)器,教師一一評(píng)閱。教師給出的習(xí)題往往直接針對(duì)課堂教學(xué)的知識(shí)點(diǎn),無(wú)任何實(shí)際背景或故事情節(jié),實(shí)驗(yàn)枯燥乏味,學(xué)生學(xué)習(xí)積極性無(wú)法提高。
3)學(xué)生多,教師少,教師無(wú)法逐個(gè)解答學(xué)生的問(wèn)題。
在大學(xué)不斷擴(kuò)招的情形下,師生比進(jìn)一步擴(kuò)大。實(shí)踐教學(xué)過(guò)程中,教師無(wú)法一一發(fā)現(xiàn)和解答每個(gè)學(xué)生的問(wèn)題。學(xué)生將作業(yè)代碼和運(yùn)行結(jié)果截圖通過(guò)FTP上傳至服務(wù)器,教師查看運(yùn)行結(jié)果,由于學(xué)生多,教師無(wú)法逐個(gè)查看和運(yùn)行學(xué)生代碼,疲于應(yīng)付,因而導(dǎo)致實(shí)踐效果差。
4)實(shí)踐能力評(píng)價(jià)方法單一。
目前的課程考核多采用筆試,學(xué)生的實(shí)踐能力只能通過(guò)平時(shí)作業(yè)和實(shí)驗(yàn)進(jìn)行主觀性評(píng)價(jià),難以激發(fā)學(xué)生自主訓(xùn)練實(shí)踐能力的激情。在這樣的教學(xué)模式下,久而久之學(xué)生就失去了編程興趣,同時(shí)也降低了后續(xù)程序設(shè)計(jì)類課程的學(xué)習(xí)積極性,以致形成惡性循環(huán),學(xué)生代碼閱讀量、代碼編寫(xiě)量均得不到保證,程序設(shè)計(jì)能力自然無(wú)法提高。
為了提高學(xué)生的程序設(shè)計(jì)能力,文獻(xiàn)[1]提出一種貫穿在系列課程中的程序設(shè)計(jì)能力培養(yǎng)方法,強(qiáng)調(diào)在一系列課程中持續(xù)不斷地進(jìn)行系統(tǒng)化訓(xùn)練,采用面向?qū)I(yè)應(yīng)用的分類教學(xué),貫徹落實(shí)案例驅(qū)動(dòng)、強(qiáng)化實(shí)訓(xùn)等教學(xué)方法。文獻(xiàn)[2]初步將ACM模式應(yīng)用到程序設(shè)計(jì)類課程實(shí)踐教學(xué)中,使學(xué)生的編程能力和解題思維能力得到有效訓(xùn)練,教學(xué)效果顯著提高。文獻(xiàn)[3]也提出采用ACM競(jìng)賽形式的程序設(shè)計(jì)能力層次化培養(yǎng)模式。這些方法都是提高學(xué)生程序設(shè)計(jì)能力的有益嘗試。
2 立體化程序設(shè)計(jì)能力培養(yǎng)模式
針對(duì)目前程序設(shè)計(jì)能力培養(yǎng)方面依然存在的一些突出問(wèn)題,我們借鑒國(guó)內(nèi)外一流大學(xué)的經(jīng)驗(yàn),與學(xué)校、學(xué)院教學(xué)部門(mén)配合,探索并建立立體化程序設(shè)計(jì)能力培養(yǎng)方法。立體化程序設(shè)計(jì)能力培養(yǎng)方法如圖1所示。
1)培養(yǎng)方法和過(guò)程。
在立體化程序設(shè)計(jì)能力培養(yǎng)方法中,教學(xué)活動(dòng)仍然分為理論知識(shí)講授與編程實(shí)踐,但理論課不再以單純介紹語(yǔ)法知識(shí)為主,而是以具體的程序案例分析為主,讓學(xué)生從案例中掌握語(yǔ)法。在實(shí)踐教學(xué)環(huán)節(jié)中,教師設(shè)計(jì)若干有趣的問(wèn)題,學(xué)生在解決問(wèn)題過(guò)程中學(xué)會(huì)相關(guān)的語(yǔ)法知識(shí)與編程技巧。學(xué)生編寫(xiě)的程序代碼全部通過(guò)安徽大學(xué)程序自動(dòng)評(píng)判系統(tǒng)進(jìn)行評(píng)判,學(xué)生只需在規(guī)定時(shí)間內(nèi)完成,不再局限在實(shí)踐課堂內(nèi)完成,令學(xué)生有了足夠多的思考和動(dòng)手編程時(shí)間。對(duì)于學(xué)生在編程過(guò)程中出現(xiàn)的各種問(wèn)題,教師和ACM/ICPC隊(duì)員及時(shí)進(jìn)行在線細(xì)致輔導(dǎo)。在每次作業(yè)結(jié)束后,系統(tǒng)公布所有學(xué)生的解題代碼,以供所有學(xué)生在線查看和評(píng)價(jià)。獲得優(yōu)秀評(píng)價(jià)的代碼將在系統(tǒng)上公布,以便學(xué)生有機(jī)會(huì)進(jìn)一步學(xué)習(xí)優(yōu)秀代碼,增加代碼閱讀量。
2)立體化程序設(shè)計(jì)能力培養(yǎng)特點(diǎn)。
(1)以高級(jí)語(yǔ)言程序設(shè)計(jì)課程為依托。高級(jí)語(yǔ)言程序設(shè)計(jì)課程是學(xué)生接觸的第一門(mén)程序設(shè)計(jì)類課程,其教學(xué)與實(shí)踐對(duì)培養(yǎng)學(xué)生的編程興趣和能力起著至關(guān)重要的作用,可以幫助學(xué)生樹(shù)立自信心并步入程序設(shè)計(jì)的殿堂。
(2)課堂教學(xué)以案例為中心。程序設(shè)計(jì)=算法+數(shù)據(jù)結(jié)構(gòu)。在高級(jí)語(yǔ)言程序設(shè)計(jì)課程的教學(xué)過(guò)程中,我們摒棄單純講授語(yǔ)法的課堂教學(xué)方法,改之以程序案例為中心。在課程早期,案例以語(yǔ)法知識(shí)為主,逐步增加基本數(shù)據(jù)結(jié)構(gòu)和算法。整個(gè)教學(xué)過(guò)程以案例分析為中心進(jìn)行語(yǔ)法教學(xué),讓學(xué)生在潛移默化中學(xué)習(xí)到基本的數(shù)據(jù)結(jié)構(gòu)和算法。
(3)實(shí)踐教學(xué)以問(wèn)題求解為中心。在實(shí)踐環(huán)節(jié),教師通過(guò)設(shè)置有趣的故事和實(shí)際的問(wèn)題,幫助學(xué)生在求解問(wèn)題過(guò)程中掌握課堂上所學(xué)的語(yǔ)法知識(shí)、基本數(shù)據(jù)結(jié)構(gòu)和算法。endprint
(4)實(shí)踐環(huán)節(jié)從課內(nèi)延伸至課外。實(shí)踐環(huán)節(jié)要求學(xué)生完成指定的編程題目。與傳統(tǒng)實(shí)踐環(huán)節(jié)不同,通過(guò)在線程序自動(dòng)評(píng)判平臺(tái),學(xué)生所有的編程作業(yè)只需在教師規(guī)定的時(shí)間段內(nèi)提交,學(xué)生既可以在實(shí)踐課上完成,又可以利用課外時(shí)間完成課堂內(nèi)沒(méi)有完成的作業(yè)。將實(shí)踐課延伸到課外的優(yōu)點(diǎn)表現(xiàn)在:①學(xué)生有足夠的時(shí)間思考分析問(wèn)題并最終通過(guò)編程解決問(wèn)題;②實(shí)踐題目數(shù)量適當(dāng)增加,學(xué)生的代碼量隨之增加,充分的課外實(shí)踐可以進(jìn)一步鞏固學(xué)生的理論知識(shí)基礎(chǔ)。
(5)經(jīng)驗(yàn)豐富的ACM/ICPC隊(duì)員參與程序設(shè)計(jì)實(shí)踐環(huán)節(jié)輔導(dǎo)。ACM/ICPC隊(duì)員經(jīng)過(guò)長(zhǎng)期的編程實(shí)踐,積累了豐富的編程經(jīng)驗(yàn),代碼能力強(qiáng),因此我們利用ACM/ICPC集訓(xùn)隊(duì)的優(yōu)勢(shì)資源,實(shí)行“傳幫帶”機(jī)制,對(duì)于每個(gè)學(xué)生編程過(guò)程中出現(xiàn)的問(wèn)題及時(shí)給予解答,有效提高學(xué)生的編程積極性。集訓(xùn)隊(duì)學(xué)生優(yōu)秀的編程水平對(duì)于低年級(jí)學(xué)生也是一種激勵(lì),可以進(jìn)一步激發(fā)其編程熱情,增加其向更高編程水平邁進(jìn)的動(dòng)力。
(6)學(xué)生作業(yè)采用自動(dòng)化評(píng)判模式。學(xué)生提交的作業(yè)通過(guò)服務(wù)器自動(dòng)評(píng)判給出程序的運(yùn)行結(jié)果。自動(dòng)評(píng)判模式對(duì)于編譯錯(cuò)誤,會(huì)直接給出編譯出錯(cuò)位置和出錯(cuò)類型,方便學(xué)生自查;對(duì)于運(yùn)行錯(cuò)誤,包括結(jié)果錯(cuò)誤和運(yùn)行超時(shí),則需要學(xué)生重新審查程序代碼。服務(wù)器自動(dòng)評(píng)判能夠有效減輕教師批改作業(yè)壓力,還可以大大提高實(shí)踐教學(xué)效果。此外,服務(wù)器上保留了每個(gè)學(xué)生的做題細(xì)節(jié),包括以往的代碼、做題的數(shù)量、錯(cuò)誤類型等信息,可以進(jìn)一步增強(qiáng)學(xué)生做題的成就感和積極性。值得一提的是該自動(dòng)評(píng)判平臺(tái)不僅支持高級(jí)語(yǔ)言程序設(shè)計(jì),還支持C++、Java、VB和Pascal語(yǔ)言,因而吸引了省內(nèi)一些初中、高中學(xué)生進(jìn)入該平臺(tái)進(jìn)行程序設(shè)計(jì)能力實(shí)踐。
(7)優(yōu)秀代碼展示有助于增加學(xué)生代碼閱讀量。學(xué)生代碼量包括代碼編寫(xiě)量和代碼閱讀量。代碼閱讀量是提高編程能力的一種重要途徑,然而在實(shí)際教學(xué)過(guò)程中常常被忽視,通過(guò)教師評(píng)閱、學(xué)生互評(píng)等方式,可以篩選出優(yōu)秀代碼并加以展示。優(yōu)秀代碼主要指具有巧妙的算法、運(yùn)行時(shí)間短、內(nèi)存占用空間少、代碼格式規(guī)整、符合標(biāo)準(zhǔn)編程風(fēng)格的程序代碼。展示優(yōu)秀代碼可以讓學(xué)生有機(jī)會(huì)看到彼此對(duì)于同一道題目的多種解決方案,有效促進(jìn)學(xué)生之間的交流,積極提高學(xué)生的代碼閱讀量。這種相互的交流還可以進(jìn)一步激發(fā)學(xué)生的創(chuàng)新靈感,在提高學(xué)生編程能力的同時(shí)也提高創(chuàng)新能力。
與傳統(tǒng)程序設(shè)計(jì)能力培養(yǎng)主要依靠“教師一學(xué)生”這種二維扁平的實(shí)踐教學(xué)模式不同,立體化程序設(shè)計(jì)能力培養(yǎng)方法以案例教學(xué)為中心進(jìn)行教學(xué),以問(wèn)題驅(qū)動(dòng)為中心進(jìn)行編程實(shí)踐,采用機(jī)器自動(dòng)評(píng)判和學(xué)生互評(píng)相結(jié)合的方式進(jìn)行學(xué)生編程實(shí)踐效果評(píng)價(jià),在教師—ACM隊(duì)員—學(xué)生之間建立一個(gè)跨越時(shí)間和空間的三維立體互動(dòng)教學(xué)網(wǎng)絡(luò)。這種教學(xué)方法將課內(nèi)實(shí)踐延伸至課外,將實(shí)驗(yàn)室實(shí)踐延伸到實(shí)驗(yàn)室外,對(duì)學(xué)生的程序設(shè)計(jì)能力進(jìn)行主客觀相結(jié)合的綜合評(píng)價(jià)與即時(shí)反饋。
3 實(shí)施成效
通過(guò)一系列的研究與設(shè)計(jì),我們構(gòu)建了立體化的程序設(shè)計(jì)能力培養(yǎng)模式,在安徽大學(xué)自主研發(fā)的自動(dòng)評(píng)判系統(tǒng)基礎(chǔ)上增加了高級(jí)語(yǔ)言程序設(shè)計(jì)實(shí)踐模塊。自2008年以來(lái),學(xué)生通過(guò)該自動(dòng)評(píng)判平臺(tái)進(jìn)行程序設(shè)計(jì)實(shí)踐呈逐年增多趨勢(shì),多名學(xué)生參加了ACM/ICPC程序設(shè)計(jì)競(jìng)賽以及省級(jí)程序設(shè)計(jì)競(jìng)賽,獲得各類獎(jiǎng)勵(lì)10余項(xiàng),其中亞洲區(qū)邀請(qǐng)賽金獎(jiǎng)2項(xiàng)、省級(jí)競(jìng)賽一等獎(jiǎng)4項(xiàng)。實(shí)施該培養(yǎng)方法后,學(xué)生進(jìn)行自主程序設(shè)計(jì)訓(xùn)練的積極性明顯提高,目前在校生中程序代碼量已經(jīng)達(dá)到10000行的有200人左右,部分畢業(yè)學(xué)生直接進(jìn)入騰訊、百度等企業(yè)工作,用人單位也對(duì)畢業(yè)生的編程能力普遍表示滿意。安徽大學(xué)計(jì)算機(jī)專業(yè)學(xué)生2008—2012年提交代碼量如圖2所示。
該培養(yǎng)方法不僅提高了學(xué)生的程序設(shè)計(jì)能力,而且培養(yǎng)了學(xué)生的創(chuàng)新精神和可持續(xù)發(fā)展能力,還吸引了許多非計(jì)算機(jī)專業(yè)學(xué)生學(xué)習(xí)程序設(shè)計(jì)技術(shù)。近年來(lái),陸續(xù)有電子學(xué)院、自動(dòng)化學(xué)院、數(shù)學(xué)學(xué)院、化學(xué)化工學(xué)院、資源與環(huán)境工程學(xué)院和物理學(xué)院的學(xué)生參與到程序設(shè)計(jì)實(shí)踐中,并且取得了不錯(cuò)的學(xué)習(xí)效果。例如,安徽大學(xué)物理學(xué)院一名學(xué)生經(jīng)過(guò)該平臺(tái)實(shí)踐后,積極參與ACM/ICPC程序設(shè)計(jì)競(jìng)賽,獲得2010年ACM/ICPC亞洲區(qū)競(jìng)賽銅獎(jiǎng)并于2012年成功考取復(fù)旦大學(xué)計(jì)算機(jī)專業(yè)研究生。
4 結(jié)語(yǔ)
強(qiáng)調(diào)師生互動(dòng)、實(shí)踐反饋、學(xué)生互動(dòng)足立體化程序設(shè)計(jì)能力培養(yǎng)方法的關(guān)鍵,而利用案例教學(xué)與趣味實(shí)踐是重要途徑。實(shí)踐證明,立體化程序設(shè)計(jì)能力培養(yǎng)方法在提高學(xué)生編程水平和算法能力方面具有較大優(yōu)勢(shì),取得了顯著成效。今后我們將進(jìn)一步注重教師與學(xué)生互動(dòng),探索更多的師生之間、學(xué)生之間互動(dòng)手段,不斷提高學(xué)生編程素養(yǎng)和創(chuàng)新水平。
參考文獻(xiàn):
[1]高敬陽(yáng),朱群雄,山嵐,等.貫穿在系列課程中的程序設(shè)計(jì)能力的培養(yǎng)[J].中國(guó)大學(xué)教學(xué),2008(11):46-48
[2]常子楠.基于ACM模式的程序設(shè)計(jì)類課程實(shí)踐教學(xué)探索[J].計(jì)算機(jī)教育,2010(16):144-146.
[3]韓建民,王麗俠,賈洞.大學(xué)生程序設(shè)計(jì)能力的層次化培養(yǎng)模式[J].計(jì)算機(jī)教育,2012(3):15-18.
(編輯:宋文婷)endprint