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