張 野,宋 微
(渤海大學 信息科學與技術學院,遼寧 錦州 121000)
?
程序設計實驗課堂錯誤轉化提升策略研究
張野,宋微
(渤海大學信息科學與技術學院,遼寧錦州121000)
摘要:針對目前程序設計類課程實驗教學中存在的問題,本文結合計算機專業課程的教學內容,通過總結和分析,給出了提升學生程序設計能力的方法.以《C語言程序設計》課程為例,指出學生在學習中所出現的常見錯誤,并重點闡述"語法錯誤"、"邏輯錯誤"、"隱性錯誤"等典型錯誤進行轉化提升的策略,建立錯誤資源共享庫.教學實踐證明,實驗錯誤轉化提升策略能夠提高學生的學習興趣,增強學生的應用能力.
關鍵詞:程序設計;實驗錯誤;轉化提升;策略
程序設計基礎課程作為大學計算機專業、軟件專業的必修課程,也是各理工科的核心專業課,而該類課程的實驗與實踐教學是提升相關專業學生就業競爭實力的有效途徑.實驗教學的本質是一種創造活動,是培養人的活動,有計劃、有組織地把科學知識,思維能力、實驗方法、操作技能傳授給學生[1],通過實驗教學,不僅培養學生的能力,而且啟發他們的創新精神和創新意識,實驗教學更要培養他們嚴謹的科學態度和誠實的優良品質.但是在傳統教學理念支配下,目前的程序設計類課程的實驗教學,主要以老師講,學生聽,實驗照書敲代碼等形式,在學生實驗過程中,經常性的出現語法錯誤、語句錯誤等低級錯誤,反映出學生編程能力不足,教學效果比較差[2].很多專家學者和一線教師在程序設計類課程中,探討了很多有意義的教學方法,取得了一定的效果[3][4].
學生在分析問題、設計算法到程序實現的學習過程中,不斷的會出現實驗錯誤,基于實驗錯誤是教學過程的巨大財富的思想,充分挖掘實驗錯誤的價值,本文對程序設計類課程中學生常見的錯誤類型進行分析,提出一系列錯誤轉化提升的教學策略,并在《C語言程序設計》課程中進行了教學實踐,取得了較好的教學效果.
1.1程序設計類課程與課程群分析
程序設計類課程與專業方向緊密相關,課程內容自成體系,程序設計作為目前計算機及相關專業的主流技術,占有舉足輕重的作用.但是在實際的教學過程,大多數學生的程序設計水平不高.程序設計水平直接決定了學生對計算機專業知識的應用能力,也是學習后續專業課的基礎,因此,如何提升實驗教學水平成為保證學生編程能力提升的關鍵[5].
程序設計語言的學習很難在一個學期的時間將一門語言完全掌握,編程內容的學習應該滲透到其他專業課的學習之中[6].但是由于現在的課程設置基本按照課程的教學要求,未能考慮到課程之間的聯系性,因此,有必要分析程序設計課程的課程群,以便教師在教學過程中建立學生的學習體系,提升學生的就業競爭力.以計算機專業為例,計算機程序設計類課程基本集中在計算機軟件方向,包括《C語言程序設計》、《面向對象程序設計》、《數據結構》、《計算機網絡》、《數據庫原理與應用》、《軟件工程》等.下面以《C語言程序設計》為例,說明程序設計對學生實踐能力培養的重要作用,如圖1所示.

圖1學生程序設計能力培養層次
《C語言程序設計》是專業基礎課程,是學生第一門計算機程序設計課程,因而在教學過程中應該注重對學生分析問題、解決問題能力的培養,側重學生編程能力的養成.減少項目類、綜合性的實驗內容,注重程序設計的基礎性與實用性[7].
1.2實驗錯誤類型分析
1.2.1語法錯誤分析
對于學生,由于接觸編程時間較短,在編程過程中沒有符合語法規則而產生的語法錯誤是最常見的錯誤[9].如:表達式不完整、關鍵字錯誤、數據類型不匹配等.語法錯誤可以使用集成開發環境來進行調試,編譯器會對程序中的語法錯誤進行判斷,編譯系統會自動提示相應的錯誤位置和錯誤原因.但是由于學生初次接觸程序設計基礎課程,對專業術語不敏感,很難找到錯誤.學生遇到錯誤,第一時間就會找老師解決,老師在實驗課的大量工作就會解決這些基礎性錯誤,難以完成既定的教學目標. 1.2.2邏輯錯誤分析
程序通過編譯器的語法錯誤檢測,但是程序在運行時出現錯誤,導致程序被中斷,或者程序的運行結果沒有得到預期的結果.例如:除數為0、運算符使用不正確、循環語句邊界錯誤等.邏輯錯誤不會產生錯誤提示信息,或者不能準確定位錯誤產生的位置[10].學生由于編程的經驗尚淺,很難準確判斷出錯的代碼段,不能方便的調試程序,錯誤難于排除.
1.2.3執行錯誤分析
程序能夠通過編譯器的檢查,運行也沒有出現錯誤,但是執行的結果不是用戶所期望的,或者執行的結果無法人工判斷對錯[11].例如:查找年齡大于40歲的職工,結果中出現了30歲的職工,這顯然不是用戶所期望的結果;在數學計算中,由于很難人工計算出結果,因此,不能判斷出結果是否正確,只有當發現明顯的誤差結果時,需要重頭排查,才會發現程序出現錯誤.一般情況下,編譯器在編譯程序時,不能檢測到程序中的邏輯錯誤,也不會產生邏輯錯誤的提示,因此邏輯錯誤比較難排除,需要程序員仔細的分析程序,并借助集成開發環境提供的調試工具,才能找到出錯的原因,并排除錯誤.
2.1主動設置語法錯誤,將語法錯誤轉化為教學資源
在教學設計階段,根據以往的經驗,事先預計學生有可能出現的語法錯誤,并把這些錯誤放在學生要完成的實驗中,通過主動設置錯誤,讓學生在改正錯誤的過程中加深印象,理解錯誤中所涉及的問題,減少以后再次出現錯誤的幾率.例如在使用C語言作數學運算時,必須注意運算結果的數據類型,如果運算結果超出運算數據類型所表示的數值范圍,必須進行強制數據類型轉換.
2.2因勢利導邏輯錯誤,將邏輯錯誤轉化為重難點教學
邏輯錯誤是一種很好的課堂資源,這些資源對突破課程的重難點教學非常有幫助.學生出現了邏輯錯誤,表明學生在學習重難點的過程中遇到了問題,由于教學中的講解都是能夠正確運行的程序,學生在學習時不存在理解上的障礙,但是在實驗過程中,往往出現大量的錯誤,說明學生對重難點的知識遷移有困難.例如在循環語句的講解,對循環語句的正確描述是教學的重難點,在使用while和do while編寫程序時,學生會出現語句次序顛倒致使程序結果不符合要求、條件表達式錯誤、循環邊界錯誤等邏輯錯誤.教師可以利用這些典型錯誤引導學生進行討論和總結,從而建立和完善學生的知識結構.
2.3激活隱形錯誤,培養學生創新能力
學生在學習編程的過程中比較注重結果,很難發現隱形錯誤.教師遇到此類問題,不要直接指出錯誤,而是要引導學生多觀察、多思考,學生對程序的隱形錯誤有較大的興趣,找到錯誤后會非常興奮.造成隱形錯誤的原因通常是學生對某些關鍵環節把握不夠準確,教師可以利用這個機會,引導學生進行知識結構的再構建,培養學生的探究能力與創新能力.
2.4整合錯誤,建立錯誤共享資源庫
發現錯誤的一個很重要的價值是提醒其他同學減少同類錯誤.在上機實驗操作中,要求學生把每次課堂上出現的錯誤記錄下來,放到錯誤共享資源庫,學生在調試程序時,如果發現錯誤,也可以從資源庫里“檢索”.已經完成任務的同學在建立錯誤共享資源庫的過程中提高了分析問題的能力,也有效的緩解教師的壓力,使得教師可以側重于對一些共性的問題進行關注.
程序設計基礎課程上機實驗操作是程序設計基礎課程的必備環節,在程序設計基礎課程中所占比例在40%以上,在教學大綱和教學內容的要求下,程序設計基礎課程的教學流程首先由教師明確實驗任務、講解實驗內容,然后學生自主上機練習,教師負責答疑.我們設計的實驗錯誤轉化提升策略在教學流程中添加了程序錯誤調試的過程,要求學生在上機編程中對出現的錯誤進行記錄并自行設計解決方法,完成程序錯誤調試.具體的實驗教學流程如圖2所示.

圖2程序設計基礎課程實驗教學流程
實驗錯誤轉化提升的教學效果評價選取《C語言程序設計》課程教材中的10個程序進行學習,這些程序涵蓋變量定義、流程控制、函數、結構體等內容.選取兩個班級共計60名同學,并對學生分為三組,第一組采取三種實驗錯誤轉化提升策略,并配合學生錯誤共享資源庫進行實驗學習,第二組采用傳統的上機實驗方式,第三組由學生自主上機學習,并配合錯誤共享資源庫進行錯誤修正.學生在學習10周后進行測試,測試結果分別統計語法錯誤、邏輯錯誤、隱形錯誤的數量,實驗統計結果如圖3所示.

圖3實驗錯誤轉化提升教學效果評價
從圖3中,我們可以明顯地看出小組之間存在著明顯的差異,尤其在語法錯誤和邏輯錯誤方面,差別較大.
通過對各個小組的測試結果進行分析,我們可以得出如下結論:
(1)語法錯誤作為實驗課程的出現頻率最高的一種錯誤類型,決定了學生學習興趣的持續和后續學習的基礎.通過本文的錯誤轉化提升策略,學生在語法錯誤的修正方面具有了較好的效果,而未經過錯誤轉化提升策略訓練的學生,盡管在學習過程中能夠改正部分語法錯誤,但是存在著“常改常犯”的不良習慣,缺少總結與提升的過程.值得注意的是,第三組自主學習的同學,經過錯誤共享資源庫的幫助,語法錯誤的數量明顯減少,但是邏輯錯誤和隱性錯誤的數量未出現明顯變化.因此,錯誤共享資源庫對學生改善語法錯誤的效果較為明顯.
(2)由于學生的語法錯誤明顯減少,導致在教學過程中邏輯錯誤出現的幾率增高,學生在實驗過程中,著重解決程序的邏輯問題,進而對程序實現的思路和算法的理解有了進一步的提高,教師也在教學過程中側重對學生邏輯思維能力的培養,對學生編程能力的培養與編程習慣的養成起到了積極的作用.
(3)經過錯誤轉化提升方法訓練的學生,在出現隱性錯誤的數量上高于另外兩組,主要原因在于學生的語法錯誤和邏輯錯誤數量相對較少,編程已經進入到一個知識結果再構建的過程,盡管隱性錯誤的數量高于另外兩組,但是在總體的錯誤數量顯示出該組學生的技術水平要遠遠超過另外兩組的平均水平,也體現出了學生在學習過程中的探究能力和創新能力.
本文從理論和實踐兩個方面,研究了程序設計課程實驗錯誤轉化提升策略,從實踐應用情況來看,取得了比較理想的效果,學生的編程素養和編程能力得到了很大的提高.學生的錯誤是課堂教學的寶貴財富,我們應充分利用這些錯誤帶給我們的教學契機.實驗錯誤也只有在不斷地改正中行進,在教師的良好駕馭中轉化提升,才能更好的提升學生的編程能力.實驗錯誤轉化提升策略的應用,使得傳統的計算機實驗教學模式發生了重大的改變.通過實驗錯誤轉化提升的訓練和錯誤共享資源庫的構建,讓學生不再停留在上機改錯的低層次學習,從而在根本上改變學生對學習編程的畏難心理,真正做到從錯誤走向正確.
參考文獻:
〔1〕葛文庚,藺莉.程序設計基礎課程教學模式研究與設計[J].電子設計工程,2012(04):44-46.
〔2〕許碧榮.電子專業PLC實驗的教學改革與實踐[J].電子科技,2010(12):112-113.
〔3〕徐慧,郭榮祥,周建美.多維一體的“數據結構”實踐教學系統的構建[J].計算機教育,2011(10): 66-70.
〔4〕張鵬,戚梅.《編譯原理》課程教學改革探討[J].電子設計工程,2012(05):8.
〔5〕王曉杰,王蕓.工程化方法在《數據結構》實踐教學中的應用[J].福建電腦,2011(3):182-183.
〔6〕張勇.“Java程序設計”課程教學改革研究[J].電腦知識與技術,2011(24):5980-5981.
〔7〕于曉強,趙秀巖,閆丕濤.計算機程序設計課程中計算思維能力的培養[J].計算機教育,2011 (13):18-21.
基金項目:渤海大學教學改革研究項目(BDJG-14-QN-B-001)
收稿日期:2015年11月22日
中圖分類號:TP311;G642
文獻標識碼:A
文章編號:1673-260X(2016)02-0256-03