王振鐸,王振輝,邊倩,陳綏陽
摘要:程序設計是軟件技術專業學生必須掌握的技能,但教學效果往往不盡人意,歸根結底是忽略了程序設計重在“設計”的本質。文中分析了課程現存問題,提出以培養設計能力為核心的教改思路,通過“認識、設計、提高”三個階段的教學,逐步改善學生程序“設計”能力。實踐表明,由于抓住了課程本質,并采取了有效的措施,課程教學質量明顯提高。
關鍵詞:設計;改革;逆向工程;心理學
中圖分類號:G642.0 文獻標志碼:A 文章編號:1674-9324(2014)20-0039-02
程序設計語言是軟件技術專業學生的核心課程,目的是培養學生的邏輯思維能力。該類課程一直是師生倍感頭疼的課程。程序設計難教也難學,源于計算機語言本身高度的抽象性和嚴密的邏輯性。為了提高該類課程的教學效果和質量,西安翻譯學院在軟件服務外包專業程序設計課程中,大膽嘗試、創新,從課程本質出發,提出一系列具體的改革和實踐措施,供同行參考。
一、存在問題分析
1.忽視課程本質。程序設計(Programming)是給出解決特定問題程序的過程,是軟件構造活動中的重要組成部分。程序設計往往以某種程序設計語言為工具,給出這種語言下的程序。程序設計過程應當包括分析、設計、編碼、測試、排錯等不同階段[1]。從中可以看出,程序設計包括分析問題,設計算法,用特定的語言實現等過程,編程只是其中實現的部分,更重要的是分析和設計。如果學生不具備問題分析和解決的能力,又如何編寫程序呢?
目前,程序設計類課程的教學目標過多地將重點放在語法規則的掌握上,而忽視了學生實際解決問題能力的培養[2]。我們在日常教學中發現,上課認真的學生,能夠掌握程序設計的語法,也能夠模仿書上的例題編寫程序,但要解決一個實際的問題,就顯得束手無策了。更有些學生在學習幾門程序設計語言課程后,無奈地表示只能編寫簡單的“Hello World”程序,體現出學生缺乏程序設計的思想,沒有解決問題的思路和方法。
2.缺乏對“設計”的認識。日常生活中,“設計”一詞出現的頻率很高,“網頁設計”、“裝潢設計”等,我們發現“網頁設計”課程學生學習的主動性和興趣就很高,原因很明顯,現在學生每天都與網站、網頁打交道,已經具備對網頁內容和形式的認識,再經過專業學習,必然可以自行設計一個網站。但編程對于學生來講是一個新生事物,從未接觸過,缺乏對程序設計的認識,故“覺得老虎吃天,無從下手”。
3.缺乏設計型的實踐環節。程序設計目的是利用計算機技術解決現實生活中的問題,教師應在教材的基礎上,引入生活中實際的問題,讓學生解決。而現在的實驗,往往以驗證實驗為主,缺乏設計性、綜合性、研究性的實驗,忽視了學生動手能力和創造能力的培養,造成學生缺乏知識活學活用的能力。
二、“設計”思想的培養
鑒于上述問題,我們在教學過程中通過“認識”、“設計”、“提高”三階段培養學生的程序設計思想和能力。
1.認識階段。認識階段是課程教學的起始階段,主要目的是加強學生對程序設計的認識。即“為什么要學習程序設計?程序設計能為我們做什么?”在學習的初期,如果教師引導不當,就會導致學生目標缺失,學習動力喪失,直接后果便是:上課不認真聽講,實踐時無所事事,一學期下來一無所獲。那么,如何加強學生對程序設計的認識呢?我們主要采用以下方式。①認識實習。在學生入學后,立即進行認識實習,能夠加強學生對專業和工作崗位的認識。這是我們改革的第一個創新之處,其他兄弟院校,僅僅停留在校內入學教育的形式上。我們的具體做法是,通過與軟件園區企業建立校企合作,將學生的入學教育放到真實的企業環境中,除了參觀企業外,更主要的是請企業的工程師現場講解軟件開發的具體工作和崗位要求,使同學們加強對軟件開發中設計重要性的認識,為學習程序設計課程打下良好的基礎。實習結束,要求學生認真書寫實習報告,以便加強學生的認識和實習的效果。②作品展示。通過大量的軟件演示,讓學生理解程序設計在具體生活中的應用。在參觀同時,允許學生具體操作軟件,系統地理解軟件的功能,理解作者的設計思路,例如:我們在java課程教學過程中,將學生作品、學生成績管理系統讓學生操作使用,除了增強學生的認識外,還可以提高學生學習的興趣。③聘請企業技術專家和優秀畢業生進行專題講座或座談。俗話說得好“外來的和尚好念經”,通過聘請軟件企業專業技術人員,定期開展技術講座,和公司作品展示等方式提高學生對程序設計的作用的認識;同時,邀請本專業的優秀畢業生回校介紹工作經驗。這些實實在在的經驗和技能對學生提高興趣和加強認識會起到不可忽視的作用。
2.設計階段。設計階段是課程的核心階段,目標是通過教學和實踐培養學生程序設計的邏輯思維能力。主要采用以下3種方法進行培養。①“軟件逆向工程”思想的應用。軟件逆向工程(Software Reverse Engineering)又稱軟件反向工程,是指從可運行的程序系統出發,運用反匯編、系統分析、程序理解等多種計算機技術,對軟件的結構、流程、算法、代碼等進行逆向拆解和分析,推導出軟件產品的源代碼、設計原理、結構、算法、處理過程、運行方法及相關文檔等[3]。初學程序設計語言的學生,往往掌握了程序設計語法,仍然不能編寫出良好的程序,歸根結底是學生沒有程序設計的思想,不能在頭腦中形成良好的設計思路,即沒有實現目標的良好方法,故在設計的初級階段,采用軟件逆向工程的思想,先給出結果,然后從結果逆推實現的過程,學生詳細分析實現的步驟,再結合語法實現。例如:在輸出九九乘法表程序的講解過程中,教師可以先給出乘法表的輸出結果,然后分析乘法表是如何得到的,學生可以容易地想到利用雙循環結構實現,這樣利用逆向工程方法,使學生“有的放矢”,通過這種方式使學生認識到在該階段中理解程序設計的核心在于“設計”,改變學生直接編程的習慣。②程序流程圖。在程序編寫前,應具有解決實際問題的思路,程序流程圖是思路的圖形表示方法,要求學生掌握程序流程圖的繪制問題的求解過程,這樣能夠切實加強學生分析問題和解決問題能力的培養。這也是我們改革的又一創新之處,有教師認為流程圖只有在企業中才廣泛應用,學生畫流程圖和編程一樣具有難度,那么不這樣改革,我們如何培養符合企業要求的人才呢?為了降低學習的難度,我們分兩個階段進行,第一階段,培養學生用自然語言描述問題求解過程的能力。第二階段,待學生能夠用書面語言描述后,在詳細講解流程圖的符號和畫法,將自然語言的描述改為流程圖描述。學生畫出流程圖后,教師要求學生進行講解或答辯,加深流程圖設計過程的認識,有助于基礎弱的同學共同提高。分成兩個階段進行,大大提高了學生利用流程圖分析問題的能力。③設計心理學的應用。“設計”最終是為用戶服務的,要設計符合用戶要求的產品,在沒有詳盡的用戶需求時,可以使用設計心理學,想用戶所想,這無疑是對思維的又一有效鍛煉方式。教師在教學過程中可以將現實生活中的任務,分配給學生,讓他們身為用戶,充分發揮想象力,激發了學生的自我創新能力的培養。
3.提高階段。提高階段是課程的最終階段,目標是培養學生的綜合實踐能力。為了提高學生的創新思維能力,我們在教學中采用校內課程實訓和校外生產實習兩種形式。校內課程實訓:在程序設計類課程中增加了兩周的綜合實訓,讓學生利用所學的語言解決身邊存在的實際問題。實訓題目來源于教師的科研子課題和學生自擬題目,這樣大大提高了學生自主開發和設計的意愿,教師的工作從手把手教到輔助指導學生。校外生產實習:由我院專業對口合作企業,提供相應的實習崗位,分配學生具體的工作,學生應用所學知識,自行完成工作任務,在學生階段,達到和企業無縫鏈接,畢業時就可以具有崗位所需技能。
三、改革效果與結論
程序設計類課程需要記憶的語法多、枯燥,學生學習積極性不高,實踐能力弱,傳統的教學方式無法達到良好的教學效果。結合我院專業實際情況,對程序設計課程教學方法進行改革,利用三階段教學法,即“認識階段,加強認識”、“設計階段、培養能力”、“提高階段、強化實踐”,真正抓住了課程本質,使學生意識到“設計”在程序編寫中的重要性,初步掌握了“設計”的能力,動手實踐能力明顯提高,教學效果和質量明顯改觀。
參考文獻:
[1]鐘志水,姚珺.大學計算機應用基礎[M].重慶:重慶大學出版社,2012.
[2]章逸,帥晉明.計算機專業《程序設計類課程導論》的改革與實踐[J].江西教育學院學報,2011,32(6):65-67.
[3]金淘,童水光.逆向工程技術[M].北京:機械工業出版社,2003.
[4]鄧銳,趙莉,湯旭蓉,彭順生.表象訓練提高程序類課程教學效果之實證研究[J].中國校外教育,2012,(5):168-169.
[5]劉振霞,梁偉,楊愛新.高職程序設計類課程“教學做”一體化教學模式的研究與實踐[J].中國科教創新導刊,2012,(11):77-78.
[6]孫連云.關于提高程序設計類課程教學效果的新探索[J].農業網絡信息,2008,(8):111-113.
[7]周正國.基于項目的高職院校程序設計類課程改革探討[J].長江大學學報(自然科學版)理工,2012,7(9):165-166.
[8]馬雪英,王桂平.以能力為導向的程序設計類課程教學體系[J].計算機教育,2011,(4):74-78.
基金項目:陜西省教育科學十二五規劃課題SGH12549資助。