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