(北京林業(yè)大學(xué)信息學(xué)院,北京 100083)
“C++程序設(shè)計(jì)”是計(jì)算機(jī)專業(yè)的一門重要基礎(chǔ)課,在整個(gè)計(jì)算機(jī)專業(yè)課程體系中具有十分重要的支撐作用。北京林業(yè)大學(xué)計(jì)算機(jī)專業(yè)的“C++程序設(shè)計(jì)”課程在大一下學(xué)期開(kāi)設(shè),是繼C語(yǔ)言之后開(kāi)設(shè)的第二門編程語(yǔ)言課程。筆者針對(duì)該課程教學(xué)過(guò)程中存在的問(wèn)題,從教學(xué)方法、教學(xué)手段等方面進(jìn)行了改革和探索。
由于學(xué)生在“C語(yǔ)言”課程中確立了面向過(guò)程的編程思想,乍轉(zhuǎn)為“C++程序設(shè)計(jì)”課程面向?qū)ο蟮木幊谭绞綍r(shí),很多學(xué)生難以接受和掌握,導(dǎo)致學(xué)生不會(huì)編寫(xiě)程序。
C++語(yǔ)言存在概念多、知識(shí)點(diǎn)多、規(guī)則復(fù)雜、使用靈活、不易調(diào)試等問(wèn)題[1],導(dǎo)致很多學(xué)生難以學(xué)會(huì)編程、害怕編程,進(jìn)而產(chǎn)生厭學(xué)情緒。
學(xué)生在課下對(duì)“C++程序設(shè)計(jì)”課程的重點(diǎn)難點(diǎn)問(wèn)題進(jìn)行復(fù)習(xí)時(shí),只看教師的課件和教材不能解決問(wèn)題;編寫(xiě)程序遇到錯(cuò)誤不能及時(shí)找到教師解決問(wèn)題,使學(xué)生課下復(fù)習(xí)無(wú)章可循。這些都嚴(yán)重影響學(xué)生的編程積極性。因此,教師應(yīng)采用有效的教學(xué)方法和教學(xué)手段不斷激發(fā)學(xué)生的學(xué)習(xí)興趣,提高學(xué)生的編程能力,讓學(xué)生掌握面向?qū)ο蟮某绦蛟O(shè)計(jì)方法和技巧。
興趣是最好的老師,它能調(diào)動(dòng)學(xué)生的主觀能動(dòng)性,引發(fā)學(xué)生的思索,探求對(duì)C++語(yǔ)言學(xué)習(xí)的興趣和實(shí)踐。只要學(xué)生有興趣,就能激發(fā)他們的學(xué)習(xí)積極性和主動(dòng)性,從而能夠更好地學(xué)習(xí)。因此,教師可以在“C++程序設(shè)計(jì)”課程上課伊始,演示幾個(gè)用C++語(yǔ)言編寫(xiě)的程序,如一些小游戲或者計(jì)算器、管理系統(tǒng)等,使學(xué)生將“C++程序設(shè)計(jì)”課程與日常生活聯(lián)系起來(lái),了解使用C++語(yǔ)言解決實(shí)際問(wèn)題的實(shí)例,從而引發(fā)學(xué)生的學(xué)習(xí)興趣,樹(shù)立用C++語(yǔ)言解決實(shí)際問(wèn)題的信心。
另外,教師在后續(xù)的教學(xué)過(guò)程中,也要采用多種教學(xué)方式,引起學(xué)生的學(xué)習(xí)興趣,激發(fā)學(xué)生的學(xué)習(xí)積極性。教師在課上,可以逐步引導(dǎo)學(xué)生自行完成一個(gè)相對(duì)復(fù)雜的程序,例如自行完成購(gòu)物管理系統(tǒng)、圖書(shū)管理系統(tǒng)的設(shè)計(jì)。這種方式不僅提高了學(xué)生的編程能力,還使學(xué)生從中獲得了成就感,從而不斷激發(fā)學(xué)生的學(xué)習(xí)興趣。
筆者緊緊圍繞北京林業(yè)大學(xué)計(jì)算機(jī)專業(yè)以程序設(shè)計(jì)能力和軟件開(kāi)發(fā)能力為核心的人才培養(yǎng)目標(biāo)[2],提出了“1+2+3”的教學(xué)模式,見(jiàn)圖1。
“1”為1條主線,即以培養(yǎng)學(xué)生的程序設(shè)計(jì)能力和軟件開(kāi)發(fā)能力為主線。通過(guò)“C++程序設(shè)計(jì)”課程的學(xué)習(xí),提高學(xué)生的編程能力,為學(xué)生后續(xù)課程的學(xué)習(xí)奠定基礎(chǔ)。
“2”為2個(gè)途徑,即通過(guò)在機(jī)房授課和課上實(shí)驗(yàn)2個(gè)途徑完成授課過(guò)程。在這2個(gè)途徑中教師要不斷探索教學(xué)方法,激發(fā)學(xué)生興趣,集中學(xué)生注意力,調(diào)動(dòng)學(xué)生積極性。
“3”為3種輔助手段,即通過(guò)視頻課、QQ群、現(xiàn)代化教輔技術(shù)等3種輔助手段,促進(jìn)學(xué)生課下的學(xué)習(xí),提高學(xué)生的課下學(xué)習(xí)效果。
學(xué)生通過(guò)“2”(2個(gè)途徑)完成“C++程序設(shè)計(jì)”課程的課堂教學(xué)任務(wù),學(xué)習(xí)和掌握C++的知識(shí)點(diǎn);通過(guò)“3”(3種輔助手段)實(shí)現(xiàn)課下學(xué)習(xí)、教師答疑,復(fù)習(xí)和鞏固所學(xué)的知識(shí);從而實(shí)現(xiàn)“1”(1條主線)的教學(xué)目標(biāo),提高學(xué)生的程序設(shè)計(jì)能力。
圖1 “C++程序設(shè)計(jì)”課程“1+2+3”教學(xué)模式
1.多種教學(xué)方法相結(jié)合,全方位吸引學(xué)生注意力,提高教學(xué)效果
為了更好地培養(yǎng)學(xué)生的編程能力,“C++程序設(shè)計(jì)”課程全部在機(jī)房上課,便于學(xué)生及時(shí)上機(jī)練習(xí),但會(huì)導(dǎo)致師生之間不能面對(duì)面交流,學(xué)生坐在顯示器后面教師不能判斷他們是否認(rèn)真聽(tīng)講。另外,據(jù)上海青年報(bào)報(bào)道,大學(xué)生上課時(shí)能集中注意力的尚不足一半,在回答“能堅(jiān)持多久集中精神地聽(tīng)課”時(shí),僅有28.8%的大學(xué)生能在課堂上集中注意力超過(guò)30分鐘[3]。而如果學(xué)生上課不能集中注意力,則他們就聽(tīng)不到教師所講的內(nèi)容,也就不能理解相關(guān)的知識(shí)點(diǎn),最終導(dǎo)致學(xué)生無(wú)法學(xué)會(huì)編程。為此,筆者在“C++程序設(shè)計(jì)”課堂上采取多種教學(xué)方式,提高學(xué)生的注意力,使其緊跟教師思路,上課不走神,充分理解吸收教師所講的內(nèi)容,見(jiàn)圖2。
圖2 “C++程序設(shè)計(jì)”課程“測(cè)-講-練-講”式教學(xué)對(duì)學(xué)生注意力的影響情況
(1)“測(cè)-講-練-講”式教學(xué)
為了進(jìn)一步提高學(xué)生注意力,使學(xué)生參與到“C++程序設(shè)計(jì)”課程教學(xué)過(guò)程中,激發(fā)學(xué)生學(xué)習(xí)興趣,筆者提出了“測(cè)-講-練-講”式教學(xué)方法。
“測(cè)”即測(cè)驗(yàn)階段。上課時(shí),筆者抽出5分鐘時(shí)間先回顧一下上次課程的內(nèi)容,并針對(duì)上次課程的知識(shí)點(diǎn),給學(xué)生出幾道題進(jìn)行隨機(jī)提問(wèn)。這樣做不僅幫助學(xué)生回憶前面所學(xué)知識(shí),而且使學(xué)生剛上課就進(jìn)入集中注意力狀態(tài)。
“講”即講課階段。教師在“測(cè)”階段引起了學(xué)生的高度注意,使學(xué)生快速接收教師課上所講的知識(shí)點(diǎn)。教師在課堂上講授20分鐘左右時(shí)間,學(xué)生的注意力開(kāi)始逐漸下降,為了繼續(xù)集中學(xué)生注意力,調(diào)動(dòng)學(xué)生的學(xué)習(xí)積極性,應(yīng)快速進(jìn)入“練”的階段。
“練”即練習(xí)階段。教師根據(jù)課上所講的知識(shí)點(diǎn)穿插一個(gè)與知識(shí)點(diǎn)相關(guān)的習(xí)題或程序進(jìn)行練習(xí),并要求學(xué)生在限定時(shí)間內(nèi)上交答案或編寫(xiě)出新的程序。同時(shí)將學(xué)生的答題和編程情況納入平時(shí)成績(jī)中。因此,學(xué)生課上必須集中注意力,緊跟教師的授課思路,理解教師所講的知識(shí)點(diǎn),否則一旦走神,就不會(huì)答題或?qū)懖怀龀绦颍唤處熆赏ㄟ^(guò)學(xué)生習(xí)題回答情況掌握、了解學(xué)生對(duì)理論知識(shí)的理解程度,通過(guò)學(xué)生編寫(xiě)的程序掌握學(xué)生的編程情況,從而能夠更好地對(duì)學(xué)生進(jìn)行有針對(duì)性的指導(dǎo)。講課階段后緊跟練習(xí),不僅可以再次集中學(xué)生注意力,便于后續(xù)課程的學(xué)習(xí),還可以讓學(xué)生及時(shí)運(yùn)用所學(xué)內(nèi)容,解決“學(xué)用脫節(jié)”的問(wèn)題。
“講”即講課階段。通過(guò)練習(xí)再次集中學(xué)生注意力后,教師可繼續(xù)進(jìn)行后續(xù)知識(shí)點(diǎn)的講授。因此,筆者認(rèn)為通過(guò)“測(cè)-講-練-講”教學(xué)模式的教學(xué)后,不僅使學(xué)生在課上一直保持注意力集中的狀態(tài),便于學(xué)生接收教師所講的內(nèi)容,而且還可以讓學(xué)生及時(shí)運(yùn)用所學(xué)知識(shí),解決“學(xué)用脫節(jié)”的問(wèn)題,達(dá)到學(xué)以致用的目的。
(2)寓教于樂(lè)式教學(xué)
為了便于學(xué)生掌握抽象的內(nèi)容,教師在“C++程序設(shè)計(jì)”課堂上要做一些小游戲,通過(guò)游戲讓學(xué)生在玩樂(lè)中輕松掌握知識(shí)。例如,教師在講解友元類時(shí),如果類B是類A的友元類,則類B的所有成員函數(shù)都可視為類A的友元函數(shù),都能訪問(wèn)類A的私有和受保護(hù)的成員,反之則不行。但是,學(xué)生對(duì)于這兩者之間的關(guān)系容易混淆,因此教師可通過(guò)小游戲幫助學(xué)生理解,具體做法是請(qǐng)2名學(xué)生(甲和乙)到講臺(tái),分別代表類A和類B,2名學(xué)生各有若干個(gè)筆(私有成員)。如果甲的筆可以給乙用,讓大家猜測(cè)哪個(gè)是類A,哪個(gè)是類B。學(xué)生在游戲中輕松地掌握了友元類知識(shí)。
2.完善實(shí)踐教學(xué)方法,提高學(xué)生的編程能力
(1)合理安排實(shí)驗(yàn)內(nèi)容,鍛煉學(xué)生的編程能力
在“C++程序設(shè)計(jì)”課程教學(xué)中,為使學(xué)生更好地掌握C++編程知識(shí)和技巧,實(shí)驗(yàn)課是必不可少的?!癈++程序設(shè)計(jì)”實(shí)驗(yàn)課程全部在OJ(online judge system,即在線評(píng)判系統(tǒng),簡(jiǎn)稱OJ)上進(jìn)行,并要求學(xué)生在規(guī)定時(shí)間內(nèi)完成,學(xué)生可在OJ上看到自己的實(shí)時(shí)排名。每次實(shí)驗(yàn),教師都圍繞課上所講的知識(shí)點(diǎn)布置相關(guān)的編程題,最少4道題,題目中除了適當(dāng)設(shè)置有關(guān)算法問(wèn)題外,還有一些較難的選做題以便學(xué)有余力的學(xué)生練習(xí),目的是培養(yǎng)和提高學(xué)生利用所學(xué)知識(shí)解決實(shí)際問(wèn)題的能力。
(2)注重程序的運(yùn)行實(shí)踐,培養(yǎng)學(xué)生調(diào)試程序的能力
在“C++程序設(shè)計(jì)”課程教學(xué)中,要使程序達(dá)到正確的使用效果,需要經(jīng)過(guò)編寫(xiě)、編譯、鏈接、運(yùn)行等步驟實(shí)現(xiàn)。而學(xué)生編寫(xiě)的C++程序或多或少存在錯(cuò)誤,不能直接運(yùn)行。因此,調(diào)試也是學(xué)生在“C++程序設(shè)計(jì)”課程中需要掌握的重要技能,學(xué)生必須能夠?qū)ψ约壕帉?xiě)的程序根據(jù)VS的提示進(jìn)行修改、調(diào)試。學(xué)生容易出現(xiàn)的錯(cuò)誤如下。
①編譯錯(cuò)誤。當(dāng)學(xué)生看到VS提示的編譯錯(cuò)誤時(shí),雖然能看懂錯(cuò)誤,但不會(huì)改錯(cuò),只能依賴教師幫助解決問(wèn)題。在“C++程序設(shè)計(jì)”實(shí)驗(yàn)課上,一名教師需要指導(dǎo)2個(gè)班的學(xué)生,教師累、學(xué)生等得煩,致使大多數(shù)學(xué)生實(shí)驗(yàn)課上不能完成所有實(shí)驗(yàn)題目,需要課下完成該題目。而學(xué)生課下編程出現(xiàn)錯(cuò)誤自己又不能解決問(wèn)題,長(zhǎng)此以往,會(huì)影響學(xué)生學(xué)習(xí)的主動(dòng)性,打擊學(xué)生的自信心。因此,教師必須將學(xué)生編程過(guò)程中出現(xiàn)的常見(jiàn)錯(cuò)誤進(jìn)行整理,讓學(xué)生熟記這些錯(cuò)誤的解決方法,以便學(xué)生課下編程出現(xiàn)錯(cuò)誤時(shí)自己解決問(wèn)題。
②程序邏輯錯(cuò)誤。程序邏輯錯(cuò)誤比較難以改正。如果學(xué)生編寫(xiě)的程序沒(méi)有編譯錯(cuò)誤,程序是可以運(yùn)行的,但是運(yùn)行結(jié)果與預(yù)期結(jié)果不符,這就是程序邏輯錯(cuò)誤。例如,題目要求按照從小到大的順序排列數(shù)據(jù),而學(xué)生編寫(xiě)的程序能夠運(yùn)行,但是運(yùn)行結(jié)果并沒(méi)有按照順序排列數(shù)據(jù)。這時(shí)就需要學(xué)生通過(guò)VS中的單步調(diào)試功能查找錯(cuò)誤并進(jìn)行修改。教師可以利用學(xué)生的這個(gè)錯(cuò)誤程序演示單步調(diào)試的過(guò)程,經(jīng)過(guò)單步執(zhí)行逐漸找到錯(cuò)誤的緣由并改成正確的程序。單步調(diào)試是學(xué)生在進(jìn)行程序設(shè)計(jì)時(shí)必須掌握的能力,而大多數(shù)學(xué)生這方面的能力都比較薄弱并且重視度不夠。因此,教師可以選用學(xué)生典型的錯(cuò)誤程序讓學(xué)生自行通過(guò)單步調(diào)試功能進(jìn)行修改,不僅能夠強(qiáng)化學(xué)生調(diào)試程序的意識(shí),培養(yǎng)學(xué)生調(diào)試程序的能力,而且能夠鍛煉學(xué)生查找錯(cuò)誤、改正錯(cuò)誤的能力,提高學(xué)生的編程自信,使學(xué)生獲得編程成就感。
在“C++程序設(shè)計(jì)”課程教學(xué)中,單純依靠課上的時(shí)間,學(xué)生并不能完全掌握教師所講的內(nèi)容。課下,學(xué)生需要根據(jù)自己的實(shí)際情況進(jìn)行查缺補(bǔ)漏,為此在該課程教學(xué)中需引入能促進(jìn)教學(xué)的輔助教學(xué)手段。
1.視頻
圍繞提高計(jì)算機(jī)專業(yè)學(xué)生核心能力——程序設(shè)計(jì)能力這一培養(yǎng)目標(biāo),為了便于學(xué)生課下自學(xué)和復(fù)習(xí),教師將“C++程序設(shè)計(jì)”課程中的重點(diǎn)難點(diǎn)內(nèi)容錄制成視頻上傳,方便學(xué)生隨時(shí)學(xué)習(xí)。視頻應(yīng)包括類和對(duì)象、繼承和派生、多態(tài)和虛函數(shù)、運(yùn)算符重載、文件等內(nèi)容。同時(shí),視頻應(yīng)包括實(shí)際應(yīng)用案例、動(dòng)畫(huà)演示、實(shí)際操作等內(nèi)容,以解決程序設(shè)計(jì)的抽象性、枯燥性、不易上手和學(xué)生設(shè)計(jì)能力不足的問(wèn)題。
2.QQ群
為了更好地與學(xué)生交流,更好地對(duì)學(xué)生進(jìn)行個(gè)性化指導(dǎo),教師上課時(shí)可以建立一個(gè)“C++程序設(shè)計(jì)”課程QQ群。通過(guò)課程QQ群,教師可以將參考資料以及視頻放到群里便于學(xué)生隨時(shí)隨地使用手機(jī)進(jìn)行查看和學(xué)習(xí);可以督促學(xué)生進(jìn)行學(xué)習(xí),提醒學(xué)生提交實(shí)驗(yàn)程序;可以發(fā)布課程公告,便于及時(shí)通知學(xué)生相關(guān)事宜;可以解答學(xué)生提出的問(wèn)題。通過(guò)課程QQ群,學(xué)生可以了解課程信息;向教師咨詢問(wèn)題;與教師和同學(xué)討論在學(xué)習(xí)、編程過(guò)程中遇到的問(wèn)題,便于解決編程困難;分享自己的學(xué)習(xí)經(jīng)驗(yàn)和心得,提高學(xué)生的學(xué)習(xí)積極性和主動(dòng)性。
3.現(xiàn)代化教輔技術(shù)
為了在“C++程序設(shè)計(jì)”課堂上更好地與學(xué)生互動(dòng),教師可以借助現(xiàn)代化的教輔技術(shù),例如雨課堂、微助教等,開(kāi)展教學(xué)活動(dòng)。教師可以通過(guò)雨課堂進(jìn)行簽到考勤、練習(xí)發(fā)布等,學(xué)生在手機(jī)上進(jìn)行回復(fù)。通過(guò)這些輔助手段完成考勤統(tǒng)計(jì)、學(xué)生練習(xí)回答情況統(tǒng)計(jì)、課后測(cè)驗(yàn)統(tǒng)計(jì)等工作,不僅減輕了教師的統(tǒng)計(jì)負(fù)擔(dān),而且使學(xué)生的手機(jī)成為了學(xué)習(xí)的工具。
通過(guò)課上課下雙管齊下的教學(xué),學(xué)生不論在課上還是在課下遇到問(wèn)題的時(shí)候,都可以及時(shí)與教師進(jìn)行溝通交流,解決了編程過(guò)程中出現(xiàn)錯(cuò)誤的問(wèn)題,激發(fā)了學(xué)生學(xué)習(xí)的積極性。2018學(xué)年與2017學(xué)年相比,學(xué)生積極參與并正確完成實(shí)驗(yàn)選做題的人數(shù)從46人提高到了67人,參與的學(xué)生比例由73.02%提高到90.54%。
在“C++程序設(shè)計(jì)”課程教學(xué)中,通過(guò)培養(yǎng)學(xué)生的程序調(diào)試能力,學(xué)生自行解決程序中出現(xiàn)問(wèn)題的能力增強(qiáng),激發(fā)了學(xué)生的編程自信心,提高了學(xué)生的編程能力?!癈++程序設(shè)計(jì)”課程的考核是機(jī)考,要求學(xué)生在3小時(shí)內(nèi)編寫(xiě)完成7條左右的程序,2018學(xué)年與2017學(xué)年相比,學(xué)生機(jī)考的優(yōu)秀率從4.76%提高到18.92%,不及格率從36.5%降到24.3%。