鄧沌華,石 黎
(湖北經(jīng)濟學院法商學院,湖北 武漢 430205)
計算機本科人才程序設計能力培養(yǎng)研究
鄧沌華,石 黎
(湖北經(jīng)濟學院法商學院,湖北 武漢 430205)
針對程序設計類課程教學現(xiàn)狀及存在的問題,結合多年教學經(jīng)驗,從相關課程的教學目標及定位,核心課程的教學思路、方法,實踐教學體系的構建,學科競賽的組織等方面就如何培養(yǎng)計算機本科人才的程序設計能力作出探討。
計算機本科人才;程序設計;實踐教學;學科競賽
程序(Program)是為用計算機解決特定問題而編制的計算機指令的有序集合。程序設計(Programming)是以某種程序設計語言為工具,給出該語言描述下的程序的過程,是一項目標明確的智力活動。在軟件研究領域,由于程序是軟件的主體,程序的質量直接體現(xiàn)了軟件的質量,程序設計工作非常重要性。
程序設計的過程通常分為數(shù)據(jù)建模,算法分析與設計,代碼編寫,編譯調試以及制作文檔等不同階段,內容涉及到相關基本概念、工具、方法以及方法學等不同領域,對于從事者來說,是一項復雜的創(chuàng)造性的思維活動,其過程貫穿著閱讀判斷、邏輯思維、抽象表達、工具利用、綜合創(chuàng)造等多項技能的應用。
程序設計能力是計算機學科最基本的能力,在計算機學科知識體系中占據(jù)著重要的核心地位。對計算機本科人才而言,程序設計能力不僅是專業(yè)技能的反映,更是自身綜合素質的集中體現(xiàn)。計算機學科軟件教育的基礎必須以程序設計為中心。
如何有效提高計算機本科人才的程序設計能力,一直是工作在相關課程教學一線的教師們思考與探索的課題。本文遵循“理論教學不放松,實踐教學要加強”的宗旨,針對程序設計類課程教學活動現(xiàn)狀及存在的問題,從課程的開設、安排,核心課程的教學方法,程序設計類競賽活動的組織參與等方面做出探討。
計算機專業(yè)學生的程序設計能力從根本上反映了學生專業(yè)基礎知識是否扎實,實踐動手能力是否過硬,并直接影響到學生專業(yè)興趣的培養(yǎng)及后續(xù)課程的學習效果。[1]高校在計算機專業(yè)本科生培養(yǎng)方案中一般會開設7到8門程序設計類相關課程,其重要性也得到了普遍的認可,但是教學效果往往不太理想,存在的問題有:
(一)學生缺乏學習的動力和積極性,容易被困難嚇倒
程序設計類課程理論性、專業(yè)性和實踐性較強,對學生數(shù)學和英語的要求較高。初學習時,學生存在著從現(xiàn)實客觀世界到邏輯思維空間的轉換適應過程,往往覺得無所適從,產生畏難心理,失去學習的興趣,間接影響了專業(yè)思想的形成與培養(yǎng)。
(二)高級語言類課程教學方法有待改進
教學過程仍舊以教師的單向傳輸為主,過于重視理論教學,追求語法細節(jié),以通過考試為目標,作業(yè)主要是對相關語句的反復驗證和練習,從而忽略了程序設計思想和實踐動手能力的培養(yǎng)。學生常感覺在解決實際問題時,腦海里有眾多語句,卻無從下手。
(三)實踐性教學力度不夠
單元實驗多以驗證性實驗為主,經(jīng)常是對教材上已有的代碼實例編輯、調試,幾乎淪為打字練習課;設計型綜合型實驗項目較少,強調力度不夠,考核不嚴,未能充分調動學生學習的主動性;課程設計與設計型綜合型實驗難度界限劃分不明,層次模糊,未能達到預期效果。[2][4]
我院經(jīng)過對本科生培養(yǎng)方案的多次修訂,最終確定在大學前4個學期開設5門程序設計類課程及兩門相關課程設計,有效的保證了學生程序設計能力培養(yǎng)的持續(xù)性,以及教學內容、難度、范圍的遞進性。具體開設課程有:
(一)C語言程序設計
主要講解C語言的基本語法,介紹結構化程序設計和模塊化程序設計方法,順序、選擇和循環(huán)三種基本結構、函數(shù)、指針、數(shù)組、結構和文件等。通過本課程的學習,使學生掌握C語言的語法和程序設計的基本方法,以及程序開發(fā)的基本技術,培養(yǎng)學生的實際動手能力。
(二)程序設計基礎
主要講解計算機邏輯判斷表述、遞歸技術、分治法、鏈表設計、蒙特卡羅算法初步、貪心算法、高精確度計算、字符處理, 動態(tài)規(guī)劃的思想原理和應用解決問題的基本步驟、回溯技術及應用、圖形處理的基本技術,幫助學生形成理論、抽象、設計的理念,為后續(xù)課程的學習和解決相關問題打下良好的基礎。
(三)數(shù)據(jù)結構
主要講解各種常用的數(shù)據(jù)結構類型,包括線性表、棧、隊列、串、數(shù)組、廣義表、樹形結構和網(wǎng)狀結構;討論各種類型的數(shù)據(jù)結構的定義、特點、在計算機存儲器中的表示、建立在該結構上的相關算法(C語言描述)及算法分析評價、數(shù)據(jù)結構的應用實現(xiàn),培養(yǎng)學生邏輯思維能力,掌握程序設計的基本技巧和方法。
(四)C++語言程序設計
主要講解C++語言的基本語法,介紹面向對象程序設計的基本概念和基本方法。課程內容主要包括C++在非面向對象方面對C語言的擴充和改進,抽象、封裝、繼承、多態(tài)等內容。通過本課程的學習,培養(yǎng)學生運用面向對象思想分析問題的基本能力,增強學生的實踐動手能力。
(五)算法設計與分析
主要以算法設計策略為知識單元,系統(tǒng)地介紹計算機算法的設計方法與分析技巧,以期為學生提供廣泛而堅實的計算機算法基礎知識。
(六)程序設計課程設計
(七)數(shù)據(jù)結構課程設計
課程開設的具體情況如表1所示。
在程序設計類相關課程中,數(shù)據(jù)結構的地位可謂舉足輕重。該課程不僅為用計算機語言進行程序設計提供了方法性的指導,還在一個更高的層次上總結了程序設計的常見方法和常用技巧,是程序設計人員的必修課程。該課程的學習直接關乎學生程序設計能力的培養(yǎng),必須高度重視。筆者在多年從事該課程的教學活動中發(fā)現(xiàn):學生普遍感覺該課程理論抽象,難以理解,更難以應用于實踐;課程內容繁多,難以把握要點等等。基于此,我院數(shù)據(jù)結構課程教學小組的老師們在教學活動中一直致力于教學內容、教學方法、教學手段的探索與改革,收獲頗豐。

表1:程序設計類課程開設情況
(一)做好與C語言程序設計課的銜接工作,平滑過渡,避免斷層
數(shù)據(jù)結構得開課時間較早,一般在第2或第3個學期。學生對計算機認識不深,專業(yè)視野與專業(yè)素養(yǎng)不深,邏輯思維能力有限,對C語言中的指針、結構體、函數(shù)等掌握不足。然而數(shù)據(jù)結構的任何一個算法的描述都離不開C語言中的這些知識點,實踐表明C函數(shù)的設計和傳值調用、指針成為數(shù)據(jù)結構學習和實踐的瓶頸。因此必須將以上所論及內容做系統(tǒng)回顧,可集中講授,也可在章節(jié)學習中穿插進行,盡量做到知識的循序漸進,避免學生產生畏難情緒,從一開始就失去學習的興趣。[3]
(二)將團隊情境教學融入日常教學,攻克學習難點
目前我院數(shù)據(jù)結構課使用的教材是清華大學嚴蔚敏教授主編的《數(shù)據(jù)結構(C語言版)》,該書概念表述清楚,邏輯推理嚴密,體系完整,結構嚴謹,一直被奉為經(jīng)典以及考研必備教材,但是書中的偽代碼過于強調結構而忽略細節(jié),對編碼能力弱的學生有一定難度。很多學生只是泛泛閱讀偽碼,而不去親自動手實現(xiàn)之,往往使學習流于表面。為此,我們在日常教學中嘗試了團隊情境教學,效果良好。具體做法:
1.將學生5至6人一組,隨機分組,指定組長一人;
2.每組任選一個章節(jié),用C語言實現(xiàn)該章節(jié)中描述的抽象數(shù)據(jù)類型,并完整解決一個課內問題。例如關于棧的部分,要求學生完整實現(xiàn)教材上描述的棧結構,并基于該描述實現(xiàn)迷宮問題;
3.組長指定一人制作PPT,用于驗收時在全班面前宣講本組成果及設計思想;
4.組長指定一人驗收時宣講及接受同學和老師的提問;
5.組長指定一人撰寫設計報告;
6.組長撰寫對本組成員工作態(tài)度、工作內容、工作成果的客觀評估報告;
7.各組成果全班共享。
在團隊工作過程中,成員之間增強了團隊協(xié)作、溝通、交流能力,同時彼此激勵與監(jiān)督,各負其責,使得那些不愿動手編寫代碼的同學也必須努力為之,這樣于無形中帶動了一批程序設計能力較弱的學生,在收獲成果時的成就感也極大的激發(fā)了他們的學習興趣。經(jīng)過此一過程,嚴版教材中的偽碼被學生親手改寫實現(xiàn),加深了對教材的深入理解,也鍛煉了實踐動手能力。
(三)構建數(shù)據(jù)結構多層次漸進式實踐教學體系
實踐教學作為課堂理論教學延伸和補充,能幫助學生鞏固和深化理論知識,為課堂教學提供支持,同時也是培養(yǎng)學生的程序設計能力,實踐與創(chuàng)新能力的有效手段。為此,我們提出構建以驗證性實驗,設計型綜合型實驗以及課程設計為主體的多層次漸進式實踐教學體系,全方位服務于學生的程序設計能力的培養(yǎng)。
在理論教學配套的單元驗證性實驗中,主要完成對特定數(shù)據(jù)結構的各種基本運算上機編程實現(xiàn),或采用指定測試數(shù)據(jù)驗證算法的正確性。為節(jié)省學生輸入、編輯代碼時間,同時不影響對基本算法的學習,可由教師在實驗指導書中給出完整的源代碼,但是采用程序填空、程序改錯、問題思考等形式促使學生去讀、理解、調試源代碼,直至能正確運行。這樣做還為學生留下了一個相對規(guī)范的代碼范本,供學生在完成下一步的設計型綜合型式實驗時選擇性的模仿、借鑒。[5][6]
設計型實驗要求學生能利用學過的一個或幾個知識點解決一個相對實際的問題,是驗證性實驗的直接升級。實驗一般在一種類型數(shù)據(jù)結構(線性結構、樹形結構和圖狀結構)的理論學習結束后進行,實驗題目針對性明顯,問題中所涉及數(shù)據(jù)的邏輯結構比較明顯,實驗重點就在于考察學生能否選擇合適的存儲結構,設計正確的算法,并對算法的時間效率和空間效率做出評價。
課程設計環(huán)節(jié)要求學生綜合應用整門課程的知識點、原理、技術甚至精髓去解決更接近于實際的問題,范疇更廣,難度更甚,一般安排在數(shù)據(jù)結構開課學期的下一個學期集中進行。課程設計選題規(guī)模大而復雜,初步體現(xiàn)工程化、過程化,代碼量多在500行以上,甚至超過1000行。課程設計環(huán)節(jié)主要對學生進行軟件設計的綜合訓練,要求學生能夠提煉出問題中涉及的數(shù)據(jù),分析數(shù)據(jù)間的關系,選擇合適的邏輯結構,確定存儲結構,設計正確的算法,對算法做出時空性能評價。通過分析、設計、編碼、調試等各環(huán)節(jié)的訓練,培養(yǎng)學生軟件設計的全局視野,實踐操作能力,良好的程序設計技能,同時掌握軟件工作規(guī)范,樹立嚴謹?shù)墓ぷ髯黠L。
要明確各實驗環(huán)節(jié)的教學目標,相互之間的區(qū)別與聯(lián)系,從實驗指導書的編寫、實驗課時安排、實驗題目的選擇與要求等方面從嚴把關,落到實處。[2]
我院近年來不斷改革教學方法、改進教學手段、修訂培養(yǎng)方案,以加強學生專業(yè)能力,尤其是核心能力——程序設計能力。通過組織學生參加各種程序設計類競賽以鍛煉、培養(yǎng)優(yōu)秀的程序設計人才是我們采用的重要舉措之一。除了一年一度的湖北經(jīng)濟學院程序設計競賽,我們還先后參加了全國信息技術應用水平大賽、“正保教育杯”全國ITAT教育工程就業(yè)技能大賽、“國信藍點杯”全國軟件專業(yè)人才設計與開發(fā)大賽、ACM-ICPC國際大學生程序設計競賽等。我們多次獲得優(yōu)秀競賽組織單位獎,百余人次在各賽事中獲獎。
2014年5月31日,我院學生在“第五屆藍橋杯全國軟件和信息技術專業(yè)人才大賽”全國總決賽中奪得1個全國二等獎、6個全國三等獎和2個全國優(yōu)秀獎,創(chuàng)歷史新高。在2014年5月26日落幕的"第四屆全國大學生計算機應用能力與信息素養(yǎng)大賽"全國總決賽中,我校學子獲一等獎1人,獲三等獎7人。這些成績的取得極大的鼓舞了全院學生的學習熱情,在全院上下形成了一股程序設計的熱潮。
為了搞好這些學科競賽活動,我院成立了相應的領導小組,軟件工程系也在相關課程的教學過程進行了改革,更加注重學生專業(yè)能力的培養(yǎng),并組織了有關教師對參賽學生進行暑期集訓。這些學生畢業(yè)后,受到用人單位的一致好評,在企業(yè)里擔任重要工作,突顯了我們的辦學特色,為國家的經(jīng)濟建設作出了應有的貢獻。
計算機本科人才必須具備扎實過硬的程序設計能力,我們程序設計類課程教學的最終目的和趨勢就是培養(yǎng)軟件工具應用者的程序設計能力和程序設計思維。在以往的教學中,教師往往陷入一個誤區(qū):過于注重語句、語法等程序設計語言所涉及基本概念的講解,忽視在構建程序過程中應用于分析、解決問題的一種邏輯思維的訓練,忽視對整體知識綜合應用能力的訓練。綜上所述,在計算機本科人才程序設計能力培養(yǎng)的過程中應注重把握兩個方面的平衡:
(一)專業(yè)技能培養(yǎng)目標要清晰
教學不僅要注重單項知識的講解練習,更要加大對應用整體知識的能力訓練及解決問題的思維訓練。
(二)專業(yè)技能教學要與職業(yè)關鍵能力培養(yǎng)有機結合
在教學組織形式上,汲納軟件企業(yè)的工作模式應用于教學;在教學設計上,應把持知識的整體與局部關系,靈活應用各種教學方法和手段來優(yōu)化課堂教學。學生在學習、實踐的雙環(huán)節(jié)中,完善自身知識結構,構建自主工作行為。
(注:本文系湖北省教育科學“十二五”規(guī)劃課題《計算機本科人才程序設計與創(chuàng)新能力培養(yǎng)研究》,項目編號:2012B458)
[1]涂立,賈麗媛.本科生程序設計能力培養(yǎng)的探索與研究[J].科技資訊,2014,(7):192-193.
[2]鄧沌華,李源.數(shù)據(jù)結構多層次漸進式實踐教學體系構建[J].計算機教育,2012(24):72-73.
[3]鄧沌華.數(shù)據(jù)結構課程教學活動的幾點探索[J].華中師范大學學報(自然科學版教學與研究卷),2007,(3):10-13.
[4]韓建民,王麗俠.大學生程序設計能力的層次化培養(yǎng)模式[J].計算機教育,2012,(2):15-16.
[5]張曉孿,王西鋒.計算機專業(yè)大學生程序設計能力培養(yǎng)模式的探索[J].信息技術,2011,(10):43-46.
[6]趙越,章小莉.數(shù)據(jù)結構實踐教學模式的設計與探索[J].計算機教育,2009,(13):194-196.