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