譚海燕,黃國順,文翰,南小可,張友紅
(佛山科學技術學院信息科學與應用數學系,佛山 528000)
以培養學生程序設計能力為目標的探索與實踐
譚海燕,黃國順,文翰,南小可,張友紅
(佛山科學技術學院信息科學與應用數學系,佛山528000)
隨著“互聯網+”時代的到來,傳統企業的轉型改造,IT行業需要越來越多的具有較強程序設計能力的應用型人才。我校“創新強校工程”和“高水平理工大學”的建設,其目的就是為了持續培養高質量的應用型人才。對于信息專業的學生而言,程序設計能力是他們的看家本領。現在傳統的教學方式難以吸引學生的眼球,我們有必要對上課方式、課程內容、教學方法等進行改進,以激發學生的學習興趣,提高學習效率、掌握實用的技能。教學須以培養學生能力為目標,就信息專業的學生而言即培養學生的程序設計能力。
本文先從三個案例闡述傳統教學中存在的問題,然后再從激發學生興趣、啟發學生思維、訓練學生編程、參加科技活動等方面著手,分析程序設計能力培養的方法,同時也對程序設計相關系列課程實踐教學內容的協同設計以及網絡教學資源的建設進行了探索與實踐。
培養程序設計能力牽涉到多門課程內容,如《離散數學》的邏輯思維、《程序設計語言》的編程基礎、《數據結構》的抽象數據類型與算法設計等。在傳統教學中,學生覺得聽課容易做題難,其重要原因之一就是課程教學沒有能夠很好地承擔能力培養的任務。學生能力不足集中表現在處理問題時的方式、方法不恰當,舉例如下:
案例1,求200以內所有素數的個數。
學生解答此題時就出現了3種方法:
第1種用集合的包含排斥定理求解;
第2種用文氏圖列方程求解;
第3種直接列出200以內所有素數,最后統計得出答案。
顯然,第3種方法雖然結果對了,但考慮問題欠周到,分析問題時只看表面的數字,不能運用離散數學的知識去求解問題。
案例2,用C++編程求解任意一組整數的平均值。
學生在編程實現時,就出現了4種情況:(假定一組整數表示為int a[6];)
第1種用一個賦值語句,如:int ave=(a[0]+a[1]+a[2]+a[3]+a[4]+a[5])/6;
第2種用循環語句,如:for(int i=0;i<6;i++)sum+=a [i];ave=sum/6;
第3種用函數封裝,函數原型如:int qave(int a[],int n);
第4種用類封裝,類定義如下:

從學生解答來看,前2種沒有封裝,代碼不能復用,后2種雖然封裝了,但沒有考慮n為0的情況,編寫的程序是不安全的。
案例3,開發一個簡易文本編輯器,其功能為:輸入一行文字,程序可以添加、修改、刪除、查詢、替換、保存、讀取、統計。
學生閱讀此題后,就有不同層次的反應:
第1部分學生開始考慮用字符串結構組織數據,采取功能模塊化設計方法進行分析和編程實現;
第2部分學生關注到C++標準庫string.h,希望用現成的函數找到解決的辦法;
第3部分學生則感到無法動手,甚至產生厭倦情緒。
顯然,第3部分學生面對復雜的程序設計題表現出畏難情緒,究其原因,主要是數據結構課程是開在程序設計課程之后的一個學期,學生把C++的基礎忘記了,這樣學習C++描述的數據結構算法就變成一件十分困難的事了;第2部分學生做的練習較少、程序設計的經驗不足。雖然C++的基礎較好,但停留在理解、驗證算法的思路,沒有放開思路去自己創新。此外,數據結構教材描述的字符串內容,只講了 C++標準庫string.h的幾個常用函數以及模式匹配算法,沒有描述自定義的字符串的類結構,一般的學生很難想到自己去設計一個新的串類。
從上述反映的問題來看,離散數學是專業課程的基礎,高級語言程序設計是專業課程的工具,數據結構是專業課程的核心。協同好這3門課程的教學改革,對改進學生的程序設計能力影響深遠。
以培養學生能力為目標,許多教師都做了很好的探索。陳道蓄教授把計算機科學導論、離散數學、程序設計、數據結構和計算機算法設計與分析5門基礎核心課程融合成1門《計算機問題求解》課程[1],并采用“討論課”的方式[2],加快提高學生的自主學習能力和創新能力;裘宗燕教授對程序設計課程提出了“正確、可靠、安全”的程序設計目標[3];尹寶林教授則注重程序設計競賽及軟件能力認證以滿足企業的需求[4];陳越教授以“精、深、通”的設計原則,創立研究型教學模式[5]。鑒于我們信息專業實際情況,把離散數學、程序設計、數據結構3門課程協同思考,增加程序設計課程設計和數據結構課程設計作為綜合實踐環節,探索培養學生程序設計能力的方法。
2.1改變上課方式,激發學生對學習的興趣
在教學過程中,教師必須關注學生對課程內容的反應,內容有吸引力,師生就有互動,因此教師需要不斷變化上課方式,指明所學內容的實際應用意義,讓學生不要困惑為什么要學這些內容,學這些內容有什么用?例如在程序設計課程教學中,以簡單實用的案例激發學生的興趣,再學習語言基礎,最后應用所講知識帶領學生編寫代碼,并布置程序設計作業題作為課后練習;在《數據結構》課程教學過程中,由于案例較復雜、代碼也變多變長了,這時就要以算法思想在實際中的應用,包括游戲中的應用作為引子,吸引學生的關注,采取分層、分步的策略去“因材施教”。激發學生的學習興趣是教學的關鍵,隨后才會有提問、學習、討論、思考、設計與分析。
2.2以問題為核心,啟發學生的計算思維
“授人以魚不如授人以漁”,教學不僅是傳授知識,更重要的是將問題歸類,傳授思考問題的方法和步驟,啟發學生的計算思維。例如“實現兩個整數互換”的問題,可以傳授學生用不同類型的形參去寫函數,讓學生理解一個問題可以有多種方法實現,并且可以利用互換算法去求解其他問題,例如求一組整數(或一個字符串)的逆置、排序、最大與最小等問題。
此外,還可以把一些相關問題由小變大、由簡單變復雜,傳授學生學會分層思考問題,尋求解決思路的方法,例如問題如下:
問題1:求兩個整數的和。問題2:求一組整數的和。
問題3:求兩個大整數的和。
顯然,問題1只要寫一個C++表達式賦值語句;問題2在問題1的基礎上需要循環控制語句;問題3有難度,可以把問題再分解,先考慮一個大整數如何組織與存儲,再考慮求兩個大整數的和,最后考慮大整數的輸入與輸出。
以問題為核心,允許學生提問、討論,接受學生的想法,按他們的思路去思考,對于正確的思維進行表揚和鼓勵,對于錯誤的思維及時幫助修改和引導。對于直接寫出素數并統計個數的學生,既要肯定解題的結果沒錯,又要幫助他逐步認識由問題到建立模型以及實現代碼的思維過程。
2.3強調多讀多寫,訓練學生的編程技術
在傳統教學中,往往采用驗證性實驗作為實踐課程內容,即布置和本章理論課相關的小型練習題,讓學生獨立完成調試和運行。這樣做簡單、直接,學生不需要思考解決問題的方法,受到鍛煉的機會相對較小,以致編程能力不足。所以,教師在上課時,除了“教書”,還要“育人”,鼓勵學生刻苦鉆研,既要多讀別人寫的程序,也要自己動手編程,掌握編程的方法、技巧,積累編程的經驗。此外,還要引導和訓練學生的編程技術,具體如以下幾個方面:
(1)如果學生喜歡頂格寫代碼,沒有層次感,排錯困難,就要阻止并引導編寫代碼的的正確格式,即代碼的格式必須呈凹凸的層次(也稱“鋸齒形”),以及在關鍵語句處標上注釋語句,從學習程序設計入門開始就養成良好的編程風格。
(2)如果學生的程序能運行卻有“bug”,就要提醒學生使用不同的數據想方設法測試程序,進行排錯,確保程序的安全性。
(3)如果學生編寫的代碼沒有進行函數(或類)封裝,不注重參數的組織與傳遞方式,就要指導學生注重程序的高效性,以換位換角度方式去重新思考和設計,尋求解決問題的最佳方法,編寫高效、優良的程序。
2.4組織多種課外活動,促進學生思維和技術的結合
通過和學生交流,以及畢業生就業后的工作情況的調查,發現課內綜合實踐教學仍然還有一些不足,讓學生合作編寫小規模程序,雖然可以在一定程度上鍛煉程序設計的能力,但這個鍛煉的層次和涉及面都比較窄,因此需要給學生更多的途徑去鍛煉,讓學生把課外時間利用起來,去參與各種各樣的科研活動,既拓展思維,又訓練編程的技術,促進學生程序設計的思維和技術的結合。
組織學生積極申報校學生學術科研基金項目、實驗室開放創新基金項目等,讓學生有充分自主權選擇自己感興趣的課題,在教師的指導下,對課題進行需求分析、設計及編碼實現,鍛煉計算思維,積累編程的經驗。
選擇合適的課題指導學生申報大學生創新創業訓練計劃項目,讓學生在有一定規模的項目中得到鍛煉,擴大知識層面,提高編程水平。
組織學生報名參加各類科技競賽,例如組織學生參加“藍橋杯”全國軟件專業人才設計與創業大賽,讓學生在學習程序設計和數據結構的基礎上,去分析各種類型的算法問題,構建問題模型,最后編寫代碼和測試運行。
結合教學現狀、知識結構、課程體系,以及學生的實際情況,協同程序設計、數據結構、及相關的課程設計等多門課程的實踐教學內容,形成課程基礎實訓、課程設計提高實訓和畢業設計綜合實訓三個階段。
(1)課程基礎實訓以理論和實踐相結合為中心,將多課程的所有上機操作實訓統籌規劃,訓練學生程序設計能力,打好編程的基礎,具體如下:
①按照教材現有的案例,讓學生上機編譯、連接、調試、運行、驗證程序。
②修改教材上的案例,增加新的功能目標與要求,讓學生進行二次開發即改進程序的能力。
③布置大作業,讓學生獨立完成分析問題和編程實現的過程。
(2)課程設計提高實訓則主要規劃程序設計課程設計和數據結構課程設計2門實踐課程內容,根據學生程序設計能力的情況,擬定難易不同的、有實用價值的小型綜合系統為編程題目,讓學生以小組團隊合作形式進行編程。其中程序設計課程設計主要訓練學生在符合課題要求的前提下,正確進行功能模塊分析、控制模塊分析,達到系統設計實用、編程簡練、功能全面;程序采用模塊化程序設計方法,及鋸齒型書寫格式,達到系統正確運行。數據結構課程設計要求學生在程序設計的基礎上,結合實際將高級語言程序設計的基本概念、原理及方法在數據結構課程中得到充分的應用,通過設計,加深理解數據結構的邏輯特性和物理表示,掌握數據的組織、算法的設計、面向對象的程序設計方法和技巧,同時,在上機操作、調試等基本技能和團隊協作方面受到比較系統和嚴格的訓練。
(3)畢業設計實訓主要規劃提高學生綜合實踐能力與素質、培養學生的程序設計能力和獨立工作能力等方面的內容,指導學生進行論文選題、方案設計、社會調查、查閱文獻、資料搜集、編程實現、撰寫論文等。其中,在幫助學生進行論文選題時,注重切合實際,既要關注當今計算機發展的形式、企業單位用人的需求,還要照顧到學生的能力,選擇合適的課題和開發平臺,鼓勵學生學習新知識、開發新型、實用的系統程序。通過畢業設計,培養學生綜合應用所學知識、獨立分析和解決實際問題的能力,培養學生的創新意識和創新能力,使學生獲得科學研究的基礎訓練,圓滿完成本科畢業設計任務。
序設計精品資源共享課網絡教學平臺,將教學資源共建共享。學生可以隨時隨地通過網絡訪問,上傳下載存放和使用網站的資源。教學資源制作、管理,信息發布、教學交流等都能在網上進行,設置討論板服務,為網絡教學實現在線或離線的網上交流、輔導,提供完善的多媒體課件,學生可以自主完成專業課程學習和練習。通過網絡教學資源,讓學生可以在課外時間自主進行學習和練習。
在近幾年的教學工作中,我們以培養學生程序設計能力為目標,堅持輕“知識傳授”重“能力培養”,采用啟發式、討論式、師生互動式和辯論式多種模式的教學,取得了較好的成績,圓滿完成廣東省大學生創新創業訓練計劃項目4項,校級學生學術基金6項,實驗室開放創新基金9項,在“藍橋杯”全國軟件專業人才設計與創業大賽中,榮獲國家級B組二等獎1項、三等獎2項,省級B組一等獎2項、二等獎6項、三等獎3項等。信息專業畢業生就業情況也不錯,例如在大型軟件開發公司如歡聚時代公司、金賦信息科技有限公司、賽意信息科技有限公司等從事軟件開發工作,還有的成了單位的技術骨干。所有這些成績將激勵我們不斷改革教學的方式,激發學生學習的興趣,調動學生求知的積極性;改進課程內容,以問題為核心、多角度換方位去思考解決問題的方法,啟發學生程序設計的思維;鼓勵學生參加多種課外科技活動,訓練學生高質量的編程技術,更好地培養學生的程序設計能力。
為了方便學生課外學習,我們搭建了開放性的程
[1]陳道蓄,陶先平,錢柱中等.重組計算機專業基礎課程,促進學生能力培養[J].計算機教育.2012,23:2-5.
[2]吳小兵,陶先平,錢柱中.計算機問題求解課程討論課的組織和實施[J].計算機教育.2012,23:10-12.
[3]裘宗燕.今天的C程序設計課教什么,怎么教——兼議從問題到程序的修訂[J].計算機教育.2012,13:24-32.
[4]尹寶林.“C語言程序設計”課程建設的思考和實踐[J].計算機教育.2009,23:129~131.
[5]陳越,何欽銘.計算機專業研究型課程教學模式與創新能力培養的探索[J].計算機教育.2009,24:99-101.
Programs Design;Teaching Reformation;Teaching Practice
Exploration and Practice of Cultivating Students'Ability to Design Program
TAN Hai-yan,HUANG Guo-shun,WEN Han,NAN Xiao-ke,ZHANG You-hong
(Department of Information and Applied Mathematics,Foshan University,Foshan 528000)
1007-1423(2015)36-0034-05
10.3969/j.issn.1007-1423.2015.36.008
譚海燕(1965-),女,湖南衡陽人,碩士研究生,研究方向為算法設計與分析、計算機網絡
黃國順(1972-),男,江西臨川人,博士,教授,研究方向為粗糙集、粒度計算和不確定性度量
文翰(1977-),男,湖南益陽人,博士,講師,研究方向為機器學習
南小可(1977-),女,河南西華人,博士,講師,研究方向為電子商務
張友紅(1978-),女,吉林汪清人,碩士,講師,研究方向為智能計算、軟件工程
2015-11-17
2015-11-30
針對學生在程序設計能力方面不足所表現出的種種問題,分析激發學生興趣、啟發學生思維、訓練學生編程技術、參加科技活動等教學改革的方法,提出以培養學生程序設計能力為教學改革目標的觀點,對程序設計實踐教學內容的協同設計以及網絡教學資源的建設進行探索與實踐。
程序設計;教學改革;實踐教學
2014年佛山科學技術學院“創新強校工程-教學類“項目、2014年佛山科學技術學院“創新強校工程-教學研究課題“項目、2014年佛山科學技術學院省級“大學生創新創業計劃訓練項目”(No.201411847058)、2014年佛山科學技術學院省級“創新強校工程-教學類“項目
Through invoking students'interests,enlightening students'thinking,and training students'programming technic,the teaching practice reformation promotes solutions to the students'diverse pinpoint shortcomings of designing programs.Cultivation of students'ability to design program is accessible to the teaching reformation objective.The exploration and practice coordinate the syllabus and the proliferation of online teaching resources.