李夏君
編寫程序和調(diào)試程序是計算機專業(yè)學(xué)生必須掌握的兩種能力。然而,大部分學(xué)生認為調(diào)試程序比編寫程序更為困難,即使經(jīng)過一個學(xué)期時間的學(xué)習(xí),能力沒有提高,對調(diào)試程序不感興趣。另一方面,作為計算機專業(yè)程序的教師,如果在課程前期沒有夯實調(diào)試程序的基礎(chǔ),沒有培養(yǎng)好調(diào)試程序的興趣,到了課程后期,講課會事倍功半,無法順利進展下去。筆者是一位計算機專業(yè)傳授程序課的教師,在第一線工作多年,下文筆者從實際出發(fā),通過對編程語言C#、中職學(xué)生特征和調(diào)試程序現(xiàn)狀的分析,使用培養(yǎng)興趣、明確規(guī)范、將錯誤分類和營造氣氛、潛移默化的方法,以提高中職計算機專業(yè)學(xué)生的程序調(diào)試能力。
一、編程語言的特點
C#是微軟公司發(fā)布的一種面向?qū)ο蟮摹⑦\行于NET Framework 之上的高級程序語言。它在繼承C和C++強大功能的同時去掉了一些它們的復(fù)雜特性,例如沒有宏以及不允許多重繼承。C#綜合了VB簡單的可視化操作和C++的高運行效率,以其強大的操作能力、優(yōu)雅的語法風(fēng)格、創(chuàng)新的語言特性和便捷的面向組件編程的支持成為.NET開發(fā)的首選語言。為了讓學(xué)生進入編程世界,熟悉編程的環(huán)境,我們采用C#語言來進行教學(xué)。教學(xué)目的是通過C#的學(xué)習(xí),讓學(xué)生掌握程序編寫和調(diào)試的基本步驟,提高學(xué)生編寫和調(diào)試程序的能力。
二、中職學(xué)生特征
中職學(xué)生來自全省各個地區(qū)的初中應(yīng)屆或往屆畢業(yè)生,學(xué)生生理特征是處于青春期,情緒不穩(wěn)定,情感波動大。學(xué)習(xí)特征是知識基礎(chǔ)薄弱,邏輯思維弱,缺乏學(xué)習(xí)動機,沒有系統(tǒng)的學(xué)習(xí)習(xí)慣和學(xué)習(xí)方法。人際特征是各自為政,團隊合作意愿不強,缺乏團隊合作精神。能力特征是解決問題意愿不高,解決問題能力不足。
三、計算機學(xué)生調(diào)試程序現(xiàn)狀
1.缺乏調(diào)試程序的興趣,采用應(yīng)付了事的敷衍態(tài)度
由于數(shù)學(xué)和英語基礎(chǔ)不扎實,學(xué)生對調(diào)試程序不感興趣,具體表現(xiàn)在:不愿意思考,作業(yè)直接抄寫教案上的代碼;程序調(diào)試遇到問題,不主動解決,先尋找老師和同學(xué)幫忙。這樣的后果是:無法吃透知識,甚至連數(shù)據(jù)庫、表、和基本的變量名稱沒有改為自己所創(chuàng)建的對象名稱,知識只是重復(fù)的操作,而無法形成有效的積累。同時,由于大量抄襲老師的代碼,在調(diào)試過程中容易出現(xiàn)這類名稱轉(zhuǎn)換錯誤。這樣不但打擊學(xué)生學(xué)習(xí)的興趣,無助于學(xué)生的學(xué)習(xí),也占用老師上課時間,增加老師上課的勞動量。根據(jù)筆者的調(diào)查問卷和平時的課堂觀察,這樣的錯誤占40%。
2.沒有良好的程序調(diào)試習(xí)慣
例如,沒有使用對齊和縮進,體現(xiàn)程序邏輯結(jié)構(gòu)和層次;對語句和函數(shù),不會使用注釋,這樣作者意圖不明;不會用斷點;變量命名只求簡單,忽略意義,如a=b+c和sum=score_b+score_c相比,明顯后者比前者更能顧名思義;遇到問題,沒有由大化小,把程序分為一個個函數(shù)來調(diào)試,這樣一團亂麻,難以解決。這種情況發(fā)生的前提是課時緊張,同時大部分教師缺乏一線工作經(jīng)驗,課堂重在知識傳授和技能訓(xùn)練,而忽略調(diào)試規(guī)范的引入和強化。學(xué)生沒有規(guī)范意識,沒有合理的格式,代碼容易打錯而不容易發(fā)現(xiàn)。由于沒有良好的編程習(xí)慣而出現(xiàn)的錯誤,占全部錯誤的20~30%。
3.獨立完成和解決問題的能力不強
由于存在懶惰和畏難的情緒,學(xué)生在有問題的時候,除了詢問教師和同學(xué),沒有查書或者上網(wǎng)查資料習(xí)慣。導(dǎo)致教師課堂上一人要面對數(shù)十人學(xué)生,既要講課又要輔導(dǎo),力不從心。由于時間緊張和心力交瘁,教師無法做好調(diào)試錯誤的整理、歸納和分類,學(xué)生一而再,再而三在錯誤代碼的漩渦打轉(zhuǎn),無法突破,最后不得不放棄學(xué)習(xí)。
四、解決問題思路和方法分析
眾所周知,調(diào)試程序比編寫程序難度還要大。面對錯綜復(fù)雜的代碼,優(yōu)秀程序員要善于從中找到錯誤并改正。對教學(xué)而言,調(diào)試程序不但讓學(xué)生掌握編程知識和技能,還可以培養(yǎng)學(xué)生的觀察力和專注力,提高學(xué)生解決問題的能力。教師可以從學(xué)生和課程特點來鍛煉學(xué)生調(diào)試程序的能力。
1.興趣是最好的老師
我國教育學(xué)家孔子曾經(jīng)說過,“知之者不如好之者,好之者不如樂之者”。當我們對一門科目產(chǎn)生了興趣之后,自然會學(xué)得有動力。根據(jù)調(diào)查,學(xué)生對網(wǎng)上購物非常感興趣,經(jīng)常利用手機或電腦登陸網(wǎng)上商城購物。因此,課程第一節(jié)課,筆者以一個自己開發(fā)網(wǎng)上商城網(wǎng)站為例子,給學(xué)生展示網(wǎng)上商城貨物的增加、刪除和修改,意在培養(yǎng)學(xué)生興趣。設(shè)置程序改錯積分卡,積分高者可以免考,促使學(xué)習(xí)從量變到質(zhì)變。設(shè)置程序糾錯問答環(huán)節(jié),以游戲方式讓學(xué)生體會學(xué)習(xí)的樂趣。
2.講課前期強調(diào)編程規(guī)范,打好基礎(chǔ)
正所謂“磨刀不誤砍柴工”,良好的習(xí)慣和規(guī)范有利于我們長期的學(xué)習(xí)。因此,以下是筆者歸納出來必須要傳授的三類編程規(guī)范:
第一類規(guī)范:環(huán)境設(shè)置,包括粘貼時調(diào)整縮進、將類型的左大括號置于新行、將方法的左大括號置于新行、將匿名方法的左大括號置于新行、將控制塊的左大括號置于新行、將“else”置于新行、將“catch”置于新行、將“finally”置于新行、復(fù)選框去掉。
第二類規(guī)范:命名規(guī)范。要注意通用性,同時變量命名,包括全局變量、靜態(tài)變量、常量、函數(shù)和控件,還有表字段和Web文件目錄結(jié)構(gòu)命名。變量名必須以字母開頭,只能由字母、數(shù)字和下劃線組成,而不能包含空格、標點符號、運算符等其它符號;不能與C#中的關(guān)鍵字名稱相同;不能與C#中的庫函數(shù)名稱相同。
第三類規(guī)范:注釋規(guī)范。重點是(1)在文件的頭部標明文件的作者,完成時間,它所完成的主要功能。(2)程序有過改動后,要寫上修改人、時間、簡單原因說明列表。
3.將常見的錯誤歸納分類,進行講解
第一種分類方法:將錯誤產(chǎn)生結(jié)果展示,可以分為:數(shù)據(jù)庫鏈接出錯、變量賦值有錯、sql語句有錯、公共標簽有錯漏等,從結(jié)果回溯原因,引起學(xué)生的反思。
第二種分類方法:將錯誤產(chǎn)生原因展示,可以分為:標點符號未配對和錯漏、變量名與值沒有配對、命令執(zhí)行場合不對,從行為導(dǎo)出結(jié)果,直截了當。
無論是哪種方法,目的都是通過練習(xí)提高學(xué)生調(diào)試程序能力,增強學(xué)生學(xué)習(xí)信心,減輕學(xué)生學(xué)習(xí)畏難心理。
4.營造氣氛,潛移默化,讓學(xué)生從適應(yīng)調(diào)試到愛上調(diào)試
編寫程序是世界發(fā)展的趨勢,連美國總統(tǒng)奧巴馬都曾宣稱世界上的所有人都應(yīng)該學(xué)習(xí)編程,而他自己以身作則,成為美國首位編寫計算機程序的總統(tǒng)?;ヂ?lián)網(wǎng)發(fā)展至今,已經(jīng)在各行各業(yè)發(fā)揮著作用。未來世界需要大量編程人員,同時,編程也成為未來人類的基本能力之一。老師在課堂上慢慢滲透,讓學(xué)生慢慢體會生活中的編程。同時,改變教學(xué)方式,教學(xué)流程不單單是老師—學(xué)生的單線操作,可以讓學(xué)習(xí)好的學(xué)生擔任老師小助手,幫助和帶動同學(xué)進行學(xué)習(xí)。這樣,減輕老師負擔之余,還可以增強學(xué)生的責(zé)任感和團伙合作能力。
五、總結(jié)
只要編程,程序難免有錯,就需要去調(diào)試。調(diào)試的時間有時數(shù)倍于程序編寫的時間。程序調(diào)試是一個有序的過程,需要很多技巧。只要掌握調(diào)試技巧,最終可以使程序正常運行,得到正確的結(jié)果。
責(zé)任編輯 何麗華