馬虹 陳玉芳
摘 要: 在程序設計基礎課程的教學中,采用傳統(tǒng)的教學模式和方法已經不能滿足軟件產業(yè)快速發(fā)展對高素質軟件人才培養(yǎng)的需求。為此,以能力培養(yǎng)為教學目標,對程序設計基礎這門課程的教學內容、教學過程、教學模式和方法、考核方式等進行了改革和實踐。實踐表明,學生的程序設計能力及綜合素質均得到了提高。
關鍵詞: 程序設計基礎; 高素質軟件人才; 能力培養(yǎng); 程序設計能力
中圖分類號:TP312 文獻標志碼:A 文章編號:1006-8228(2014)03-54-03
0 引言
印度、愛爾蘭在軟件產業(yè)的發(fā)展上都取得了巨大成功。究其原因,除了與政府的全方位支持,精準的市場定位,合理的業(yè)務選擇等因素息息相關以外,更重要的是依賴于源源不斷進入軟件行業(yè)的高素質軟件人才。高校培養(yǎng)是這些國家軟件人才培養(yǎng)的主要途徑之一。其軟件教育的共同特點是課程根據軟件企業(yè)的需求進行設置,重視通過課程使學生接觸新技術、新理念,把實際應用培訓和綜合能力的培養(yǎng)擺在第一位,從而使學生畢業(yè)后能快速進入工作角色[1]。中國軟件產業(yè)近年來也快速崛起,這為軟件相關課程的教學帶來了無限生機,更帶來了巨大挑戰(zhàn)。怎樣緊跟軟件產業(yè)快速發(fā)展的步伐,怎樣在教學過程中提升學生的綜合素質和能力,特別是工程應用能力,使他們成為符合我國軟件產業(yè)發(fā)展需要的人才,是每一個軟件課程教師都需要面對的問題。
1 程序設計基礎教學現(xiàn)狀
程序設計基礎是軟件工程專業(yè)的第一門專業(yè)基礎課。開設這門課程的主要目的是幫助學生初步建立計算思維,掌握程序設計的一般方法,具備基本的程序設計能力;同時加強學生的專業(yè)修養(yǎng),培養(yǎng)學生發(fā)現(xiàn)問題、分析問題、解決問題的能力,為后續(xù)課程的學習打下堅實基礎。然而在該課程的傳統(tǒng)教學中存在一些問題。
一是在課程改革、課時壓縮的大背景下,學時非常緊張。
二是該課程的理論教學長期以教師講授為主,學生處于被動聽課的學習狀態(tài);在理論教學中側重語法知識、概念地講解,對算法設計、程序實現(xiàn)過程的講解不夠。因此,學生難以體會程序設計中的挑戰(zhàn)和樂趣,缺乏主觀能動性,課堂教學效率較低。
三是實訓環(huán)節(jié)側重解決書后題目,而這些題目大多是書本例題的類題演練,學生往往是依葫蘆畫瓢,綜合能力難以得到真正提高。因此課程結束后,很多學生仍然陷入了“學了程序設計,遇到實際問題卻不會靈活運用所學知識進行程序設計,甚至不知道應該如何下手”的怪圈。
四是忽視培養(yǎng)學生良好的編程習慣,為后續(xù)學習、工作留下隱患。
五是考核方式單一。目前的考試主要以筆試為主,側重考核學生對重要知識點的記憶,很難對學生實際編程能力作出客觀、全面的評價。
這些問題導致了所培養(yǎng)的學生與我國軟件產業(yè)實際人才需求產生脫節(jié)。要適應軟件產業(yè)飛速發(fā)展對軟件人才培養(yǎng)的要求,就必須著力解決上述問題,對現(xiàn)有的教學進行改革。
2 具體改革措施
2.1 轉變教學理念
在整個教學過程中,始終以“適應軟件產業(yè)的發(fā)展需要,培養(yǎng)學生綜合能力”為教學目標,緊緊抓住“程序設計”這條主線,以學生為主體,以教師為主導,開展教學活動。即,教學內容的選擇、教學過程的設計和實施、教學模式和方法的改革、學生考核方式的調整等每一環(huán)節(jié)都緊緊圍繞“能力培養(yǎng)”這一核心。
2.2 精心設計教學
程序設計基礎教學包括理論教學和實踐教學,二者特點不同,因此,在教學設計上應采取不同的策略。
2.2.1 理論教學改革
我校是以C語言作為程序設計基礎的教學語言。C語言的概念多,語法規(guī)則復雜。過分強調語法規(guī)則和細節(jié),容易讓學生感到枯燥無味,失去興趣;更重要的是,由于課時緊張,教師沒有足夠的時間剖析編程思路和算法設計,這就容易誤導學生舍本逐末,難以掌握程序設計的精髓。因此,必須對教學內容進行合理的裁剪和編排,對理論知識,采用抓“大”放“小”和“精講多練”的原則,例如:對于格式化輸入、輸出等知識點,學生完全可以在自學基礎上,通過案例、練習逐步掌握。教師只需要在課堂上花很少的時間進行總結、點撥。而循環(huán)、函數、指針等內容既是課程的重點又是難點,因此對這些部分教學內容就要進行精心的設計。
對于重點、難點內容的講解,為激發(fā)學生的學習興趣,可選取恰當的案例,以任務為驅動,講授程序設計的基本概念和方法。具體做法是,首先提出一個問題或任務,然后和學生一起利用已有知識對問題進行分析。如:明確已知條件;需要解決什么問題;如何將大任務合理地分解為若干小任務;這些小任務之間有什么關聯(lián);哪些小任務是運用已有知識和技巧可以解決的;哪些解決不了;整個問題的難點在哪里,應該如何應對,可以采用什么數學模型去處理這個問題,怎樣設計C語言程序求解這個數學問題等等。通過這樣的方式引導學生一步步地整理出算法并編程實現(xiàn)。在整個過程中,要多設問題,要努力讓學生主動思考,使學生成為學習主體,減少教師的單向灌輸,僅作必要講授。講授時,重點應放在思路、算法分析和程序設計、實現(xiàn)上。只講解一些最主要的語句,對于細枝末節(jié)的語法點少講,甚至不講,讓學生在閱讀或編寫程序的過程中逐步去理解和體會。
進一步,在教學過程中培養(yǎng)學生的思維能力和動手能力,鼓勵學生探索、研究和創(chuàng)新。例如,對于同一個任務,給出不同設計方案,最好是鼓勵學生提出不同的解決思路,再引導學生自己分析對比,找出最佳方案。在教學設計時,還可以在案例中設置一些伏筆,和學生一起對問題進行深入的挖掘和探討。培養(yǎng)學生發(fā)現(xiàn)問題的能力。
另外,在教學的每一個環(huán)節(jié),教師要多考慮學生的實際情況,多思考怎樣才能有利于調動學生的積極性。特別是對于教學重點、難點,在進行案例的選取,項目(問題)的設計時要由易到難,在教學過程中循序漸進,通過多方位的講解和訓練,找到學生不易掌握的癥結,舉一反三,反復練習,使學生融會貫通,真正掌握,提升解決問題的能力。
2.2.2 實踐教學改革
為了提高學生的實戰(zhàn)能力,按照“學中做,做中學”工程教育的理念,精心設計了簡單項目模仿、簡單實用項目設計、復雜項目進階設計、課程大作業(yè)四種實踐形式。采用循序漸進、螺旋上升的實訓模式,對重點技能反復訓練、強化,逐步培養(yǎng)和提高學生的綜合能力。
簡單項目模仿。在開課初期,通過對簡單案例的模仿,讓學生熟悉程序設計、實現(xiàn)、調試的流程。學生通過這個過程可以獲得成就感,消除對程序設計的恐懼心理,產生學習興趣,為后續(xù)學習打下堅實的基礎。
簡單實用項目設計。針對相關教學要求,設計一些源于學習生活的,趣味性強的實用項目,例如:計算器、擲骰子等讓學生進行程序設計,通過此類項目訓練,可以提高學生抽象思維能力和實際編程能力。
復雜項目進階設計。指導學生從一個功能非常簡單的程序開始,逐漸根據所學新知識進行功能完善,最后形成一個設計較為合理、功能較完善、代碼較長的程序。例如學生信息管理系統(tǒng)。這種從小到大、循序漸進的螺旋式程序設計方式可以降低程序設計難度,把握各章節(jié)知識之間的前后聯(lián)系,非常自然地調動學生的參與積極性,樹立學生的自信心。從而使學生的程序設計、實現(xiàn)和調試能力逐步提高。
課程大作業(yè)。在本課程的設計階段,將學生分組,每組4~5人,選擇一個課程大作業(yè),課程大作業(yè)具有一定的難度,必須通過團隊合作完成。這種形式不但能提高學生的程序設計能力,還可以鍛煉學生自學能力、溝通交流能力和團隊合作能力。
在編程的過程中,要求學生養(yǎng)成良好的編程習慣,例如:要求學生對程序構思必須進行詳細說明;對變量必須加注釋;學會如何調試程序;盡量使程序優(yōu)化;還要求對程序的運行結果做正確與否的判斷和分析。學生在編寫大量程序之后,就會由“量”的積累產生“質”的飛躍。
2.3 綜合采用多種教學模式
在教學發(fā)展進程中,產生了多種教學模式。課堂教學模式是指課堂教學的組織模式[2]。雖然當今的教學模式都是堅持學為導向[3],但是每種教學模式都有它的優(yōu)勢,也存在一些不足,不同的模式適用于不同的教學內容。為了取得更好的教學效果,在程序設計基礎課程的教學中我們綜合采用了多種教學模式。
基于案例的教學。對于一些比較抽象的內容,可以從學生比較熟悉的案例入手,引入教學內容,驅動教學。采用“任務分析-設計論證-程序實現(xiàn)-代碼測試-總結推廣”的教學思路,將枯燥知識點的講解融于案例分析,使抽象知識形象化。
討論式教學和探究式教學。對于一些深層次,比較深奧難理解,或者是案例中應用性較強,有多種解決方案的內容,可以采用分組討論和探究相結合的教學方法。學生在積極參與討論的過程中,就能主動思考,取長補短,集思廣益,進行創(chuàng)造性的學習;教師也能根據討論的情況,發(fā)現(xiàn)學生在學習中存在的問題,因勢利導,適時做出點評,還可以根據學生討論的情況,提出一些更深層次的問題,從而把學生的學習引向課外,繼續(xù)對知識進行更深層次的探索和思考。通過這種訓練,讓學生學會質疑、學會批判、學會探索,培養(yǎng)主動獲取、創(chuàng)造新知識的能力。
啟發(fā)式教學。對于一些重點、難點,可以從淺顯的道理、例子入手,通過多提問,逐步啟發(fā)的方式,引導學生積極思考,將問題講清、講透,使學生能觸類旁通,達到教學目的。
分組教學。對于課程大作業(yè),采用分組教學的方式,每小組4~5人,各小組根據選擇的題目,進行分析和研究,查閱、自學相關的文獻資料,確定解決方案,進行分工,合作完成,最后分組答辯、評分。整個過程以學生獨立完成為主,教師只提供必要的輔導。通過這種“做中學”,“學中做”的教學方式,進行實際軟件開發(fā)模擬演練,進一步激發(fā)學生學習興趣,培養(yǎng)他們分析、解決實際問題的能力,探索創(chuàng)新能力、交流溝通能力和團隊合作能力。
“學生教學”的教學方式。教學中還嘗試了“學生教學”,即提前將教學任務布置給學生,學生為了把相關內容講述清楚,必須認真學習書本內、外知識,直到對這部分內容掌握得非常透徹。實踐表明,通過這種教學方式能收到良好的教學效果,學生自主學習能力、歸納總結的能力、表達能力得到很大提升。
2.4 采用新的考核方式
配合教學內容、過程、模式的改革,我們建立了一個多元化、完善的考核評價體系,該體系注重對學生學習過程的考核,同時考核重點放在對知識的應用而不是簡單記憶。整個考核體系包括三部分。
平時成績。占30%,主要用來對學生學習過程進行評價。包括出勤率、作業(yè)上交情況、平時考試等。增加平時考試可以將學習和教學效果及時反饋給學生和老師,便于教與學的快速調整。
實訓成績。占30%,對于前三種實訓方式,按學生的課堂表現(xiàn)及實訓作業(yè)的完成情況和質量綜合打分。對于大作業(yè),則根據學生參與積極性、團隊合作能力、溝通交流能力,在項目開發(fā)過程中所起作用等,通過答辯、學生自評與互評、老師評價等給出綜合成績。實訓總成績?yōu)檫@兩項的加權平均。
期末上機考試成績。占40%,期末采用機考,內容分三部分:選擇題,通過簡單程序的閱讀,考察學生對基礎知識的掌握;程序閱讀題,用以考察學生閱讀較復雜程序的能力;程序設計題,考察學生程序設計的能力。期末考試不僅僅是考核學生對基本理論、基本知識和基本技能的掌握,更側重考核學生對知識的融會貫通和靈活運用能力。
對于參加學校承認的競賽和科研項目,并獲得一定成果的學生,獎勵額外不超過10分的創(chuàng)新分數(課程綜合成績以100分封頂)。
實踐證明,這種評價方式更加注重對學生的學習過程、綜合素質和能力的評價,評價結果更公正、合理。
2.5 鼓勵學生通過網絡等多種渠道自主學習
課堂教學并非教學的終點。大學生已經具備了自主學習的能力。尤其是計算機,完全可以通過自學從實踐中獲得真知。因此,我們在教學過程中不斷給學生推薦國內外優(yōu)秀的自測練習平臺、精品課程網站、ACM網站;另外,也逐步建設資源豐富的課程教學網站,為學生提供教學課件、重難點剖析、參考書籍、自測練習等網絡教學資源幫助學生拓展學習空間,滿足基礎不同的學生個性化學習的需求。
2.6 鼓勵學生參加競賽,利用學科競賽,促進教學
積極鼓勵、指導學生參加ACM程序設計、軟件設計大賽、服務外包大賽,使學生通過參加這些高水平比賽與優(yōu)秀學生同臺競技,開闊自己的眼界,增長見識。教師在指導學生參加比賽的過程中,也會發(fā)現(xiàn)教學中存在的一些問題,便于改進教學。
3 結束語
本課程以“適應軟件產業(yè)的發(fā)展需要,培養(yǎng)學生綜合能力”為目標,對課程的理論和實踐教學內容,以及教學過程進行了重新設計,對教學模式和方法、考核方法進行了改革,對學生的課外學習途徑進行了拓展。實踐表明,通過改革,這門課程的教學取得了良好的效果,具體表現(xiàn)在①絕大多數學生進行程序設計、實現(xiàn)、調試的能力以及溝通交流、團隊合作都得到了顯著提高。②學生對程序設計產生了濃厚興趣,有多名學生入選校ACM集訓隊,有一名學生獲得2012年度和2013年度ACM國際大學生程序設計競賽亞洲區(qū)成都站的銅牌,有五名學生獲得校服務外包大賽二等獎。③學生普遍反映,由于該門課程打下的堅實基礎,后續(xù)課程的學習更輕松。
以“能力培養(yǎng)”為教學目標符合工程人才培養(yǎng)要求,這一思路可為C++、Java等相關程序設計類的課程教學提供有益的參考。
參考文獻:
[1] 王哲,武亞蘭.印度河愛爾蘭服務外包發(fā)展模式比較研究及其對中國
的啟示[J].時代經貿,2008.8(6):76-77
[2] 郭玉蓮.課堂教學模式改革探論[J].教育理論與實踐,2012.10(32):
57-60
[3] 王文靜.中國教學模式改革的實踐探索——“學為導向”綜合型課堂
教學模式[J].北京師范大學學報,2012.1:18-24