張偉偉 王曉 甘勇 李曄

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