尹波 孟愛國 朱前飛++左利芳
摘 要: 在信息時代,具備基本的編程能力已成為一個合格的理工科大學生的基本要求。針對C語言這一編程語言的啟蒙課程,結(jié)合目前高校C語言教學中存在的問題,探索面向編程思維能力培養(yǎng)的教學模式改革。從教學內(nèi)容、教學手段、考核方式和實踐環(huán)節(jié)管理等角度探討了教學改革的相關(guān)思路,以提高學生的編程能力、解決實際問題的能力和創(chuàng)新能力。
關(guān)鍵詞: C語言; 編程思維; 程序設計; 教學改革
中圖分類號:G642 文獻標志碼:A 文章編號:1006-8228(2016)11-67-03
Research on the teaching reform of C language for training
of the programming thinking ability
Yin Bo, Meng Aiguo, Zhu Qianfei, Zuo Lifang
(School of Computer and Communication Engineering, Changsha University of Science and Technology, Changsha, Hunan 410014, China)
Abstract: In the information age, with the basic programming ability has become the basic requirement of a qualified science and engineering student. In view of the C language is the enlightenment course of the programming language, combined with the problems existing in the C language teaching in universities, the teaching mode reform for the training of the thinking ability of programming is explored. From the angle of teaching content, teaching method, examination method and practical teaching management, the related ideas of teaching reform are discussed, in order to improve students' abilities of programming, of solving practical problems and to innovate.
Key words: C languagem; programming thinking; programming; teaching reform
0 引言
隨著信息科學技術(shù)的迅速發(fā)展與廣泛應用,具備基本的編程能力成為一個合格的理工科大學生的基本要求。C語言被國內(nèi)大多數(shù)高校列為計算機程序設計的基礎課程,成為理工科大一學生的必修課程,也是編程語言的啟蒙課程[1-3]。
C語言是一門實踐性比較強的課程。傳統(tǒng)的C語言教學將語法作為講解重點,使得學生容易陷入語法知識的細枝末節(jié)而忽略了程序設計的本質(zhì)。一方面,記憶大量的語法規(guī)則、語句格式,降低了學生對編程的興趣,甚至從此畏懼編程;另一方面,造成了“高分低能”的現(xiàn)象,許多考試成績優(yōu)異的學生,編程動手能力不足,甚至編寫程序時無從下手[1]。
實際上,程序設計教學的目的,不是簡單地要使學生掌握語言的基本規(guī)則,而是要培養(yǎng)其解決實際問題的能力和編程實現(xiàn)的能力。學習語法的目的在于形成下意識的習慣,并不能引導寫出有效的程序。程序設計最重要的思維過程是如何把目標域問題建模成計算(即如何從已知信息機械推導出待求信息),這個過程是獨立于編程系統(tǒng)的,然后再根據(jù)選用的編程語言將計算過程形式化出來。
因此,C語言作為編程語言的啟蒙課程,最重要的是培養(yǎng)學生的編程思維能力,以啟發(fā)和訓練學生的編程思維為主導,著眼于解決問題的思路和方法,從而增強學生解決實際問題的編程能力,激發(fā)學生的編程興趣,培養(yǎng)學生的創(chuàng)新能力。也為學生在后續(xù)學習過程中更容易接受其他編程語言。
本文對面向編程思維能力培養(yǎng)的C語言教學改革進行了探索。通過C語言課程的學習,使得學生具有以下基本編程素質(zhì):①基本的編程思維;②調(diào)試代碼的能力,良好的編程習慣;③撰寫可讀性強、擴充性好、易于復用的優(yōu)質(zhì)代碼的能力;④查找技術(shù)資源與閱讀技術(shù)文檔的能力。
本文論述主要分為三個部分:第一部分分析目前C語言教學存在的問題,提出面向編程思維能力的C語言模式改革;第二部分陳述了編程思維的具體內(nèi)涵;第三部分提出了面向編程思維能力的C語言教學改革的具體措施。最后,對C語言課程教學進行了總結(jié)與展望。
1 編程思維核心內(nèi)容
C語言抽象程度不高,主要的特點包括“面向過程”(以事件為中心進行編程)、結(jié)構(gòu)化的程序(函數(shù)),以及較強的硬件控制能力。編程思維包括分析問題、歸類(建模)和實現(xiàn)。核心在于,把問題域涉及到的數(shù)據(jù)映射到合適的數(shù)據(jù)結(jié)構(gòu),把通過程序解決問題的過程映射為具體的算法邏輯。
根據(jù)程序設計的要求和C語言的特點,C語言教學中的編程思維能力主要包括以下內(nèi)容。
⑴ 框架思維:培養(yǎng)編程的全局思維能力和算法的整體設計能力,理清編程思路,搭好程序的大體框架,再實現(xiàn)具體的代碼。
⑵ 組件化與模塊化:將復雜的問題拆解成小問題,使用模塊化的方式(函數(shù))構(gòu)建程序。
⑶ 函數(shù)思維:重復使用到的運算過程儲存為標準化的函數(shù)。學習C語言自帶的庫函數(shù),庫函數(shù)是將C語言應用于實際的基礎。
⑷ 算法思想:程序運行效率最終取決于算法。分治與遞歸等基本的算法思想,算法的評價。
2 具體改革措施
2.1 教學內(nèi)容改革:主題式教學,精講語法知識,結(jié)合編程案例
按照循序漸進的知識學習原則,將C語言教學分為四個階段:由基本的語法和簡單的編程思維入門,到C語言庫函數(shù),再到程序效率的追求,最后到特定領域的專業(yè)應用。前面兩個階段是基礎,目標是掌握C語言程序設計的基本方法和編程思維,具有一定的C程序編程的能力。后面兩個階段是提升,將C語言和計算機相關(guān)知識緊密結(jié)合,目標是寫出可運行程序,進而寫出運行效率高的程序,并結(jié)合特定領域進行應用。
在各階段根據(jù)知識點的銜接性和相關(guān)性,設置若干主題。精講語法內(nèi)容,不糾纏于過多的語法細節(jié);由于C語言是除了匯編最接近硬件的程序設計語言,緊密聯(lián)系底層知識講解語法內(nèi)容,有助于對C語言語法和特點的理解。使用案例法,重點講解分析問題和解決問題的思路,培養(yǎng)編程思維能力。
基礎階段各主題以及主要內(nèi)容如下。
⑴ 編程準備。主要內(nèi)容包括:C語言程序設計的基本思想(面向過程、結(jié)構(gòu)化編程);基本的編程思維;程序運行效率最終取決于算法。案例包括拼圖小游、查找電話簿等。
⑵ 變量與內(nèi)存布局。主要內(nèi)容包括:基本數(shù)據(jù)類型在內(nèi)存中的表示形式;不同數(shù)據(jù)類型之間的轉(zhuǎn)換;運算符;數(shù)組、結(jié)構(gòu)體在內(nèi)存中的表示形式。
⑶ 控制結(jié)構(gòu)與算法(算法思維)。主要內(nèi)容包括:順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu);數(shù)據(jù)查找與排序問題;算法的時間復雜度。案例包括線性查找、折半查找等。
⑷ 函數(shù)(模塊化、函數(shù)思維)。主要內(nèi)容包括:函數(shù)參數(shù)的傳遞方式;函數(shù)的嵌套調(diào)用與遞歸調(diào)用;常用的C語言庫函數(shù)。案例包括信息管理系統(tǒng)的程序框架設計等。
⑸ 數(shù)組與字符串(批量處理) 。主要內(nèi)容包括:數(shù)組的本質(zhì)(批量處理);遞推與遞歸;棧、堆、C語言中的越界檢查。案例包括冒泡排序、遞歸排序等。
⑹ 指針與內(nèi)存管理。主要內(nèi)容包括:指針與函數(shù)、指針與數(shù)組;指針與內(nèi)存管理;文件。案例包括鏈表、信息管理系統(tǒng)部分功能的實現(xiàn)等。
⑺ C語言的函數(shù)庫(函數(shù)思維)。主要內(nèi)容包括:字符串、輸入輸出、動態(tài)分配函數(shù)和隨機函數(shù);進程函數(shù)、網(wǎng)絡交互;閱讀技術(shù)文檔。案例包括圖形時鐘、小游戲等。
與C語言基本階段的精講不同,提升階段圍繞數(shù)據(jù)結(jié)構(gòu)與算法、圖像處理、網(wǎng)絡、操作系統(tǒng)幾個方面展開,講授核心知識和典型案例,開闊學生視野。提升階段包括以下主題:①數(shù)據(jù)結(jié)構(gòu)與算法;②圖形圖像處理;③網(wǎng)絡處理;④操作系統(tǒng)管理;⑤游戲制作。
盡管主題內(nèi)容不同,編程思維的側(cè)重點不同,但基本的編程思維自始至終都貫穿其中。例如框架思維,具體體現(xiàn)在:分析問題解決問題的過程中,先理清楚大體思路;程序的編寫過程中,先寫好程序的大致框架,再細化具體的代碼。
2.2 教學方法改革:采用現(xiàn)場編程講授C語言基礎內(nèi)容,采用微課等網(wǎng)絡教學方式講授C語言提升階段知識
C語言基礎階段以課堂教學為主,一般是現(xiàn)場編程。原有教學方法主要使用多媒體課件,對于案例的講解,一般也是通過PPT講解后,粘貼到開發(fā)環(huán)境下運行一遍。由于幻燈片的演示過程相對較快,沒有給學生思考和消化的時間,思路也不是學生自己想出來的,使得知識吸收率較低。
現(xiàn)場編程教學是一邊講解一邊編寫代碼,具有“且想且編程”、開發(fā)環(huán)境下現(xiàn)場調(diào)試代碼的特點,能夠較好地展現(xiàn)分析問題和解決問題的編程思維方法。同時,將基本的語法知識貫穿于程序的編寫和調(diào)試過程。現(xiàn)場編程過程,積極與學生互動,訓練學生檢查錯誤的能力,鼓勵學生獨立思考。使得學生能夠跟著老師的思路一步步用代碼解決問題,最后還能總結(jié)出學習過程中的問題所在,從而提高學生的動手能力,形成正確的程序設計理念。
針對C語言提升階段的知識內(nèi)容,采用微課等網(wǎng)絡教學方式講授[4-5],學生課外自主學習不列入考試內(nèi)容。目的在于將C語言和計算機相關(guān)知識緊密結(jié)合,使學生進一步了解C語言的特點和用途, 也是編程思維的綜合訓練, 使得學生寫出效率高的實用的代碼。
2.3 考核方式改革:對學習過程進行監(jiān)督和考核,采用編程題型進行機考
考核是針對基礎階段的學習。提升階段不計入總成績。C語言學習的目的是提高學生編寫程序的能力,這需要學生多動手編程。傳統(tǒng)的考核以期末考試為主,并且考試題型包括選擇題等大量的主觀題。這種考核方式的問題在于:①主觀題不能真實反映學生的編程能力;②對學生學習程序設計課程產(chǎn)生誤導,把實踐課程變成了“做題”課程,造成學生忽視編程實踐能力的鍛煉;③一考定成績,缺乏對學習過程的有效監(jiān)管,不能督促學生重視平時的學習和積累。
因此,改革考核方式,原則和措施具體如下。
⑴ 對學習過程進行考核:采用“平時作業(yè)+小考+實驗+期末考試”的方式,學生成績按以下方法記分:平時成績占40%,實驗占10%,期末考試占50%;其中平時成績包括平時作業(yè)和小考的成績。通過對整個學習過程考核,既可以督促學生學習,授課教師又可以及時獲知學生的學習情況,能夠針對難點和問題,及時進行反饋和輔導。
⑵ 考試題型統(tǒng)一為編程題目:不管是作業(yè)、實驗、還是考試,均使用編程題目作為考試題型,反映學生真實的編程能力,也促使學生多動手多實踐。
⑶ 及時出成績,增加成績的透明度:作業(yè)、實驗和考試,均使用機考考試系統(tǒng),學生提交后,及時出成績。平時作業(yè)允許學生刷題,鼓勵學生多做多練,實驗和考試不允許刷題。
2.4 重視實踐環(huán)節(jié),鼓勵學生參賽
要提高學生解決問題和實際編程的能力,必須要求其多動手寫代碼,因此實踐環(huán)節(jié)至關(guān)重要[6]。實踐環(huán)節(jié)采用“預習+編程+點評”的方式。為了保證上機效果,要求學生上機前預習。同時加強實踐環(huán)節(jié)的考察,要求學生必須在課堂內(nèi)完成實驗,由機考系統(tǒng)當場給分。教師根據(jù)實驗情況進行現(xiàn)場點評。
鼓勵優(yōu)秀學生參加計算機類的作品比賽、大學生創(chuàng)新性實驗項目、大學生課外科技立項等項目,培養(yǎng)學生的實踐能力、解決問題的綜合能力,鼓勵學生創(chuàng)造性思維。更重要的是,以上述比賽和項目為契機,激發(fā)學生的編程興趣。
3 結(jié)束語
編程思維是提高學生編程實踐能力的關(guān)鍵。本文探討了面向編程思維能力培養(yǎng)的C語言教學模式改革,提出了具體的改革措施。改革現(xiàn)行的C語言課程教學模式,在教學過程以啟發(fā)和訓練學生的程思維能力為主導,精心設計教學和實踐環(huán)節(jié),這樣才能真正激發(fā)學生的編程興趣。編寫程序應選擇學生所學專業(yè)領域中的問題,培養(yǎng)和強化學生的“看家本領”。
參考文獻(References):
[1] 楊陽,沈黎,楊明.電類大平臺下C語言教學與實踐探索[J].西
南師范大學學報(自然科學版),2014.39(5):209-212
[2] 吳永芬,陳衛(wèi)衛(wèi),李志剛,李清.面向創(chuàng)新實踐能力培養(yǎng)的C語
言程序設計實踐教學改革[J].計算機教育,2014.3:88-91
[3] 于延,周國輝,李紅宇,李志聰,范雪琴.CDIO模式下C語言程
序設計實踐教學改革[J].計算機教育,2016.2:122-126
[4] 張蕾.基于項目化教學的“C語言程序設計”課程改革[J].教改
縱橫,2013.2:17-20
[5] 葉慧婷,油曄.從C語言微課入手研究微課評價體系[J].機械
職業(yè)教育,2016.2:38-40
[6] 肖捷.C語言程序設計實踐教學方案研究與設計[J].東莞理工
學院學報,2012.19(5):105-109