劉杰等
摘要:針對(duì)目前程序設(shè)計(jì)類課程教學(xué)過于強(qiáng)調(diào)編程語言語法而忽略編程方法,從培養(yǎng)計(jì)算思維能力的角度出發(fā),跨越語法規(guī)范,設(shè)計(jì)一種通用編程游戲,闡述了該游戲的設(shè)計(jì)理念、設(shè)計(jì)原則、設(shè)計(jì)內(nèi)容和設(shè)計(jì)目標(biāo),最后分析了該游戲的應(yīng)用原則和教學(xué)優(yōu)勢(shì)。
關(guān)鍵詞:程序設(shè)計(jì);計(jì)算思維;通用編程游戲
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)21-0055-03
Design of General Programming Game for Improving Computational Thinking
LIU Jie, YANG Xiao-hua, CHEN Xing, LIU Zhi-ming, ZHANG Hui-ren
(School of Computer Science and Technology, University of South China, Hengyang 421001, China)
Abstract: Aiming at the problem that the current programming design courses are much emphasis on the programming language syntax rather than the programming method, a general programming game is proposed for crossing the grammar specification, training computational thinking and developing programming ability. The paper describes the design idea, implementation details and application principle of the programming game and analysis its advantages in programming language teaching.
Key words: programming; computational thinking; general programming game
程序設(shè)計(jì)課程是計(jì)算機(jī)學(xué)科的重要課程,也是其他學(xué)科的必修課程。這門課程對(duì)初學(xué)者難度較大,常常出現(xiàn)筆試成績(jī)還行,但上機(jī)編程就無從下手的情況。究其原因,主要在于傳統(tǒng)教學(xué)過程中過分注重語法知識(shí)的講解,關(guān)注某個(gè)語句是否被編譯報(bào)錯(cuò),對(duì)問題的求解思路和求解方法等不夠重視。這種教學(xué)模式導(dǎo)致負(fù)面的狹義工具論,學(xué)生學(xué)到了各種零散的語句和函數(shù)的功能,卻不能領(lǐng)悟到程序設(shè)計(jì)的方法和思想,不知道使用這些功能能解決什么問題以及如何解決問題。最后,不少學(xué)生學(xué)習(xí)困難,覺得計(jì)算機(jī)語言枯燥難懂,逐漸對(duì)編程失去興趣。針對(duì)這種情況,結(jié)合計(jì)算思維,設(shè)計(jì)一種通用編程游戲,消除語法障礙,對(duì)計(jì)算思維的培養(yǎng)和程序設(shè)計(jì)課程教學(xué)進(jìn)行改革和創(chuàng)新。
1 計(jì)算思維與程序設(shè)計(jì)課程教學(xué)
美國卡內(nèi)基·梅隆大學(xué)計(jì)算機(jī)科學(xué)系主任周以真教授在2006年提出計(jì)算思維這一概念,并給出其定義:計(jì)算思維是運(yùn)用計(jì)算機(jī)科學(xué)的基礎(chǔ)概念去求解問題、設(shè)計(jì)系統(tǒng)和理解人類的行為[1]。她從計(jì)算思維的角度談到了日常生活和工作中多個(gè)案例,讓我們意識(shí)到隨著計(jì)算機(jī)科學(xué)的發(fā)展,計(jì)算思維和3R(Reading,wRiting,andaRithmetic)一樣,應(yīng)當(dāng)成為每個(gè)人的基本技能,而計(jì)算思維的能力體現(xiàn)不僅僅是在諸如計(jì)算語言、計(jì)算平臺(tái)等計(jì)算環(huán)境的認(rèn)識(shí)上,更重要的是在計(jì)算環(huán)境下的問題求解方法,這才是我們應(yīng)用計(jì)算機(jī)技術(shù)解決各種問題的重要基礎(chǔ)[2]。
程序設(shè)計(jì)不等于計(jì)算思維,但是,程序設(shè)計(jì)離不開計(jì)算思維,任何程序設(shè)計(jì)都是建立在一定的計(jì)算思維上。程序設(shè)計(jì)教學(xué)中不應(yīng)該再“重語法,輕設(shè)計(jì)”,更重要的是培養(yǎng)計(jì)算思維,從計(jì)算思維角度而不是語法角度對(duì)學(xué)生進(jìn)行計(jì)算概念以及計(jì)算實(shí)踐的考核。為了培養(yǎng)計(jì)算思維能力,結(jié)合其本質(zhì)設(shè)計(jì)編程游戲[3-4]:
抽象——對(duì)計(jì)算平臺(tái)的無關(guān)性和計(jì)算語言的通用編程思維進(jìn)行歸納,取出其共同的、本質(zhì)性的特征;
自動(dòng)化——支持游戲指令的一步步自動(dòng)執(zhí)行和可視化操作,取代靜態(tài)的流程圖和偽代碼。
2 通用編程游戲
通用編程游戲ArmGo,如圖1,是一類特殊的教育游戲,以機(jī)械臂推箱子的形式出現(xiàn)。該游戲與普通電腦游戲不一樣,游戲過程中,機(jī)械臂不是由鍵盤、鼠標(biāo)或操縱桿來控制,而是根據(jù)學(xué)生為它設(shè)計(jì)的動(dòng)作指令自動(dòng)執(zhí)行;它的動(dòng)作指令與其他編程教育游戲也不一樣,學(xué)生完全不用考慮編程語言自身的語法,而是通過給定的可視化指令集進(jìn)行指令組合。
學(xué)生的最終目的是通過事先選擇的多條指令來控制機(jī)械臂將箱子移動(dòng)到指定位置。
2.1 設(shè)計(jì)理念
該游戲的旨在設(shè)計(jì)一個(gè)培養(yǎng)計(jì)算思維能力的教育游戲,不僅具有教育教學(xué)的“教育性”——游戲的內(nèi)容和任務(wù)都和計(jì)算思維相關(guān),還有主流游戲的“游戲性”——關(guān)卡挑戰(zhàn)、步驟控制等。
2.2 設(shè)計(jì)原則
通用編程游戲的設(shè)計(jì)關(guān)鍵在于設(shè)計(jì)一種跨越具體的程序設(shè)計(jì)語言語法細(xì)節(jié)的表達(dá)模式,并在此模式下指導(dǎo)學(xué)生分析問題、解決問題,培養(yǎng)計(jì)算思維能力。這種新模式必須滿足“易使用”和“易轉(zhuǎn)換”兩個(gè)基本原則[5]:
1)新模式下的表達(dá)內(nèi)容符合人的自然理解習(xí)慣,其正確語義無需嚴(yán)格的規(guī)范化訓(xùn)練就能理解;
2)新模式的指令與具體程序代碼之間存在無歧義的對(duì)應(yīng)轉(zhuǎn)換關(guān)系,即通過簡(jiǎn)單的固定規(guī)則就能將該模式下的表達(dá)內(nèi)容直接翻譯成等價(jià)的偽代碼。
基于“易使用”原則,該游戲?qū)W(xué)習(xí)的重點(diǎn)由語法規(guī)范轉(zhuǎn)移到問題解決方法(或步驟)的描述與設(shè)計(jì),避免初學(xué)者過早陷入語言表達(dá)形式的汪洋大海;基于“易轉(zhuǎn)換”原則,游戲的最終目標(biāo)仍是強(qiáng)化學(xué)生的計(jì)算思維、提高程序設(shè)計(jì)能力,并實(shí)現(xiàn)語義層次而非語法層次的思維能力考核。
2.3 設(shè)計(jì)內(nèi)容
由于該游戲主要用于程序流程的表達(dá),故設(shè)計(jì)的主要任務(wù)是集成邏輯編程的控制結(jié)構(gòu),用可視化的指令實(shí)現(xiàn)編程語言的基本邏輯流程的體系結(jié)構(gòu),將抽象問題感官化。
首先,設(shè)計(jì)了包含普通指令(上移、下移和右移指令)、選擇指令、循環(huán)指令和模塊在內(nèi)的指令集,可以實(shí)現(xiàn)程序設(shè)計(jì)中的3種基本結(jié)構(gòu)——順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu),以及簡(jiǎn)單的無參函數(shù)設(shè)計(jì);其次,給各個(gè)關(guān)卡設(shè)計(jì)了初始狀態(tài)和目標(biāo)狀態(tài),對(duì)應(yīng)程序的輸入和輸出;最后,根據(jù)最少的過關(guān)時(shí)間和最少的過關(guān)指令數(shù),對(duì)學(xué)生的過關(guān)指令流進(jìn)行評(píng)分;而每個(gè)關(guān)卡的內(nèi)容也是結(jié)合不同的計(jì)算概念進(jìn)行設(shè)計(jì)的,比如簡(jiǎn)單選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)等。
2.4 設(shè)計(jì)特點(diǎn)
1)對(duì)于編程初學(xué)者而言,可以“零語法”開始編程,只有通關(guān)與否,沒有語法錯(cuò)誤;2)指令流是圖形符號(hào)的集合,每個(gè)符號(hào)表示要執(zhí)行的操作,符號(hào)依次執(zhí)行;3)可以實(shí)現(xiàn)模塊化設(shè)計(jì),使算法結(jié)構(gòu)更清晰;4)指令設(shè)計(jì)和執(zhí)行過程中是可視化的,上手極為容易,學(xué)生可以直接觀察自己設(shè)計(jì)的指令流的執(zhí)行過程;5)可以對(duì)通關(guān)代碼執(zhí)行時(shí)間和執(zhí)行步驟進(jìn)行統(tǒng)計(jì),有助于簡(jiǎn)單的算法復(fù)雜性分析。
2.5 設(shè)計(jì)目標(biāo)
2012年,美國麻省理工學(xué)院媒體實(shí)驗(yàn)室提出計(jì)算思維三維框架,包括三個(gè)維度:計(jì)算概念,計(jì)算實(shí)踐和計(jì)算觀念[6]。通用編程游戲就是基于這個(gè)三維框架設(shè)計(jì)教學(xué)目標(biāo)和游戲功能,對(duì)計(jì)算思維能力的培養(yǎng)提出了新的研究思路和探索。
下面在計(jì)算思維三維框架下總結(jié)通用編程游戲中的活動(dòng)內(nèi)涵[6]:
1)計(jì)算概念:是學(xué)生在游戲過程中使用最多、印象最深的一些概念,在通用編程游戲中,這些概念被映射成一組指令,可以無歧義地遷移到轉(zhuǎn)換成某種程序設(shè)計(jì)語言。常用的計(jì)算概念有4個(gè):順序,循環(huán),分支,函數(shù):
順序:為了控制機(jī)械臂完成某個(gè)動(dòng)作需要執(zhí)行的一系列指令;
循環(huán):將相同的順序步驟重復(fù)運(yùn)行多次;
分支:根據(jù)箱子的顏色決定動(dòng)作是否執(zhí)行;
函數(shù):將某組步驟獨(dú)立出來,形成模塊,可以被其他模塊調(diào)用。
2)計(jì)算實(shí)踐:在游戲過程中學(xué)生使用的問題解決策略。主要有4種:
遞增和重復(fù):關(guān)卡難度不斷提升,通關(guān)不是一個(gè)直接、線性的過程,通關(guān)方案應(yīng)在一步步不斷試驗(yàn)中得到修正;
測(cè)試和調(diào)試:利用游戲的即時(shí)反饋和可視化,可以掌握預(yù)測(cè)、修正問題的方法;
再利用和再創(chuàng)作:通過學(xué)生之間的交流溝通,找到可以利用的想法和思路,進(jìn)行修改創(chuàng)作,實(shí)現(xiàn)一題多解;
抽象和模塊化:針對(duì)復(fù)雜關(guān)卡,通過模塊調(diào)用設(shè)計(jì)整體解決方案。
3)計(jì)算觀念:學(xué)生在游戲過程中不斷形成對(duì)自己和同伴以及周圍世界的理解,是一種思維習(xí)慣的養(yǎng)成。主要有3種觀念[5]:
表達(dá):通關(guān)后,要求學(xué)生由淺入深用文字-算法描述性語言-計(jì)算機(jī)語言描述通關(guān)思想和過程,要求步驟清晰。時(shí)間一長(zhǎng),學(xué)生樹立“我可以”的信心,將不滿足于現(xiàn)有關(guān)卡,而樂于嘗試和體驗(yàn)其他類型的編程活動(dòng)。
聯(lián)系:借助各種外在支持,如尋求同學(xué)幫助、網(wǎng)絡(luò)答疑,研究和再創(chuàng)作他人通關(guān)步驟,與人一起合作通關(guān)。
質(zhì)疑:對(duì)某些通關(guān)步驟的功能不足和受限等提出質(zhì)疑性問題,并給出自己的改進(jìn)信息。
在計(jì)算思維三維框架下,學(xué)生在游戲過程中不斷形成計(jì)算概念、強(qiáng)化計(jì)算實(shí)踐,確立計(jì)算觀念,鍛煉不同能力,比如問題分析與解決能力、步驟設(shè)計(jì)與描述能力、分支思維能力、循環(huán)思維能力、模塊化思維能力以及數(shù)學(xué)建模能力等。
2.6 編程游戲的教學(xué)應(yīng)用
將通用編程游戲入程序設(shè)計(jì)教學(xué)是有步驟地進(jìn)行:
1)游戲引入:首先根據(jù)教學(xué)內(nèi)容和目標(biāo)設(shè)計(jì)來選擇關(guān)卡,這是最關(guān)鍵的一步,它將直接影響最終的教學(xué)效果。針對(duì)不同的教學(xué)內(nèi)容,可以提前布置游戲任務(wù),讓學(xué)生提前思考和討論。在討論中,學(xué)生彼此間形成思想的碰撞、觀點(diǎn)的交流,開拓了思路,也激發(fā)了學(xué)習(xí)興趣。
2)知識(shí)回歸:討論結(jié)束后,教師將課堂內(nèi)容從游戲回歸到教學(xué)本身,講解技術(shù)要點(diǎn)和具體運(yùn)用。
3)編碼演示:鼓勵(lì)學(xué)生通過小組協(xié)作完成一關(guān)多解,并對(duì)評(píng)分進(jìn)行比對(duì)分析。
3 結(jié)束語
在通關(guān)的基礎(chǔ)上,要求學(xué)生用文字步驟清晰地描述通關(guān)的過程,進(jìn)而引導(dǎo)學(xué)生使用算法描述性語言,最終使用計(jì)算機(jī)語言來描述通關(guān)的思想和過程。這是教學(xué)的最終目的,也是為了培養(yǎng)學(xué)生將自然語言轉(zhuǎn)化為計(jì)算機(jī)語言的能力和靈活運(yùn)用計(jì)算機(jī)程序解決實(shí)際問題的能力。
在整個(gè)過程中,如何解決問題和如何設(shè)計(jì)指令,主要是學(xué)生通過自己的思考得來的。而教師在教學(xué)過程中一方面強(qiáng)調(diào)新知識(shí)的運(yùn)用,另一方面主要是給學(xué)生展示知識(shí)背后的計(jì)算思維,讓學(xué)生感受到計(jì)算思維是魅力和重要性,啟發(fā)學(xué)習(xí)者的求知欲望和心理共鳴
教學(xué)實(shí)踐證明,引入通用編程游戲的班級(jí),學(xué)生主動(dòng)參與到游戲知識(shí)的學(xué)習(xí)積極性較高,并且學(xué)生的思維活躍,甚至?xí)幸欢▌?chuàng)新思維,整體學(xué)習(xí)效果明顯提高。所以,在程序設(shè)計(jì)教學(xué)中,恰當(dāng)?shù)匾胪ㄓ镁幊逃螒?,有助于啟發(fā)學(xué)生的思維,幫助學(xué)生理解程序設(shè)計(jì)的方法和思想,課堂氣氛活躍,寓教于樂,是一種“玩物長(zhǎng)智”的認(rèn)知和學(xué)習(xí)活動(dòng)。
參考文獻(xiàn):
[1] Jeannette M. Wing. Computational Thinking[J]. Communications of the ACM, 2006, 49(3): 33-35.
[2] 李廉. 計(jì)算思維——概念與挑戰(zhàn)[J]. 中國大學(xué)教學(xué), 2012(1):7-12.
[3] 江耿豪, 鄭煒冬. 編程游戲在計(jì)算機(jī)語言教學(xué)中的運(yùn)用[J]. 漳州師范學(xué)院學(xué)報(bào): 自然科學(xué)版, 2006(2):128-131.
[4] 曾夏玲. 基于計(jì)算思維能力培養(yǎng)的“輕游戲”教學(xué)模式初探[J]. 職教論壇, 2015(11).
[5] 賀忠. 游戲思想在程序設(shè)計(jì)語言課程教學(xué)中的應(yīng)用[J]. 計(jì)算機(jī)教育, 2009(13):157-159.
[6] 王旭卿. 面向三維目標(biāo)的國外中小學(xué)計(jì)算思維培養(yǎng)與評(píng)價(jià)研究[J]. 電化教育研究, 2014(7).