摘 要:許多信息學(xué)奧賽輔導(dǎo)教師認(rèn)為,“題海戰(zhàn)”是學(xué)生練就編程硬功的必由之路。這是輔導(dǎo)教師在認(rèn)識(shí)和實(shí)踐中普遍存在的誤區(qū),嚴(yán)重影響了輔導(dǎo)教學(xué)的有效性。結(jié)合教學(xué)實(shí)踐具體論述了在程序編寫(xiě)輔導(dǎo)教學(xué)中教師勤于親歷解題的意義:唯有教師樂(lè)下“題?!?,方能換來(lái)學(xué)生巧駕“輕舟”。
關(guān)鍵詞:信息學(xué)奧賽;教學(xué)策略;編程水平
我校輔導(dǎo)學(xué)生程序編寫(xiě)并參加全國(guó)信息學(xué)奧賽己有十余年歷史,每年都有學(xué)生獲得省級(jí)乃至國(guó)家級(jí)的獎(jiǎng)項(xiàng)。這在我們整個(gè)蘇州市吳江區(qū)幾十所學(xué)校中是“三畝地中的一株筍”,遙遙領(lǐng)先。許多兄弟學(xué)校的輔導(dǎo)教師認(rèn)為學(xué)生學(xué)習(xí)編程只有經(jīng)過(guò)“題海戰(zhàn)”才能熟能生巧,至于教師本人做不做題目就無(wú)所謂了。筆者覺(jué)得這是目前教師在認(rèn)識(shí)和實(shí)踐上普遍存在的誤區(qū)。實(shí)踐證明,教師樂(lè)于下“題?!保谟谙隆邦}?!保朴谙隆邦}?!?,才能換來(lái)學(xué)生巧駕“輕舟”度“彼岸”。
一、教師樂(lè)于下“題海”,有助于提升自身編程水平,提高上課效率
首先,多做題可以幫助教師準(zhǔn)確理解編程教材中的重點(diǎn)和難點(diǎn)。準(zhǔn)確把握重點(diǎn)、難點(diǎn)之后,才能進(jìn)一步精心安排自己的教學(xué),取舍自己講授的內(nèi)容,從而大大提高課堂教學(xué)的針對(duì)性。
其次,多做題可以幫助教師把相關(guān)題目應(yīng)用到新授知識(shí)的實(shí)戰(zhàn)練習(xí)中,提高上課效率。對(duì)于書(shū)本上的新授內(nèi)容,教材通常會(huì)對(duì)這一知識(shí)點(diǎn)的理論內(nèi)容講解的比較多。比如,在講到while循環(huán)語(yǔ)句時(shí),書(shū)上講到了它跟for循環(huán)語(yǔ)句的區(qū)別,它的一般使用形式及它的流程示意圖等等。然后,再通過(guò)書(shū)上一兩個(gè)實(shí)例來(lái)完成新授知識(shí)。這當(dāng)然還不夠,如果要讓學(xué)生對(duì)while循環(huán)語(yǔ)句掌握得更好,就需要教師選擇一些自己熟悉的相關(guān)題目來(lái)讓學(xué)生加強(qiáng)訓(xùn)練。在不斷練習(xí)中學(xué)生會(huì)知道如果它的循環(huán)體包括多個(gè)語(yǔ)句時(shí),一定要加上begin,end,以構(gòu)成復(fù)合語(yǔ)句形式,學(xué)生也會(huì)逐漸掌握它和for循環(huán)語(yǔ)句、repeat循環(huán)語(yǔ)句的區(qū)別及相互轉(zhuǎn)換……這樣,就可以更好、更全面地掌握對(duì)while循環(huán)語(yǔ)句的使用。相比起按部就班的只按照書(shū)上理論內(nèi)容學(xué)一下的效果自然要強(qiáng)很多。
再次,教師可以把題庫(kù)中相同類型題目進(jìn)行歸納匯總,以促進(jìn)教學(xué)。一般的編程教材對(duì)于新授知識(shí)的例題不是很多,最多也就兩三道。而對(duì)于一些思維力度較深、較難的教學(xué)內(nèi)容來(lái)說(shuō),這就不太可能講得很透徹,有的學(xué)生可能也不太能看得懂,不太能掌握。教師如果能把自己題庫(kù)中同一類型、同一主題的題目作一個(gè)歸類,上課時(shí)按照由簡(jiǎn)單到復(fù)雜的順序作為一個(gè)專題課來(lái)進(jìn)行教學(xué),這樣,在提高教學(xué)質(zhì)量的同時(shí),也進(jìn)一步提升了教師本人的教學(xué)能力。
二、教師勤于“下題海”,有助于總結(jié)常見(jiàn)問(wèn)題,積累教學(xué)經(jīng)驗(yàn)
1.一些低級(jí)錯(cuò)誤。比如,標(biāo)點(diǎn)使用錯(cuò)誤、語(yǔ)句格式錯(cuò)誤、保留字的拼寫(xiě)錯(cuò)誤等等,出現(xiàn)這些問(wèn)題的學(xué)生,是題目做得少的原因所致,是基本功不扎實(shí)的體現(xiàn)。學(xué)生通過(guò)不斷的刷題是可以避免的。
2.變量長(zhǎng)度溢出情況。初學(xué)編程時(shí),我們所講的整數(shù)變量用的是integer(整型),它的使用范圍是-32768~32767。隨著題目類型及難度的增加,有的整數(shù)變量有可能會(huì)超出這一數(shù)值范圍。這時(shí),我們程序代碼寫(xiě)得再正確,而變量類型定義有問(wèn)題,還是會(huì)出錯(cuò)。此時(shí),就應(yīng)使用到longint(長(zhǎng)整型)或int64(64位整數(shù))變量類型。int64可表達(dá)的最大整數(shù)是2^63-1。另外字符串變量string也是較易溢出的。初學(xué)時(shí),我們使用的string是變量長(zhǎng)度不超過(guò)255的任一串字符,當(dāng)長(zhǎng)度超過(guò)255時(shí),就要使用超級(jí)字符串a(chǎn)nsistring了。
3.程序運(yùn)行超時(shí)現(xiàn)象。一般一段程序在機(jī)器上運(yùn)行時(shí)間超過(guò)1秒,就很可能會(huì)超時(shí)。編程初學(xué)者寫(xiě)的程序,許多都是程序運(yùn)行沒(méi)問(wèn)題,但效率不高。比如,求三個(gè)數(shù)的最小公倍數(shù)問(wèn)題,有學(xué)生從1開(kāi)始列舉,當(dāng)找到第一個(gè)同時(shí)mod(求余)這三個(gè)數(shù)值為0時(shí),就找到了。這種方法對(duì)于很大的數(shù)字來(lái)說(shuō),計(jì)算機(jī)相對(duì)運(yùn)行時(shí)間會(huì)很長(zhǎng)。更有效率的是把這三個(gè)數(shù)中最大的數(shù)翻倍來(lái)找,就快得多了。
4.題意表達(dá)不清現(xiàn)象。在一些OJ程序網(wǎng)站上和競(jìng)賽中的少數(shù)難題中,有時(shí)也會(huì)有題意表達(dá)不是很清楚,或者會(huì)讓學(xué)生理解錯(cuò)誤的現(xiàn)象。我們?cè)谧鲞@種題目時(shí),自己感覺(jué)程序已經(jīng)很完善了,可是測(cè)試下來(lái)的數(shù)據(jù)就是不對(duì),學(xué)生往往去找自己編寫(xiě)的程序到底哪些地方出現(xiàn)了問(wèn)題,結(jié)果是有可能找一兩天都找不出來(lái)。主要原因在于對(duì)題目的理解上,因?yàn)橛械念}目想要表達(dá)的有可能是A情況,而我們卻理解成了B情況。所以,認(rèn)真審題是很關(guān)鍵的。
三、教師善于“下題?!?,有利于與學(xué)生交流經(jīng)驗(yàn),促進(jìn)師生進(jìn)步
首先,教師通過(guò)自己解題,然后才會(huì)發(fā)現(xiàn)跟學(xué)生會(huì)有更多的共同話題。其中“蘇州奧賽在線評(píng)測(cè)系統(tǒng)”,這是一個(gè)集解題、評(píng)測(cè)、排名等功能于一體的網(wǎng)站。網(wǎng)站上現(xiàn)在有918個(gè)編程題,學(xué)生每做完一題,可以提交,網(wǎng)站系統(tǒng)會(huì)通過(guò)各類數(shù)據(jù)進(jìn)行評(píng)測(cè),達(dá)到100分,即通過(guò),此題會(huì)在你的帳號(hào)中被標(biāo)識(shí)為“AC”。逐漸地,我發(fā)現(xiàn)學(xué)生形成了良好的競(jìng)爭(zhēng)氛圍。因?yàn)榫W(wǎng)站中有一個(gè)“校內(nèi)排名榜”,大家都你追我趕地做題,都想成為班上的第一名。為了跟上學(xué)生的節(jié)奏,作為老師的我,也不得不抽出時(shí)間來(lái)做更多的題。因?yàn)閷W(xué)生會(huì)在解題遇到困難時(shí),向我求教。有幾次,我在周末晚上很晚的時(shí)候、或者周日一早,自己做題時(shí),驚奇地發(fā)現(xiàn)我的幾個(gè)學(xué)生也同時(shí)在線正做著題目呢!這種認(rèn)真的態(tài)度,令人感動(dòng)。對(duì)于表現(xiàn)突出的學(xué)生,我都會(huì)好好表?yè)P(yáng)一下,并給予一定的獎(jiǎng)勵(lì)。而表現(xiàn)很一般的學(xué)生,則通過(guò)多方激勵(lì),希望他們能付出更大的努力。
其次,通過(guò)與學(xué)生對(duì)編程題目的交流,我們往往也能發(fā)現(xiàn)學(xué)生中也有很多“閃光點(diǎn)”,學(xué)生有時(shí)可能會(huì)用到比老師更好的方法。俗話說(shuō):“三個(gè)臭皮匠,頂個(gè)諸葛亮?!睂W(xué)生用智慧迸發(fā)出的火花,常常令老師感到驚喜。
比如,S=1+3+5……+97+99,求S的值。一般的做法是for i:=1 to 50 do s:=s+i*2-1;有的學(xué)生用到了奇函數(shù):for i:=1 to 100 do if odd(i) then s:=s+i這樣也可以求出S的值;有的學(xué)生用了repeat until循環(huán),有的學(xué)生用了while do語(yǔ)句,在100以內(nèi),i的值從1開(kāi)始每次加2,并把i的值累計(jì)加到S上,最后求出S。這么多方法完全都可以的。我在奧賽輔導(dǎo)班里,會(huì)講到算法的優(yōu)化,有時(shí)候增量算法,使用數(shù)組對(duì)先前計(jì)算結(jié)果進(jìn)行保存,用于計(jì)算后續(xù)的數(shù)值,有效消除了冗余計(jì)算,以空間復(fù)雜性換取了計(jì)算復(fù)雜性,性能得到了很大的提升,從而大大提高了計(jì)算效率。在課堂上,在每講完一個(gè)題目,我通常會(huì)問(wèn)一句:“有沒(méi)有同學(xué)能用更好的方法?”許多好的解題方法,都是我跟學(xué)生交流時(shí)獲得的。
四、教師跳出“題海”,有利于把握信息學(xué)奧賽考試題型,增強(qiáng)應(yīng)考策略
首先,通過(guò)對(duì)歷屆競(jìng)賽試題的練習(xí)與研究,我們會(huì)發(fā)現(xiàn):許多試題是在典型問(wèn)題原型的基礎(chǔ)上通過(guò)各種知識(shí)綜合、能力拓展、包裝修飾煉成的。問(wèn)題總是在不斷變化與發(fā)展中延伸的,所以導(dǎo)致奧賽題目越來(lái)越難。許多時(shí)候我們會(huì)發(fā)現(xiàn),一些奧賽題目我們都是通過(guò)這樣的方式解決的:在找到并解決問(wèn)題原型的基礎(chǔ)上,綜合考慮、深入研究、大膽嘗試、找出竅門(mén),最后成功解決。教師通過(guò)不斷的練習(xí)及題目分析,在增加解題經(jīng)驗(yàn)的同時(shí),也能更好地把握信息學(xué)奧賽考試題型,增強(qiáng)應(yīng)考策略。
其次,教師間需要交流奧賽中的相關(guān)題目。許多老師都會(huì)有這樣的經(jīng)歷:遇到了奧賽難題,自己都解決不了,怎么辦呢?“閉門(mén)造車,造不出好車”“他山之石,可以攻玉”。老師一個(gè)人的思維是有限的,集思廣益才會(huì)有更大的智慧。我的方法就是加入一些相關(guān)QQ群或者網(wǎng)站論壇,通過(guò)網(wǎng)絡(luò)向蘇州大市或者江蘇省的同行提問(wèn),通常會(huì)有其他學(xué)校的老師幫助解答。在交流中,我們不僅能獲取一些難題的解題方法,還能通過(guò)眾多教師對(duì)信息學(xué)奧賽試題的討論,幫助自己更清楚地看出試題的方方面面,對(duì)題目的理解也會(huì)更深入。
總之,作為信息學(xué)奧賽的輔導(dǎo)教師,要通過(guò)多做題目不斷地學(xué)習(xí)各種理論知識(shí)和編程技術(shù),要護(hù)好航,安全地帶學(xué)生到彼岸。教師本人多做題,不僅有利于教師本人提高專業(yè)技術(shù)水平,還可以不斷積累自己的教學(xué)經(jīng)驗(yàn),促進(jìn)師生之間、老師與老師之間更充分地交流和進(jìn)步。
參考文獻(xiàn):
[1]馬曉娟.C語(yǔ)言初學(xué)編程的常見(jiàn)錯(cuò)誤及分析[J].赤峰學(xué)院報(bào),2013(09).
[2]薛娟.做題有助教師提升教學(xué)能力[J].中國(guó)教育報(bào),2013(08).
[3]鄭啟華.PASCAL程序設(shè)計(jì).清華大學(xué)出版社,2009.
作者簡(jiǎn)介:金志峰,男,1978年7月生,本科,就職于江蘇省蘇州市吳江區(qū)盛澤二中,研究方向:信息技術(shù)學(xué)科。