儿童编程教育价值与实施途径分析

2017-12-07 16:13王荣良
中国信息技术教育 2017年21期
关键词:程序设计编程学习者

王荣良

情境引入:这是我们所在的城市——上海,一座现代化的美丽都市。(课件播放照片)然而,如今这座城市却被一个严重的问题所困扰,那就是环境污染。上海如同我们的家,谁都希望自己的家永远展现出美丽干净的姿态,所以今天我们就以环境保护为主题,设计一款Kodu游戏来宣传环境保护的意识。

技术学习:在制作这款游戏的时候,你们可能会遇到困难,当你遇到困难了,可以打开Kodu学习卡片,和小伙伴一起研究如何解决这些困难。

以上的学习卡片(部分),介绍了学生在编制游戏过程中使用CREATE命令种树的方法,使用Setwater命令使河水变清的方法。在编程过程中,学生学会了Kodu编程平台的创建命令等使用方法,這是一种具体技术的学习,也是理解计算机世界的基础。

游戏设计:接下来,两人为一组,在游戏计划书上,写下你们对这款游戏的构思。

在巡视的过程中,我发现每组学生设计的游戏都十分有趣,请一组学生分享一下自己的游戏。

提供游戏计划书,是一种程序设计方法的呈现,也是一种编程思维的传授。将学生的设计想法用计划书来表达,是一种将学生还不是很确定的想法变为明确要完成的作品的重要思维过程。同时,计划书中所描述的功能,特别是通过“游戏规则”的设计以及随后“游戏规则”用程序来实现,都潜移默化地体现了“规则”应是可计算的这一编程思维特征。

交流分享:大部分小组已经完成游戏的一半内容了,问题和困难也一点点出现了。我想听听看,你们在制作的过程中,都遇到了哪些问题?这些问题解决了吗?如果没有解决,其他小组能不能提供帮助?已经完成设计的小组,可以尝试给自己的游戏增加难度,让游戏更好玩。

在规划游戏计划书的时候,学生已经将现实世界中的游戏,在自己的头脑里进行了整理和归纳。这种整理与归纳一定是基于游戏程序开发平台Kodu的,更一般化地说,是基于对计算机执行程序特征的理解基础上的。在具体的编程程序和调试程序过程中,学生不断地将自己头脑中的游戏情节与计算机世界中的游戏情节作比较,从而体验计算机世界的自动化属性和解决问题的方法观,从而形成新的“世界观”。

随着计算机技术的发展,友好的编程平台操作界面降低了编程学习的技术门槛,特别是一批适合儿童开展趣味编程的学习环境,为编程学习的低龄化创造了条件。然而,当这种技术性非常强且技术变革非常快的程序设计技术成为儿童的学习内容时,如何透过技术学习的表面,挖掘其思维方式乃至更深层的教育价值,并努力实现这些教育价值,是一个迫切需要解决的问题,也是一线教师需要密切关注与不断探索的问题。

Kodu编程《上海的环境》一课展现的就是从编程技术学习到思维培养,再到对计算机世界认识这样一个多层次的教学目标设计与实现。当儿童编程的每堂课都拥有多层次的教学目标,并能通过教授、操练、试错、感悟、渗透等多种途径实现这些教学目标时,那其对应的儿童编程教育才是丰富和完整的,才是符合儿童发展需要的。

从技能到“世界观”:儿童编程教育意义分析

学习计算机,很容易联想到学习编程。程序设计课程是大学本科计算机科学与技术专业的基础课程,通常要求学生掌握一门程序设计语言。程序设计课程领域的知识由程序设计基本概念和程序设计技巧组成,这些内容覆盖了计算机科学与技术专业本科生必须了解与掌握的整个程序设计的知识范围。因此,编程学习不仅是掌握一门程序设计语言,也是进一步开展专业学习的工具,更是体验与理解计算机工作原理的一个途径。

中小学开展程序设计教学,经历了一个由盛到衰又转向兴旺的过程。当再次关注程序设计教学时,必然需要探讨程序设计教学的价值。“培养未来的程序员”可以成为以课外社团形式组织少量中小学生组织开展编程教学的学习目标,但是,若此目标成为义务教育阶段的学习目标肯定得不到教育界普遍的认同。多年来,业内人士不断拓展程序设计教学更宽泛的教育价值,如培养创新思想、团队合作精神等,并将这些价值渗透于编程教学中。然而,这些并不是程序设计教学所独有的,通过其他学科的学习也可以获得这些教育价值。

从程序设计本体而言,其独有的教育价值应该有三个层次:学会一种技能,培养一种思维,形成一种对世界的看法。

首先,通过编程学习,掌握一种编程技能,是程序设计教学最直接的、最基本的目标。其最典型的就是职业教育,学习者熟练掌握一种高级编程语言进行程序开发,解决实际问题,编程效益是教学追求的重要目标。因此,学习内容除了程序设计的基础知识以外,还会涉及大量的编程技巧,同时从工程角度出发,还会涉及具体的技术细节和工程化的规定。其学习内容是繁琐的,学习目标指向是明确的。显然,作为非职业教育的学习者,涉及编程技巧和具体技术细节和工程性规定的学习内容可以弱化。

其次,通过编程学习,培养一种思维。目前大力倡导的计算思维教育就属于思维的培养。计算思维不仅是计算机专业人员应该具有的思维模式和素养,也应该成为当代公民的一种思维素养。计算机专业学生学习程序设计,不仅要作为一种编程工具来学习,还要以此为载体学习学科思维。而作为非计算机专业的学习者,关注的是计算思维的形成。那么,从思维教育的角度出发,面对程序设计大量的工程化规定,规范与设计满足程序设计教学要求的最小子集,包括最小指令集、最基本的编程技巧等,则是一项重要的研究内容。

最后,通过编程学习,形成对一种世界的看法,即形成一种独特的“世界观”。当今社会是由人、物、机所组成的三元世界,即人的世界、物理世界以及计算机世界。计算机世界是现代人必须面对并且深入探索的世界,其虚拟、自动、智能等特性通过程序设计,可以让儿童直面接触并深入感受计算机世界。

当把程序设计的学习者框定为儿童后,你会发现,尽管学习者有可能是潜在的计算机从业人员,但是以职业教育为目标的教学对儿童肯定是不合适的。因此,培养一种思维和形成一种对计算机世界的看法,必然是儿童编程有待挖掘的教育价值。endprint

从自然语言到逻辑语言:儿童编程教育特点分析

符号功能的产生是儿童认知能力发展的一种飞跃,也是语言学习的基础。心理学家皮亚杰借用逻辑和数学的概念,将儿童认知发展分为感知运算阶段、前运算阶段、具体运算阶段和形式运算阶段四个阶段。其中,2~7岁前运算阶段的儿童已经产生了人类特有的语言思维,能用词语和表象相组合的方式去思考,从而使思维和动作分离开,使思维带有概括性和间接性。到了7~11岁具体运算阶段,儿童认知的主要特征是面对问题时,能够遵循法则进行推理思维,但推理思维能力还是离不开具体事物的支持,只限于可见的具体情境或熟悉的经验。

2~7岁的儿童在自然语言,特别是母语的学习方面,主要手段有:①模仿,即儿童在母语环境中模仿父母的說话。②重复,只有建立在模仿和反复使用的基础上,语言能力才会真正形成。③运用,这是一个边模仿、边练习、边运用的过程。④理解记忆,即在理解的基础上重复是记忆的最好方法。⑤纠正错误,在语言大量运用的过程中,环境可以纠正使用中出现的错误,这是语言学习的重要环节。那么,针对小学至初中低龄段儿童学习计算机程序设计语言,是否可以借用类似自然语言的学习方式,取决于计算机程序设计语言的特点。

自然语言是人类交流和思维的主要工具,与自然语言相对的是逻辑语言,计算机程序设计语言就是一种人工构造的逻辑语言。它是计算机能够理解的语言,是人规定计算机完成规定动作的命令序列,是人与计算机交互的接口。

如果说自然语言是人脑与人脑的交际工具,那么计算机程序设计语言是人脑与计算机的交际工具。两者都具有符号化和形式化特征,都是采用符号高度形式化地描述事物。仔细分析,计算机程序设计语言与自然语言虽然有很多相同点,但也有明显的不同。首先,尽管两类语言都是采用抽象的方式用符号来表达事物,但针对不同的描述对象,自然语言描述的抽象程度不同,人们对其理解的难度也是不同的。例如,一本书、一支笔等这种对数的抽象表述比较容易理解,而一个哲学问题的抽象程度就会提高很多。在实际生活中,人们还可以借助其他表情、动作等表意渠道来理解语言。而计算机程序设计语言的抽象不存在这种渐变与过渡,其只能用字符一种方式来表达,且表达是精确的。这些不同,对于成年人来说可能困难不大,但对于儿童而言,因其思维的概括性和间接性发展还不够成熟,所以无论是前运算阶段还是具体运算阶段,这些都会成为编程学习的障碍。

其次,在语言的描述对象事物方面,计算机语言偏向于具有数学特征或适合数字化表达的事物,而自然语言则极为丰富与复杂。另外,儿童对用自然语言描述事物的学习是渐进的,是从简单到复杂的,是需要用几年甚至于十几年才能完成的。但儿童对程序设计语言的理解,则不存在这样一种学习坡度。

最后,计算机语言本身并不存在与自然语言相似的学习环境,计算机语言本身不能提供自然语言学习中“模仿—重复—运用—理解记忆—纠错”的过程,需要通过外部人为构造这样一个学习环境。

因此,儿童编程需要解决如下三方面的问题:①尽可能降低语言形式化表达的抽象度,弱化符号性。②针对计算机程序设计语言描述的事物,或者说用计算机程序设计语言解决的问题,尽可能弱化其数学性和抽象度,而是采用符合儿童理解力的故事场景。③在学习方法上,模拟自然语言的学习过程,强化学习者在与计算机互动中完成模仿、重复、运用、理解记忆与纠错。

从编码到编图符:儿童编程教育实施环境分析

软件编码是将软件开发过程中经需求分析、详细设计得到的处理过程的描述转换为基于某种计算机语言的程序,即源程序代码。编写源代码是学习程序设计语言的最终落实,也是应用编程手段解决现实问题的基础。

从编程教学的认知视角看,编程学习环境或平台可以分为代码类、积木类和图符类三类。例如,Pascal、C、VB等计算机程序设计语言都属于代码类,这类语言是主流的计算机程序设计语言,以英文字符为语句关键词,以工程化解决问题为目标。针对儿童学习编程而言,使用这类计算机程序设计语言,需要克服过度的符号化与抽象表达、繁琐的语法规则、复杂的问题目标等困难。

适合儿童编程学习的平台应具有简约和有趣的特点。简约,既反映了编程语句形式化表达的弱化,降低了学生理解编程语句的难度要求,也反映了规则的简化,减少了记忆要求。尽管儿童的记忆能力有可能优于成人,但是针对过多语法规则的记忆,特别是没有建立在学习者理解基础上的机械记忆,是学习者认知资源的一种浪费。有趣,通常反映在编程语句的去代码化,以及学习者编程所解决问题的趣味化上,这可以增加儿童对编程语句学习以及问题分析的兴趣。

积木类编程平台是以积木块的形式来描述计算机程序的执行流程,不同类型的积木对应不同的程序控制结构。在编程序过程中,学习者使用不同积木组合,按要求填写积木对应的参数,就可以完成计算机程序执行流程的设置,从而达到编程的目的。Scratch就是一种积木类编程环境。显然,用积木图形来代替字符组成的语句,用形象化的方式来表达程序执行流程,这种积木类编程环境降低了对记忆的要求以及对符号的抽象理解要求。积木类编程环境适合7~11岁具体运算阶段中偏高龄段的儿童。

图符类编程环境是用图示的方式来描述编程过程中所涉及的变量、表达式、输入输出以及各种对象的动作,同时也尽可能地简化程序执行流程。Kodu就是一种典型的图符类编程环境。在Kodu系统中,编程对象涉及的全部行为动作都用图符表示,并且在需要时自动列出供编程者使用;Kodu系统全程使用单一的when…do…格式的语句,以面向对象事件驱动的方式控制程序的执行,弱化了分支、循环等程序结构;Kodu系统以设计与编制游戏为目标,降低了对目标事物的理解要求,使学习者能有更多的精力关注编程学习及其编程思想本身。Kodu适合7~11岁具体运算阶段中偏低龄段的儿童学习编程之用。

除了以上三类编程平台以外,还有一类编程学习环境,严格地说它并不是一种具体的程序设计语言,而是学习编程的课程。适用于儿童学习的这类课程往往是以游戏的方式展示编程的相关知识,通过关卡游戏让儿童层层了解计算机一步一步的执行过程,体验计算机语言控制计算机自动化特性和编程思想。这类编程学习平台依据其学习内容的不同和呈现方式的不同,可以适合不同年龄段的学习者,尤其是能为前运算阶段中偏高年龄段儿童学习编程提供可能。endprint

从训练到体验:儿童编程教育方法分析

无论是积木类的还是图符类的编程环境,都在一定程度上弱化了抽象的符号表示,同时也降低了记忆要求,从而降低了学习者的认知负荷。例如,不需要定义变量名,用盒子表示变量,对应的想象就是可以存放数值,这样就把变量形象化了。同时,从儿童认知心理特征出发选择目标事件,也降低了学生的认知负荷。例如,对于枚举算法的实现,高中生适合于以“查找素數”为例,而小学生则适合于使用“鸡兔同笼”等故事,这样更具象,更容易理解与分析。

就学习目标而言,如果学习编程是以掌握一门编程技能为主要目标,乃至于作为职业培训的话,那么熟练与否是关键的评价点。为了达到熟练的目的,训练是必定的实施途径,即所谓的熟能生巧。但对于儿童来说,在编程教育的三层教育价值中,思维的培养和对世界看法的形成,比编程技能的训练更为重要。因此,“训练”,作为一种有计划、有步骤地通过学习和辅导掌握某种技能的传统而单一的学习方法,需要让位于“体验”,因为体验到的东西比较真实,并且会在大脑记忆中留下深刻的印象。通过体验能达到感悟学习对象的目的,特别是对于计算机世界自动化特征的体验,熟练固然好,感悟更重要。

儿童编程教育,首先是确立正确的教育目标。除了传统的目标定位,如编程的技能、将一个现实问题分解成能够由计算机程序解决的一系列问题的方法以外,还要在编程学习过程中体验与感悟到将问题抽象为一系列可执行步骤的思维方式,也要能够感受到计算机通过执行程序表现的自动化特征以及通过程序控制计算机行为的愉悦。这些都是传统编程教育所忽略的,且是儿童编程教育需要特别关注的方面。

其次,儿童编程教育需要从课程的视角整体设计课程内容,确定主线索。以小学四年级Kodu趣味编程课程开发为例,需要依托Kodu平台提供的角色和场景,以设计与编制电子游戏为载体,形成适合儿童认知心理特征的学习环境;构建“故事—规则—语句—作品”的编程学习流程,在游戏故事情景中学会“抽象”游戏规则,学会用形式化的方式“表达”规则,学会“构造”一系列可执行的计算机程序的语句,最后形成游戏作品,并在运行游戏作品的过程中体验自动化和人对计算机执行动作的操控。而这一过程是典型的计算思维形成过程。

最后,从“模仿—重复—运用—理解记忆—纠错”的语言学习一般过程中可以发现,模仿与重复,都是训练的有效手段,但只有摆脱机械的模仿与重复,才能通过理解得到深刻的感悟。软件工程中有一种程序开发方法,称为快速原型法,它首先构造一个功能简单的原型系统,然后通过对原型系统逐步求精,不断扩充完善得到最终的软件系统。在儿童编程教学中,也可以采用相似的方法,对一个学习项目逐渐地增加任务与要求,在从简单到复杂的演变过程中进行“理解记忆”与“纠错”,体验计算机执行程序的自动化属性,采用调试程序的方式阶梯性地验证增加的功能,从而加深对学习任务的理解。

结束语

对于儿童而言,我们有必要专门研究符合低龄段儿童编程学习的目标、内容与教学方法。计算机程序设计语言,从形式上看是一套系统化的记法,即用来描述和实现计算机过程的有规则的人工语言符号系统。程序设计语言是一种形式化的语言,它比自然语言和一般的人工语言具有更大的精确性与适应性。它作为人与计算机通讯的工具,必须能够抽象地描述客观世界的问题,并提供解决问题的步骤和方法的集合。当我们对程序设计语言这一学习对象有这样的认识时,当我们不再简单地认为学习编程的目标就是用程序设计语言解决实际问题时,儿童编程教育应该可以摆脱技术性、工程性以及实用性的困扰,走向思维教育,成为认识计算机世界的通道。endprint

猜你喜欢
程序设计编程学习者
基于OBE的Java程序设计个性化教学研究
在线学习环境下学习者画像构建研究
项目化教学在Python程序设计课程中的应用
C++程序设计课程教学改革研究
医学专业“Python程序设计”课程教学改革总结与思考
玩游戏学编程,Blockly Games上手玩
纺织机上诞生的编程
十二星座是什么类型的学习者
情感过滤假说在对外汉语教学中的应用
非正式学习环境下基于移动终端的学习者模型研究