張沫 章彪
摘要:對(duì)編程類課程而言,傳統(tǒng)教學(xué)存在填鴨式理論教學(xué)、實(shí)踐教學(xué)環(huán)節(jié)松軟流于形式等不足,教學(xué)效果不理想。該文針對(duì)程序設(shè)計(jì)類課程教學(xué)中存在的問題,給出了基于ACM競賽模式、運(yùn)用在線編程測試OJ平臺(tái)來開展程序設(shè)計(jì)類課程教學(xué),收到了較好的教學(xué)效果。
關(guān)鍵詞:ACM競賽;教學(xué)改革;C程序設(shè)計(jì);OJ平臺(tái)
中圖分類號(hào):G642? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2021)07-0165-02
Abstract: For programming courses, the traditional teaching method has some shortcomings, such as cramming theoretical teaching and practical teaching, which is not satisfactory. In view of the problems existing in the teaching of programming courses, this paper presents the teaching of programming courses based on ACM competition mode and online programming test OJ platform, which has achieved good teaching effect.
Key words: ACM competition; teaching reform; C programming course; OJ platform
C語言是計(jì)算機(jī)專業(yè)的通識(shí)基礎(chǔ)課程,旨在培養(yǎng)學(xué)生的邏輯思維能力、創(chuàng)新實(shí)踐能力和解決實(shí)際問題的能力,為后續(xù)專業(yè)課程的學(xué)習(xí)奠定良好的基礎(chǔ)。該課程具有表達(dá)能力強(qiáng),簡潔緊湊、靈活方便,程序設(shè)計(jì)自由度大,生成目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高等優(yōu)勢。 由于c語言的特點(diǎn)決定了學(xué)習(xí)者本身需要很好的基礎(chǔ),而很多學(xué)生是第一次接觸c語言,沒有編程基礎(chǔ),這也就使得學(xué)生很害怕上這門課程,學(xué)習(xí)進(jìn)度也比較緩慢。針對(duì)這種情況,如何教好學(xué)生這門課,讓學(xué)生愛學(xué)能學(xué),對(duì)提高學(xué)生的程序設(shè)計(jì)能力至關(guān)重要。
1 傳統(tǒng)教學(xué)效果不理想
1.1 理論與實(shí)踐脫節(jié),學(xué)生學(xué)習(xí)興趣欠缺
在課堂上學(xué)習(xí)的時(shí)間有限,理論知識(shí)點(diǎn)豐富,使得教師必須花費(fèi)大量的時(shí)間來講理論部分, 這樣的話學(xué)生實(shí)踐的時(shí)間很少?zèng)]有進(jìn)行實(shí)際操作,無法深刻把握,課堂后缺乏自主學(xué)習(xí)的能動(dòng)性,“滿堂灌填鴨式”教學(xué)也讓學(xué)生沒有學(xué)習(xí)的興趣。
此外,學(xué)生的實(shí)驗(yàn)結(jié)果通常課程結(jié)束后才公布。只要完成實(shí)驗(yàn)內(nèi)容,大多數(shù)學(xué)生就不再進(jìn)行深入探索。另一方面,實(shí)驗(yàn)方案激勵(lì)不足,學(xué)生之間沒有形成良好的競爭氛圍,所以整體教育質(zhì)量也沒有得到提高。
1.2 教師教學(xué)手段單一
根據(jù)學(xué)生之前學(xué)年學(xué)習(xí)的結(jié)果來看,發(fā)現(xiàn)學(xué)生們“事前熱情,事后乏力”,因?yàn)樗麄內(nèi)狈Ρ匾膶W(xué)習(xí)韌性。還有就是在高等職業(yè)教育機(jī)構(gòu)中,c語言教學(xué)內(nèi)容過于強(qiáng)調(diào)基本原則和基本業(yè)務(wù),并且,“碾壓式教學(xué)”也沒有考慮到高等教育的專業(yè)性質(zhì)和知識(shí)基礎(chǔ)薄弱的學(xué)生。? 教學(xué)中,教師的方法缺乏多樣性,僅僅借助一些經(jīng)典的解釋和驗(yàn)證示例,這也就讓許多學(xué)生在使用C語言的時(shí)候不能獨(dú)立解決出現(xiàn)的問題,或者必須依靠教師傳遞的代碼,然后把這些代碼直接執(zhí)行復(fù)制和粘貼操作,對(duì)自己所寫的程序完全不了解,脫離實(shí)際應(yīng)用,造成從學(xué)生不再聽老師講課,學(xué)習(xí)出現(xiàn)困難的時(shí)候也不再向老師尋求幫助,消極應(yīng)對(duì),使得教學(xué)效果較差。
1.3 實(shí)踐教學(xué)環(huán)節(jié)松軟,流于形式
該課程實(shí)踐的時(shí)間嚴(yán)重不足,以浙江郵電職業(yè)技術(shù)學(xué)院為例, 2016年這門課程共設(shè)置72小學(xué)時(shí),實(shí)際操作36學(xué)時(shí),理論課堂36學(xué)時(shí)。學(xué)習(xí)的時(shí)候?qū)W生們主要聽老師講解,自己操作的時(shí)間幾乎沒有,然而也只能在課堂上問老師,但老師并不總是能解決課堂上所有學(xué)生的問題。溝通平臺(tái)也沒有搭建起來,師生溝通機(jī)制也沒有形成,造成實(shí)踐無法發(fā)揮最佳效果。另外,學(xué)生學(xué)習(xí)通常都是被動(dòng)式的接受,低年級(jí)學(xué)生往往也傾向于“被動(dòng)”獲得知識(shí),不能主動(dòng)從網(wǎng)上學(xué)習(xí),也不能獨(dú)立學(xué)習(xí)。也就是說,他們必須在老師的指導(dǎo)下才能進(jìn)行試驗(yàn)課程的學(xué)習(xí)。
1.4 考試機(jī)制不合理,僅僅“為考而考”
以往教學(xué)中,學(xué)生在課堂學(xué)習(xí)、完成課后練習(xí) 、實(shí)驗(yàn)室報(bào)告、期末測評(píng)等方面的學(xué)習(xí)成績都會(huì)受到考核,而這些考試通常只涉及客觀問題,表現(xiàn)的是學(xué)生的記憶和敘述能力,而不能表現(xiàn)學(xué)生分析和解決問題的編程能力。采用這種檢驗(yàn)方法過于注重形式評(píng)價(jià),試驗(yàn)作業(yè)的期末評(píng)價(jià)需要以學(xué)生實(shí)驗(yàn)操作水平作為考核標(biāo)準(zhǔn)。然而以往都沒有實(shí)行這樣的考核方法,只能以卷面考試來代替。
2 基于ACM 競賽模式的C語言課程教學(xué)探索
為了解決傳統(tǒng)教學(xué)存在的不足,我們引入了ACM競賽模式下的教學(xué)改革策略。ACM競賽是一項(xiàng)旨在展示大學(xué)生創(chuàng)新能力、團(tuán)隊(duì)精神和在壓力下編寫程序、分析和解決問題能力的年度競賽,是世界上最具知名度的大學(xué)生計(jì)算機(jī)編程技能競賽之一。競賽由至多3名在校學(xué)生組隊(duì),每隊(duì)分配一臺(tái)電腦,競賽時(shí)長歷時(shí)5個(gè)小時(shí),考驗(yàn)團(tuán)隊(duì)創(chuàng)新和團(tuán)隊(duì)合作,考核學(xué)生在開發(fā)新軟件時(shí)的創(chuàng)造性,還能測試他們在壓力下工作的能力。經(jīng)過多年的發(fā)展,該競賽已經(jīng)發(fā)展成為最具影響力的大學(xué)生程序設(shè)計(jì)競賽,目前已經(jīng)已有很多優(yōu)秀的OJ系統(tǒng)。國內(nèi)知名度較高的有北大的POJ、哈工大的HOJ、浙大ZOJ、杭州電子科技大學(xué)的HOJ、??途W(wǎng)等;國外比較知名的系統(tǒng)有OJ SGU、UVa Online Judge等。這些平臺(tái)共有的特點(diǎn)有:
2.1 題目涉及領(lǐng)域廣,對(duì)學(xué)生要求高
ACM從難度來看,有水問題(簡單問題)、中等問題和高難度問題這三個(gè)層次,平臺(tái)主題包括排序、搜索、遞歸、分區(qū)、圖形算法、數(shù)據(jù)結(jié)構(gòu)、搜索算法、動(dòng)態(tài)規(guī)劃、數(shù)學(xué)問題、計(jì)算幾何和具有多種算法的合成類算法主題;教師和學(xué)生按照每個(gè)問題后的成功率來確定問題目標(biāo)的難度,并在教學(xué)中運(yùn)用這一特點(diǎn)進(jìn)行分層教學(xué)。
2.2 磨煉學(xué)生的創(chuàng)新和團(tuán)隊(duì)協(xié)作能力
競賽由三名學(xué)生組成小組,他們共用一臺(tái)英語計(jì)算機(jī),限時(shí)5個(gè)小時(shí)團(tuán)隊(duì)協(xié)作進(jìn)行C、C++或Java編程程序,鼓勵(lì)學(xué)生在開發(fā)新軟件時(shí)表現(xiàn)出創(chuàng)造性,并且還能測試他們在壓力下工作的能力。
2.3 磨煉學(xué)生的抗高壓能力
這些平臺(tái)每個(gè)科目都需要大量的操作時(shí)間和內(nèi)存來測試學(xué)生算法的優(yōu)越性;建立足夠多的方案測試實(shí)例,用這樣的方法來測試學(xué)生能否充分考慮問題;程序的返回結(jié)果須遵守非常嚴(yán)格的格式要求,以測試學(xué)生編寫代碼的嚴(yán)格程度;提交問題的總次數(shù)用罰時(shí)的方法進(jìn)行,每多提交一次,總運(yùn)行時(shí)間多幾分鐘,這是為了測試學(xué)生解決問題的速度和能力。這種評(píng)價(jià)機(jī)制要求學(xué)生具備很強(qiáng)的抗壓性,這種模式的長期教學(xué)可以就學(xué)生的理解和解決問題這兩方面的能力得到很好的發(fā)展。
2.4 采用在線評(píng)測系統(tǒng),追求高質(zhì)量程序
這些平臺(tái)擁有足夠多的練習(xí)和競爭所需要的習(xí)題,并為每個(gè)平臺(tái)提供了大量的實(shí)驗(yàn)使用實(shí)例。學(xué)生的程序代碼會(huì)在線上傳送,而且代碼會(huì)在結(jié)果頁面上以不同的區(qū)域進(jìn)行測試精確度、總時(shí)間、記憶體使用率即內(nèi)存消耗等等。學(xué)生們評(píng)價(jià)以結(jié)果為標(biāo)準(zhǔn)進(jìn)行調(diào)整。此方法是對(duì)學(xué)生分析問題、資料點(diǎn)整合、算法最優(yōu)化、內(nèi)存的分配和控制等方面能力的考核測試。
3 課程教與學(xué)中引入OJ平臺(tái)和ACM競賽模式
3.1 在理論教學(xué)中引入ACM 競賽
1)任務(wù)驅(qū)動(dòng)
在某些理論教學(xué)內(nèi)容中,可以從ACM的基礎(chǔ)題目中選取若干個(gè)相似的簡單題目,學(xué)生通過解題,可以加深對(duì)理論的理解。
2)翻轉(zhuǎn)課堂
對(duì)于指針等最難掌握的知識(shí)點(diǎn),通過事先編寫好代碼,學(xué)生可以事先好好理解以下代碼,并在課堂開始時(shí)在ACM平臺(tái)上進(jìn)行測試,然后著重把握理論內(nèi)容中最困難的點(diǎn),使得課堂教學(xué)效率得到提高。
3.2 基于ACM的實(shí)踐教學(xué)
理論教學(xué)結(jié)束后,選擇了一些試題進(jìn)行理論解釋和強(qiáng)化,平臺(tái)會(huì)根據(jù)學(xué)生提交的代碼,給出相應(yīng)的結(jié)果,學(xué)生能夠根據(jù)結(jié)果判斷該程序是否正確,從而避免了再去設(shè)計(jì)自己的程序測試用例。通常情況下,學(xué)生不會(huì)參與c程序設(shè)計(jì)中的軟件測試,也不會(huì)體驗(yàn)到設(shè)計(jì)測試的示例。程序運(yùn)行后,程序運(yùn)行沒有出現(xiàn)錯(cuò)誤通常也被識(shí)別為正確,比如在一次編程中,一名學(xué)生在輸出結(jié)果時(shí)沒有換行, 運(yùn)行一次的答案是正確的,該學(xué)生誤認(rèn)為換行與否不重要,這樣做明顯不正確。假若在ACM平臺(tái)上提交程序,如果對(duì)問題回答不正確或輸出格式不正確時(shí),系統(tǒng)將給出“WA”或“PE”,這將有助于學(xué)生檢測程序中的問題,培養(yǎng)學(xué)生的嚴(yán)謹(jǐn)性。
3.3 基于ACM的課程教學(xué)優(yōu)勢分析
1)小組學(xué)習(xí)和協(xié)作學(xué)習(xí):作為編程課日常教學(xué)的一部分,ACM可協(xié)助學(xué)生指派三人組成一個(gè)小團(tuán)隊(duì),其中一人作為其他兩組成員之間相互學(xué)習(xí)的管理員,以加強(qiáng)協(xié)同合作,這種教學(xué)形式既增進(jìn)了合作意識(shí),也促進(jìn)了學(xué)生的專業(yè)發(fā)展。
2)多層次教學(xué):在OJ的在線平臺(tái)上,簡單和困難的問題做出區(qū)分,舉例來說,杭電ACM平臺(tái),11頁之前英文題,之后為中文題,學(xué)生學(xué)習(xí)更加循序漸進(jìn),有利于學(xué)生學(xué)習(xí)。學(xué)生的基礎(chǔ)和能力各不相同,在實(shí)踐中,不同的學(xué)生應(yīng)選擇難易程度不同的問題,這樣有利于分級(jí)學(xué)習(xí)取得很好的效果。
3)實(shí)時(shí)實(shí)際執(zhí)行:OJ平臺(tái)包括各種主題,當(dāng)主題完成時(shí),學(xué)生可以在線查閱,測試平臺(tái)進(jìn)行結(jié)果的反饋,顯示即時(shí)效果,并提供討論論壇,讓各路高手處理這些主題,而無須教師參與。
4)激發(fā)學(xué)生興趣,點(diǎn)燃學(xué)習(xí)熱情
近年來,在引入ACM平臺(tái)助理程序設(shè)計(jì)學(xué)校方面,學(xué)習(xí)舉措已明顯改善,大多數(shù)學(xué)生對(duì)學(xué)習(xí)前學(xué)習(xí)和程序設(shè)計(jì)都有意識(shí)。例如,本學(xué)期程序員為“選擇結(jié)構(gòu)”部分處理15個(gè)主題,而這兩個(gè)課程102名學(xué)生中72%提出30多個(gè)問題,甚至45個(gè)問題。在教程的后續(xù)章節(jié)中,學(xué)生學(xué)習(xí)的方法變得越來越有趣。他們開始超出書本或教科書中包含的主題和專題,開始設(shè)法解決平臺(tái)上一些最困難的問題,這些問題對(duì)學(xué)習(xí)興趣、學(xué)生編程能力的發(fā)展和繼續(xù)教育都有幫助。
4 結(jié)束語
在引入ACM競賽模式到C語言課程教學(xué)的三年時(shí)間內(nèi),學(xué)生期末測試成績優(yōu)秀率逐年上升,學(xué)生參加ACM省賽和市賽的成績也有了很大進(jìn)步,其中第十五屆ACM競賽獲銀獎(jiǎng)、十六屆和十七屆ACM競賽獲金獎(jiǎng)。由此可見,基于ACM的教學(xué)模式既使得教師教學(xué)負(fù)擔(dān)變小了,還有利于提高學(xué)生編程方面的能力,激勵(lì)學(xué)生進(jìn)行自主學(xué)習(xí),有利于學(xué)生畢業(yè)后更好地適應(yīng)軟件開發(fā)工作。所以, 我們將進(jìn)一步擴(kuò)大此類平臺(tái)的使用廣度和深度,更大地提高編程類課程的教學(xué)效果。
參考文獻(xiàn):
[1] 劉宇欣,周秋霞.ACM平臺(tái)在C程序設(shè)計(jì)教學(xué)中的應(yīng)用[J].計(jì)算機(jī)時(shí)代,2018(3):66-69.
[2] 田仲富,劉楠,李桂英.高校優(yōu)質(zhì)數(shù)字化教學(xué)資源共建共享有效策略研究[J].科教文匯(上旬刊),2018(1):1-3.
[3] 李環(huán).基于ACM競賽的程序設(shè)計(jì)類課程教學(xué)改革研究[J].計(jì)算機(jī)教育,2016(3):115-118.
[4] 徐新愛.基于學(xué)科競賽的《C語言程序設(shè)計(jì)》課程教學(xué)改革研究[J].西南師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2015,40(9):224-228.
[5] 林金珠,倪天偉.基于ACM-ICPC競賽的C語言課程教學(xué)實(shí)踐[J].安慶師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2017(1):102-104,119.
[6] 戴麗萍,宋艷,張風(fēng)彥,等.《C語言程序設(shè)計(jì)》課程教學(xué)改革與實(shí)踐[J].當(dāng)代教育實(shí)踐與教學(xué)研究(電子刊),2015(11):548.
[7] 王曉娜,劉素轉(zhuǎn).C語言程序設(shè)計(jì)課程教學(xué)改革研究與實(shí)踐[J].課程教育研究,2018(1):223,226.
[8] 王興國.基于互聯(lián)網(wǎng)+的數(shù)字化網(wǎng)絡(luò)教學(xué)資源共享應(yīng)用研究[J].科技經(jīng)濟(jì)導(dǎo)刊,2017(4):55.
【通聯(lián)編輯:代影】