【摘 要】為提高C++程序設(shè)計這一學(xué)生普遍感到難學(xué)的實驗課的教學(xué)效果,文章結(jié)合軟件設(shè)計大賽從多方面進(jìn)行探討,教學(xué)實踐表明其在提高課程的教學(xué)效果上是行之有效的。
【關(guān)鍵詞】C++程序設(shè)計 軟件大賽 教學(xué)效果
C++程序設(shè)計是學(xué)生進(jìn)入編程世界的入門課,概念規(guī)則多、使用靈活、包含了面向過程及面向?qū)ο髾C(jī)制等[1],如何提高學(xué)生編程能力及實驗課的教學(xué)效果一直是該課程教師所追求的目標(biāo)。目前的高職教育中,競賽尤其是工科類的競賽,如“藍(lán)橋杯”全國軟件專業(yè)人才設(shè)計與創(chuàng)業(yè)大賽(簡稱:軟件大賽)等已成為教育發(fā)展和教學(xué)改革的一種輔助和促進(jìn)手段。大賽具競爭性、挑戰(zhàn)性、創(chuàng)新性等特點,它要求學(xué)生具有較強(qiáng)的信息獲取、理解、處理、創(chuàng)新能力,參與大賽可有力提高學(xué)生運用知識解決實際問題的能力及學(xué)生創(chuàng)新思維的培養(yǎng),可有效提高學(xué)生的自主創(chuàng)新意識、研究能力和工程實踐能力,是對教學(xué)質(zhì)量及創(chuàng)新人才培養(yǎng)目標(biāo)實現(xiàn)的一種較好的檢驗和推動[2]。本文將結(jié)合筆者近五年來對軟件大賽(C++組)參賽學(xué)生的省賽、決賽的賽前輔導(dǎo)及自己的教學(xué)經(jīng)驗,探索有效提高實驗課教學(xué)效果的方法。
C++程序設(shè)計實驗課教學(xué)過程中存在的主要問題
1.職業(yè)院校的學(xué)生來源多樣,素質(zhì)差距大,入學(xué)成績低,學(xué)習(xí)積極性不高,幾乎無課前預(yù)習(xí)、課后復(fù)習(xí)的習(xí)慣,學(xué)習(xí)能力不強(qiáng),給教師的授課帶來困難,再加之該課程的教學(xué)內(nèi)容多,課時少,使學(xué)生普遍感到該課程學(xué)習(xí)難度大,這在一定程度上不利于學(xué)生對該課程的理解和掌握。此外,大學(xué)里豐富絢麗的社團(tuán)活動更能吸引學(xué)生,他們參加這些活動課只需短時間努力就可看到成果,而專業(yè)課的學(xué)習(xí)卻相反,在短期內(nèi)他們很難看到明顯效果,而且對克服學(xué)習(xí)上的困難缺乏恒心、毅力,容易在學(xué)習(xí)上產(chǎn)生畏難心理而放棄對課程的學(xué)習(xí)。
2.教師對學(xué)生編程思維的培養(yǎng)不足,學(xué)生不能將所學(xué)知識應(yīng)用到實際,降低了教學(xué)質(zhì)量。
3.實驗題型類型單一,內(nèi)容陳舊、枯燥、沒有新鮮感,多為課本例題或其變形,驗證性的實驗較多,缺乏設(shè)計型、創(chuàng)新型實驗,很難將所學(xué)知識應(yīng)用到實際,很難激發(fā)學(xué)生的學(xué)習(xí)興趣。
4.實驗課上學(xué)生隨意性大,教學(xué)效果不能量化,教師對學(xué)生管理不能到位,影響了實驗課的教學(xué)效果。在調(diào)試程序方面,學(xué)生不會調(diào)試、修改錯誤程序,遇到問題或錯誤時無從下手,過多地依靠教師,缺乏自信心,這些都增加了課程的學(xué)習(xí)難度。
5.在有限的實驗課上,教師難以保證對全體學(xué)生答疑解惑和實時地對學(xué)習(xí)效果進(jìn)行評價,積極性很難調(diào)動起來,學(xué)生課后也很難有意識地進(jìn)行編程實踐,長時間會導(dǎo)致學(xué)生失去學(xué)習(xí)興趣。
6.考核體系不完善,僅采用傳統(tǒng)的筆試進(jìn)行考核,使得學(xué)生對實驗課的重視不夠,學(xué)生在實驗課前沒有進(jìn)行充分準(zhǔn)備,實驗內(nèi)容不能完成,且抄襲現(xiàn)象難以避免。
實驗課教學(xué)的探索
1.注重實驗題目的選取
描述枯燥的題目很難調(diào)動學(xué)生的學(xué)習(xí)興趣和主動性,而軟件大賽的題目與實際應(yīng)用緊密結(jié)合,且知識性、趣味性、實用性強(qiáng),它在一定程度上反映了行業(yè)對職業(yè)能力的要求[3],可借鑒其風(fēng)格使實驗題目趣味化、生活化。例如,2012年軟件大賽選拔賽真題:大數(shù)學(xué)家歐拉在集市上遇到了本村的兩個農(nóng)婦,每人挎著個空籃子。她們和歐拉打招呼說兩人剛剛賣完了所有的雞蛋。歐拉隨便問:“賣了多少雞蛋呢?”不料一個說:“我們兩人自己賣自己的,一共賣了150個雞蛋,雖然我們賣的雞蛋有多有少,但剛好得了同樣的錢數(shù)。你猜猜看!”歐拉猜不出。另一個補(bǔ)充道:“如果我按她那樣的價格賣,可以得到32元;如果她按我的價格賣,可以得到24.5元。”歐拉想了想,說出了正確答案。我們不是數(shù)學(xué)家,很難列出公式來分析。但計算機(jī)可以“暴力破解”,就是把所有的可能情況都試驗一遍,撞上為止。請寫出每人擁有雞蛋的數(shù)目,用逗號隔開。讓學(xué)生自己選擇合理的算法、數(shù)據(jù)結(jié)構(gòu)來解決。有趣的題目極大地調(diào)動了學(xué)生的編程欲望和創(chuàng)造動力,感受到學(xué)有所用、基礎(chǔ)知識的重要性。此外,大賽題目的引入,可使學(xué)生提前了解大賽,也為之參賽奠定基礎(chǔ)。
2.注重實驗內(nèi)容的形式
實驗內(nèi)容的形式應(yīng)多樣化,例如程序代碼填空、程序結(jié)果填空、描述程序功能、代碼改錯、書寫函數(shù)、程序設(shè)計等,從而多方位地增強(qiáng)學(xué)生的讀程、編程、調(diào)試程序的能力。此外,在學(xué)生驗證程序時,為了使學(xué)生明確如何給出測試數(shù)據(jù)及測試數(shù)據(jù)的普適性,可借鑒軟件大賽的命題模式,除了題目描述,還包含測試輸入樣例、輸出樣例,這樣就能客觀地驗證程序的正確性。
3.注重實驗內(nèi)容的設(shè)計
根據(jù)學(xué)生的個體差異以及不同階段的發(fā)展需要,將實驗內(nèi)容由淺入深地推進(jìn),將實驗題目分為必做題和選做題,讓每位學(xué)生根據(jù)自身的學(xué)習(xí)情況選擇相應(yīng)難度的題目,即讓所有的學(xué)生都有事情做,能夠完成各自的學(xué)習(xí)任務(wù),帶動學(xué)生的積極性,也避免了教師采用相同題目要求,造成部分學(xué)生抄襲作業(yè)的情況[4]:第一級是必做題,是基礎(chǔ)性知識,是知識的直接運用,要求學(xué)生必須掌握;第二級是擴(kuò)展練習(xí)或與實際問題相結(jié)合;第三級為代碼優(yōu)化或選擇軟件大賽相關(guān)或源于軟件大賽的題目。此外,為了拓展學(xué)生思路,通過啟發(fā),讓學(xué)生盡量一題多解,從不同角度切入,設(shè)計不同的代碼,可使學(xué)生將知識點進(jìn)行聯(lián)系、分類、對比,形成一個較完整的知識體系。
4.注重引導(dǎo)學(xué)生學(xué)會編程的思維和方法
在C++課程的第一次課程教學(xué),尤其是在賽前輔導(dǎo)中,筆者一直給學(xué)生灌輸這樣的思想:“思想有多遠(yuǎn),我們才能走多遠(yuǎn)”,在程序設(shè)計中從不同角度切入,盡可能地一題多解,注重啟發(fā)、引導(dǎo)學(xué)生思維,將編程的思路、方法傳授給學(xué)生,培養(yǎng)學(xué)生先思考數(shù)據(jù)結(jié)構(gòu)、算法,再寫代碼的習(xí)慣,提高學(xué)生的學(xué)習(xí)質(zhì)量,以及分析、解決問題的能力。
5.注重程序調(diào)試,培養(yǎng)學(xué)生獨立分析、解決問題的能力
衡量編程能力的一個重要指標(biāo)就是調(diào)試程序的能力,所謂的程序調(diào)試,即排除程序中的錯誤,可分為編譯型錯誤和邏輯型錯誤。對于編譯型錯誤,有錯誤提示,相對容易修改,但很多學(xué)生要么不會翻譯,要么沒有耐心閱讀,要么直接忽略錯誤提示,往往使得一個很簡單的錯誤也很難找到并糾正,打擊了學(xué)生學(xué)習(xí)的興趣和積極性;而邏輯型錯誤,因系統(tǒng)無提示,很難發(fā)現(xiàn),要查找和糾正這些錯誤更是無從下手,因而讓學(xué)生注重程序調(diào)試至關(guān)重要。對于編譯型錯誤可采取邊講邊練的形式和學(xué)生一起閱讀、翻譯提示信息,再進(jìn)行查錯、改錯,將常見的錯誤進(jìn)行翻譯、歸類、總結(jié)后發(fā)給學(xué)生,讓他們在遇到類似問題時先自行解決,當(dāng)他們解決不了時教師再予以解答;而對于邏輯型錯誤,教師不能直接給出答案,應(yīng)通過啟發(fā),循序漸進(jìn)地提問,引導(dǎo)學(xué)生主動思考,得出修改的方法,也可依托實例利用注釋、設(shè)置斷點、逐語句執(zhí)行等方法以邊講邊練的方式進(jìn)行查錯,使學(xué)生在獲得理論知識的同時及時實踐,使得他們能更快更真實地領(lǐng)悟編程中程序調(diào)試方法的重要性,在學(xué)習(xí)中不斷積累調(diào)試的方法、技巧和經(jīng)驗。endprint
6.注重分組教學(xué)模式的使用
依據(jù)教師指定和學(xué)生自愿相結(jié)合的方式將班上的學(xué)生每4人一組,按學(xué)習(xí)、動手能力的強(qiáng)弱分成強(qiáng)弱型和強(qiáng)強(qiáng)型小組:強(qiáng)弱型小組,可使能力強(qiáng)的學(xué)生帶動、幫助能力弱的學(xué)生。強(qiáng)強(qiáng)型小組,他們會對同一問題各抒己見,迸發(fā)更多的思路,創(chuàng)造性地完成實驗任務(wù)。
7.注重及時評價學(xué)生的實驗學(xué)習(xí)效果
對于實驗課上規(guī)定的內(nèi)容,根據(jù)學(xué)生完成的數(shù)量及對編寫的程序依據(jù)結(jié)果的正確性、功能的完善性、算法的效率、程序的可讀性和規(guī)范性、考慮問題的全面性或程序中是否隱藏錯誤等進(jìn)行及時打分,作為每次實驗課的平時成績,最后整合平均成該實驗課的總評成績,以一定的比例計入該課程的總分中,使學(xué)生重視課程的實踐操作。同時,對善于思考和提問、作業(yè)完成質(zhì)量高的學(xué)生要及時表揚(yáng),以達(dá)到樹立學(xué)習(xí)榜樣和激勵學(xué)生互相學(xué)習(xí)、進(jìn)步的作用。
8.注重加強(qiáng)實驗課的管理
為了避免出現(xiàn)學(xué)生實驗課上玩手機(jī)、聊天、淘寶等現(xiàn)象,教師在實驗課前就將實驗任務(wù)布置給學(xué)生,讓他們獨立思考,也可和同學(xué)討論交流后寫好程序的初稿、程序運行所需的測試數(shù)據(jù)、預(yù)期的運行結(jié)果等。此外,為了在日常學(xué)習(xí)中培養(yǎng)學(xué)生的工程意識,還要重視初稿代碼的可讀性、可維護(hù)性及可重用性等,這樣,學(xué)生在課上帶著問題有目的地操作而不是面對電腦一片茫然。每次實驗課前,教師先檢查實驗題目完成情況,讓學(xué)生養(yǎng)成習(xí)慣,提高實驗課的效率,而上機(jī)時重點進(jìn)行編輯、調(diào)試,及時寫出并提交規(guī)范的實訓(xùn)報告,有利于節(jié)約寶貴的上機(jī)時間。
9.注重充分利用網(wǎng)絡(luò)平臺
如今的網(wǎng)絡(luò)已成為重要的交流平臺,充分利用網(wǎng)絡(luò)可延伸實驗課教學(xué),對課堂教學(xué)進(jìn)行補(bǔ)充。具體來說,教師可將實驗指導(dǎo)書、教學(xué)案例、教學(xué)視頻、學(xué)習(xí)網(wǎng)站、經(jīng)典算法、C++函數(shù)庫、編碼規(guī)范、常見編譯錯誤分析、典型錯誤剖析、模擬試題、歷年軟件大賽真題等資料發(fā)布到博客或QQ空間讓學(xué)生分享。這樣,有助于學(xué)生進(jìn)行課前預(yù)習(xí)、課堂重現(xiàn)、課后復(fù)習(xí)、賽前練習(xí)和自測等以提高其學(xué)習(xí)效率。
10.注重實驗課的教學(xué)形式
提高實驗操作課的教學(xué)比例,為學(xué)生提供開放的實驗環(huán)境。除傳統(tǒng)的實驗課外,建議學(xué)校的機(jī)房應(yīng)向?qū)W生開放,并有指導(dǎo)教師指導(dǎo),這樣的環(huán)境增加了學(xué)生上機(jī)實踐的時間,讓學(xué)生有足夠的機(jī)會進(jìn)行實踐操作,通過有充分時間的思考、編程、調(diào)試加深學(xué)生對知識點的理解,才能真正達(dá)到實踐教學(xué)的目的。
11.注重加強(qiáng)課內(nèi)外輔導(dǎo),及時解決學(xué)生遇到的問題
在課內(nèi),應(yīng)對學(xué)生提出的問題、疑問及時分析講解;在課外,應(yīng)充分利用網(wǎng)絡(luò)平臺如微信、QQ等互動的方式對學(xué)生進(jìn)行及時的指點,這樣可避免學(xué)生因問題累積而產(chǎn)生厭學(xué)現(xiàn)象,提高學(xué)生學(xué)習(xí)積極性,教師能與學(xué)生進(jìn)行深層溝通,了解學(xué)習(xí)狀況、進(jìn)度快慢、內(nèi)容的難易,促進(jìn)教師自己進(jìn)行日常教學(xué)反思,調(diào)整自己的講課內(nèi)容、思路、方法等以提高教學(xué)質(zhì)量。
12.注重考核方式的改革
考試是檢驗教學(xué)效果的重要手段,C++課程的考核除了傳統(tǒng)的理論考核、平時作業(yè)、平時實驗考核外,還應(yīng)加入期末上機(jī)操作考核,其題目形式可借鑒軟件大賽預(yù)賽題樣式,這樣不僅擴(kuò)大了總評成績中實驗操作的比例,引起學(xué)生對實驗操作課的重視,也使學(xué)生在學(xué)習(xí)過程中重視自己實踐操作能力的培養(yǎng)。
結(jié)語
為了提高C++程序設(shè)計實驗課中學(xué)生的學(xué)習(xí)興趣、積極性、能力和教學(xué)效果,在保證常規(guī)教學(xué)目標(biāo)實現(xiàn)的同時,結(jié)合軟件大賽,將大賽理念、大賽中的相關(guān)題目滲透到實驗課教學(xué)中,并結(jié)合近年來筆者的教學(xué)經(jīng)驗從多方面進(jìn)行了探討,這不僅對學(xué)生提出了要求,也對教師提出了更高的要求,實施過程中,再加上教師的責(zé)任心、對教學(xué)的努力和投入,實驗課的教學(xué)效果得到了明顯提高,同時也為其他程序設(shè)計類課程教學(xué)效果的提高提供了參考。
參考文獻(xiàn):
[1]崔永紅:《C++面向?qū)ο蟪绦蛟O(shè)計》,北京大學(xué)出版社,2014。
[2]Wang Hong,Wu Wenhu.“New ideas of Tsinghua practice based on competition and teaching,”Computer Education,no.7(2006).
[3]張瑞成、陳至坤、王福斌:《學(xué)科競賽內(nèi)容向大學(xué)生實踐教學(xué)轉(zhuǎn)化的探討》,《實驗技術(shù)與管理》2010年第7期。
[4]肖寧:《結(jié)合軟件大賽提高C++程序設(shè)計課程教學(xué)效果淺談》,《電子測試》2014年第14期。
作者單位:陜西職業(yè)技術(shù)學(xué)院計算機(jī)科學(xué)系 陜西西安endprint