許丁文



編程教學,能否講透,決定著教學是否真實有效。因此,教師應放棄固有的知識儲備,和學生在同一起跑線上循序漸進地透析編程項目的每一個環節,讓師生思維同步,確保學生透徹明了。下面,筆者以App Inventor手機編程為例,關注學生思維,實施潤透理念,簡單分享在程序設計教學中如何讓學生透徹明了。程序主要涉及變量、隨機數、順序結構、選擇結構等知識點。為了講透本項目,筆者設計了文字版和圖片版兩個認識維度。
● 猜拳游戲文字版
剪刀石頭布猜拳游戲文字版,用到界面布局、標簽、按鈕三種類型的組件,用于顯示機器手形、人手形、反饋結果、觸發指令等功能。
1.師生體驗
要讓學生明白程序的功能,首先和學生一起體驗分析程序的玩法,程序運行后如圖1所示。
2.邏輯設計
思考一:當出剪刀按鈕被點擊時,界面上有幾個地方發生了變化?學生很容易發現有3個變化(我→剪刀,機器→剪刀或石頭或布,結果→平局或人類贏或機器贏)。
思考二:界面發生變化是在進行什么操作的情況下發生的?學生回答是人點擊了出剪刀按鈕,按鈕觸發了指令讓機器去執行,使得三個位置內容發生變更。從而順利得出,只要為出剪刀按鈕添加指令即可。
思考三:添加怎樣的指令呢?當出剪刀按鈕并點擊時,要實現我→剪刀的變化,需要修改我的什么屬性?學生很容易找到正解的塊語言指令。
思考四:機器標簽顯示的文本有幾種情況?學生:三種。如何表示出三種?這里涉及大學里的數組,為了激發學生的求知欲,必須讓學生清晰地剖析出數組里每個元素和編號的對應關系。第一環節,采用列表,讓學生了解列表代碼(如下頁圖2),列表輸出效果如下頁圖3所示。第二環節,人出剪刀,機器出三個手形,不符合規范。提示通過列表中的索引值,輸出三個手形中的一個,學生探究。第三環節,轉發學生畫面進行剖析,索引值為1時的代碼如圖4所示,運行結果如下頁圖5所示。索引值為2、3時類推。
思考五:索引值為1、2、3是定值,而機器出的手形是隨機的,如何讓索引值為1~3的隨機數呢?提醒通過內置塊數學中的隨機數和變量來實現,學生探究,教師剖析講解,變量聲明定義,賦值,順序執行。
思考六:軟件如何判斷人機對弈的勝負結果?學生很自然想到,如果索引值為1,機器出剪刀,人出剪刀,平局。如果索引值為2,機器出石頭,人出剪刀,機器贏。如果索引值為3,機器出布,人出剪刀,人類贏。自然引出程序設計中的選擇結構,通過內置塊中的控制模塊進行選擇結構的設置,通過數學模塊中的兩個數值相等返回結果為真的表達式,測試出剪刀按鈕代碼(如下頁圖6)。運行結果無誤后,出石頭和出布直接復制代碼,修改對應參數和值的匹配對應關系即可。
經過對六個大問題循序漸進的分析、思考、實踐、探究,絕大多數學生都能輕松地完成項目實施,再利用學生互助,本節課變量、賦值、數組、索引值、數學邏輯運算、順序結構、選擇結構等重難點知識得到有效突破,教學目標達成率達到100%。
● 猜拳游戲圖片版
剪刀石頭布猜拳游戲圖片版,用到界面布局、圖像、標簽、按鈕四種類型的組件,用于顯示機器手形圖片、人手形圖片、反饋結果、觸發指令等功能。圖片版是原有文字版的迭代版本,涉及變量、賦值、隨機數、圖像的表達,文本字符串的拼接運算,選擇結構等。有了文字版的基礎,學生研究圖片版會相對簡單,對此前文字版項目設計中相關知識的理解更加透徹。
1.師生體驗
圖片版程序功能和玩法比較簡單,只是在文字版的基礎上,將顯示的文字變成圖形,更加直觀。程序運行后如下頁圖7所示。
2.邏輯設計
思考一:點擊出剪刀按鈕,如何讓圖像組件上顯示剪刀手形呢?圖像的哪個屬性發生了變化,教師演示通過圖像組件圖片屬性值的設置可以實現,圖片可以本地上傳,也可在上傳的資源中進行選擇。本例中,因為涉及后期的隨機數和字符串拼接,所有圖片采用相同的圖片后綴。
思考二:邏輯設計時,通過代碼塊如何實現呢?學生因為沒有基礎,不知道圖片代碼的表達方式,教師可以直接演示通過文本字符串表達(如下頁圖8)。這里涉及圖片后綴名,很重要的知識點,學生探究字符串拼接(如下頁圖9)。學生有前面隨機數應用的基礎,相當一部分會自主探究出如下頁圖10所示的表達。
思考三:如何判斷人機博弈輸贏呢?學生有文字版中選擇結構的知識儲備,只要能分析出通過Mickey手形編號進行邏輯運算返回符合條件的結果即可(如下頁圖11)。至此,邏輯設計代碼基本完成。出石頭和布對應的代碼只需要復制并調整相應參數,做好相應手形編號的匹配,對應出正確的反饋結果。
剪刀石頭布猜拳項目,看似一個非常簡單的案例,要學生做出這樣的作品不是什么難事,但學生要能透徹理解里面各種變量傳值關系,后期還要能舉一反三觸類旁通就不那么容易了。在經過反復實踐后,筆者選擇了本課的課堂實施形式,同一主題設計文字版和圖片版兩個層次的項目訓練,學生兩節課都學得非常充實愉悅,教學效果明顯提高,達成率100%,為后期更多復雜項目案例的實施做了良好的鋪墊。
筆者對App Inventor的教學實踐,已持續了一年左右時間,解決了如平臺賬戶管理、并發連接數、平臺項目數限制等問題,但仍有許多困惑,最核心的要素在于如何講透,如何規避學生的簡單模仿,讓學生學得入心入腦,為后期創造性思維提供強有力的支撐,讓學習成為學生自己的事情,讓學習真實地發生在學生身上。編程教學困擾著廣大信息技術教育工作者,期待更多一線教師分享程序設計教學中的感悟和心得。