王蘇明 鐘柏昌 李藝
近年來,Scratch積木式編程工具在國內(nèi)中小學(xué)信息技術(shù)教育領(lǐng)域蓬勃發(fā)展,越來越多的地區(qū)和教師個人都加入到Scratch的教學(xué)與研究中來。Scratch之所以從起步的星星之火發(fā)展至如今的燎原之勢,與其本身的特點密不可分,國內(nèi)外研究者也從不同層面給予了解讀。首先,從一門編程語言的基本生存條件來看,它完全滿足低門檻、高上限、寬壁壘 [1]這三個要求。其次,從一門編程語言自身發(fā)展來看,在其歷代版本更新與優(yōu)化中,它始終堅持了三條核心原則:程序更易修改、項目更有意義、社交氛圍更濃厚。[2]最后,從一門編程語言給使用者帶來的用戶體驗來看,它操作簡單、指令積木化,“放棄”語法、接口標(biāo)準(zhǔn)化,所見即所得、程序可視化等。這些優(yōu)點反映在學(xué)生學(xué)習(xí)Scratch程序的過程中,他們最直觀的感受就是“直觀化編寫流程”與“直觀化調(diào)試過程”。本文嘗試就這兩個特點進行詳細解析,并結(jié)合案例闡述其在教學(xué)中的應(yīng)用。
概念解析
1.直觀化編寫流程
直觀化編寫流程是Scratch區(qū)別于其他代碼式編程語言的一個重要方面,具體體現(xiàn)在多個方面。
一是指令積木化,不需要記憶抽象的程序語句。在Scratch中,指令集、數(shù)據(jù)與運算符及程序結(jié)構(gòu)均以積木式呈現(xiàn),免去了枯燥的語句記憶,無疑為使用者減輕了負擔(dān)。
二是語法直觀化,不需要記憶抽象的語法規(guī)則。Scratch的程序元素被具化成形狀各異的積木,這些積木不僅直觀易懂,而且將語法規(guī)則固化在積木的形狀之中,只有接口“相洽”的積木才能被連接。這樣別具匠心的設(shè)計,消弭了因各種語法規(guī)則而形成的隱形壁壘,學(xué)生幾乎是在忘卻語法規(guī)則存在的狀態(tài)下,自然習(xí)得規(guī)范編程的方法。
三是程序流程化,不需要理解抽象的程序邏輯。腳本的搭建與執(zhí)行均符合自頂向下的順序,符合日常的做事經(jīng)驗,程序意圖和功能不僅方便實現(xiàn),而且易于理解。
這些特點帶來的好處也是顯而易見的:其一,學(xué)生的創(chuàng)作想法,通過自然語言表達可以較為容易地轉(zhuǎn)化成Scratch編程語言,完成腳本搭建實現(xiàn)其創(chuàng)意;其二,為學(xué)生運用指令集按照一定的“程序”去解決問題提供了便利;其三,這種邏輯清晰的表達在一定程度上已經(jīng)替代了流程圖的功能,即便是小學(xué)生在閱讀他人的腳本時也能較好地理解;此外,直觀化編寫流程的特點,對于學(xué)生體驗抽象與建模的過程,促進抽象思維與可視化思維的發(fā)展都提供了極大的幫助。
2.直觀化調(diào)試過程
Scratch直觀化特點還表現(xiàn)在直觀化的調(diào)試過程,其特點體現(xiàn)在:一是具有按“塊”執(zhí)行的功能,Scratch的每一個積木塊都可以單擊運行,直觀地看到代碼段的運行結(jié)果;二是具有分“段”調(diào)試的功能,在Scratch中,一個腳本可以完成多個功能,我們可以將積木塊按功能分段,分段排查。
這種直觀化調(diào)試體驗不僅便于初學(xué)者快速接受和熟悉一門新的編程語言,對于熟練者也可以輕松自由地調(diào)試復(fù)雜程序?qū)崿F(xiàn)各種創(chuàng)意,而直觀的分塊分段調(diào)試過程也有助于學(xué)生模塊化思維的培養(yǎng)。
應(yīng)用舉例
本文以Scratch程序設(shè)計的部分課例教學(xué)為例,試說明上述特點在實際教學(xué)中是如何應(yīng)用的。
1.利用“任務(wù)—指令—序化”程序設(shè)計思想理解直觀化編寫流程的本質(zhì)
盡管Scratch具有直觀化的編寫流程,但對于新手而言,依然需要在教學(xué)中進行適當(dāng)?shù)囊龑?dǎo),以理解這種直觀化的腳本編寫方式的實質(zhì)。就基礎(chǔ)教育階段的程序設(shè)計教育而言,必須以兒童能夠理解的方式來介紹程序設(shè)計的本質(zhì)。我們認為,建立在“任務(wù)—指令—序化”概念之上的程序設(shè)計和面向?qū)ο蟮某绦蛟O(shè)計(對象—事件—行為)都可以稱之為程序設(shè)計的“思想”。[3]實際上,Scratch直觀化的編寫流程充分體現(xiàn)了由任務(wù)到指令再到序化的腳本編寫流程。
例1:《智能倒車》之方案獲得
【情境描述】小汽車已成為我們生活中重要的交通工具,但倒車對于很多新手司機來說不是件容易的事,在給定車位和倒車引導(dǎo)線的情況下,你能設(shè)計出智能倒車系統(tǒng)嗎?今天我們嘗試利用Scratch來模擬實現(xiàn)這一任務(wù)。程序界面如圖1所示。
圖1 智能倒車
【案例解析】問題情境中有確定的條件即固定車位和倒車引導(dǎo)線,解決方案可嘗試由學(xué)生討論獲得。學(xué)生討論的結(jié)果大致可歸納如下:智能倒車系統(tǒng)要能使小汽車在倒車過程中自動調(diào)整方向,到達車位后可自動停止。這需要Scratch可以做出以下判斷:小汽車左后側(cè)碰到黃色線可左轉(zhuǎn);右后側(cè)碰到黃色線可右轉(zhuǎn);后部碰到藍線時停車;轉(zhuǎn)換成Scratch語言就是“如果偵測到……就……”“接收到……廣播……”按照這樣的“程序”去解決問題,可能需要用到的積木塊有:重復(fù)、條件、偵測、廣播、旋轉(zhuǎn)、停止等。由此可見,Scratch的直觀化編寫流程特點對于“任務(wù)—指令—序化”這一程序設(shè)計思想的實踐也是很好的支持。
2.利用學(xué)習(xí)支架支持直觀化編寫流程的實現(xiàn)
學(xué)生不僅要理解直觀化編寫流程的實質(zhì),而且要真正熟練做到利用直觀化流程編寫腳本。這就需要教師采用某種方式來幫助學(xué)生梳理“任務(wù)—指令—序化”的內(nèi)容,即幫助學(xué)生梳理問題解決的過程,并從自然語言的描述轉(zhuǎn)化為Scratch的腳本編寫流程。在這里,學(xué)習(xí)支架的使用就顯得極為必要。從使用目的來看,學(xué)習(xí)支架可以分為接收支架、轉(zhuǎn)換支架和輸出支架。其中,轉(zhuǎn)換支架用來幫助學(xué)生轉(zhuǎn)換所獲得的信息,使所學(xué)的知識更為清晰、易于理解,或使劣構(gòu)的信息結(jié)構(gòu)化,尤其適用于支持原理性和方法性內(nèi)容的學(xué)習(xí),如算法與程序設(shè)計類知識的學(xué)習(xí)。[4]我們利用任務(wù)分析表作為轉(zhuǎn)換支架,幫助學(xué)生梳理任務(wù)元素和解決過程,使之與Scratch的直觀化編寫流程產(chǎn)生關(guān)聯(lián)。
例2:《狐假虎威》之任務(wù)分析表
【情境描述】
任務(wù)分析表1
主題 老虎跟隨狐貍出場
背景 森林
角色 老虎、狐貍、小猴、鴨子、小狗
角色行為 狐貍:從左邊進入屏幕,停在合適位置。
老虎:在狐貍之后,從左邊進入屏幕,停在合適位置。
操作步驟 1.打開“狐假虎威半成品”文件
2.為狐貍和老虎設(shè)置初始狀態(tài)
3.實現(xiàn)狐貍從左邊進入屏幕的效果
4.實現(xiàn)老虎從左邊進入屏幕的效果
5.調(diào)整兩者進入屏幕的時間差,實現(xiàn)“老虎跟隨狐貍出場”的效果
6.測試與保存
任務(wù)分析表2
主題 小動物們逃走
背景 森林
角色 老虎、狐貍、小猴、鴨子、小狗
角色
行為 小猴:在距離老虎200單位時,發(fā)現(xiàn)老虎,發(fā)出信號并向右移出屏幕逃走。
鴨子:在收到小猴的信號后,向右移出屏幕逃走。
小狗:在收到小猴的信號后,向右移出屏幕逃走。
操作
步驟 1.為小猴添加腳本,實現(xiàn)上述角色行為
2.為鴨子添加腳本,實現(xiàn)上述角色行為
3.為小狗添加腳本,實現(xiàn)上述角色行為
4.測試與保存
【案例解析】狐假虎威是學(xué)生都很熟悉的寓言故事,學(xué)生用自然語言描述該故事完全沒有問題,任務(wù)分析表通過對角色行為的分析與操作步驟的羅列,完成了自然語言與Scratch編程腳本之間的轉(zhuǎn)換。在學(xué)生每次動手制作之前進行這種轉(zhuǎn)換訓(xùn)練,很好地鍛煉了學(xué)生的邏輯分析能力。事實上,這種自然語言轉(zhuǎn)換為編程語言的過程,也是抽象與建模的過程,Scratch特有的直觀化編寫流程特點對于學(xué)生抽象與建模能力的培養(yǎng)大有裨益。
3.利用“分塊”調(diào)試程序
例3:顏色偵測
【情境描述】通過顏色偵測,判斷大嘴巴是否與豆子相遇。如相遇,廣播被抓獲,并計1分。有A生求助,其程序與小組內(nèi)B生的完全一樣,B生程序運行正常,他卻沒有成功。我檢查了他的腳本(如圖2),確實無誤。問他:“分‘塊’檢查了嗎?”他答:“能查的都查了。”再問:“偵測也查過了?”他茫然:“這怎么查?”問組內(nèi)其他學(xué)生,均告不知。我示意全班一起看這個問題?!霸鯓訂为氄{(diào)試某一偵測控件?”C生舉手說:“我知道!”于是向全班轉(zhuǎn)播A生屏幕,C生操作:將A生程序中的顏色偵測控件從條件中拉出,單擊,控件右上方出現(xiàn)提示框“false”。我問學(xué)生是何故,再問:“如何驗證A生的偵測是否正確?”他又將大嘴巴和豆子拖曳至一起,再次單擊顏色偵測控件,仍然提示“false”。C生:“這就是大嘴巴不吃豆子的原因,這個偵測并不能起到判斷相遇的作用,應(yīng)該是顏色選取有問題?!彼匦绿崛〈笞彀秃投棺拥念伾俅螁螕纛伾珎蓽y,出現(xiàn)提示“true”,說:“應(yīng)該沒問題了?!睖y試程序,成功執(zhí)行。至此,問題解決。
圖2 A生的豆子腳本
【案例解析】因為色差較小的緣故,學(xué)生肉眼觀察確實不易發(fā)現(xiàn)顏色不對。正是Scratch的“分塊”調(diào)試特點,幫助我們“明察秋毫”,將這些原本很難發(fā)現(xiàn)的錯誤直觀地展示出來。在平常的學(xué)習(xí)中,學(xué)生可能較多關(guān)注動作、外觀等模塊控件的“分塊”調(diào)試,忽略了偵測等其他模塊的應(yīng)用。教師在教學(xué)中應(yīng)多加提示,充分運用Scratch的直觀調(diào)試功能,對我們調(diào)試程序很有幫助。
4.利用“分段”調(diào)試程序
例4:偵測之變量困惑
【情境描述】要求為飛行器添加腳本,使之可以在有限空間躲避若干無序飛行的障礙物,若飛行器被擊中4次,游戲結(jié)束。在搭建飛行器的過程中,有不少學(xué)生都出現(xiàn)了共性問題:被1個障礙物擊中后,游戲立即結(jié)束。其腳本如圖3所示。
【案例解析】我先請學(xué)生將這段程序按功能分成3段:跟隨鼠標(biāo)移動,碰到障礙物偵測,游戲結(jié)束偵測。隨后進行分段測試,飛行器能夠執(zhí)行跟隨鼠標(biāo)移動,操控程序沒有問題。當(dāng)健康度為0時,游戲可以正常停止,結(jié)束偵測也沒有問題。顯而易見的是,碰到障礙物偵測出了問題。為便于調(diào)試,我們將結(jié)束偵測模塊斷開,再次將飛行器移過障礙物,發(fā)現(xiàn)在此過程中,健康度一直在減少。問題找到了:從碰到障礙物到離開障礙物的這一瞬間,循環(huán)體內(nèi)的控件會不停地執(zhí)行。有了明確的問題,就可以想辦法解決了:添加控件。直觀的分段調(diào)試過程使得“自下而上的修補”這一看似隨意的探索實驗式學(xué)習(xí)方式,在帶給學(xué)生舒適學(xué)習(xí)體驗的同時,也獲得了解決問題的方法。正如美國MIT終身幼兒園研究小組主任雷斯尼克教授在2012年TED主題演講《讓我們教孩子學(xué)編程吧》中指出,學(xué)習(xí)編程的意義在于“學(xué)習(xí)編程,并在編程中學(xué)習(xí)(Learning to code,coding to learn)”。
Scratch軟件作為一款優(yōu)秀的兒童編程工具,進入中小學(xué)信息技術(shù)課堂的時間并不算長,其教材教法仍有很多值得我們探尋之處。本文僅從Scratch程序之直觀化編寫流程與直觀化調(diào)試過程的特點出發(fā),試舉例說明其在實際教學(xué)中的應(yīng)用方法,以期拋磚引玉,共同提高。
參考文獻
Resnick,M.,Maloney,J.etc.Scratch:Programming for All[DB/OL].http://cacm.acm.org/magazines/2009/11/48421-scratch-programming-for-all/fulltext,2015-10-01.
李藝,鐘柏昌.重構(gòu)信息技術(shù)課程——從經(jīng)驗選擇走向思想投射[J].電化教育研究,2015(10).
鐘柏昌.論支架理論視野下的局部探究教學(xué)模式[J].中國電化教育,2011(1).
(作者單位:江蘇南京市天妃宮小學(xué) 南京師范大學(xué)教育科學(xué)學(xué)院 南京師范大學(xué)教育科學(xué)學(xué)院)