• 收藏
  • 加入书签
添加成功
收藏成功
分享

Python编程课程开发与学生计算思维培养的教育实践研究

王新
  
墨轩媒体号
2025年224期
北京市海淀区红英小学

2022年,义务教育课程方案和课程标准中对计算思维的解读为:计算思维是指个体运用计算机科学领域的思想方法,在问题解决过程中涉及的抽象、分解、建模、算法设计等思维活动。具备计算思维的学生,能对问题进行抽象、分解、建模,并通过设计算法形成解决方案;能尝试模拟、仿真、验证解决问题的过程,反思、优化解决问题的方案,并将其迁移运用于解决其他问题。计算思维被认为是与工程思维、数学思维并列的一种认知世界的思维方式。

基于对新课标的理解,我校将四、五、六年级的教学内容在整体落实新课标的基础上结合Python编程语言进行了重新架构。我们将Python与新课标内容融合,一方面希望学生能够体验“提出问题-设计算法-实现算法-验证算法-改进算法-应用算法”的完整过程,另一方面也附带着交给学生一种世界通用语言,这不仅是赋予了他们一项技能、一套实现想法工具箱,也是赋予了他们一种思维方式,一种改变世界的可能。

我们将《Python代码编程》课程的总目标概述为以下几点:

1、编程的本质是解决问题,解决问题的方法是通过抽象、分析、建模和算法设计,教孩子一种用技术解决问题的思维方式——计算思维。

2、通过真正敲代码的编程体验,培养孩子精益求精的专注力和试错精神。

3、学习一门应用广泛的世界通用语言,赋予孩子改变世界的可能。

经过几年的教育实践,从课程到社团,从搜集教学内容到自己原创设计,从没有教材到自编学习手册,从知识技能传授到计算思维的培养,积累了一些一线教育经验,整理出来与大家分享。

一、编程的本质是解决问题

下面是一些网上查到的数据,这些数据是真的吗?简直太不可思议了。

一张A4纸的厚度大约0.1毫米

对折42次,厚度将大于地月之间的距离;

对折51次,厚度可以直达太阳表面;

对折103次,厚度将超过930亿光年,已经大于目前已知宇宙的直径了。

如何验证这些数据的真假呢?学生当然可以是使用乘法来计算,计算方法非常简单,只需要一个2列的记录表格,一列代表次数,一列代表结果,然后从0.1开始,不断乘以2即可。这并没有超出五年级学生的能力范围,但是想要靠人工计算完成,恐怕没有哪个学生可以做到。然而计算机跟我们人类相比却非常善于计算。但前提是找出计算的规律,找规律的过程就是找出事物抽象本质的过程,学生可以通过列表法找出计算规律:

0.1*2

0.1*2*2

0.1*2*2*2

0.1*2*2*2*2

……

学生很容易找出统一的计算方法:

0.1 * 对折次数次2

这个找规律的过程锻炼的是学生的逻辑思维,逻辑思维包括推理、对比、分析、判断等基本方法,这也是计算思维的基础。

A4纸对折42次用Python程序来计算只需要一行代码:

0.1*2**42

此处使用了Python中的连乘符号,把0.1连续乘以42个2。结果显示为:

439804651110.4

把单位毫米转换为千米约等于44万千米,可见a4只对折42次的厚度已经超过了地球到月球的距离38万千米。下面是A4纸对折程序在2课时之后达到的效果:

在这个主题中涉及到数学计算、单位转换、科学常识、指数爆炸等知识,先分析计算规律,然后总结出算法,最后用计算机指令快速解决问题,这就是计算思维的过程。在编程教学中,几乎每一个主题都会用到逻辑思维和计算思维,伴随着解决各种问题,这两种思维能力也会获得相应的成长。

二、计算思维的本质是抽象和自动化

未来的时代学生可以不会编程,但不能不具备信息意识。如果让我们总是循环往复的做同一件事,一定会觉得枯燥和乏味。但是,计算机不但不会觉得枯燥,还能做得又快又好。京东的智能仓库的智能分拣机器人效率是人工拣选的5~6倍,利用机器不知疲惫的特点可以把人们从重复的体力劳动中解脱出来。

计算思维的本质是抽象和自动化。把实际问题抽象为算法,然后把算法告诉计算机,让计算机自动化、高效、准确的解决问题。什么是抽象?什么是算法?如何实现自动化?这些问题需要在解决问题的过程中让孩子去感受,需要教师主动创设教学情境激发学生兴趣。比如,在学生研究完“A4纸对折”这一指数爆炸问题之后,教师给学生讲了下面的一个故事:“2000多年以前,古希腊的国王和阿基米德下棋,国王输了,他允许阿基米德提出一个要求,阿基米提出了下面的要求:在一张棋盘上按上图的规律摆米,只需摆满64个格子即可。听说国王把国家粮仓的所有米都用光了也不够用,到底需要多少米呢?”

这一问题是“A4纸对折”问题的拓展,不仅需要计算出每一个格子的米数,还要多米数进行求和。结合学习单引导学生用列表法找出每一个格子米数的计算方法:

格子1——1粒

格子2——1*2粒

格子3——1*2*2粒

格子4——1*2*2*2粒

……

第30个格子——把2连乘29次

第50个格子——把2连乘49次

通过找规律发现格子数与米数的关系,进而抽象出第n个格子的米数计算方法为:

2**(n-1)

用符号表示数据、用列表法总结规律,这就是抽象思维训练,抽象出事物背后的本质。通过以上算法,可以轻松计算出棋盘上所有格子需要摆放的米数。但是一个个计算很麻烦,第2到64个格子的米数需要计算63次。这就引出了自动化计算的实际需要。机器实现自动化的方式就是找到算法,然后跟计算机表达出人类的需要,人工智能时代需要教会孩子如何向计算机表达诉求。具体来说,教师应该引导学生提出这样的需求:

“让n在2到64之间变化,每次变化都自动计算一次——2**(n-1)”

此时学生已经通过抽象和自动化需求把问题理解透彻,剩下的只是编程工具的学习,并借助循环结构实现自己的想法,把63行代码缩减为2行。

for n in range(2,65):

print( 2**(n-1))

运行仅仅2行程序,就可以让计算机自动计算并输出每一个格子的米数,这一切是多么的不可思议,而今天的小学生的确有能力完成这样的程序。在整个计算思维培养的过程中,抽象、找规律、用明确具体的语言表达诉求(设计算法)是核心,编程只是实现算法的工具,使用这一工具的前提是充分理解问题、抽象出问题的本质、分解出解决问题的步骤,最终实现解放人力、自动化解决问题的目标。

三、学科融合:每一个主题都是一个跨学科的PBL项目

学习的目的不是掌握而是运用,编程的本质是解决问题。对于编程中的每一个要解决的问题,都可以理解为一个PBL项目。每一个项目都是基于实际问题的、跨学科的研究主题。比如:绘制五星红旗、探究微信抢红包背后的算法、疫情传播模拟程序……主题往往涉及到道法、美术、数学、科学、信息等多种学科知识,老师在讲授基本的知识后抛出一个问题,学生通过自主探究找出事物的规律并设计解决问题的算法,然后自己去敲代码测试,错误几乎是必然的,但是在编程中出错并没有任何损失,反而可以锻炼孩子的受挫能力。通过错误提示,找出问题所在,之后可能会发现又出现了其他问题,就这样一点点进行调试。就像PBL项目中设计产品、制作产品、测试产品、改进产品的迭代过程一样,当最终通过自己的努力将所有问题解决并成功运行程序的时候,孩子的成就感也被彻底的点燃,这种感觉是无与伦比的。

下面是绘制国旗的项目案例,本案例综合运用和培养了学生多方面的知识和能力。

道法部分:作为一个中国人首先应该对五星红旗有清晰的认识。五星红旗的长与高为三与二之比,国旗的红色象征革命。旗上的五颗五角星及其相互关系象征共产党领导下的革命人民大团结。五角星用黄色是为了在红地上显出光明,四颗小五角星各有一尖正对着大星的中心点,表示围绕着一个中心而团结。

数学部分:学生从绘制一颗五角星开始慢慢完成国旗的绘制,此处教师会对五角星的半径、边长、角度等知识进行适当的讲解。如:五角星每个尖的角度都是36度,边长大约是半径的1.9倍。然后让学生首先在纸上绘制几个五角星,然后总结绘制方法:

重复执行5次:前进100——右转144

程序和算法部分:待学生总结出了五角星的绘制方法,教师可以提供给学生几条指令作为解决问题的工具:

绘制五角星的Python程序大概像下面这样:

fd(100)

right(144)

fd(100)

right(144)

fd(100)

right(144)

fd(100)

right(144)

fd(100)

right(144)

如果找到了绘制规律并利用for循环结构,则可以将程序简化为:

for i in range(5):

fd(100)

right(144)

绘制国旗是一个综合性问题,首先必须要知道国旗的尺寸,还要知道五颗五角星的位置、尺寸、角度。这就需要用到坐标、距离等数学知识。五年级孩子没有学过坐标,但是刚好学习了用数对确定位置,在这一阶段学习此案例,运用数对解决问题,加深了他们对数学知识的理解,当学生发现自己平时学到的知识可以得到运用的时候,就是他们爱上学习的时候。

绘制国旗看似简单,但在实际操作的过程中会遇到各种意想不到的问题。不过这正是育人所需要的,程序报错往往只是需要花一些时间找到错误并修正,除此之外没有任何损失。学生在此项目中可能出现各种问题,不过他们总会乐此不疲,并不希望老师打断他们的探索过程进行讲解,他们希望自己解决。一个人对待失败的态度往往决定了他是否能取得成功。不怕出错、敢于试错、习惯出错、坚持不放弃,代码编程“调试——出错——找出原因——改进程序”直至成功的迭代过程非常有利于培养学生的成长型思维。

四、关于计算思维的量化评价

在小学开设Python代码编程作为一个探索性的尝试,其效果到底如何?计算思维作为核心培养目标,如何进行量化评价?作为一种思维方式,想要进行科学的量化难度很大。我结合《成长型思维》一书的启发,设计了代表思维成长的神经元卡片,不同卡片上有不同的神经元积分,根据学生的课堂表现发放,学生可以通过完成任务、帮助别人、挑战悬赏任务等方式获得神经元奖励,以此作为过程性评价的主要手段。

随着课程的推进,基于对新课标的理解,我校将四、五、六年级的教学内容在整体落实新课标的基础上结合Python编程语言进行了重新架构。设计了四至六年级信息科技学习手册,希望学生能够体验到“提出问题——设计算法——实现算法——验证和改进算法——应用算法”的完整过程。学习手册主要包括问题的分析、用符号表示数据、将问题进行分解、找规律、数据建模、绘制流程图等,学习手册成为学生的学习助手,留下了孩子的思维痕迹。

为了配合自主开发的教学内容,我校特别研发了“红英编程作业管理平台”,教师可以通过“红英编程作业管理平台”发布包含基础代码的作业,学生可以通过探究式学习完成作业并获得积分,还可以通过加入自己的创意获得额外积分奖励。有些作业只需要学生能够在读懂代码的前提下调整参数并对算法的效果进行测试。平台不仅减少了代码输入、方便了学生聚焦算法进行研究,同时具有积分排行榜和奖品兑换功能,大大提升了学生的学习体验和学习动力。

红英编程平台“学生操作界面”

通过几年的教学实践,我大致将计算思维的培养总结概括为一下几个阶段:

提出问题——根据实际生活提出问题。

数学建模——分析问题,提炼出问题中的数学概念,用符号表示数据。

算法设计——把一个大问题分解为具体的、明确的、可执行的步骤。

算法实现——用程序实现算法设计的每一步。

迭代迁移——完善算法、将算法迁移用于解决同类问题。

学生应该在学习过程中感受到:数学是基础、算法是思想、编程是工具。人的目标是通过抽象和算法设计实现自动化。在宏观理解的基础上,教师在培养学生计算思维培养的过程需要为学生不断更新、迭代学习内容,设计学习单、开发学习平台、完善评价方式,为学生搭建思维的脚手架。每个孩子都是与众不同的,有的擅长音乐、有的擅长美术、有的擅长演讲、有的擅长研究。我相信随着编程课程的不断完善,每个孩子的思维都能得到发展。如果能够发现并发扬一些孩子的兴趣特长,让他们成为对国家有用的人才或者成就他们的幸福人生,我想这就是教育的意义。

*本文暂不支持打印功能

monitor