鮑通
近年來,隨著Scratch圖形化編程在中小學(xué)教育中的普及,越來越多的人會關(guān)注這樣一個問題:編程究竟能給孩子帶來什么?或者說編程教學(xué)的目的究竟是什么?
設(shè)想,如果人們只顧研究蝙蝠的習(xí)性而忽略了定位原理,那么蝙蝠將造福不了人類。好在人們通過悟性不斷地從生物界受到新的啟示,不但根據(jù)蝙蝠發(fā)明了雷達(dá),還模仿飛禽鳥類發(fā)明了飛機(jī),模仿魚類和海豚發(fā)明了船和潛艇,模擬動物變色研制了迷彩服等。同理,如果脫離悟性只顧研究項目的程序,那么編程也永遠(yuǎn)只是編寫程序罷了。把一個項目做到極致不是目的,從一個項目引申到多個項目或者從一個領(lǐng)域跨越到另一個領(lǐng)域才是關(guān)鍵。
筆者認(rèn)為,編程教學(xué)的目的應(yīng)當(dāng)側(cè)重于打開學(xué)生的悟性,激活跨學(xué)科想象力和創(chuàng)造力,將程序設(shè)計思維輻射到其他方面以生成更多的價值,而非僅僅培養(yǎng)學(xué)生成為計算機(jī)編程高手或者競技達(dá)人。我們應(yīng)該試著通過編程,讓學(xué)生領(lǐng)悟其中的道理,并對日常的學(xué)習(xí)生活有所幫助。
● 從興趣體驗到知識積累
1.基礎(chǔ)編程
“有本事就上50層”“是英雄堅持20秒”“花式街頭籃球”“超級極品飛車”“黑夜狙擊手”……這些Scratch游戲項目僅看名稱就有種想體驗的沖動吧。那就開門見山,請學(xué)生盡情體驗,然后說出自己的感受,相信很多學(xué)生會概括總結(jié)為倆字:好玩。學(xué)生臉上的笑容足以證明,興趣是打開學(xué)習(xí)之門的金鑰匙。萬丈高樓平地起,基礎(chǔ)當(dāng)先,學(xué)生搖身一變,由玩家角色瞬間轉(zhuǎn)變?yōu)樵O(shè)計師角色,這里沒有“學(xué)生”,也沒有“課堂”,“自由”就是唯一的規(guī)則。學(xué)生可根據(jù)案例中的功能模塊,對照著現(xiàn)成的腳本,自行摸索各種控件的基本用法,因為沒有確切的任務(wù)目標(biāo),可能探究的深淺不一,理解的角度也不同,沒關(guān)系,只要能讀懂部分腳本,并試著修改其中的幾處屬性讓游戲發(fā)生一些變化,大體上能明白重復(fù)語句、條件語句的作用,觀察了解造型、廣播、變量、隨機(jī)數(shù)等常見控件的基本概念,這就夠了。
2.獲得啟示
對于知識的積累,起初總要先經(jīng)歷一段從無到有的過程,學(xué)生需要做加法,做大量的加法,趁著對新鮮事物感興趣,努力獲取更多的知識,哪怕它們是零散的而又難以歸類的。例如,要讓一輛機(jī)器人小車前行,必須通過啟動電機(jī)馬達(dá)帶動輪子旋轉(zhuǎn),可是又如何啟動電機(jī)呢?可否先試著用程序點亮發(fā)光二極管,或者開啟蜂鳴器播放聲音,通過較為簡易的方式先理解輸入和輸出的概念,再思考電機(jī)的啟動問題?這有些類似于“逆向聯(lián)想”,即按照事物出現(xiàn)的時間順序或觀念的邏輯順序,由后面的事物追溯到前面另一事物的聯(lián)想。生活中時常會遇到一些難以用單一知識來解決的問題,往往一開始覺得容易,但隨著對問題的深入研究,可能會發(fā)現(xiàn)它們還涉及物理、化學(xué)甚至歷史等方面的內(nèi)容,這就要求學(xué)生一定要具備總結(jié)邏輯關(guān)系以及多學(xué)科融會貫通的能力,包括如何追溯前面更多的基礎(chǔ)知識,以將問題解析得更加透徹全面。基礎(chǔ)編程的訓(xùn)練環(huán)節(jié),可以較好地培養(yǎng)學(xué)生的觀察力和聯(lián)想力,引導(dǎo)學(xué)生從自己的角度出發(fā)建立“基礎(chǔ)知識庫”。
● 從知識分類到模型構(gòu)建
1.構(gòu)建模型
在學(xué)生已初步了解移動、旋轉(zhuǎn)、隨機(jī)數(shù)等基本知識的基礎(chǔ)上,趁熱打鐵,用一個“大魚吃小魚”的游戲項目將碎片化的知識點有機(jī)地串聯(lián)起來。四個任務(wù):用鍵盤方向鍵控制一條大魚的游動方向;五條小魚在水中自由游動(速度方向均隨機(jī));控制大魚吃掉小魚(吃一條加1分,被吃掉的小魚立即隱藏,等待隨機(jī)時間后在水中任意位置再次顯現(xiàn));點擊綠旗游戲開始,倒計時60秒后所有小魚消失且顯示“游戲結(jié)束”字樣。不難發(fā)現(xiàn),這個項目的功能雖然簡單,但它覆蓋的知識面較廣,包括按鍵、移動、面向、旋轉(zhuǎn)、坐標(biāo)、造型、偵測、廣播、變量、隨機(jī)數(shù)、條件語句、循環(huán)語句等,若要完整地實現(xiàn)游戲功能,它們?nèi)币徊豢?。學(xué)生在制作過程中能輕而易舉地將這些知識點加以運(yùn)用,并充分體會到它們在一個具體的項目中各自所起的作用,進(jìn)而便于理解掌握。模型的構(gòu)建,讓碎片化的知識點從此變得不再零散。
2.獲得啟示
隨著學(xué)生的“基礎(chǔ)知識庫”越來越充實,今后如何牢記且更好地存儲這些知識就顯得尤為重要,尤其是對于比較零散的或生僻的知識點,似曾相識卻又無法運(yùn)用,那就可惜了。像前面提到的機(jī)器人小車,前進(jìn)的功能實現(xiàn)了,緊接著就是左轉(zhuǎn)、右轉(zhuǎn)、停止和后退,這些類似的功能如果再繼續(xù)研究下去就有可能感到乏味了,因為思維空間受限,無非就是一個高/低電平的輸出,對相似的功能模塊投入再多的精力也不一定能達(dá)到鍛煉能力的目的。這時,如果再引入一個“躲避障礙”或“黑線尋跡”的功能,學(xué)生便會調(diào)用更多的知識點,包括超聲波傳感器和紅外線傳感器的工作原理,且需加入更多的判斷指令來應(yīng)對更大的挑戰(zhàn)。一個綜合性或關(guān)聯(lián)性較強(qiáng)的模塊,會讓平時看起來比較枯燥的東西在關(guān)鍵時刻派上用場。正如學(xué)科,物理、化學(xué)、生物可以分別解決其各自領(lǐng)域里的問題,而只有當(dāng)聯(lián)合起來共同解決一個綜合性問題的時候,它們各自的價值才會更加凸顯。這也正是“整合”的概念。通過編程,將知識分類整理并構(gòu)建知識模型,可以引導(dǎo)學(xué)生更好地存儲知識。
● 從參照模仿到創(chuàng)新應(yīng)用
1.運(yùn)用模型
“大魚吃小魚”的游戲項目暫告一段落,學(xué)生通過一段時間的學(xué)習(xí),既收獲了編程知識,又提高了動手能力,那么,現(xiàn)在我們可以為這段時間的學(xué)習(xí)畫上句號了嗎?答案當(dāng)然是不可以,或者說,一切才剛剛開始!“大魚吃小魚”的項目僅當(dāng)鋪墊,它只是一個模型而已,接下來才是重頭戲。也正是因為如此,不建議在鋪墊的過程中揪住一兩處“不完美”花費太多的時間。任何軟件都是在升級中不斷地完善,難以尋求“完美”,模型亦不例外。所以,有學(xué)生會對老師說:“我花了大量的時間解決了疑難問題,現(xiàn)在終于做完了。”這種想法其實是不妥當(dāng)?shù)?,包括還有一些正在被問題困擾著堅持“啃硬骨頭”的學(xué)生,一定不要被眼前的成功或失敗遮住了遠(yuǎn)眺的視野。繼續(xù)前行,假設(shè)把游戲中的水下場景換成天空,把大魚換成一只燕子,五條小魚換成五只飛蟲,然后用鍵盤控制燕子的方向吃掉天空中飛來飛去的小蟲,吃一只加1分,感覺瞬間就不一樣了,所有腳本不改動,“大魚吃小魚”搖身一變竟變成了“小鳥吃飛蟲”,學(xué)生會感到很新穎。模型的運(yùn)用,讓單個項目從此不再孤單。
2.獲得啟示
掌握一種學(xué)習(xí)方法比學(xué)會一類知識技能更重要。對于碎片化的知識點,“整合”并不是最終目的,關(guān)鍵在于運(yùn)用。在知識的海洋里,到處都隱藏著“為什么”,所以遇到問題是難免的,我們所要做的除了堅持,更需要借悟性來巧做以達(dá)到事半功倍的效果。然而,悟性又來自哪里呢?自然界一直是人類進(jìn)步的靈感源泉,生物界的動植物在漫長的進(jìn)化過程中,為了生存而逐漸具備了適應(yīng)大自然的本領(lǐng),人類通過對它們的模仿,在勞動中創(chuàng)造出了一系列工具,增強(qiáng)了自己的本領(lǐng)和能力。正是“模仿”生成了悟性,再基于觀察和總結(jié)得到對實踐的認(rèn)識和把握,最終達(dá)到創(chuàng)新。試想,如果保留機(jī)器人小車的程序和傳感器等部件,而將外殼換成一輛玩具裝甲車或者坦克的外殼,那會是一種什么樣的效果?如果換上一只卡通小豬的外殼呢?腳底下有輪子轉(zhuǎn)動,超聲波傳感器由“車燈”的位置挪到“鼻子”的位置,呈現(xiàn)的效果又不一樣了。進(jìn)一步思考,可否利用知識整合的方法進(jìn)行學(xué)科整合,用調(diào)用程序的思路調(diào)用學(xué)科知識,包括目標(biāo)、內(nèi)容,甚至研究方法等?模仿并非抄襲和復(fù)制,而是一種學(xué)習(xí)和積累,它同樣需要持之以恒、熟能生巧。
● 從去粗取精到重組優(yōu)化
1.綜合拓展
能通過程序讓“小貓”動起來,就能用同樣的方法讓一只“老鼠”動起來,漸漸地學(xué)生會發(fā)現(xiàn),無論“小貓”還是“老鼠”,真正動起來的不是這些“小動物”,而是一個“對象”或者一個“角色”,至于誰來充當(dāng)這個角色,因劇情而定。如果說從“大魚吃小魚”到“小鳥吃飛蟲”相當(dāng)于熱身訓(xùn)練,那么接下來的“打地鼠”,就需要真槍實彈了:錘頭跟隨鼠標(biāo)移動,點擊鼠標(biāo)左鍵錘頭落下,地上的三排九個洞口隨機(jī)冒出地鼠和小兔子,打到地鼠加1分,打到兔子減1分,30秒計時算出得分。再如人機(jī)對戰(zhàn)“剪刀石頭布”:當(dāng)玩家用鼠標(biāo)在三個對象中任選一個時,計算機(jī)也同時隨機(jī)選出一個,然后進(jìn)行比較,7局4勝制。它們雖不同于前面的“大魚吃小魚”,甚至還增加了新的算法,但腳本的復(fù)用性依然很高,學(xué)生關(guān)鍵要摸清其中的規(guī)律,觀察項目之間的共性和個性,當(dāng)遇到問題時要能想到,“大魚吃小魚”里的哪個模塊可以用來解決這個問題,或者對尋找解決辦法有什么啟發(fā),甚至如何優(yōu)化。通過項目之間的跳躍轉(zhuǎn)換,不斷地封裝成功經(jīng)驗和失敗教訓(xùn),逐步鍛煉獨立思考、舉一反三的能力。
2.獲得啟示
從做加法積累,到建立模型存儲,再到參照模型轉(zhuǎn)換,直至拓展運(yùn)用,整個過程是動態(tài)的、連續(xù)發(fā)展的。若要創(chuàng)新,就必須超越模仿,學(xué)會提煉并重組優(yōu)化。如果將機(jī)器人小車中用到的超聲波傳感器放在一輛真實的汽車尾部,那便是“倒車?yán)走_(dá)”了;如果對超聲波傳感器返回值做出判斷后觸發(fā)的不是電機(jī)而是舵機(jī),那么由舵機(jī)聯(lián)動的一扇門就成了“智能門”,若干舵機(jī)組合還可構(gòu)建出一臺“智能機(jī)械臂”……正如一臺機(jī)器從一個功能擴(kuò)展到多個功能,起初,按鈕的個數(shù)會陸續(xù)增加,但后來隨著不斷地改良升級,按鈕或許就減少到只剩下一個“一鍵完成”,甚至不需要按鈕,完全智能化了。生活中許多高深的道理往往蘊(yùn)含在一些簡單的思想中,真正的智慧其實就是洞察事物的本質(zhì)和相互關(guān)系。再簡單的東西要想做“精”,也是非常不容易的,因為本質(zhì)的來源是錯綜復(fù)雜的。漸漸地你會發(fā)現(xiàn),我們所謂的“整合”并不是做加法,而是做減法,最終要將各學(xué)科知識融合起來,學(xué)生值得驕傲的不再是收獲了某種知識,而是具備了運(yùn)用某種知識的能力。編程的綜合拓展將引導(dǎo)學(xué)生學(xué)會如何做“減法”,剔除煩瑣,保留精簡,循序漸進(jìn)終見月明。
● 結(jié)束語
編程,是一項技能,也是解決問題的理想工具,是一種表達(dá),也是一種創(chuàng)作。它能教會學(xué)生懂得如何取舍,如何對事務(wù)化繁為簡。其實,做減法是一件需要勇氣的事,暫棄眼前追求長遠(yuǎn)勢必存在著一定的風(fēng)險,所以最簡單的往往也是最難做到的,道理似乎總能用一兩句話表明,而這一兩句話的背后確是經(jīng)歷了太多的復(fù)雜。編程教學(xué),它從無到有,于編程中汲取了巨大的能量,再從有到無,將這些能量釋放至萬物,助其生長。今天,我們一起做加法,為了明天可以輕松地做減法;今天,我們一起拿起編程,為了明天能夠充滿自信地放下編程。