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