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