教室里,老师正领着学生们做“西蒙说”游戏——

老师与学生们面对面站立,每个学生都全神贯注地等待着老师的指令。“西蒙说,7 !”听到指令后,学生们迅速地坐到了地上。“西蒙说,12 !”接到下一条指令后,学生们又立刻将手放到了头上。因为根据教师的规定,当“西蒙说”后面的数字为奇数时,学生要立刻坐在地上;当“西蒙说”后面的数字为偶数且该数字大于10 时,学生则要将手放在头上;如果两者都不符合,学生则保持原状不动。如果哪个学生听到指令后做了错误动作,他就要出局。随着教师的语速越来越快,出局的学生越来越多,坚持到最后的一到两名学生将赢得这场游戏。

看到这里,你可能在想,这大概是一节教学生判断奇偶数的数学课。但事实上,这却是芬兰的一节教学生体会“IF 语句”的计算机编程课。

这只是芬兰编程课的一个片段,让我们来看看芬兰思维下的编程课是如何进行的!

(以下内容选自《上海教育-环球教育时讯》2017年7月刊,更多内容,请参见杂志)

没有电脑的芬兰编程课

文 | 浙江大学教育学院 李璨 屠莉娅

从技术到思想
芬兰思维下的电脑编程课程
编程课不用电脑?因为芬兰教师将编程当做一种思想来教-雅涵

电脑编程在信息化的今天已经成为学校课程中不可或缺的部分,而将技术教育作为国家目标之一的芬兰,更是高度重视对学生的编程教育。

大部分人常识中的编程课依旧是一门传统的计算机技术课程,学生要通过编程课程了解程序设计的基本概念,掌握程序设计中的基本技巧和常用算法,建立起程序设计的基本思路,以最终通过计算机程序设计语言来控制计算机完成某种特定的任务。但对走在教育改革和创新前沿的芬兰来说,编程课程要达到的教学效果远不止这些。

关注学生的可持续性发展和重视学校学习联系生活实际是芬兰教学最显著的两个特点。芬兰相信,学习的目的除了掌握知识本身,更要让学生能够主动地思考和灵活地运用知识以解决更多实际的问题和更好地应对未来多变的生活。受这样的教育理念的影响,芬兰认为编程课程要做的绝不仅仅是对学生的技术训练,学校更应该关注如何让学生理解和掌握编程背后的思想。因为如果将编程学习仅当做一门技术来学习,那学生最终获得的就将是使用计算机的能力;但如果将编程学习看做是计算机编程思想的学习,那学生所获得的就将是计算机编程的本质原理和可迁移的思维方式,而这种思维方式也将能够被用来开展更多的研究和解决生活中更为复杂的问题。例如,计算机编程的过程实际是通过抽象和分解来完成复杂任务的过程,传统的以技术学习为目标的编程课更关注的可能是具体的语句编写、程序调试和最终的运行结果。

但如果将编程看做是一种思想来学习,那除了基本的程序设计,教学还应该关注编程过程中给学生带来的思维方式的启示。如何将复杂而庞大的问题系统分解为一个个具体的问题单元,如何用合适的方式来阐释和归纳同类型的问题,如何选择恰当的方法对问题进行转换以使其更易处理等,都是编程课应当关注的内容。

如此一来,学生除了学习到了具体的编程技术,更培养了化整为零的思维习惯。这种习惯一旦养成,受益的将不仅仅是编程学习,其能够为学生生活的各个方面带来积极的影响。因此,芬兰希望学校的编程教育要能够做到:教授相关编程知识的同时,有意识地对编程思想进行解释,构建其与学生生活之间的各种联系,让学生体验到科技与生活是息息相关的,实现用编程和代码来激发学生各方面的学习兴趣。

创想无极限
没有电脑的编程课

一提到学习编程,多数人脑中出现的画面一定是学生一边听老师的讲解,一边敲击键盘进行练习的画面。但学习编程真的要用到电脑吗?我们不妨先看看芬兰的教师们是如何做的。

 

案例一

人体B-Box

这是一节学习循环结构的编程课。循环结构是对某一算法的重复执行,其大大减少了相同语句重复书写的工作量,是最能发挥计算机设计特长的程序结构之一。很多看似复杂的程序设计,实则都是由一个个循环运行的循环体构成的。

就如同现实生活中很多看似复杂的大工程,其实也都是由各个小工作任务按照不同的方式循环而成的,B-Box 音乐就是一个典型的例子。

B-Box 是口技的一种形式,人们利用唇、齿、舌等不同的部位模仿出不同乐器的声音,再按照一定规律对不同的声音元素进行重复和叠加以汇编成一段富有节奏感的音乐。得益于B-Box 和循环结构所体现出的相似的工作原理,教师设计了这样一个人体B-Box游戏来帮助学生更好地领会循环思想——

如下图所示,教师先对学生进行分组,每组学生负责演奏一种声音,如第一组学生负责拍手,第二组学生负责用嘴发出“哔哔”声,第三组同学负责用嘴发出“嘣嘣”声等。而后为每组学生设计一个演奏图式,并给出图式的循环次数和开始下一个动作循环的指令。

编程课不用电脑?因为芬兰教师将编程当做一种思想来教-雅涵

根据上图的要求,整个演奏从负责拍手的小组开始,并在拍手小组完成一个循环体后,负责发出“哔哔”声的第二小组加入进来;第二小组完成一个循环体后,负责发出“嘣嘣”声的第三小组再加入进来,从而实现不同声音的叠加和重复,形成了一段完整的B-Box 音乐。

在熟悉了游戏规则后,学生可以自己添加其他的平行循环或嵌套循环,或是改变各组的演奏图式和循环方式,创作出自己喜欢的音乐。

案例二

机器人操场

“IF 语句”是计算机编程中最常用的判断语句之一,其要按照给定的判断要求,根据判断结果的真假来执行对应的操作步骤。“IF 语句”对学生的逻辑思维能力提出了较高的要求,如何用简洁明了的判断条件及其对应的操作步骤来代替重复而烦琐的单个执行语句是学生在学习“IF 语句”的过程中要重点掌握的内容。

在这节课的教学过程中,芬兰教师带领学生做了个名为“机器人操场”的游戏——

教师将学生分为两组,一组学生扮演机器人,另一组学生扮演机器人的操控者,帮助机器人越过各个障碍物。

首先,教师带领学生来到空旷的操场,并让学生共同完成对障碍训练场的布置。他们可以利用如下图所示的直观的引导符号,也可以利用学校里的桌椅板凳等设施来布置供“机器人”穿越的障碍训练场。各个障碍物布置好以后,学生分成两组,一组学生扮演机器人,一组学生扮演机器人的操控者。其中扮演机器人的学生要将眼睛蒙起来,这样他们就真的像机器人一样——缺乏操控者的指令就无法行动。

编程课不用电脑?因为芬兰教师将编程当做一种思想来教-雅涵

“机器人操场”引导符号

与一般的游戏不同,该游戏中教师要求学生用简短的“IF 语句”来代替繁杂而重复的独立语句。例如,一般情况下操控者可能会对机器人说:“先前走两步,而后从板凳上爬过去,再前走三步,接着从桌子下面钻过去。”但在这个游戏里,教师要求学生用这样的“IF 语句”向机器人发出指令:“接下来你要面对六个障碍物,在碰到下一个障碍物之前你先保持直走,如果那个障碍物很高,你就从它下面钻过去;如果比较矮,你就从它上面爬过去。”

在这两个教学案例中,学生所看到的、学到的不仅仅是“Do…”或“IF…Else…”等直白的计算机语句和编程技术,他们更理解了如何在解决具体问题的过程中使用循环思想和条件判断来对问题进行加工和处理。

第一个案例中,学生最后要共同创作出一段B-Box 音乐。一段音乐里有不用的乐器和音节的排列组合和重复,看似是个十分复杂的工程。但通过最开始教师指导下的“循环程序”的演示,学生知道再复杂的任务也是由一个个部分组成。要形成完整的音乐,就要先找到音乐里所包含的各个元素和片段,而后对这些小的部分进行重复和循环设计,便能形成最后的完整的乐章。

第二个案例中,学生被要求用尽量简短的“IF 语句”来发号施令,这使得学生不仅仅学到了“IF 语句”的一般用法,更从走一步、看一步、做一步的短视性思维转换为从整体出发的全局性思考,无形中锻炼了学生的逻辑思维能力。

值得一提的是,芬兰教师并不反对在编程教学中使用计算机。在学生掌握了编程背后的思想之后,芬兰教师也会让学生在电脑上进行相关程序的编写练习。他们只是强调,不要让计算机限制了编程学习的范围。除了常规的编程技术的学习,编程过程中所体现出的各种思维方式和解决问题的方法也是教学过程中应当关注的内容。

“学编程真的要用到电脑吗?”到这里,这个问题的答案已经显而易见了:如果将计算机编程看做是门单独的技能学科,那么计算机编程当然得有电脑才能学习。如果认为学习计算机编程更为重要的是理解其背后的概念,理解计算机与生活的关系,理解计算机与人的思维方式的区别,那么就要先在生活中理解和体会计算的本质,然后再去用像计算机这样的工具来实现计算目标,这样才算是达到了学习目标。

打破课程的窠臼
发现学习的乐趣

芬兰的教学注重创新、注重学生兴趣

与传统的计算机编程课相比,这种没有电脑的编程课因不受授课形式的约束而大大增添了学生学习的趣味性。游戏化课程是芬兰编程课的最常见形式,在游戏的过程中,学生全身心投入。一个个精心设计的与学习目标相关的游戏任务,除了让学生在轻松的氛围中自然而然地学习和体会到编程背后的本质思想之外,还充分调动起了学生的脑力、创造力和动手能力。这种寓教于乐的教学方式,在增强学生的学习参与度的同时,让学生收获了愉快的学习体验,从而让学生更加积极地投入到学习过程中来。

除了增强课程本身的趣味性外,让学生发现学习与其自身的联系和意义,也是帮助学生发现学习乐趣、提高学习积极性的重要方式。曾在美国波士顿公立学校工作过的亚冉• 明茨在哈佛大学教育研究生院攻读博士学位时,对美国26 个州共110 所中学的81,499 名学生进行了调查,她发现,大约三分之二的在校学生有厌学的情绪。为什么会这样呢?最主要的原因是学习材料枯燥无味,缺乏针对性,挑战性也不强。有的学生说:“学校学习很乏味,大家昏昏欲睡,一点都提不起劲来。”更有60% 的学生说:“我不知道课堂上学习这些东西有什么用。”

同样地,如果只将编程作为一门技术来学习,多数在校学生,尤其是低年级的学生,仍然难以理解学习编程于其自身的意义所在。这时学习就会变成一种机械的、被动的行为,一旦脱离了学校的环境和教师的指导,学生将不再想要学习,甚至对学习感到无从下手。这种学习与芬兰所追求的可持续性的学习显然是相悖的。

因此,芬兰的编程课程关注程序背后的原理,将编程学习与学生的实际生活联系起来。原本孤立而深奥的编程语句,因为一个个与学生相关并让学生真实参与进来的活动而变得亲切又充满生气。此时的编程课程或许依旧神秘,但是对学生而言它已经充满吸引力,因为学生开始理解编程背后的原理和依据了,学习编程已经变成一项有趣而有意义的事情。正如最初开发Linux 系统的芬兰人林纳斯• 托瓦兹所说:“程序就像是一种魔法,由你来开发程序以告诉计算机要做什么。如果你要理解的是编程的本质,那学校的编程教育就将会是一件有趣的事,而不再是一件因为大家都要学所以我也必须要学的事情。”