“怎么培养数学逻辑思维?来点编程试试?”大概这是很多人的既有认知,毕竟感觉程序员们的数学都挺好的。
巴特,反转来了。来自巴黎大学的研究人员发现,小学生改用编程课学数学后,对成绩不仅没有明显帮助,甚至会产生一些负面影响。
在欧几里得除法、加法分解、分数运算几个方面,影响范围为-0.16 ~ -0.21(值为负数即代表表现不如标准组)。而且编程软件的可视化界面,还影响了孩子的注意力集中能力。
没错,这里说的就是风靡少儿编程圈的 Scratch,它最大的特点就是通过动画涂鸦的表现方式,让小孩子喜欢上编程。
△ 图源百度百科
要知道,很多家长给小孩报编程课就是为了提高数学成绩…… 怎么现在反倒成绊脚石了?
其实这事儿的关键就是,小孩子们到底能不能把从编程里学到的逻辑思维,转化到数学方面。按照学习迁移的思路,通常认为计算机思维和技能是能够轻松转移到其他领域的。尤其在解决问题这方面,编程和数学被认为密切相关。
话虽如此,一直以来却没什么有力的研究证明。
为了搞清两者之间的关系,2017 年 10 月到 2018 年 2 月,大概 4 个月的时间里,研究团队招募了四、五年级共 2472 名学生进行实验。这些学生年龄在 9-11 岁之间,来自 46 所学校的 107 个班级。
以学校为单位,学生随机分配到两个组别:编程组(28 所学校,68 个班级,1519 人)和对照组(18 所学校,41 个班级,953 人)。简述一下实验方法,就是让两组小孩分别上编程数学课和普通数学课,然后对比期末成绩。
教学内容涉及三个部分,分别是欧几里得除法、加法分解和分数。以欧几里得除法为例,所有小孩都需要在数学写作中构造一个方程,如 a = b*q + r。小孩们花了同样的时间来理解新的数学概念。看看教学实践的具体操作。
假设有这样一道题目:
把 23cm 的丝带切割,分成几个 5cm 的丝带段和一个 3cm 的丝带段。
编程组的小孩需要构建一种算法,使用指定长度(这里是 5)的几个跳转和一个较短的(这里是 3)通配符跳转,移动数字条上的光标,以达到目标。
△ 编程组的练习截图
对照组的小孩则采取传统方法,用剪刀把丝带剪成几个部分,然后写成代数公式:23 = (4*5) + 3。介绍一下,编程组小孩用的是 Scratch 图形化编程。
Scratch 是 MIT“终身幼儿园团队”在 2007 年发布的一种图形化编程工具。使用者可以不会英语,也可以不会键盘,只要玩一个类似搭积木的动画游戏,就能避开复杂语法来学习编程思维。作为少儿编程入门课程,国内少儿编程班用的基本都是它。
回到实验本身,在入学前、三个教学内容前后这七个时间点,两组学生进行了数学测验。测验内容大体分为三年级水平的数学知识、计算和解决问题的能力这三个知识点,旨在衡量相同技能。
每次测验都会产生一个全局分数,并被居中和降低,以便比较不同概念的效果大小,如此一来,得到了三次测验后的是三个因变量。由于学生属于各个班级,因此采用了多级模型统计方法,它可以将因变量归因于正确的水平。
模型规范过程包含四个步骤:
1、对空模型的每个概念进行估计,以估计类内方差和类间方差;
2、添加 1 级变量(学生特征);
3、添加 2 级变量(类别特征);
4、添加实验变量(编程与传统方法)。
为了拟合解释每个知识点最终表现的简约模型,模型中删除了非显著变量。模型中涉及变量的描述性统计如下。
△ 欧几里得除法的描述性统计
△ 加法分解的描述性统计
△ 分数的描述性统计
研究结果显示,每个知识点的前测得分对最终成绩有显著的正向影响;入学分数对最终成绩也有积极而显著的影响,但这个效应小于前测效应。
而相比上普通数学课的小孩,上编程数学课的小孩影响都是负数:编程思维对最终性能的平均影响为−0.16 SD(欧几里得除法)、−0.19 SD(加性分解)和−0.21 SD(分数)。也就是说,对比对照组,编程组的学生进步更小。
尽管这些效应量在大型随机试验的预期范围内,但效应量位于数学学习随机试验分布的下尾。
研究人员认为,这些负面影响表示出,即使在老师指导水平不赖、且拥有“近迁移”假设的最佳条件下,从编程思维到数学思维的学习迁移并不能自发进行。
实际上,如果从大脑活动角度来看,编程和解决数学逻辑问题时,激活的范围也并不相同。此前研究表明,人类大脑在处理数学逻辑问题时,主要依赖于左脑的多需求(multiple demand,MD)网络的分布式网络。
但是在 MIT 神经科学家发现,当人在读代码(Python)时,似乎同时激活了 MD 网络的左右两个部分。并且,读 Scratch 可视化代码(ScratchJr)时,对右侧大脑的激活程度略高于左侧大脑。也就是说,读代码和处理数学逻辑问题时的大脑活动并不相同。
有网友看了最近的这项研究也表示,这次实验之所以会得出一个出乎意料的结论,关键点或许不在编程上,而是 Scratch 到底适不适合小孩拿来学数学。
还有人提到,编程更像是结合逻辑、推理等方面的学科,而不是数学。
如果一定要把数学和编程联系在一起,可能大家更认可的是数学对编程的影响。
有位网友就想到了自己的辛酸史 —— 他因为没有拿到加拿大大学要求的数学成绩,没法攻读计算机学位(好在最后他还是从事了软件开发)。
(在加拿大等国家和地区,大多数大学级别 CS 课程的录取都要求了较高的数学成绩,整个专业也会偏爱对数学有高度热情的同学。)
但不可否认的是,的确有很多人在学了编程后,数学物理都有提升。
只能说编程肯定能帮助小孩学到一些技能,但会不会像一些机构吹得那么神乎其神、宛若是学数学的捷径,这事儿还有待验证。
本篇论文的一作及通讯作者为 Manon Laurent。她现在是巴黎大学社会系的博士。此前曾在南京大学、康考迪亚大学、巴黎大学有过任教经验。研究的兴趣领域为中国城市社会关系。
话说,你学编程后,数学成绩有提高嘛?
参考链接:
[1]https://www.sciencedirect.com/science/article/abs/pii/S0959475222000883#!
[2]https://www.publicbooks.org/author/manon-laurent/
[3]https://news.ycombinator.com/item?id=32728636
[4]https://www.cessma.org/LAURENT-Manon