張偉偉 王曉 甘勇 李曄
摘要:針對C/C++語言程序設(shè)計(jì)課程語法規(guī)則繁瑣、概念抽象等特點(diǎn),結(jié)合我校實(shí)際情況,通過深入分析課堂教學(xué)、上機(jī)實(shí)驗(yàn)及課程考核等教學(xué)環(huán)節(jié),從教學(xué)方法、實(shí)驗(yàn)設(shè)計(jì)及課程考核三方面提出改進(jìn)方案,提出了以培養(yǎng)學(xué)生計(jì)算思維為最終目標(biāo),以提高學(xué)生學(xué)習(xí)興趣,激發(fā)學(xué)生學(xué)習(xí)積極性為目的,以“階梯式”“實(shí)例驅(qū)動”為教學(xué)方法,整合教學(xué)團(tuán)隊(duì)共同促進(jìn)教學(xué)的模式。通過教學(xué)改革,激發(fā)了學(xué)生對C/C++語言程序設(shè)計(jì)的學(xué)習(xí)興趣,培養(yǎng)了學(xué)生的動手實(shí)踐能力,提高了教學(xué)質(zhì)量水平。
關(guān)鍵詞:C/C++語言程序設(shè)計(jì) 實(shí)例法 教學(xué)改革
1引言
C/C++語言程序設(shè)計(jì)是計(jì)算機(jī)專業(yè)本科生的專業(yè)基礎(chǔ)課程,也是大學(xué)計(jì)算機(jī)基礎(chǔ)系列課程的核心課程。通過本系列課程的學(xué)習(xí),旨在使學(xué)生掌握程序編寫的基本技能,培養(yǎng)程序設(shè)計(jì)思想和方法,養(yǎng)成良好的編程風(fēng)格,編制高效可靠的程序,進(jìn)而具備靈活利用所學(xué)知識解決實(shí)際問題的能力。長期以來,高校都在不斷地探索和實(shí)踐關(guān)于C/C++語言程序設(shè)計(jì)課程的教學(xué)模式。傳統(tǒng)的教學(xué)一般著重概念和語法規(guī)則,缺少學(xué)習(xí)的實(shí)用性和針對性,實(shí)驗(yàn)環(huán)節(jié)與課堂教學(xué)環(huán)節(jié)存在不同程度的脫節(jié)。面對繁復(fù)枯燥的語法規(guī)則和程序結(jié)構(gòu),學(xué)生也很難的有學(xué)習(xí)興趣。因此,根據(jù)質(zhì)量工程的相關(guān)要求,研究教學(xué)改革方案,找出目前C/C++語言程序設(shè)計(jì)課程在教學(xué)中存在的主要問題,對現(xiàn)有的教學(xué)方法和教學(xué)手進(jìn)行現(xiàn)代化研究與實(shí)踐,具有十分重要的現(xiàn)實(shí)意義。
2 C/C++語言程序設(shè)計(jì)教學(xué)現(xiàn)狀
本人承擔(dān)了多年的C/C++語言程序設(shè)計(jì)課程的教學(xué)工作,在教學(xué)過程中發(fā)現(xiàn)了現(xiàn)有教學(xué)模式的一些問題和不足,分析總結(jié)如下:
(1)教學(xué)中過度依賴課本,“照本宣科”現(xiàn)象比較普遍。受中學(xué)教育模式影響,大多數(shù)教師授課時傾向于依賴選定的教材或很少幾本參考教材授課,課程章節(jié)固化,凡事以課本為主,課本里有什么就講什么,授課內(nèi)容“流程化”“格式化”。這雖然有助于教學(xué)內(nèi)容的結(jié)構(gòu)和完整,學(xué)生也能直接沿用中學(xué)培養(yǎng)的習(xí)慣獲得知識,但這只不過是“填鴨式”教學(xué)的延伸。長此以往,學(xué)生學(xué)習(xí)的主動性會逐漸喪失,對課本外的東西提不起興趣,學(xué)習(xí)也只是為了應(yīng)付考試。
(2)過于偏重理論教學(xué),實(shí)踐教學(xué)所占比重較小。在有限的課時教學(xué)中,傳統(tǒng)方式僅能將基本的、重要的概念、語義語法規(guī)則教授給學(xué)生,而對其應(yīng)用方式、更深層次的知識點(diǎn)、探索及發(fā)散性的科學(xué)問題涉及較少。課程考核也大多片面強(qiáng)調(diào)書面成績,對于C/C++語言程序設(shè)計(jì)這種實(shí)踐性要求強(qiáng)的課程,書面考試并不能反映出學(xué)生對課程的掌握水平,反而誤導(dǎo)部分學(xué)生靠“死記硬背”課本上的知識點(diǎn)和程序片段蒙混過關(guān)。
(3)課程銜接性差,在知識體系中,沒能很好形成與“計(jì)算機(jī)文化基礎(chǔ)”和“計(jì)算機(jī)應(yīng)用基礎(chǔ)”的銜接,也沒有把C/C++語言知識應(yīng)用于專業(yè)問題的描述和求解中。在教學(xué)中,缺少利用所學(xué)知識解決實(shí)際問題的教學(xué)引導(dǎo),書本與現(xiàn)實(shí)隔離,很難做到“學(xué)為所用”。
針對上述問題,結(jié)合本校實(shí)際,對C/C++語言課程教學(xué)的主要環(huán)節(jié)教學(xué)模式、上機(jī)實(shí)踐、課程考核等方面進(jìn)行了研究與探討。
3 C/C++語言程序設(shè)計(jì)教學(xué)改革與探索
結(jié)合C/C++課程的特點(diǎn),針對傳統(tǒng)教學(xué)中存在的問題,積極進(jìn)行課堂教學(xué)、實(shí)驗(yàn)教學(xué)和考核方式的改革,具體從以下幾個方面進(jìn)行了一定的探索實(shí)踐:
3.1課程教學(xué)改革
(1)打破課本章節(jié)格式,探索“實(shí)例驅(qū)動式”和“階梯式”教學(xué)方法
針對C/C++語言程序設(shè)計(jì)的課程特色,強(qiáng)調(diào)“從實(shí)踐中來,到實(shí)踐中去”的教學(xué)目標(biāo)。在課程教學(xué)中,注意引入具體化的實(shí)例,使得概念的抽象都來源于實(shí)際的例子。比如在C語言教學(xué)中發(fā)現(xiàn)很多同學(xué)上課時能聽懂,看別人的程序也能看懂,但自己動手去寫時卻無從下手。這種情況不是個例,而是學(xué)習(xí)語言類課程時大多數(shù)學(xué)生都存在的問題。在教學(xué)中可以結(jié)合生活中的實(shí)際例子來示范,為學(xué)生“看”和“寫”搭建橋梁,培養(yǎng)程序設(shè)計(jì)思想。例如,從做面包到C語言程序編寫的示例(圖1)。在教學(xué)中,可以引導(dǎo)學(xué)生分步考慮面包的制作工序,操作中需要摒除詳細(xì)的細(xì)節(jié)部分,抽象出核心的流程,然后一步一步代入C語言的程序設(shè)計(jì)結(jié)構(gòu)和語法規(guī)則,使得學(xué)生對課程內(nèi)容有熟悉度和參與感。
通過“做面包”的例子,可以結(jié)合變量在內(nèi)存中存儲的方式,幫助學(xué)生掌握“變量需要先聲明才能使用”的知識點(diǎn),同時也鋪墊了函數(shù)的概念,還可以進(jìn)一步擴(kuò)展加入分支結(jié)構(gòu)(面包的不同口味),循環(huán)結(jié)構(gòu)(制作多份面包)等。通過動員學(xué)生逐步思考,一起動手做面包,把計(jì)算思維與有趣的課堂互動結(jié)合起來,既提高了學(xué)生學(xué)習(xí)的興趣,也“潤物細(xì)無聲”地把編程思維傳達(dá)到學(xué)生心中。而后在學(xué)生通過課程學(xué)習(xí)已經(jīng)建立了一定的編程思維的基礎(chǔ)上,再結(jié)合我校的卓越工程師計(jì)劃,把實(shí)際項(xiàng)目引入課堂中來,深入引導(dǎo)實(shí)例教學(xué),實(shí)現(xiàn)學(xué)生從“課本學(xué)習(xí)”到“實(shí)踐學(xué)習(xí)”的轉(zhuǎn)變,通過項(xiàng)目實(shí)例讓學(xué)生親身感受所學(xué)知識的用處,也為畢業(yè)后的職業(yè)發(fā)展打下扎實(shí)的基礎(chǔ)。
另一方面,知識的獲取需要一個循序漸進(jìn)的過程。這就需要教師在備課時,將同類型問題找出來,將這些問題按難易程度排隊(duì)上課,先讓學(xué)生解決最簡單的問題,再依次提高問題的難度。通過教學(xué),學(xué)生對于同類問題的解決就有了比較深刻的認(rèn)識。比如上面提到的做面包的問題,同一個問題可以分級擴(kuò)展,從做一份面包到做多份面包,從做單一口味的面包到做多種口味的面包,從做面包到賣面包,進(jìn)而面包分類,存貨處理等等。通過與實(shí)際例子結(jié)合循序引進(jìn),反復(fù)強(qiáng)調(diào)知識點(diǎn)加深學(xué)生印象,打牢基礎(chǔ)。C語言的開設(shè)一般在大學(xué)一年級,此時著重培養(yǎng)學(xué)習(xí)興趣和規(guī)范學(xué)生養(yǎng)成良好的編程習(xí)慣,而C++的學(xué)習(xí)著重于面向?qū)ο蟮某绦蛟O(shè)計(jì),一般開設(shè)于大二下學(xué)期或者大三上學(xué)期,在C++面向?qū)ο笳Z言學(xué)習(xí)時,結(jié)合類和對象的概念以及繼承和派生等等知識點(diǎn)還可以對“做面包”的問題再做進(jìn)一步擴(kuò)展,從做面包到做饅頭、餅干等各種糕點(diǎn),鼓勵學(xué)生動腦思考逐漸擴(kuò)充功能,可以自己編程開發(fā)一個具備制作、買賣、分類、存貨處理等功能的糕點(diǎn)鋪。教學(xué)中可以根據(jù)需要切換各種生活場合,提高學(xué)生興趣,強(qiáng)調(diào)編程思想源于生活,服務(wù)于生活,學(xué)生在日常中也會經(jīng)?;叵肫鹫n堂所學(xué)知識,達(dá)到事半功倍的效果。
(2)高效利用團(tuán)隊(duì)教學(xué)資源,體現(xiàn)從計(jì)算機(jī)基礎(chǔ)課到專業(yè)課的順利交接
C/C++語言程序設(shè)計(jì)立足于引導(dǎo)學(xué)生建立基本的“人機(jī)互動”概念,構(gòu)建編程思維理念,掌握核心程序設(shè)計(jì)方法,開發(fā)“發(fā)現(xiàn)問題,凝練問題,求解問題”的能力。它是計(jì)算機(jī)基礎(chǔ)課到計(jì)算機(jī)專業(yè)課程的重要銜接,所以在課程設(shè)計(jì)上,要逐步培養(yǎng)學(xué)生從“使用計(jì)算機(jī)工具→理解計(jì)算機(jī)工作原理→開發(fā)計(jì)算機(jī)軟硬件”的計(jì)算思維。但這個目的只通過一門課程是無法完成的,在教學(xué)過程中,需要利用院系優(yōu)秀的教學(xué)資源,組建教學(xué)團(tuán)隊(duì),使得課程選取→大綱制定→計(jì)劃培養(yǎng)→落實(shí)實(shí)施形成系統(tǒng)化,脈絡(luò)化的結(jié)構(gòu),加強(qiáng)課程之間的銜接和交互,增加知識的穿插講授,使得各個課程相輔相成,相得益彰,起到事半功倍的作用。通過對不同專業(yè)需求的分析,在制定教學(xué)大綱時注重課程的銜接,在實(shí)際操作中注重教學(xué)團(tuán)隊(duì)中任課教師課堂情況的反饋,通過強(qiáng)化教學(xué)內(nèi)容和學(xué)生掌握情況雙重渠道,避免課程之間的脫節(jié)。針對一門課程,學(xué)生學(xué)分的獲取和講授課時的結(jié)束并不意味著本門課程的結(jié)束,在形成系統(tǒng)化的課程設(shè)計(jì)后,可以有效利用每門課程的信息反饋,有的放矢的對學(xué)生薄弱環(huán)節(jié)進(jìn)行再強(qiáng)化,達(dá)到扎實(shí)學(xué)習(xí),學(xué)以致用,而不僅僅是應(yīng)付考試的良性循環(huán)機(jī)制。
3.2上機(jī)實(shí)踐改革
計(jì)算機(jī)語言類課程的學(xué)習(xí)關(guān)鍵在于動手實(shí)踐,但即使意識到了實(shí)踐的重要性,學(xué)生真正動手也往往受限于上機(jī)時間和實(shí)踐平臺。在傳統(tǒng)的實(shí)驗(yàn)教學(xué)模式下,大多此類課程都由實(shí)驗(yàn)指導(dǎo)書作為參照,學(xué)生按圖索驥的輸入一些代碼,完成一些任務(wù)。評判的方式也大多依賴于教師,學(xué)生實(shí)踐得不到實(shí)時反饋,積極性很難調(diào)動起來,課下也不會有意識去編程實(shí)踐。通過借助我校搭建的ACM/ICPC競賽平臺,學(xué)生平時有充足的題目可供練習(xí)。而且所有題目規(guī)范,輸入輸出格式明確,評判也由機(jī)器在后臺完成,正確與否也能實(shí)時反饋。通過多組數(shù)據(jù)的測試,競賽平臺能夠發(fā)現(xiàn)并迫使學(xué)生修正編程中存在的容易人為忽略的問題。另外,ACM/ICPC競賽平臺還可以按照班級、年級、專業(yè)等排名,學(xué)生也能實(shí)時監(jiān)控自己做題的數(shù)量、成功率等,并可以通過Q&A的環(huán)節(jié)進(jìn)行錯誤求助并與其他同學(xué)溝通。學(xué)生的學(xué)習(xí)積極性一下子就提高了起來,出錯的題目,知識點(diǎn)通過討論也能自己在課余時間解決。
通過與ACM/ICPC競賽平臺的結(jié)合,主要實(shí)現(xiàn)了以下幾個方面的探索:
(1)激發(fā)學(xué)生學(xué)習(xí)興趣,創(chuàng)造興趣學(xué)習(xí)小組
在ACM/ICPC的平臺的輔助下,激發(fā)學(xué)生分組分隊(duì)共同解決問題,成立程序編寫互幫互助小組,采用不定時競賽的方式對各小組進(jìn)行考評,并輔以獎勵和懲罰措施,盡量讓每個學(xué)生都不落隊(duì)。通過組隊(duì),同學(xué)之間也有了更好的溝通渠道,每個人成為團(tuán)隊(duì)的一部分,培養(yǎng)了學(xué)生的分享和互幫互助的團(tuán)隊(duì)合作精神。
(2)鼓勵學(xué)生涉獵算法等相關(guān)知識,培養(yǎng)計(jì)算思維
通過ACM選拔,ACM戰(zhàn)隊(duì)的主力隊(duì)員會通過集訓(xùn)學(xué)習(xí)數(shù)論、計(jì)算幾何、動態(tài)規(guī)劃、二分圖、博弈論、網(wǎng)絡(luò)流等相關(guān)知識,但競賽選拔的隊(duì)員屈指可數(shù)。這些優(yōu)秀的種子選手和現(xiàn)有的ACM培訓(xùn)資源卻未被大多數(shù)學(xué)生利用。C/C++語言類教學(xué)和大多數(shù)計(jì)算機(jī)類課程所追求目標(biāo),其核心就是培養(yǎng)學(xué)生的計(jì)算思維。我們采用了通過優(yōu)秀學(xué)生和ACM集訓(xùn)隊(duì)帶隊(duì)教師的不定期講座和培訓(xùn),以及培訓(xùn)資料等資源的共享來吸引更多的學(xué)生參與到程序設(shè)計(jì)的隊(duì)伍中來,并已經(jīng)在學(xué)生中通過口耳相傳起到了一定的影響力。在上機(jī)課中適度引入部分難度稍大的,需要借助其他相關(guān)知識才能解決的問題,鼓勵學(xué)生查閱資料,自己動腦,動手去分析和解決問題,養(yǎng)成良好的主動學(xué)習(xí)習(xí)慣。
3.3課程考核改革
課程設(shè)置的目的不是考試,而是解決問題,特別對于C/C++語言程序設(shè)計(jì)類需要實(shí)踐的課程尤其是這樣。傳統(tǒng)的卷面考試不僅不能反映學(xué)生對課程的掌握程度,反而誘導(dǎo)出諸如靠劃重點(diǎn)、死記硬背程序企圖蒙混過關(guān)拿到學(xué)分的問題。所以在對C/C++語言程序設(shè)計(jì)考核時,我們采用了平時成績和期末機(jī)考相結(jié)合的方式??荚嚦煽兎秩糠纸M成,上課活躍度占30%,分組實(shí)踐占30%,期末機(jī)考占40%。其中,上課活躍度包括出勤次數(shù)和上課提問情況;分組實(shí)踐指通過小組成員共同努力分析、解決實(shí)例的情況,一般在上機(jī)時根據(jù)進(jìn)度提出難度稍高的問題,鼓勵學(xué)生通過團(tuán)隊(duì)協(xié)作,查閱課外資料等來完成;期末機(jī)考是從ACM平臺上抽取一部分題目作為期末考核,考察學(xué)生實(shí)際編程能力。
4結(jié)束語
在研究與探索C/C++語言程序設(shè)計(jì)教學(xué)的過程中,通過“階梯式”“實(shí)例驅(qū)動”的教學(xué)方法,輔以ACM競賽平臺,優(yōu)化配置團(tuán)隊(duì)教學(xué)資源,追求實(shí)用性、系統(tǒng)化、高效率的課程實(shí)現(xiàn),全面提升學(xué)生的對程序設(shè)計(jì)的實(shí)踐應(yīng)用能力。通過教學(xué)改革,提高學(xué)生在學(xué)習(xí)中發(fā)現(xiàn)問題、分析問題和解決問題的能力,培養(yǎng)學(xué)生編程思維,計(jì)算思維。實(shí)踐表明,本文提出的教學(xué)改進(jìn)方法可以激發(fā)學(xué)生學(xué)習(xí)的熱情和興趣,有效地提高了C/C++語言程序設(shè)計(jì)課程的教學(xué)效果。
參考文獻(xiàn):
[1]文學(xué)志,方巍,王洋.提高C語言課程教學(xué)效果的探討[J].中國電力教育,2013,(31):77-78.
[2]李濤.C/C++教學(xué)模式的探索與實(shí)踐[J].科技創(chuàng)新導(dǎo)報,2013,(30):140.
[3]傅明娣.“階梯式”教學(xué)方法在“C 語言程序設(shè)計(jì)”教學(xué)中的嘗試[J].教學(xué)研究,2011,(16):42-43.
[4]劉亞輝,李桂芝,蘇潔,羅智勇.C語言教學(xué)引導(dǎo)與實(shí)踐設(shè)計(jì)方法研究,中國電力教育,2013,(23):80-81.
[5]李國和,吳衛(wèi)江,趙建輝,連遠(yuǎn)鋒.基于教學(xué)團(tuán)隊(duì)建設(shè)的C語言教學(xué)研究與實(shí)踐[J].教育教學(xué)論壇,2012,(35):198-199.
基金項(xiàng)目:鄭州輕工業(yè)學(xué)院青年教師教學(xué)改革與研究項(xiàng)目,河南省教育廳科學(xué)技術(shù)研究重點(diǎn)項(xiàng)目基礎(chǔ)研究計(jì)劃(14B520066),鄭州輕工業(yè)學(xué)院博士科研基金資助項(xiàng)目(2013BSJJ044)。