談海亞



摘要:計算思維是迎接與適應信息化社會發展的一項重要技能,是信息科技課程要培養的核心素養之一。在初中學段,“程序設計”教學是計算思維培養的重要途徑。從計算思維的“抽象”和“自動化”內涵視角,架構(微)項目設計、問題分解、抽象建模、設計算法及評估編程等環節的“程序設計”教學框架,并以《設計垃圾分類模擬小游戲》一課為例具體說明。
關鍵詞:計算思維;程序設計;初中信息技術;《設計垃圾分類模擬小游戲》
一、指向計算思維培養的“程序設計”教學架構
計算思維,指個體運用計算機科學領域的思想方法,在問題解決過程中涉及的抽象、分解、建模、算法設計等思維活動。在日新月異的信息化社會,計算思維是迎接與適應社會發展的一項重要技能,與“讀、寫、算”能力同等重要。為此,新課程背景下,如何發展學生的計算思維,成為信息技術學科教學的新訴求。
縱觀信息技術課程,程序設計是學科的核心內容,也是最接近計算機工作原理的內容。同時,其中的算法與編程等內容的學習關聯學生抽象邏輯思維、創造思維的培養,是計算思維培養的重要途徑。但是,傳統的程序設計教學常囿于語法知識及內容單一的枯燥訓練中,無法企及學生計算思維的培養。
有學者將計算思維的本質特征描述為抽象(Abstraction) 與自動化(Automation)。具體而言,抽象是以抽象思維的方式,將現實生活中的問題轉換為計算機可以識別的模型化問題。自動化是計算機根據預設的算法、程序自動執行任務,是計算機工作原理的重要屬性。顯然,抽象是方法,包含了問題分解、抽象建模及算法思想等思維活動;自動化則是結果,包含了編程、調試、評估等思維活動。
由此,運用《義務教育信息科技課程標準(2022年版)》提倡的項目學習方式,架構“程序設計”的教學思路為(微)項目設計、問題分解、抽象建模、設計算法及評估編程等五個環節(如圖1)。實際教學時,每一環節雖有先后次序,但環節之間又需要不斷地交叉和融合、關聯和滲透。
二、指向計算思維培養的“程序設計”教學實踐
下面,以《設計垃圾分類模擬小游戲》一課為例,具體說明指向計算思維培養的“程序設計”教學。
(一)(微)項目設計
(微)項目設計即確定項目主題,關鍵是創設貼近學生生活實際的任務情境。(微)項目設計創設的任務情境,區別于小學階段以課時內容為指向的驅動任務,更具綜合性、實踐性、趣味性和創新性。
《設計垃圾分類模擬小游戲》一課的項目主題為“垃圾分類”,教師創設了如下任務情境:
為打造美麗校園,學校準備啟動“垃圾分類,保護環境”主題活動。為了讓更多的同學熟悉垃圾分類并準確進行垃圾投放,現需要開發設計一款簡單明了的垃圾分類模擬小游戲,提供的部分素材見圖2。
(二)問題分解
問題分解就是把一個復雜的實際問題分解成若干可行性更強的小問題,通過聚焦小問題、解決小問題,實現整體問題的解決。這既是自上而下的設計方法,也是化繁為簡的思維抽象和創作過程。
教學中,略顯粗放的項目任務“設計垃圾分類模擬小游戲”往往讓學生一頭霧水、無所適從。為此,師生需要共同提煉出項目的總問題,如:圍繞“垃圾分類”主題,如何完成一個模擬游戲的設計?隨后,師生進一步把總問題分解為若干個小問題,如:垃圾分類模擬游戲的場景是什么?游戲中出現幾個角色?游戲的規則是什么?每個角色負責完成哪些功能?如何結束游戲?
經上述小問題的分解和梳理,“設計垃圾分類模擬小游戲”的項目任務就分解為:香蕉皮、舊電池、舊書籍等垃圾隨機出現、落下;垃圾箱在上下左右移動中要變換不同的造型來準確收集垃圾;等等。
(三)抽象建模
本環節需要通過抽取類似(抽象)的這一方法,剖析問題本質,消除自然語言中的二義性,形成可計算的數字代碼并建立模型。其中,抽象作為科學研究的重要方法,也是計算思維的本質。學生雖經歷過數學學習中的抽象,但面向計算機科學的抽象仍然是一個學習難點,尤其是面向對象的程序設計。
例如,“設計垃圾分類模擬小游戲”項目中,“垃圾箱”角色要上下左右移動。以“垃圾箱”向右移動為例。學生眼里看到的是“垃圾箱”正向地往右走,就像生活中人物往前走一樣。此時的抽象,就是要把生活中“向前走”的認知經驗轉化為移動時的“方向”和“步數”兩方面的問題。而關于方向的抽象也是學生學習的難點。為此,借助數學中的角和角度來表示、說明。在消除了自然語言中關于“向前走”的二義性后,“垃圾箱”向右移動的問題就迎刃而解,形成了可計算的數字代碼——面向90度,將x坐標增加10。
學生經歷上述行走問題的抽象和實踐體驗后,類似的問題都可迎刃而解,適用于任何角色,而無關角色的名稱、大小、外形等。
建模是對事物或過程進行抽象后的形式化的表現,也就是構造抽象的模型(模型有很多種表現手法,如圖形、代碼、表格等)。建模就是讓學生經歷分析問題、解決問題的過程,也是為后續設計算法做鋪墊。
例如,“設計垃圾分類模擬小游戲”項目要實現對舊電池垃圾的分類并積分。經抽象后,發現既可以是“舊電池”碰到“有害垃圾箱”觸發“隱藏”命令并積分;也可以是“舊電池”被“有害垃圾箱”碰到觸發“隱藏”命令并積分。即有些動作行為既可以讓角色1(舊電池)去完成,也可以讓角色2(有害垃圾箱)去完成。以前者為例,借助程序設計的選擇結構,通過關系符號(>、<、=、≥、≤、≠)建立相應的關系表達式,并設置變量,從而形成具體的積木代碼模型(如圖3)。
學生實踐后發現,游戲如果要進一步迭代升級,當出現更多不同種類的垃圾(果皮、剩菜……)時,只需要復制“舊電池” 角色的腳本代碼,稍作修改,就能重復使用。
(四)設計算法
算法是解決問題的方法和步驟,更是編程的靈魂。設計算法,即對要解決的問題進行分析,擬訂出一套解決的方法與步驟。于學生而言,對抽象的算法概念及同一問題可以有不同的算法,不同的算法在解決具體問題時又常有優劣之分等,這倒不是很難理解,但要依據實際問題設計算法,常常需要經歷并準確調用程序設計的三種邏輯結構:順序結構、分支結構和循環結構。
例如,“設計垃圾分類模擬小游戲”項目中,判斷游戲是否繼續、垃圾(舊電池等)是否碰到地平線、垃圾是否碰到垃圾箱要用到分支結構,垃圾下落、垃圾隱藏、積分增加是順序結構,垃圾重復下落是循環結構。由此,學生得到圖4所示的程序設計流程圖。
(五)評估編程
評估編程是編程的最后一個環節,主要是對算法作出評估并編寫、調試程序代碼實現自動化。此時,學生思維由先前的抽象轉化為操作數字代碼,并體驗計算機的自動化執行,感受編程的神奇魅力。實際教學中,選擇門檻低的積木式編程語言,便于學生完整經歷垃圾分類模擬小游戲的具體編寫、調試和評估。
編寫、調試程序時,學生難免會遇到各種問題。比如,游戲每一次重啟后,各角色需回到初始狀態,學生最初并沒有角色“初始化”的概念,而經歷調試后發現角色都“跑偏”甚至找不到了,這才建立起角色“初始化”的概念以及掌握如何進行代碼設置。又如,對舊電池的分類,有學生反映明明寫了正確的判斷(分支)語句,卻調試失敗,究其原因是缺少循環語句下的多次判斷。由此,編寫、調試成為一個實踐求證的學習過程,學生常常需要在試錯、迂回中作出修改,繼而生長思維。
而評估過程,又往往會發現項目的迭代升級空間,進而創造出新的項目。比如,有學生提出,為了增加游戲的緊張感,可以設置倒計時;垃圾分類可以設置不同的游戲場景、角色、玩法(積分型、迷宮型)等。
在日新月異的信息化社會,發展學生的計算思維,讓他們能夠“像計算機專家一樣”思考信息化問題,是新課程背景下信息技術教學的價值擔當。“程序設計”教學是計算思維培養的重要途徑,應努力讓學生在真實的情境中學會用計算機處理問題的方式分析問題、解決問題,進而掌握編程思想,發展計算思維。