唐瑞
Scratch是由麻省理工學(xué)院(MIT)媒體實(shí)驗(yàn)室研發(fā)的一種圖形化的面向兒童的簡(jiǎn)易編程工具。Scratch語言的設(shè)計(jì)理念是“想象、編程、分享”,軟件將枯燥乏味的程序語言指令轉(zhuǎn)換成八種不同顏色的積木,包括動(dòng)作、聲音、外觀、畫筆、控制、偵測(cè)、數(shù)值與邏輯運(yùn)算、變量等模塊。學(xué)生通過拖拽不同的積木輕松完成程序設(shè)計(jì)指令的動(dòng)作。Scratch的設(shè)計(jì)意圖不是為了滿足青少年程序員的培養(yǎng),而是幫助學(xué)生發(fā)展學(xué)習(xí)技能,培養(yǎng)創(chuàng)造性思維。下面,以小學(xué)信息技術(shù)五年級(jí)Scratch單元中的《動(dòng)畫真精彩》一課為例,筆者談?wù)勅绾巫屝W(xué)生用程序員進(jìn)行程序設(shè)計(jì)的思想來編程。
需求分析就是分析軟件用戶的需求是什么,用戶通過軟件可以實(shí)現(xiàn)哪些功能,完成哪些操作,解決“做什么”的問題。在教學(xué)中,動(dòng)畫效果分析就是在了解程序設(shè)計(jì)的目的之后,對(duì)想要實(shí)現(xiàn)的效果進(jìn)行分步的分析。在分析的過程中,學(xué)生需要探究如何把它的每個(gè)對(duì)象的動(dòng)作、事件在頭腦中暫時(shí)分割開來,由大化小、由繁至簡(jiǎn),再分別進(jìn)行分析和研究,梳理出各對(duì)象之間特有的邏輯關(guān)系,然后是局部分析,從點(diǎn)到面逐個(gè)擊破。在整體規(guī)劃的基礎(chǔ)上,教師需要學(xué)生對(duì)局部內(nèi)容進(jìn)行分析,弄清楚每個(gè)對(duì)象的性質(zhì)、對(duì)象之間的相互關(guān)系,對(duì)每個(gè)對(duì)象的造型、腳本、狀態(tài)逐個(gè)分析,再到每句指令、參數(shù)、先后執(zhí)行順序的分析與搭建。
例如,在導(dǎo)入環(huán)節(jié),教師先以一段蒲公英的科學(xué)性知識(shí)導(dǎo)入,讓學(xué)生先對(duì)蒲公英特別的傳播習(xí)性有了基本概念。接著,教師引導(dǎo)學(xué)生通過討論的方式對(duì)教師提出的任務(wù)進(jìn)行分析:如何能讓蒲公英種子向前飛?學(xué)生明確了任務(wù)后,就會(huì)對(duì)任務(wù)進(jìn)行分步分析,并通過思考和討論對(duì)程序設(shè)計(jì)要用到的控件進(jìn)行猜想。
師:每當(dāng)春天來臨,蒲公英開放黃色的小花?;ㄩ_過后,種子上的白色絨毛結(jié)為一個(gè)個(gè)絨球。種子成熟后,隨風(fēng)飄到新的地方安家落戶,孕育新的花朵。今天老師也帶來了一棵蒲公英。一陣風(fēng)吹來,蒲公英的種子也會(huì)飛起來呢。你們覺得用什么功能的控件能讓蒲公英種子向前飛呢?
學(xué)生討論。
程序流程圖是人們對(duì)解決問題的方法、思路或算法的一種描述。形象直觀,各種操作一目了然,不會(huì)產(chǎn)生“歧義性”,便于理解,能夠理清程序中的各個(gè)邏輯關(guān)系。算法出錯(cuò)時(shí)容易發(fā)現(xiàn),并可以直接轉(zhuǎn)化為程序。為了進(jìn)一步理清思路,繪制流程圖是需求分析后必不可少的環(huán)節(jié)。學(xué)生通過動(dòng)畫效果分析后,已經(jīng)對(duì)需要用到的一些控件有了初步的猜想,然而控件之間的邏輯關(guān)系如何還需要進(jìn)一步的思路整理。流程圖是一個(gè)思維的學(xué)習(xí)工具,為學(xué)生逐步從自然語言向抽象的程序設(shè)計(jì)語言過渡提供幫助。直觀清晰的流程圖作為編程最適宜的學(xué)習(xí)支架之一能夠幫助學(xué)生理清搭建腳本時(shí)各個(gè)控件之間的關(guān)系,逐步形成整體的圖示概念。編程中有一個(gè)重要的概念——順序執(zhí)行。意思是程序需要按照一定的順序依次執(zhí)行語句,這就要求學(xué)生在編程時(shí)要將想象實(shí)現(xiàn)的功能分解為多個(gè)具體步驟,并且要考慮到不同步驟之間的關(guān)系和觸發(fā)條件。
例如,在《動(dòng)畫真精彩》這一課中,教師將蒲公英飛行播種分為四個(gè)環(huán)節(jié):“蒲公英向前飛”“蒲公英自由飛”“蒲公英隨風(fēng)飛”“蒲公英漫天飛”?!捌压⑾蚯帮w”環(huán)節(jié),解決的是角色重復(fù)移動(dòng)(如圖1);“蒲公英自由飛”環(huán)節(jié),是讓通過角色資料區(qū)的學(xué)習(xí)解決旋轉(zhuǎn)按鈕和藍(lán)線調(diào)整方向(如圖2);“蒲公英隨風(fēng)飛”環(huán)節(jié),是讓蒲公英跟隨鼠標(biāo)指針移動(dòng)(如圖3);“蒲公英漫天飛”環(huán)節(jié)是綜合運(yùn)用到角色的復(fù)制、程序執(zhí)行方式的變化以及角色移動(dòng)方向的變化。
前三個(gè)環(huán)節(jié)的層層遞進(jìn),讓學(xué)生在完成各個(gè)任務(wù)的同時(shí)不斷在原本的流程圖上修改,最終完成一個(gè)讓蒲公英種子能夠跟隨著鼠標(biāo)指針移動(dòng)的動(dòng)畫。
根據(jù)直觀描繪出的流程圖理清了思路,程序員用程序語言編寫相應(yīng)的代碼,形成初步的程序。在學(xué)習(xí)使用流程圖的初期,教師應(yīng)該盡量用正確的流程圖表示方法,讓學(xué)生學(xué)會(huì)讀圖,明白流程圖的走向。具備了流程圖的知識(shí),可以使學(xué)生的學(xué)習(xí)更加合理高效。另外,隨著流程圖學(xué)習(xí)的深入,可以嘗試讓學(xué)生繪制簡(jiǎn)單的流程圖,以此來掌握流程圖的程序設(shè)計(jì)方法和思想。
學(xué)生根據(jù)各種猜想形成的流程圖,需要在Scratch中找到真正相對(duì)應(yīng)的控件,再根據(jù)流程圖的順序或者循環(huán)結(jié)構(gòu)對(duì)控件進(jìn)行組合完成腳本的搭建。在腳本搭建時(shí),才是學(xué)生真正動(dòng)手操作編寫程序的階段,這時(shí)也是將自己的猜想進(jìn)行不斷驗(yàn)證的過程。當(dāng)學(xué)生在腳本搭建時(shí)遇到困難時(shí),可以立即參照之前繪制的流程圖,根據(jù)流程圖來搭建腳本,使得搭建腳本的過程更高效。
例如,在“蒲公英向前飛”環(huán)節(jié),教師引導(dǎo)學(xué)生說出整個(gè)腳本按照所需的“移動(dòng)10步”“重復(fù)執(zhí)行”控件,并且根據(jù)執(zhí)行的邏輯順序完成流程圖的繪制后,學(xué)生就按照流程圖的順序,找到相應(yīng)的控件并搭建成完整的腳本。在之后的“蒲公英自由飛”“蒲公英隨風(fēng)飛”環(huán)節(jié)中根據(jù)不同的動(dòng)畫要求,在原本的流程圖上增加新的控件并進(jìn)行邏輯順序的調(diào)整,從而讓腳本豐滿起來,完成一個(gè)與流程圖一一對(duì)應(yīng)的動(dòng)畫效果。
1.試錯(cuò)
對(duì)于程序員來說,調(diào)試就是修復(fù)錯(cuò)誤的過程。調(diào)試是個(gè)循環(huán)往復(fù)的過程:編寫程序,測(cè)試,修復(fù)錯(cuò)誤,再測(cè)試……直到程序正確運(yùn)行。邏輯是程序的基礎(chǔ),邏輯走不通的程序很快就能夠通過運(yùn)行結(jié)果反饋出來。通過反復(fù)的練習(xí)和修正來提升邏輯思維能力。學(xué)生在完成腳本運(yùn)行程序的時(shí)候,常常會(huì)發(fā)生各種各樣的問題。這時(shí)就需要回顧流程圖和腳本,檢測(cè)是否有錯(cuò)誤的地方。
例如,在“蒲公英向前飛”環(huán)節(jié),學(xué)生通過討論,思考得出需要用到“移動(dòng)”相關(guān)的控件。通過演示,學(xué)生發(fā)現(xiàn)只用一個(gè)“移動(dòng)”控件,每次蒲公英種子只能移動(dòng)10步。這時(shí),學(xué)生就發(fā)現(xiàn)了程序中的不足,思考新的解決方法并不斷地調(diào)試。
師(單擊小綠旗):種子向前走了多少?10步。那么如果我還想向前走10步呢?
生:再點(diǎn)小綠旗。
師:如果想讓它不停地向前走10步呢?
生:一直點(diǎn)。
師:這個(gè)方法好嗎?還有沒有更好的辦法呀?
生:重復(fù)。
2.優(yōu)化腳本
編程和下棋很類似,都是在既定規(guī)則下解決問題。規(guī)則并不復(fù)雜,卻能變化無窮。學(xué)生在編寫程序的時(shí)候,同樣的程序效果時(shí)常可以通過不同的方法來實(shí)現(xiàn),這時(shí)就需要根據(jù)分析選擇最優(yōu)的方案,把程序完善得最合理。
例如,在“蒲公英自由飛”環(huán)節(jié),提出問題:蒲公英的種子只會(huì)左右飛行,能不能給它變換一個(gè)角度,讓它朝著其他的方向飛翔呢?有的學(xué)生會(huì)說在腳本區(qū)假如旋轉(zhuǎn)()度的控件來變換方向;有的學(xué)生通過探索發(fā)現(xiàn)了角色資料區(qū)中通過旋轉(zhuǎn)藍(lán)色線調(diào)整角色方向的簡(jiǎn)便方法。在面對(duì)學(xué)生不同解決方案的時(shí)候,哪種方案最好是沒有定論的,只有程序員自己通過分析,選擇最合適方案。又如在“蒲公英漫天飛”環(huán)節(jié),在測(cè)試時(shí)發(fā)現(xiàn),多個(gè)蒲公英種子總是經(jīng)過一段時(shí)間后會(huì)重合起來。這時(shí)先要對(duì)該現(xiàn)象進(jìn)行原因分析,再思考解決辦法。
師:為什么多個(gè)蒲公英種子飛著飛著都重合在一起了呢?請(qǐng)同學(xué)們討論一下。(學(xué)生討論)因?yàn)榻巧囊苿?dòng)方向和速度都相同,只要修改其中的一個(gè),就能讓角色們分散開。
修改移動(dòng)方向:讓部分蒲公英種子不跟隨鼠標(biāo)指針移動(dòng),選擇一個(gè)任意的方向自由飛。
修改移動(dòng)速度:讓蒲公英種子移動(dòng)速度參差不齊。
對(duì)于兒童來說,Scratch跳過了高級(jí)語言中那些繁難的概念和語法,用圖形化的表現(xiàn)和拖拽的交互來完成編程的核心邏輯和成果交付,既能解決學(xué)習(xí)曲線過于陡峭的問題,還能讓學(xué)習(xí)的過程不枯燥,并更及時(shí)地獲得結(jié)果反饋,適合這個(gè)年齡階段的心智水平和認(rèn)知能力。Scratch為學(xué)生提供了程序設(shè)計(jì)的平臺(tái),學(xué)生在進(jìn)行程序設(shè)計(jì)時(shí),遵循動(dòng)畫效果分析、繪制流程圖、搭建腳本、優(yōu)化腳本的程序設(shè)計(jì)流程。在整個(gè)程序設(shè)計(jì)的過程中,所有的基礎(chǔ)知識(shí)和基本能力都是通過“想一想”和“做一做”整合在一起。學(xué)生通過模仿程序員編寫腳本程序,培養(yǎng)了編程思維,學(xué)會(huì)了如何思考問題、解決問題,從而訓(xùn)練和提高了動(dòng)手能力、獨(dú)立思考能力、邏輯思維能力。