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