劉付燕 江蘇省南京市秦淮中學
2020年9月,基于新教材的信息技術課程教學全面實施,程序設計在新課程中的占比增加,其在提升學生計算思維水平方面具有獨特的優勢。因此,筆者根據所在學校實際情況,探索以“Python游戲化學習項目”為載體培養計算思維的策略,并通過兩輪的教學實踐與改進,積累了一定的實踐經驗。
在設計學習項目之前,筆者對學生的程序設計學習基礎進行了調查,調查表明:大部分學生缺少程序設計的學習經驗,學習基礎比較薄弱,但喜歡玩人機小游戲,并具有開發人機小游戲的愿望和動機。基于學情,筆者設計了“石頭、剪刀、布”游戲的探究項目,在第一輪的項目設計中,以程序設計的三種結構為項目設計的知識與技能主線,采用程序半成品填空的形式來開展學習,在一定程度上激發了學生的探究興趣,有效地幫助學生掌握了Python程序設計的基礎知識,但是學生問題提出、學習遷移、融會貫通、學以致用的能力稍顯不足。為了解決這個問題,在第二輪的教學實踐中,采用“大單元”逆向設計法,將計算機解決問題的過程、三種程序控制結構、模塊化程序設計、計算與問題解決等有機融合,通過數字化游戲中的角色設定、游戲規則設計、游戲交互與挑戰、游戲場景等來對標計算機解決問題過程與計算思維的要素:分析和界定問題(形式化)/分解——設計算法(模型化)/抽象建模、算法實現和問題解決(自動化和系統化)/算法實現及其優化。具體地說,就是以興趣激發為出發點,以計算思維培養為落腳點,遵循“游戲體驗——需求分析、明確問題——分析問題、設計算法——編寫程序、算法實現——運行程序、優化算法”的思路,將程序設計的基礎知識、算法的思想以及編程的技能融入到問題解決的過程中,注重引導學生進行問題分析、利用計算機程序解決問題,在做中學,在用中學。
為了有效提升學生的計算思維水平,提高學生的遷移能力,筆者采用“明確預期學習結果——設計證明學生達到預期學習結果的評價指標——設計相關學習活動”的逆向設計法對項目進行設計,通過逆向設計提高了學習活動的針對性和課堂教學的指向性,在預期的學習結果階段明確了學生應該掌握哪些知識與技能、進行怎樣的意義建構、形成怎樣的學習遷移,讓“掌握、理解、遷移”形成學習結果的良性循環。
在項目學習中,首先要引導學生對整個項目進行分析,明確項目需求,對項目目標有清晰的認知,在整體分析和明確目標的基礎上,對整個項目進行分塊設計,逐步細化,分模塊實現。這個過程體現了“自上而下、從整體到局部、逐步求精”的問題解決思路。問題分析是問題解決的第一步,也是計算思維中問題分解的重要一步,因此,在教學中教師可以通過問題驅動的形式讓學生主動進行問題分析、分解和抽象建模,進而提升學生的計算思維。
例如,在“‘石頭、剪刀、布’游戲的設計與制作”項目的“單局游戲”設計中,教師首先通過“角色扮演”和“游戲實戰”的直觀體驗讓學生分析游戲過程,明確游戲角色、游戲規則和實現該游戲需要解決的問題,進而引導學生思考設計一個“人機互動”游戲需要解決哪些問題。通過經驗遷移讓學生將游戲角色、角色功能、游戲過程逐一分解,思考算法設計。在“多局游戲”設計中,同樣讓學生通過“角色扮演”和“游戲實戰”分析游戲過程,并將真實游戲中的記分員記分過程類比到程序設計中的“變量”,幫助學生理解變量的概念及其應用。在此過程中,教師提供了表格式的學習支架供學生進行游戲過程的分析,以實現游戲過程的抽象建模。
分析、綜合、比較、分類、抽象、概括、系統化、具體化等構成了思維的過程,而分析與綜合是思維的基本過程。教學預設在于把握教學方向,合理利用生成性資源培養學生的計算思維。要讓學生經歷思維過程,就要為學生的自主、合作、探究學習提供支持,教師不僅要為學生創設項目學習的情境,以激發學生探究的興趣,還要為學生搭建必要的腳手架,以支撐學生的探究學習順利開展,探索項目學習中的“收”與“放”策略。
例如,在本項目中,教師通過“游戲實戰”引導學生設定游戲規則、游戲角色、項目目標、項目分解、項目評價等,從整體到部分對項目進行拆解。學生用流程圖繪制游戲算法并嘗試實現,在游戲的1.0版本(單局游戲)中,依據游戲的實現過程,將問題的解決分為三步:第一步是實現對“出拳”的編號和導入隨機數函數;第二步是輸入拳號和計算機產生隨機數并輸出人和計算機的出拳方式;第三步是比較人和計算機的出拳方式,并輸出比賽結果。為了幫助學生進行探究性學習,教師提供了游戲半成品程序、學案、Python基本語法幫助文件等學習支架。在完成1.0版本的過程中,學生掌握了計算機解決問題的一般過程,了解了分情況討論的分支思想,從基本輸入輸出到分支程序,從單分支到多分支,習得了程序設計的基礎知識和分支程序控制結構。
在完成了1.0版本后,讓學生通過“玩游戲”發現程序的可改進之處,學生會提出如程序運行一次只能玩一局、不想一局定勝負、平局不算數等問題,然后教師可以引導學生分析問題,并思考如何優化改進程序,進而引入循環的思想,并完成程序2.0版本。在程序展示分享階段,某學生在輸入拳號時頻頻不按常規出牌(不按照約定拳號輸入),導致程序運行結果出錯。缺少容錯機制的程序容易導致意外的程序運行結果,教師及時將課堂生成轉化為算法設計中的健壯性問題,即為了避免“誤輸入”,需要在程序中增加容錯糾錯機制。有的學生想到再增加一個分支,那分支條件是什么?如果連續多次輸入錯誤怎么辦?這就用到了循環,用前面學習的for計數循環很顯然不能解決問題,因為學生輸入錯誤的次數是不可預測的,這樣自然而然就引入了while條件循環,即通過while循環來檢查輸入的內容。通過這樣的思維過程,學生不僅意識到算法強壯性的重要性,而且充分理解了for循環與while循環的區別與聯系及其應用情境。
為了充分發揮學生的創新意識,教師還為學有余力的學生設計了“我的游戲,我做主”的個性化游戲設計環節,為學生綜合利用所學知識設定自己的游戲規則、完成個性化的游戲設計提供平臺。
算法即解決問題的方法和步驟,同一個問題有不同的解決方法,在教學中要鼓勵學生多想、多交流、多進行思維的碰撞,不斷優化問題解決的方法。本項目1.0版本的程序是大多數學生能夠想到的,但是有些比較精巧的解決方法則需要教師的點撥。在程序3.0版本中引入列表的學習與使用,在程序4.0版本中引入字典的應用,從用分支結構到巧妙運用列表再到綜合應用列表和字典來解決問題,這些都充分體現了問題解決算法的多樣性,通過建模過程的優化,激發了學生的學習興趣。
依托程序設計培養學生計算思維的關鍵是尊重個性,關注探究過程,提供學習結果的展示交流平臺。依托信息技術搭建程序設計學習平臺,不僅為學生個性化、分層次的探究提供了保障,而且也更好地呈現與保留了學生的學習成果,有助于增強學生學習自信心和成就感,并為學生的相互交流分享搭建平臺。因此,在第二輪的教學實踐中筆者借助在線教學平臺進行項目探究活動,基礎薄弱的學生可以在程序半成品的完善中解決問題,中等水平的學生可以在已有基礎上優化程序設計,學有余力的學生可以嘗試個性化游戲的設計與實現。
在項目學習中,鼓勵學生多進行交流討論,學生交流展示的過程就是陳述算法的過程,展示程序的過程就是學生將算法付諸實踐并解決問題的過程。學生之間的交流可以相互啟發,是一種思想的交換。教師在進行教學設計時也要多借鑒一些優秀的案例來拓展程序設計的算法。
在面向計算思維培養的Python程序設計項目學習中,教師從計算思維的視角設計項目,項目實施遵照“整體分析、分步實現、優化提升”的設計思路,遵循分析問題、設計算法、程序編寫與調試優化這一計算機程序解決問題的一般過程。程序設計從簡入難、從粗到精,無不體現了計算思維方法的使用和計算思維的提升。