王蘇明 鐘柏昌 李藝



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