(東莞市莞城區(qū)莞城中心小學,廣東 東莞 523000)
為了在東莞市各小學有效推廣和普及程序設計教學,促進和提高學生分析問題能力、數(shù)學抽象能力、編程語言能力以及程序技巧、想象力和創(chuàng)造性,市教育局自2007年起,每年組織全市小學生開展程序設計比賽。隨著比賽擂臺隆隆的戰(zhàn)鼓聲,程序設計成為了小學生最喜愛的興趣課之一。
小學生學習程序設計可以培養(yǎng)嚴密的邏輯思維能力、積極的探索創(chuàng)造能力、嚴謹?shù)目茖W研究精神、豐富的空間想象能力。這些能力和精神完全可以遷移到其他課程的學習和生活當中去。但是,由于程序設計具有抽象性、靈活性、邏輯性強等特點。從教學角度來說,程序設計類課程主要有抽象、枯燥和復雜三大難點。加之程序設計屬于興趣類課程,不要考試。相對于學生來說,認為沒有強迫性,因此很多學生課后不會主動去花時間掌握課堂知識,導致上課時轟轟烈烈,課后教學內容全部還給了老師。對知識點記得慢忘得快。這些問題無疑給小學程序設計教學帶來了極大的挑戰(zhàn)。
面對小學程序設計課程的抽象、枯燥和復雜等特性,教學最容易步入的誤區(qū)是偏離童年本位,走向成人化,從而弱化程序設計教學對小學生學習、生活的引導作用,進而使學生失去了學習程序設計的興趣與動力。
在程序設計中使用的語言是用于編寫計算機程序的語言。我校程序設計小組使用的是pascal語言,它包含了英語中的單詞和根據(jù)規(guī)則由記號構成的記號串的總體。在程序設計語言中,這些記號串就是程序。程序設計語言包含三個方面,即語法、語義和語用。語法表示程序的結構或形式,即表示構成程序的各個記號之間的組合規(guī)則,但不涉及這些記號的特定含義,也不涉及使用者。語義表示程序的含義,即表示按照各種方法所表示的各個記號的特定含義,但也不涉及使用者,語用表示程序與使用的關系。這些對于小學生來說都是抽象難懂的。
例如在學習將兩個變量a,b進行交換時,學生的想法往往就是:“a:=b;b:=a;”但實際上,這2個語句的執(zhí)行情況是將變量b的值給了變量a,變量a再將得到的值賦給變量b。結果是變量a拿到了變量b的值,但變量a原來的值卻丟失了,變量b拿不到了。
在程序設計的訓練中,現(xiàn)有的教材專業(yè)性強,成人味足,多拘泥于語言的本身或是經典算法的直觀呈現(xiàn),從而偏離了小學童年本位,使學生聽課乏味、難懂。例如:在講到冒泡法排序知識點時,冒泡法很抽象,尚未入門的同學很難接受。我們知道,冒泡排序的基本思想:是將待排序的數(shù)據(jù)看成一個個豎直排列重量不等的氣泡,較小的數(shù)看作輕氣泡要向上浮。對這一串氣泡從底部向上進行檢查,順次比較相鄰的兩個氣泡的重量,若發(fā)現(xiàn)輕氣泡在下則進行交換。第一遍檢查結束后,最輕的氣泡(最小的數(shù))浮到了最高位置。第二遍檢查后,次輕的氣泡浮到了次高位置。如此反復進行下去,直到全部滿足輕氣泡在上重氣泡在下為止。所以有時在講基本思想時,部份學生往往會感到枯燥乏味,更不懂如何將其應用到編程應用去。
在程序設計中,解決問題的步驟往往不是一蹴而就的,它需要分析問題后,有條理地分步處理。但小學生的思維特點是很直觀的,所想即所得。這容易導致他們在解題時忽略一些關鍵步驟而得不到想要的結果。例如,在二分查找中,查找的算法是:
(1)設置起點和終點;
(2)求中間點;
(3)如果要查找的值等于中間點,則輸出結果,并結束;
(4)如果要查找的數(shù)小于中間點,則終點的值更新為中間點的值;
(5)如果要查找的數(shù)大于中間點,則起點的值更新為中間點的值;
(6)重復(2)~(5)直到找了要找的數(shù),或終點的值小于起點的值。
在以上關鍵的6步中,學生只要搞錯一步,就得不到結果。
如何采用有效的教學方法,幫助學生化抽象為具體,化枯燥為趣味,化復雜為簡單,“童化”編程成為小學程序設計教學的一個關鍵抓手。具體來說,要以兒童為中心,釋放兒童的靈性,通過各種貼切學生的事物、游戲等方式來打開學生思路,讓原本其樂無窮的程序設計課程變得生動有趣,吸引學生主動學,喜歡學。
程序設計教學內容比較抽象,有些內容難以理解。所以要立足兒童本位,用他們熟悉的事物去說明、去比喻還不熟悉的事物,讓學生把教學內容和現(xiàn)實中非常接近我們的事情聯(lián)系起來。在課堂中多用一些生活中的事物如火車、鬧鐘、替身演員等事物作為喻體,加深學生理解并強化記憶。
如在學習交換變量時,可以先拿出紅色和藍色2個不同顏色的杯子,往里面倒清水和茶,然后讓學生想辦法在不允許使用別的容器的情況下,把2個杯子的東西進行交換。學生很快就發(fā)現(xiàn)沒有別的容器的幫助,把兩個杯子的東西進行交換是不可能的。這時,再讓學生使用一個白色空杯,讓他們把杯子的東西進行交換,并寫出算法。很快,學生就能寫出如下算法:
把紅色杯子的水倒進白色的空杯;
把藍色杯子的茶倒進紅色的杯子;
把白色杯子的水倒進藍色的杯子;
接著講引入兩個變量的交換,學生就非常容易理解了。
編程是一項較為枯燥的程序設計訓練,如果教師通過比喻教學,把教學內容和現(xiàn)實中非常熟悉的事情聯(lián)系起來,不僅能使枯燥乏味的編程知識生活化,趣味化,激發(fā)學生的學習興趣。例如在將IF語句和randam函數(shù)結合的教學中,可以先給學生玩猜數(shù)字的游戲。把事先準備的一些寫了數(shù)字的紙團讓他們抽取,然后告訴他們數(shù)字的范圍,讓他們猜猜手上的紙團上寫著的數(shù)字,看看誰猜得對。學生們都會很高興的玩起來,最后看誰贏了教師可以進行精神鼓勵和采用發(fā)一些小獎品鼓勵方式來激發(fā)學生的學習興趣。此時,老師讓學生們回想剛才游戲的過程,把游戲的步驟寫出來。學生寫出來后再讓他們互相比較,然后整理得出下面步驟。
(1)準備有數(shù)字的紙團;
(2)抽取紙團;
(3)寫出自己猜想的號碼;
(4)打開紙團和猜想的號碼進行對比,對的獲勝。
接著,老師對學生進行引導:每次都要做紙團猜數(shù)字太麻煩了,既然我們已經學了編程,那能不能讓電腦幫幫忙隨機產生一個數(shù)字然我們去猜,然后把比較結果告訴我們呢?帶著問題讓學生模擬游戲步驟寫出算法。并總結歸納:
(1)產生一個隨機數(shù);
(2)從鍵盤輸入自己猜想的數(shù);
(3)兩個數(shù)進行比較,如果一致輸出“win”,不一致輸出“l(fā)ose”。
然后讓學生根據(jù)算法,寫出程序進行調試。
在一些奧賽輔導書上就有提倡將枯燥的問題進行游戲化的題目,如“猴子選大王”“狼追兔子”“齊王點兵”等有故事情節(jié)的題目,讓小學生既感到非常有趣,又能讓小學生主動地去思考問題。
編程是給出解決特定問題程序的過程,包括分析、設計、編碼、測試、排錯等不同階段。這對于小學生來說很復雜,如果我們在教學過程中將這些知識點細化,分成一個個簡單易懂的小點,讓學生接受了再繼續(xù)下一個小點,就像把一塊餅干分成好多份,讓學生在不知不覺中吃掉一大塊餅,比起一次給他們吃一大塊效果好很多。例如,在講插入排序時,可以先讓學生學習把數(shù)組里面最后一個數(shù)放到數(shù)組的開頭,其余的數(shù)據(jù)順勢往后移動一位。在這個過程中,著重讓學生明白數(shù)組中數(shù)據(jù)是怎樣移動的,如何移動數(shù)據(jù)才不會使原來的數(shù)據(jù)丟失。
接著,讓學生模擬插班生排隊的情況,一個新同學去到一個新的班級,他需要再排隊時確定自己位置。在這里,著重讓學生明白如何查找數(shù)據(jù)在一個有序的隊列中所處的位置,然后把原數(shù)組的數(shù)據(jù)進行移動,再把插入數(shù)據(jù)放進對應的位置中。
再接著,把題目升級為有n個新同學需要插入原來的隊伍。在這里,著重讓學生明白,從1到n,每個同學的插入過程是一樣的,但每當插入一個新同學,班級的隊伍長度會發(fā)生改變。
最后,讓學生完成一列輸入的數(shù),用前面學過的方法進行排序。在這里,學生需要完成從將一個插入一列數(shù)中到將一堆數(shù)逐個插入,形成一個有序數(shù)列的改變。簡單來說,就是將原來的一列數(shù)變成一個只有一個數(shù)的數(shù)列就可以了。在學生完成程序前,是沒有引入插入排序的概念的。學生完成程序后,要引導學生歸納總結插入排序的步驟:(1)找到插入位置;(2)移動數(shù)據(jù);(3)把插入的數(shù)放到對應位置;(4)更新有序數(shù)列的長度。
在這個過程里,要著重對插入排序的知識點進行分割,讓學生逐步掌握插入排序的要點,最后水到渠成。
自2003年起,筆者所在學校校開始組建程序設計興趣小組,并在相關競賽中取得了優(yōu)異成績,獲得全國一等獎1人次,全國二等獎1人次,全國三等獎2人次,廣東省三等獎2人次,東莞市一等獎40多人次。在最近3年的全市小學生程序設計比賽中,該校均榮獲團體總分第一名的好成績。這些成績的取得是和該校在程序設計教學中使用“童化”編程教學模式分不開的。
“一切教育都是從我們對兒童天性理解開始的”(泰戈爾語)??墒且斫狻皟和煨浴?,在教學中營造一個真切的兒童世界,必須有一個成熟的成人世界來作為支持。美國哲人霍姆斯說:“一個孩子的教育,應當在他出生前一百年開始?!莱隽恕巴钡恼媪x—不是作為教師的成人走向“弱化”、“稚化”,而是一個成人世界走向“成熟”的標志。嘗試以具體有趣的實例降低學生的入門難度,精選重點知識為學生打好基礎,在有針對性的練習中總結競賽技巧,倡導“童化”,在小學中開展程序設計課外輔導活動方面作為研究方向,有著重要的價值。