宋 晏,姚 琳,張 敏,李 莉
(北京科技大學 計算機與通信工程學院,北京100081)
計算思維于2006年由美國卡內基·梅隆大學的周以真教授系統(tǒng)地提出,一經(jīng)問世就引領了世界范圍內計算機科學界尤其是計算機教育界的發(fā)展方向。她認為:計算思維是運用計算機科學的基本概念進行問題求解、系統(tǒng)設計以及人類行為理解等一系列思維活動[1]。計算思維將計算機作為一種不可或缺的工具,將各行各業(yè)的數(shù)據(jù)、業(yè)務通過計算機平臺予以表述、處理。
計算思維的本質是抽象和自動化,計算思維能力的構建在程序設計類課程的學習中可以得到很好的詮釋。從分析現(xiàn)實世界中的問題開始,在計算機世界中為其建模(抽象),最終用計算機語言予以實現(xiàn)(自動化),一系列活動都充分地展示了計算思維過程。
從計算思維的概念被提出到現(xiàn)在,如何系統(tǒng)地培養(yǎng)計算思維能力仍處于探索階段,還沒有一個系統(tǒng)性的特定教學設計和教學模式,但毋庸置疑的是,程序設計類課程的教學主線應按照抽象思維和邏輯思維的培養(yǎng)目標搭建,教學設計輕語法、重思維。
計算思維中的“抽象”解決的是連通現(xiàn)實世界和計算機世界的問題,即將現(xiàn)實世界中的信息用計算機世界的符號描述,也就是將形象思維中的事物映像為計算機世界的概念。
近年來,一些學者提出了“輕游戲”的教學理念,用寓教于樂的方式將教育的外在和游戲的內涵融為一體,通過互動的方式更好地參與、理解一些經(jīng)典問題的解決過程。“輕游戲”利用學習者的成長環(huán)境和思維習慣的特點,通過游戲提高學習的趣味性,將形象上升為抽象,將經(jīng)典問題中的信息映像到計算機世界[2]。
如果游戲過程可以激發(fā)學習興趣并輔助抽象化思維的建立過程,那么身臨其境地參與游戲的設計將是一件富有樂趣、挑戰(zhàn)性和成就感的事情。設計游戲可以更好地實踐計算思維中的抽象過程,并遞進式地通過游戲的各個環(huán)節(jié)建立對自動化的理解,形成學習知識的心理,積極主動地學習知識和內化知識,更充分地挖掘程序設計課程中的算法思維。
FunCode是一款基于可視化界面設計、編寫游戲程序的C、C++和Java語言綜合實驗教學平臺。學生可以在可視化的環(huán)境中輕松設計游戲界面,添加各種被稱為“精靈”的游戲元素,在Visual C++、Eclipse等集成開發(fā)環(huán)境中編寫代碼。
FunCode平臺作為小型游戲引擎,對游戲所涉及的各處理流程的細節(jié)都進行了封裝,它將用戶與游戲交互的鼠標事件、鍵盤事件以及精靈與精靈碰撞事件、精靈與邊界碰撞事件都抽象為回調函數(shù),事件發(fā)生時自動調用,事件處理過程只需要在這6個事件函數(shù)中編寫?;谄脚_的游戲開發(fā)更為簡潔。
任何事物都具有兩面性,結合游戲編程平臺進行教學組織時必須揚長避短,發(fā)揮游戲及平臺的優(yōu)勢,避免產生負面效應。
結合游戲編程平臺的教學,利用學習者熟悉的場景和游戲過程,幫其掌握對現(xiàn)實世界進行抽象和算法設計的方法。游戲本身不是目標,而是在設計游戲的過程中完成對計算思維能力的訓練,提高程序實踐能力,潛移默化地引導學習者內化計算思維方法。
游戲利用圖形用戶界面生動形象地展現(xiàn)事物和事物的運動,通過點擊鼠標、鍵盤按鍵控制事物的運動完成交互,但是教學不能忽視傳統(tǒng)的控制臺文本交互,并應努力將二者相結合。
在結合游戲編程平臺的教學設計中,可以把游戲作為載體和教學手段,讓游戲在其所屬的學習階段起到思維訓練的引領和整合作用,如將其安排在某個知識的起點或終點,在起點更直觀地建立體驗,由表象理解到本質,激發(fā)學習興趣;在終點用一種大部頭的方式對所學進行綜合實踐,將計算思維轉換為看得見的形象成果,如圖1所示的3步走方式。
游戲案例服務于教學,案例選擇既要考慮游戲與知識的相關度,又要難度適中,真正起到帶動學習的效果。在FunCode平臺下進行游戲編程的基本步驟包括:①在可視化的圖形環(huán)境下建立游戲場景及精靈對象;②在游戲主函數(shù)中利用狀態(tài)變量控制游戲的流程;③在初始化函數(shù)中對游戲進行初始化;④在游戲函數(shù)中按游戲規(guī)則編寫代碼;⑤在各種事件函數(shù)中進行鼠標、鍵盤或碰撞等事件處理。
顯然,構建完整游戲所需的環(huán)節(jié)很多,復雜游戲中每個環(huán)節(jié)的代碼量也會很大。為了防止游戲編程平臺對當前教學內容造成干擾,增加教學難度,游戲案例在設計時采用統(tǒng)一的接口(play()函數(shù))方式,每個案例都搭建好游戲框架,只將服務于當前教學、借力游戲的部分留給學習者在該接口中完成設計。
在為多分支結構設計的游戲案例“蔬菜園”中,用戶用鼠標點擊菜園中的植物,負責將植物的名稱顯示出來的功能在函數(shù)void play(int i)中完成,i表示被點中蔬菜的序號。
在為一維數(shù)組設計的游戲案例“猴子選大王”中,選大王的過程在函數(shù)void play(int array[], int n)中完成,array[]數(shù)組用來存放n只猴子的狀態(tài),可以通過該案例學習使用一維數(shù)組元素為事物做標記的用法。
游戲案例統(tǒng)一設計play()函數(shù)作為教學接口(它的參數(shù)部分隨案例的需要作相應調整),從而規(guī)避游戲平臺架構本身的復雜度,使案例有的放矢地服務于當前的教學內容。
縱觀各類編程語言書籍的結構安排,自定義函數(shù)通常位于選擇、循環(huán)、數(shù)組之后,用來實現(xiàn)“模塊化”的設計思想,并在面向對象的程序設計中體現(xiàn)實體的行為。
圖1 游戲案例的分布和作用
結合游戲平臺的編程必然離不開函數(shù)的調用和定義。一方面是游戲程序的架構由若干函數(shù)組成,平臺提供了諸多API函數(shù)供使用;另一方面教學將main()函數(shù)的定義轉移為教學接口play()函數(shù)的定義,因此教學設計中的函數(shù)部分需要調整。
與main( )函數(shù)不同,play( )函數(shù)中的參數(shù)問題在學習伊始就不能回避,需要在使用游戲平臺進行教學的起點位置即擴充自定義函數(shù)的概念,但不必深入到思維的層次,尚不需要建立模塊化的設計思想,而只作為模塊化思維的使用者。當進入“函數(shù)”這個知識的正式學習階段時,再進行模塊化的抽象思維訓練,再涉及參數(shù)的值傳遞、地址傳遞、重載、重寫等復雜概念。學習過程如圖2所示。
圖2 結合游戲編程平臺的函數(shù)教學過程
圖3 自動化思維訓練的Java教學設計
根據(jù)IEEE發(fā)布的2017年編程語言排行榜數(shù)據(jù),Java語言是企業(yè)招聘中最受歡迎的語言,在用戶群體上僅位于Python和C語言之后。Java語言以其完全面向對象、簡單、健壯、安全、可移植性好等特性一直備受歡迎,非常適合以計算思維培養(yǎng)為目標的教學。
圖3所示為教學設計包含F(xiàn)unCode游戲平臺計算思維培養(yǎng)的案例(表示),以及控制臺模式下的具有游戲基因或實際應用場景的一些題目[3](表示)?!镏痢铩铩锏陌咐诮虒W過程中難度適中,★★★★的可以作為擴展性學習使用。
教學設計秉承趣味性加實用性的風格,將問題求解提升到計算思維的高度,探索將傳統(tǒng)教學與游戲編程相結合的計算思維培養(yǎng)模式。以自動化思維訓練的教學設計為例,設計如下。
計算思維中的自動化是對于機器而言的,即機器可以機械、一步步地按照指令執(zhí)行計算步驟。實現(xiàn)機械自動化運行的前提條件是在問題抽象的過程中,進行精確和嚴格的符號標記和建模,并明確各個抽象層次間的聯(lián)系;而實現(xiàn)機械的自動化控制過程則體現(xiàn)在利用計算機語言進行算法的設計上。因此,自動化思維訓練的主體是順序、選擇、循環(huán)3種控制結構的邏輯組建。
以上FunCode平臺游戲中,“用開關控制燈泡”案例非常簡單,根據(jù)變量的兩個取值,令燈泡呈現(xiàn)“亮”或者“滅”的狀態(tài),直接展示控制的效果?!坝冒存I控制小魚游動”案例是典型ifelse 的if結構或switch結構的應用,用小魚的不同游動方向呈現(xiàn)選擇結構的意義和效果?!安榭词卟藞@”案例是典型的switch結構的應用?!按虬杏嫹帧笔沁B續(xù)區(qū)間離散化處理的switch應用?!澳嬷脫淇伺啤钡挠螒蛘故玖耸褂胒or循環(huán)實現(xiàn)遍歷的思想。“超級瑪麗頂蘑菇的計分”游戲是使用for循環(huán)進行累加計算的效果展示。這些小游戲都賦予了抽象的順序、選擇、循環(huán)結構以形象的表現(xiàn)。
循環(huán)嵌套的兩個游戲略為復雜,它們體現(xiàn)的是多維空間中的遍歷思想?!按┰交鹁€”游戲中設計了一個棋盤地圖,精靈從(0, 0)處方格出發(fā),點擊精靈相鄰的某個方格,精靈跳入,遍歷該方格的周邊是否存在怪物,如果存在則精靈被怪物吃掉。教學設計中用play()函數(shù)檢測鼠標點擊精靈周邊某個方格時的響應?!按虻厥蟆庇螒蛟跇淞掷镌O有4×4個坑,每個坑有一只地鼠,每次會有一只地鼠隨機地從某個坑里冒出頭來,用戶用木槌敲打它們,每擊中一只地鼠,屏幕頂部會顯示擊中的數(shù)量。教學設計中用play()函數(shù)遍歷4×4個坑,判斷木槌是否擊中地鼠。
以思維訓練為主線,結合FunCode游戲開發(fā)平臺,將游戲融入傳統(tǒng)教學過程的Java語言教學模式、教學設計,從賦予編程應用場景出發(fā),對游戲進行合理化的設計,按照為教學所需的原則抽取一部分游戲環(huán)節(jié)服務于教學,用游戲的趣味性驅動學習的熱情,并自然而然地將形象思維內化為抽象思維,按照抽象、自動化的路徑達到了計算思維的培養(yǎng)目標。新模式與傳統(tǒng)模式的更好結合將在未來的教學中進一步改進、完善。