高中编程教育中的模拟实验项目的教学设计方法
周南
使用编程模拟物理实验,可以帮助学生更方便地理论联系实际,加深对概念或原理的理解,培养创新思维和探索能力,突出编程在计算思维与数字化学习与创新学科核心素养中的双重意义。尤其对部分地区来说,利用编程模拟能较好地解决因课时少、器材缺、教师技能欠缺等导致的实验教学不充分的问题,为进行真实物理实验打好基础,加深理解。下面,笔者以《打点计时器》为例探讨用编程模拟物理实验的项目学习设计。
项目设计背景
本节课的教学目标是学会使用计数循环结构程序解决问题的方法。通过尝试结合物理实验《打点计时器》进行项目学习,模拟重复打点,形成纸带效果,学生在实践中不仅能掌握计数循环,而且会加深对打点计时器工作原理及运动现象的探究。本节课的程序学习可采用半成品加工的方式,突出核心问题,帮助学生获得学习的成就感,激发学习兴趣。
项目实施过程
在学习本课时,物理学科正好在同步讲解打点计时器,学生了解打点计时器的结构及工作原理,课堂引入时可以根据情况进行简单温故。
模拟实验1:模拟匀速直线运动打点
已知物体处于匀速直线运动状态,运动速度为0.3m/s,采用打点计时器记录物体运动0.4秒,模拟纸带效果(如屏幕分辨率为1024×768,那么1毫米约等于3.78像素)。
为了更好地帮助学生理解实验中物体的运动过程,使用表1,要求学生在完成填空的基础上,再将教师提供的Python半成品程序代码补充完整(如图1),运行观察、记录纸带效果。
参考答案:①v*tm*1000*3.78;②sx;③tm
图1中,前进的位移需要根据已知量将其换算成像素。从图1可以看出,此时算法采用顺序结构,学生在该程序中学习海龟画图实现点绘制的过程,为下面的循环结构打下基础。
模拟实验2:模拟大量自动打点
探究如何优化模拟实验1的算法,模拟输出使用打点计时器记录物体运动1秒的纸带效果(如图2)。
参考答案:①v*tm*1000*
3.78;②i in range(50)(说明:此处循环变量i也可用其他变量表示);③sx;④tm
通过模拟实验2,从顺序结构过渡到循环结构,可以让学生更好地理解循环结构的作用,使用循环语句简化算法,提高效率,同时,该程序可以帮助学生理解循环体语句、循环变量和循环次数各自的含义,学习for语句的基本格式和列表的range函数表达,为模拟物体的匀加速直线运动奠定基础。
模拟实验3:模拟匀加速直线运动打点
已知物体处于匀加速直线运动状态,运动初速度为0.05m/s,加速度为1m/s2,采用打点计时器记录物体运动1秒,模拟纸带效果(如图3)(如屏幕分辨率为1024×768,那么1毫米约等于3.78像素)。
在模拟实验3中,需要将之前所学的知识综合运用,利用位移计算,制作匀加直线运动的打点效果。本实验难点是学生对变量中值的变化和算法中递推思想的理解,可以通过对其他案例如累加等进行讲解并迁移,达到教学目的。
参考答案:①i in range(2,51);②(v0*t+(a*t**2)/2)*1000*3.78;③(v0*t+(a*t**2)/2)*1000*3.78;④sb-sq;⑤sy
项目拓展
通过模拟实验,可以利用打上点的纸带研究物体的运动情况,进一步体验测量平均速度和瞬时速度,回归实验本身的意义,布置项目拓展。以屏幕上的第一个点为计时零点,用平均速度代替瞬时速度的方法,粗略地算出每点的速度,填入表2中。同时,课后请将表2中的瞬时速度在v-t图中描点连线,画出v-t图像,以达到实验目的。
项目交流
实验是搜集科学事实、获得感性材料的基本方法,同时也是检验科学假说、形成科学理论的实践基础。在科学实验中使用仪器,能使获得的资料更丰富、更精确,且能排除次要因素的干扰,更快揭示出研究對象的本质。实验结束后,学生对实验中获得的数据做进一步加工、整理,可以从中提取出科学事实或某种规律性的理论。本项目通过使用程序对实验进行模拟,可以排除真实实验中误差对实验结果的干扰,同时,引导学生采用逆向思维,深刻体会程序在情境中的运用方法,发展计算思维,促进对编程的深度学习。
苍山点题
编程教育与其他信息技术教育一样,有丰富多彩的教学故事可以采用,有奇妙精彩的学科选题可以使用。但是,我们在追求内容新鲜、生动、丰富的同时,一定不要忘记在教学设计中注重对学法的策略研究,方法研究只有更针对学生的知识储备、思维特点等具体情况,才能更有利于教学的顺利实施,也才能更好地培养学生的技能与思维。
第一篇文章,作者从小学生的认知特点出发进行教学设计,注重了行动比思维先行一步,让思维顺其自然地产生,通过动起来、说出来、做起来,充分调动行为动作和语言描述等综合能力的配合,在祝愿卡的制作活动中打破单调的输出语句学习,让学生尽情说出自己的心愿并通过心愿卡进行展示及与父母交流,在愉快的行动中学习编程,进而通过对心愿卡的优化设计,增加互动功能,体验人机交互的程序设计,顺其自然地对输入语句进行深入探索。在分支程序方面,也通过拯救小动物的情境游戏,在行动中体验事物判断的意义,逐步迁移到分支结构程序的应用。这些行动,降低了算法与程序的理解难度,让学生的身心共同参与学习,从而培育了多元的智慧。
第二篇文章,作者从高中的学科学习需求出发进行设计,体现了编程在学科融合学习中在数字化与创新这一学科核心素养中的价值,并深化了计算思维的培育。在编程学习方面,通过最简单的图形——点的绘制,让分辨率与实际位移相结合,从顺序程序借助头脑风暴过渡到循环程序的设计,一步步越来越自动化地绘制纸带上的点;在物理实验学习方面,从匀速运行的模拟观察开始,到加速运动的模拟实验的观察与分析,注重了对直观现象与抽象数据的配合设计,对编程学习的流程、意义与方法都是一种良好的尝试,在算法的理解与编程技术的掌握上对学生大有裨益。
也许,不少老师会质疑:为什么编程教学要在主题内容、学习方式上玩这么多花样,而不是扎实地进行计算机语言的学习与编程实例的训练?这仍然是对教育理念与教学方法的争议问题,并不只是编程教学面临的分歧,是软件教学还是技术教学,是信息素养目标还是计算思维目标,甚至只是纯粹的编程体系知识的目标,这都值得我们继续探索、比较和反思,也期待大家的更多观点。