【摘 要】青少年信息學奧林匹克競賽作為一項面向青少年普及計算機科學知識的競賽活動,主要是培養和提高青少年的思維能力、分析判斷能力和應用計算機解決問題的能力。信息學奧賽教學的最終目標就是讓學生從給定的問題出發,設計解決問題的算法,並能初步使用一種程序設計語言編製程序實現算法解決問題。本文談談我近幾年來在信息學奧賽程序設計算法教學中採取的一些方法和策略。
【關鍵詞】程序設計 算法 興趣 形象化 交流 錯誤資源 教學網站
【正文】
程序設計算法教學就是要使學生在已有相關知識結構的基礎上進一步體驗算法思想,了解算法在解決問題過程中的地位和作用;能從簡單問題出發,設計解決問題的算法,並能初步使用一種程序設計語言編製程序實現算法解決問題。由於算法具有高度的抽象性和嚴密的邏輯性;不僅需要學生具有一定的動手實踐能力,更需要具有一定的數學知識和邏輯思維判斷能力;學生入門比較難。因此在程序設計算法的教學中應特別注意與學生已有相關知識的銜接,從學生出發,要強調理論與實踐的結合,要激發他們的學習興趣,充分調動他們的積極性。我在程序設計算法教學過程中做了以下嘗試和探索。
一、藉助遊戲教學法,激發學生學習興趣
興趣是培養學生學習程序設計算法的前提。心理學研究表明:人們對自己感興趣的事物總是力求探索它,認識它。在學生剛剛介入程序設計算法的學習時,一般會從心理上產生一種新奇感,這是學生在接觸新事物時的一般反應。然而隨著知識難度的加深,學生的學習積極性很可能會下降,甚至對那些抽象難懂的程序設計算法產生牴觸和畏難情緒。因此,教師應該運用策略使學生保持初學階段的興趣和積極性。
在講算法概念時,我讓學生先玩預先設計好的FLASH小遊戲《農夫過河》:農夫要把羊、狼和青菜帶過河去,而每次只能攜帶一件物品,又不能讓狼吃羊或者羊吃青菜,請問農夫該如何過河?學生的興趣一下子被激發起來,紛紛提出自己的方案,課堂非常活躍。在學生玩農夫過河遊戲時,通過不同的方法過河成功。當幾種方法匯總好以後可以自然而然引出算法的定義:為解決某一個問題而設計的確定的有限的步驟就稱為算法,同時也可以讓學生了解到一個問題的算法可能不止一種。又如,在講算法的優劣性時,我引用了成語典故「田忌賽馬」。學生饒有興趣地分析出了田忌賽馬的六種方案,接著我要求他們選出孫臏的方案,並點出算法具有優劣性。通過玩小遊戲、引用典故來學習程序設計算法可以激發學生興趣,使他們充分享受成功的喜悅。學習內驅力得到了淋漓盡致的挖掘,學習效率也得以明顯提高,學生樂在其中!
二、從學生出發,精選教學案例使教學形象化
算法是解決問題的方法和步驟,計算機解決問題,必須嚴格的按步驟進行,這和學生平時解決問題是有區別的。因此在算法設計中,應將平時解題中沒有想清楚的每一步都想清楚,這對學生的邏輯思維能力要求較高,不藉助一定生活案例,學生也難以理解。因而在教學中注意引導學生利用已有知識結構,從他們日常生活中熟悉的或感興趣的問題出發,精心設計教學案例將程序設計算法的過程步驟具體化、形象化,變抽象思維為形象思維,促進學生理解。通過實踐舉例,理論升化,實踐應用,即實踐—理論—實踐三步驟,使學生理解理論同時也能應用這些理論。
例如順序結構中最經典的問題:交換a、b兩個變量的值。很多同學的答案是a=b,b=a,因為大家對變量還不夠認識。這個時候我先用生活中的例子來解釋變量的含義:變量就像一間單人房間,每次只能住一個人,當第二個人住進來的時候之前一個人就要被擠走。然後我把這個例題換了一種說法:我左手拿了玻璃杯,裡面放了水,右手拿了塑料杯,裡面放了可樂,怎麼讓玻璃杯裡變成可樂而塑料杯裡變成水呢?於是在七嘴八舌中便有了交換的方法。我又用了同桌互換作為比喻,讓學生描述如何來交換座位,得出「我讓開,你過來,我過去」的過程,而非「你過來,我過去」這麼簡單,還需要一個空地方讓我先待著,這就是交換的關鍵所在。而後我只是說了一句話「再加個容器」,學生馬上就理解了物品互換的原理,然後再導出如下知識點:
在該案例教學過程中,沒有直接提出兩數交換問題,而是通過容器互換、座位互換將問題具體化,形象化激發學生的興趣,培養了學生的思維能力,促進學生理解。
三、加強生生交流和師生交流,促進教學相長
交流活動在程序設計算法教學中有著重要地位。一方面,生生之間的交流可以給學生提供表達自己成果的機會,同他人分享學習成果,體驗成功快樂。通過與他人的討論、互助等形式的合作學習,學生可以超越自己的認識,更加全面深刻的理解事物。另一方面,師生之間的交流,可以促進師生之間的感情交流,營造和諧的師生關係。它同時也是圍繞學生學習的需要來組織安排的,能使學生主動地學習算法知識,而不是被動地接受灌輸。
例如在學生已經掌握了s=1+2+3+4+……+99+100的循環結構程序基礎上,來做1-2+3-4+……+99-100這個程序設計示例的時候,在給予學生充分的空間和時間,讓他們交流想法,自主編寫之後,我驚喜的發現學生編寫出了多種方法。(1)有學生直接指出了我預先設計的代碼過於複雜,可以用初始值n=-1,然後在每次的循環體內取n=-n;s=s+n*i,這樣就可以將代碼寫的更為簡潔,我及時的將這部分同學的想法給予肯定;(2)部分學生通過對原始代數式的分析,寫出s=s+(i-(i+1)),i=i+2。將這個例子拿出來給全班同學看的時候,我特意指出了程序的循環次數少了一半,算法上更為優化,希望能夠引導學生今後儘量想出優化的程序;(3)部分學生交流之後採用了循環+分支的結構,通過條件的判斷來決定正負號:if i mod 2=0 then s=s-i else s=s+i ,這是一個非常好的方法,結合了循環和分支結構,來完善和增強自己程序的功能。教師通過自己的教學行為來積極引導學生交流,同時也參與到學生的交流之中,從而引起學生學好算法的積極態度,激發並滿足學生的情感需要,特別是對知識的渴望與興趣,從而達到教學相長的效果。
四、充分利用學生錯誤資源,培養學生反思能力
在程序設計算法教學中,錯誤總是伴隨著學生的學習過程。心理學家蓋耶認為:「誰不考慮嘗試錯誤,不允許學生犯錯誤,就將錯過最富成效的學習時刻。」學生出現的錯誤自有它的特有之處,我們要容「錯」、用「錯」、誘「錯」、最後糾「錯」,這樣才能讓「錯誤」美麗起來。第一:建立「語法錯誤」資源庫,提升「錯誤」價值。在課堂中我把學生每次上機犯的語法錯誤都記錄下來,放到錯誤共享資源庫,學生在調試程序時,如果發現錯誤,可以從資源庫裡「檢索」。一段時間下來,學生的語法錯誤逐漸減少了。第二:利用「邏輯錯誤」突破教學重難點。有時候程序運行後結果並不是所期望的,這說明程序可能存在邏輯錯誤。造成邏輯錯誤的常見原因有:運算符使用不正確、語句的次序不對、循環語句的初值、終值不正確等等。通常,邏輯錯誤不會產生錯誤提示信息,故錯誤較難排除,而且邏輯錯誤的產生往往是學生沒有理解某些重要知識點而造成的。鑑於此,我們要在課堂中因勢利導,利用這些「邏輯錯誤」來突破重點或分散難點,達到較好的教學效果。如在教學「循環語句」時,在用DO和FOR語句編寫程序時,學生最容易出現三種邏輯錯誤:一是語句次序顛倒使結果不符合要求;二是條件表達式寫錯使循環沒有執行;三是初值設置錯誤。而這些問題恰恰是教學重難點需要解決的問題的具體體現。我們要充分利用這些課堂生成資源引導學生對這些典型錯誤進行討論和自我總結,從而促進學生科學知識結構的建立或完善。第三:以「隱性錯誤」為契機,培養學生反思能力。在程序運行過程中,有時候會出現兩種情況:一是程序運行結果正確但程序有錯,二是程序運行有結果,但結果是錯誤的,學生卻沒有發現結果有錯。這兩種很難感覺到的錯誤,可稱其為「隱性錯誤」。學生一般很難察覺隱性錯誤,教師發現此類錯誤後,最好不要直接指出,而是要引導學生多觀察、多思考、多比較,讓「錯誤」逐步浮出水面。而且學生往往對自己的隱性錯誤有很大的興趣,找到錯誤後也會很興奮,教師可藉此機會讓學生積極開展自我反思。
學生的錯誤是課堂最原生態的「資源」,我們不能忽視這些資源,而應充分利用這些錯誤帶給我們的教學契機,化錯為寶。課堂錯誤也只有在不斷地改正中行進,在教師的良好駕馭中轉化提升,才能迸發無窮的魅力。
五、開設自主學習網站,引導學生自主學習
「教讓學動」——讓學生自學,體驗成功的樂趣。信息學奧賽內容繁多,課堂教學時間有限,教師不可能面面俱到,要讓學生能夠獲取更多的知識,就必須改變傳統的「教師講多少,學生學多少」的模式,努力培養學生積極主動地去獲取知識、彌補自己的不足之處的能力。程序設計算法涉及到很多概念性知識,學生也會接觸到大量的例題,在這種情況下,學生要麼忙於作筆記而忽略了問題的分析與解決,要麼忙於考慮問題而來不及作筆記,為了讓學生兩頭都不落下,並且保證教學的效率,我覺得開發自主學習網站是很有必要的。由於學生個體差異,部分學生能很快吸收、消化課堂知識,但是他們還不滿足於此,為了延續這些學生的學習熱情,在自主學習網站上為他們開闢一個專欄,對程序設計作深入介紹,同時將一些競賽信息也放置其中,在滿足這些學生需求的基礎上充分調動他們的學習積極性。對於不能在課堂上及時吸收和消化的學生,課後可以通過訪問自主學習網站再現上課內容,根據掌握程度選擇學習知識點,逐步掌握課堂知識。這種做法克服了傳統教學中學生「吃不飽」與「吃太飽」的問題。對於網站的更新,每堂課結束以後,我會將本堂課的知識點、上課用到的例題及算法、拓展延伸部分放到網頁中去。為學生開闢網站,讓學生自主學習培養了他們的自學能力,同時在自主學習中遇到問題並能與同學們一起探討、解決,培養了學生的合作精神。
程序設計算法教學一直是突破信息學奧賽的門檻,這是由於程序設計算法教學本身抽象、枯燥,邏輯思維性強,學生不易入門。怎樣培養學生的好奇心、求知慾,保持學生對算法課的興趣,提高學生思維能力和自主學習能力,使學生樂於學習,這是值得我們探討的。