刘杰等
摘要:针对目前程序设计类课程教学过于强调编程语言语法而忽略编程方法,从培养计算思维能力的角度出发,跨越语法规范,设计一种通用编程游戏,阐述了该游戏的设计理念、设计原则、设计内容和设计目标,最后分析了该游戏的应用原则和教学优势。
关键词:程序设计;计算思维;通用编程游戏
中图分类号:TP311 文献标识码:A 文章编号: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
程序设计课程是计算机学科的重要课程,也是其他学科的必修课程。这门课程对初学者难度较大,常常出现笔试成绩还行,但上机编程就无从下手的情况。究其原因,主要在于传统教学过程中过分注重语法知识的讲解,关注某个语句是否被编译报错,对问题的求解思路和求解方法等不够重视。这种教学模式导致负面的狭义工具论,学生学到了各种零散的语句和函数的功能,却不能领悟到程序设计的方法和思想,不知道使用这些功能能解决什么问题以及如何解决问题。最后,不少学生学习困难,觉得计算机语言枯燥难懂,逐渐对编程失去兴趣。针对这种情况,结合计算思维,设计一种通用编程游戏,消除语法障碍,对计算思维的培养和程序设计课程教学进行改革和创新。
1 计算思维与程序设计课程教学
美国卡内基·梅隆大学计算机科学系主任周以真教授在2006年提出计算思维这一概念,并给出其定义:计算思维是运用计算机科学的基础概念去求解问题、设计系统和理解人类的行为[1]。她从计算思维的角度谈到了日常生活和工作中多个案例,让我们意识到随着计算机科学的发展,计算思维和3R(Reading,wRiting,andaRithmetic)一样,应当成为每个人的基本技能,而计算思维的能力体现不仅仅是在诸如计算语言、计算平台等计算环境的认识上,更重要的是在计算环境下的问题求解方法,这才是我们应用计算机技术解决各种问题的重要基础[2]。
程序设计不等于计算思维,但是,程序设计离不开计算思维,任何程序设计都是建立在一定的计算思维上。程序设计教学中不应该再“重语法,轻设计”,更重要的是培养计算思维,从计算思维角度而不是语法角度对学生进行计算概念以及计算实践的考核。为了培养计算思维能力,结合其本质设计编程游戏[3-4]:
抽象——对计算平台的无关性和计算语言的通用编程思维进行归纳,取出其共同的、本质性的特征;
自动化——支持游戏指令的一步步自动执行和可视化操作,取代静态的流程图和伪代码。
2 通用编程游戏
通用编程游戏ArmGo,如图1,是一类特殊的教育游戏,以机械臂推箱子的形式出现。该游戏与普通电脑游戏不一样,游戏过程中,机械臂不是由键盘、鼠标或操纵杆来控制,而是根据学生为它设计的动作指令自动执行;它的动作指令与其他编程教育游戏也不一样,学生完全不用考虑编程语言自身的语法,而是通过给定的可视化指令集进行指令组合。
学生的最终目的是通过事先选择的多条指令来控制机械臂将箱子移动到指定位置。
2.1 设计理念
该游戏的旨在设计一个培养计算思维能力的教育游戏,不仅具有教育教学的“教育性”——游戏的内容和任务都和计算思维相关,还有主流游戏的“游戏性”——关卡挑战、步骤控制等。
2.2 设计原则
通用编程游戏的设计关键在于设计一种跨越具体的程序设计语言语法细节的表达模式,并在此模式下指导学生分析问题、解决问题,培养计算思维能力。这种新模式必须满足“易使用”和“易转换”两个基本原则[5]:
1)新模式下的表达内容符合人的自然理解习惯,其正确语义无需严格的规范化训练就能理解;
2)新模式的指令与具体程序代码之间存在无歧义的对应转换关系,即通过简单的固定规则就能将该模式下的表达内容直接翻译成等价的伪代码。
基于“易使用”原则,该游戏将学习的重点由语法规范转移到问题解决方法(或步骤)的描述与设计,避免初学者过早陷入语言表达形式的汪洋大海;基于“易转换”原则,游戏的最终目标仍是强化学生的计算思维、提高程序设计能力,并实现语义层次而非语法层次的思维能力考核。
2.3 设计内容
由于该游戏主要用于程序流程的表达,故设计的主要任务是集成逻辑编程的控制结构,用可视化的指令实现编程语言的基本逻辑流程的体系结构,将抽象问题感官化。
首先,设计了包含普通指令(上移、下移和右移指令)、选择指令、循环指令和模块在内的指令集,可以实现程序设计中的3种基本结构——顺序结构、选择结构和循环结构,以及简单的无参函数设计;其次,给各个关卡设计了初始状态和目标状态,对应程序的输入和输出;最后,根据最少的过关时间和最少的过关指令数,对学生的过关指令流进行评分;而每个关卡的内容也是结合不同的计算概念进行设计的,比如简单选择结构、循环结构等。
2.4 设计特点
1)对于编程初学者而言,可以“零语法”开始编程,只有通关与否,没有语法错误;2)指令流是图形符号的集合,每个符号表示要执行的操作,符号依次执行;3)可以实现模块化设计,使算法结构更清晰;4)指令设计和执行过程中是可视化的,上手极为容易,学生可以直接观察自己设计的指令流的执行过程;5)可以对通关代码执行时间和执行步骤进行统计,有助于简单的算法复杂性分析。
2.5 设计目标
2012年,美国麻省理工学院媒体实验室提出计算思维三维框架,包括三个维度:计算概念,计算实践和计算观念[6]。通用编程游戏就是基于这个三维框架设计教学目标和游戏功能,对计算思维能力的培养提出了新的研究思路和探索。
下面在计算思维三维框架下总结通用编程游戏中的活动内涵[6]:
1)计算概念:是学生在游戏过程中使用最多、印象最深的一些概念,在通用编程游戏中,这些概念被映射成一组指令,可以无歧义地迁移到转换成某种程序设计语言。常用的计算概念有4个:顺序,循环,分支,函数:
顺序:为了控制机械臂完成某个动作需要执行的一系列指令;
循环:将相同的顺序步骤重复运行多次;
分支:根据箱子的颜色决定动作是否执行;
函数:将某组步骤独立出来,形成模块,可以被其他模块调用。
2)计算实践:在游戏过程中学生使用的问题解决策略。主要有4种:
递增和重复:关卡难度不断提升,通关不是一个直接、线性的过程,通关方案应在一步步不断试验中得到修正;
测试和调试:利用游戏的即时反馈和可视化,可以掌握预测、修正问题的方法;
再利用和再创作:通过学生之间的交流沟通,找到可以利用的想法和思路,进行修改创作,实现一题多解;
抽象和模块化:针对复杂关卡,通过模块调用设计整体解决方案。
3)计算观念:学生在游戏过程中不断形成对自己和同伴以及周围世界的理解,是一种思维习惯的养成。主要有3种观念[5]:
表达:通关后,要求学生由浅入深用文字-算法描述性语言-计算机语言描述通关思想和过程,要求步骤清晰。时间一长,学生树立“我可以”的信心,将不满足于现有关卡,而乐于尝试和体验其他类型的编程活动。
联系:借助各种外在支持,如寻求同学帮助、网络答疑,研究和再创作他人通关步骤,与人一起合作通关。
质疑:对某些通关步骤的功能不足和受限等提出质疑性问题,并给出自己的改进信息。
在计算思维三维框架下,学生在游戏过程中不断形成计算概念、强化计算实践,确立计算观念,锻炼不同能力,比如问题分析与解决能力、步骤设计与描述能力、分支思维能力、循环思维能力、模块化思维能力以及数学建模能力等。
2.6 编程游戏的教学应用
将通用编程游戏入程序设计教学是有步骤地进行:
1)游戏引入:首先根据教学内容和目标设计来选择关卡,这是最关键的一步,它将直接影响最终的教学效果。针对不同的教学内容,可以提前布置游戏任务,让学生提前思考和讨论。在讨论中,学生彼此间形成思想的碰撞、观点的交流,开拓了思路,也激发了学习兴趣。
2)知识回归:讨论结束后,教师将课堂内容从游戏回归到教学本身,讲解技术要点和具体运用。
3)编码演示:鼓励学生通过小组协作完成一关多解,并对评分进行比对分析。
3 结束语
在通关的基础上,要求学生用文字步骤清晰地描述通关的过程,进而引导学生使用算法描述性语言,最终使用计算机语言来描述通关的思想和过程。这是教学的最终目的,也是为了培养学生将自然语言转化为计算机语言的能力和灵活运用计算机程序解决实际问题的能力。
在整个过程中,如何解决问题和如何设计指令,主要是学生通过自己的思考得来的。而教师在教学过程中一方面强调新知识的运用,另一方面主要是给学生展示知识背后的计算思维,让学生感受到计算思维是魅力和重要性,启发学习者的求知欲望和心理共鸣
教学实践证明,引入通用编程游戏的班级,学生主动参与到游戏知识的学习积极性较高,并且学生的思维活跃,甚至会有一定创新思维,整体学习效果明显提高。所以,在程序设计教学中,恰当地引入通用编程游戏,有助于启发学生的思维,帮助学生理解程序设计的方法和思想,课堂气氛活跃,寓教于乐,是一种“玩物长智”的认知和学习活动。
参考文献:
[1] Jeannette M. Wing. Computational Thinking[J]. Communications of the ACM, 2006, 49(3): 33-35.
[2] 李廉. 计算思维——概念与挑战[J]. 中国大学教学, 2012(1):7-12.
[3] 江耿豪, 郑炜冬. 编程游戏在计算机语言教学中的运用[J]. 漳州师范学院学报: 自然科学版, 2006(2):128-131.
[4] 曾夏玲. 基于计算思维能力培养的“轻游戏”教学模式初探[J]. 职教论坛, 2015(11).
[5] 贺忠. 游戏思想在程序设计语言课程教学中的应用[J]. 计算机教育, 2009(13):157-159.
[6] 王旭卿. 面向三维目标的国外中小学计算思维培养与评价研究[J]. 电化教育研究, 2014(7).