孫秀芝 浙江省杭州市筧橋小學
計算思維是信息科技課程要培養的核心素養之一,基于圖形化編程軟件的程序設計教學是發展計算思維的重要途徑。但程序設計教學中存在著一些較為抽象的概念,給處在形象思維向抽象思維發展階段的學生帶來認知上的困難,也給教師開展這些抽象概念的教學帶來了挑戰。筆者在參與區域相關課例觀察、研討的過程中發現,部分教師在課堂上難以講清程序設計中的抽象概念,主要表現有“重程序實現,輕抽象過程”“重任務梯度,輕概念應用”“重指令新授,輕知識梳理”。針對這些問題,筆者提出“三重關聯”策略,即“關聯操作體驗”“關聯多樣運用”“關聯前后知識”,采用合適的教學策略改進當前的程序設計教學,以期讓抽象概念的教學不再困難,讓程序設計課更符合學生的認知規律。
忽視學生知識發現的過程,沒有為學生理解抽象概念提供足夠豐富的表象,是造成教學過程中“輕抽象過程”的原因。雖然部分教師在教學“變量”這一抽象概念時,列舉了生活中“抽屜”“盒子”等實例,但是生活經驗和程序設計經驗之間依然存在斷層,在遇到新的問題時,學生依然無法確定應該設置哪一個量為變量,以及如何使用變量。
對于程序設計的初學者來說,在設計解決問題的算法中使用“變量”是有一定難度的。例如,在設計一個能實現隨機出題的問答程序中,學生對該問題中涉及哪些具體量,以及哪一個具體量可以設置為“變量”,缺乏清晰的思路,也缺少解決的策略。教師可引導學生從具體的實例出發,建立表象,在實踐操作的基礎上再進行抽象,化解難點。
教學案例:《列表存儲》一課的“變量”提取過程。
教師提供隨機出題的問答程序,請學生初步體驗程序是如何運作的,在明確步驟后,請學生多次運行封裝好的程序,結合學習單(如下頁表1)說說自己的發現。

表1 隨機出題問答程序中的變量
通過操作體驗,學生發現程序每次所出的“題號”是隨機變化的,并且“題號”就是問題列表的編號,也是答案列表的編號,因此可以設置一個變量i,用來表示列表的編號。另外,變量i由于是個隨機變化的量,因此可以根據題目的數量確定最大值、最小值。
通過這樣形象直觀的實踐體驗,學生經歷了發現變量、提取變量的過程,真正地體會到了變量在其中的作用。經過這樣的問題分析過程,學生的學習策略也得以提升,在后面提取變量的過程中也能運用列表的方式進行問題的分析。
課堂中,基于一個完善的程序作品開展教學,往往會涉及多個抽象概念。例如,在前面所提到的隨機出題問答程序中,既有列表、變量,又有隨機數。在將這些概念運用到算法設計中時,學生會無從下手,也給教師教學帶來困難。此時,教師可以采用分布引導的策略,將多個抽象概念分散到每一步的教學任務中,引導學生逐個突破難點。
教學案例:《列表存儲》《遍歷列表》教學內容重組。
將教材第10課《遍歷列表》中以文本導入方式添加列表數據這一內容前置,與第9課《列表存儲》進行整合,將隨機出題的問答程序設計成一個兩步走的學習任務(如表2)。

表2 隨機出題問答程序“兩步走”教學策略
這樣的分步處理,更符合學生的認知規律,學生在一步步的實踐中感受到程序作品從封閉走向開放,通用性逐漸變大。分布引導的方法可以有效地分散難點,讓問題的解決策略從具體走向一般。
在概念教學的鞏固階段,聚焦在單一維度上的教學拓展,沒有將概念還原運用到生活場景中去,是造成教學“重建構,輕應用”的原因。如果學生沒有將概念應用到新的問題解決中,或沒有感受到新的概念在解決舊問題上的優勢,或沒有體驗到概念的不同用法,那么新的概念將難以被牢固地納入到原有的知識結構中。
遷移是指人們在一種情境下所獲得的知識或技能,可以影響到隨后學習的另一種知識或技能。根據學習的情境,又可以分為近遷移和遠遷移。近遷移強調具體的概念、技能、事實、程序,遠遷移則更強調一般的、抽象的知識。教師可以設計一些表面特征、結構特征都發生改變的新情境,讓學生的遠遷移能力得以發展。
教學案例:《過程調用》一課遠遷移情境設計。
在《過程調用》一課中,教材從正方形旋轉產生的“花團”圖案引入,介紹“過程”的概念,課后練習也是編寫一個繪制正五邊形旋轉產生的“花團”圖案。兩個任務情境表面上看雖有不同,實則結構相似。不少教師在課堂中局限于此,沒有創設更多樣化的情境,不利于學生進行遠遷移。此時可以作進一步拓展,跳出幾何圖形,將教學情境與生活中不同場景進行關聯,如音樂程序作品等,讓學生思考此種情景下如何運用“過程”去解決。
此外,生活中一些運用到模塊化思想的案例,也是“過程”概念的延伸。例如,中央空調的控制面板,一個按鈕就可以調用一個過程;模塊化房子Coodo,每一套都可以獨立存在,如果嫌空間小還可以通過簡單的連接,將多個組合在一起。教師列舉此類案例,可以促進學生將所學的“過程”概念運用到不同生活場景。
關聯各種情境,目的是讓學生不僅產生鞏固概念的近遷移,更能還原概念到不同的生活場景中,實現概念學習的遠遷移,進一步豐富對學科思想的認識,從而提升學生的學科核心素養。
程序設計中解決問題的方法有多種,學習完新概念,并用以解決舊的問題,一方面在不同場景下進行了運用,另一方面可以讓學生感受到新概念解決問題的優勢。
教學案例:《打靶游戲》的新舊解法。
游戲中,靶子在垂直方向上來回不停地移動,在沒有學習“變量”概念之前,學生會使用“移動<10>步”“將y坐標增加<10>”等指令表示角色的位置變化。學了“變量”后,教師引導學生設置了方向變量,用0、1兩種數值表示兩種不同的狀態,乘以180倍就可以得到0(向上)、180(向下)兩個不同的方向(如圖1)。以往,學生接觸到的變量,通常表示分數、個數等數量,而本例中的變量表示的是一種非此即彼的狀態,即邏輯判斷,這是“變量”這一概念在用法上的創新。

圖1 打靶任務的兩種解法
在程序的調試過程中,學生會進一步體會到使用“變量”解決方向變換問題的優越性。在舊解法中,學生需要不斷地手動調試重復執行的次數或坐標值的增量,而設置方向這一變量,再去判斷坐標值是否超過y坐標的臨界值則不需要頻繁調試,靈活性更強。
舊題新解,是用新學習的知識去思考和探討以前的問題,尋求創新解決方案。而前面所述的將學過的知識在新問題中的運用,則是新題舊解。兩者都是提高概念學習效率的有效方法。
忽視學生知識結構的建立,教學設計中缺少連接新舊知識的任務設計,是造成教學知識點零散化傾向的原因。在面對綜合性的學習任務時,零散化的知識結構不利于學生分析問題,理解本質。因此,在看似不同的各個抽象概念之間建立聯系,讓學生在比較、推測、實驗中梳理它們之間的區別與聯系,可以幫助學生在頭腦中建立概念網絡,從而深化概念理解。
在編程工具中,各類指令眾多,學生不可能將所有的指令都記在頭腦中。教師可以設計具有一定綜合性的任務,進行整合式教學,從而揭示不同指令之間的區別和聯系,幫助學生舉一反三。
教學案例:《迷宮游戲》中角色的移動。
在該游戲中,角色小貓、角色炸彈涉及移動(如下頁圖2)。

圖2 角色移動的關鍵概念——坐標
角色小貓——動作1:鍵盤上的方向鍵可以控制小貓上下左右移動;動作2:程序開始時,小貓從起點出發;動作3:小貓如果碰到綠色邊緣,則返回起點。
角色炸彈——不定時地出現在道路的某幾個位置上。
學生使用了“移動<10>步”指令設計小貓的動作1,發現還需要結合“面向<90>方向”和“將旋轉方式設為<左右旋轉>”以達到理想效果。而在設計動作2、動作3,以及炸彈的移動時遇到了困難,因為“移動<10>步”指令無法鎖定角色的準確位置。
此時,教師出示舞臺的坐標系統,介紹坐標系統中X軸、Y軸的范圍,以及坐標原點的位置,并拖動舞臺上的角色到不同的位置,請學生觀察坐標位置的變化。學生發現每一個位置都與一個坐標值對應,并且角色上移則Y坐標增加,下移則減少;角色右移則X坐標增加,左移則減少。
因此,角色小貓的上下左右運動還可以使用“將y坐標增加<10>”“將x坐標增加<10>”指令來做,返回起點可以使用“移到x:<0>y:<0>”指令;角色炸彈則需使用“移到x:<0>y:<0>”指令。
案例中,眾多移動指令背后的關鍵概念是坐標,坐標的位置變化就是角色運動的本質。只有把握住關鍵的概念,將一系列相似的知識點進行比較和聯系,才能解一題而通一類。與此類似,角色旋轉的關鍵概念是旋轉的方向、角度和中心點,也可以參考這一策略開展教學。
在程序設計教學中,“變量”“列表”“過程”“帶參過程”等多個概念之間有著本質的聯系,教師可由舊知入新知,引導學生在原有知識結構上經歷新知識的發現過程,揭示前后所學概念之間的本質聯系,從而促進學生學科知識體系的構建。
教學案例:《帶參過程》一課中“變量”與“過程”的聯系(如圖3)。

圖3 從“過程”到“帶參過程”的演變
第一組圖形,是邊長逐漸變長的3個正方形,教師帶領學生回顧上一節課學過的“過程”,可以定義正方形1、正方形2、正方形3。那么“帶參過程”如何理解呢?此時教師請學生觀察三組腳本的變化,學生會發現移動步數(即邊長)是在發生變化的,因此邊長就是一個變量。教師根據這一發現介紹“帶參過程”中的參數,實質上就是一個可以由用戶輸入自定義數值的變量。
通過這樣的觀察、體驗活動,學生將“變量”這一概念與“帶參過程”前后聯系起來,知識結構性得以增強。
類似地,第二組圖形也是先抓住變化的量,確定重復執行的次數(即邊數)是一個新增的變量,因此需增加一個參數“邊數”。
經歷這樣的知識發現過程,學生對概念的理解進一步深化,更容易形成結構化的知識體系。