陈前永 章伟
摘 要:本文探讨在小学开展程序设计语言Python教学的紧迫性和必要性,提出教学的前趋课程、核心课程和拓展课程设计,通过案例说明小学阶段开展Python编程语言教学的实施路径和策略。
关键词:Python;Scratch;可视化;计算思维
中图分类号:G434 文献标志码:A 文章编号:2096-0069(2019)02-0082-05
收稿日期:2018-10-24
基金项目:广东省深圳市2017年度教育科学重点规划课题“在中小学开展‘人工智能’教育实践研究”(zdfz17020)
作者简介:陈前永(1964— ),男,陕西汉阴人,深圳市罗湖区信息技术教研员,主要研究方向为中小学信息技术教育、中小学创客教育;章伟(1982— ),男,安徽安庆人,深圳市螺岭外国语实验学校信息技术教师,主要研究方向为创客教育和教育信息化。
为应对人工智能未来可能给社会发展带来的影响和变化,需要在中小学阶段设置适应信息时代、智能时代发展需要的人工智能相关课程,逐步推广编程教育。在中小学开展编程语言教学,首先是教育对时代变革的呼应。在信息时代,学生更需要掌握一种简约的编程语言,将脑海中的创意通过编程语言快速、轻松地实现。而Python语言是目前公认的较好的编程语言,它能将大量烦琐的编程任务用库函数的形式封装起来,用它编写程序简单、易读、篇幅小,具有容易学习上手的特点。虽然程序语言简洁但是可以完成很多复杂的任务,轻松解决科学计算、大数据分析、机器学习等复杂问题。
一、 Python编程语言教学概述
Python使用函数、对象、模块和库来扩展语言,不仅能让学生通过指令不断和计算机交流,把主要精力用在算法思维和程序的逻辑结构上,还能在编程过程中用接近自然语言的方式来让代码达意、可读、简洁精确。例如,要绘制图1,利用Python语言只需几条简单语句:
import turtle as t #导入内部绘图函数库turtle,并且给库一个别称t,别称主要是为了书写简便,程序中t完全可以用turtle代替t.color('red')#设置画笔颜色为红色for x in range(36)#循环36次,x代表循环次数t.forward(200)#画图海龟向前移动200步t.left(170)#画图海龟转向170度
Python语言教学能更好地发展学生的核心素养。在利用Python语言进行项目式编程的任务过程中,为解决不断出现的问题,学生必须在查阅书籍、网络搜索的基础上,通过自主探究、同伴协作来纠正错误,并最终解决程序中存在的问题。在问题解决的过程中还会涉及英语阅读、数学、几何等方面的知识,这是学生在成长过程中必须学会的知识和技能。
Python语言语法简洁清晰、结构简单、关键字少,阅读一个符合规范的Python程序就感觉像在读英语一样。这就使得小学生在编程过程中无须关注太多语法细节和计算机底层知识,而更多地专注于应用计算机解决问题的思路和方法,降低了学习的门槛,有着极佳的成就感体验。
在中小学开展Python语言教学可以让学生在用计算机编程解决问题的过程中,学会分析提取问题的关键,理解解决问题的方案和步骤,然后编写代码,并通过调试修改达到预期结果,也就是培养计算思维和解决问题的能力。同时在以问题驱动为导向的Python语言教学过程中,學生能够将所学到的编程知识和大脑记忆中的真实任务情境联系起来,有利于学生去理解生活中常见的自动化工具的工作逻辑、工作原理。比如停车场车牌自动识别系统,所涉及的知识点是计算机视觉、机器学习,在Python中主要通过调用OpenCV库来实现。教师将课堂上学生学习的Python知识与实际生活结合,让其感觉到计算机解决实际问题的作用,帮助其建立学习自信,激发其进一步学习的欲望,让Python成为部分学生施展个性的舞台。
二、Python编程语言教学的策略和过程
2012年修订的《基础教育信息技术课程标准》指出,在小学课程模块“算法与程序设计入门”中要以程序为基础,以算法为核心,不以代码编写训练为目的,而以程序设计方法和算法思想的体验为宗旨。
我们在小学三年级开设的程序设计课程中,选取Code.org在线编程提供的丰富资源作为学生入门编程课。由于Code.org在线编程不需要编写任何代码,也不需要理解那些复杂的概念,学生只要理解完成一个任务的逻辑,就可以通过拖拽方块方式完成程序的编写,因而易于培养兴趣,易于理解程序设计的思想。这种直观的图形化拖拽方式编程摒弃了代码,以接近自然语言的方式表达程序设计,并进行直观验证受到学生的欢迎[1]。学生通过Code.org在线编程课程的学习,初步理解了程序的逻辑结构,有了这个基础,学生再学习Scratch图形编程就变得非常自然,为Scratch图形编程教学奠定了基础。
在教学实践中我们体会到,在小学高年级段,学生的数理逻辑已经逐步形成,如果仅仅讲授Scratch图形编程会存在一些问题,主要表现在:(1)Scratch图形编程功能有限,其主要用于编写一些交互性的游戏程序,更为复杂一些的计算则难以实现,如一些复杂图形的绘制、数据统计、文本处理等。(2)编程思维的训练方面,学生在用Scratch解决某个问题时,常常过于关注细节,缺乏对一个问题的整体解决步骤的理解,缺乏整体观、大局观。(3)对于较复杂的程序,Scratch脚本就显得非常繁杂,非常不利于阅读理解。
为解决这些问题,我们选取Python语言作为小学高年级段的进阶编程语言,虽然Python并未使用图形化的编程,但其大量的内置函数将一些具体小任务的实现细节封装,使得学生可以把注意力集中到解决问题的逻辑上,写出的代码也便于阅读理解,从而更加符合高年级学生从形象思维过渡到抽象思维、数理思维的智力发展过程,有利于培养学生的计算思维及数字化学习能力。
由于Python语言提供了丰富的图形计算生态环境,借助自带的海龟绘图库及第三方库可以方便地实现图形绘制,因而它符合学生的思维发展过程,从Scratch教学到图形化手段的Python教学,承上启下,过渡自然流畅。加之计算结果的可视化,可以达到吸引学生学习程序设计的兴趣、引导学生建立学习自信及培养学生现代计算思维的目的[2]。
Python自带图形库Turtle是Python语言中一个很流行的绘制图像的函数库,是一个小学生学习高级语言编程的最佳载体。可以编写指令让一个想象的小乌龟在屏幕上来回移动,这个海龟带着一支笔,在一个横轴为x、纵轴为y的坐标系原点(0,0)位置开始,根据一组指令的控制来绘制线条。通过程序设计,能以各种很酷的模式移动海龟,不仅可以绘制出令人惊叹的图像,还能够在这个过程中让学生掌握Python的基本语言结构及基本的程序设计思想,如交互、选择、判断、顺序、循环等程序结构。
Python 3还可以集成Pygame Zero库,这是个便于使用Python编写2D游戏的库,能将Scratch中编写的小游戏用Python重现。实际教学中,可以以Pygame Zero为教学用库,以小学生熟悉的正多边形为基础构建教学资源,摒弃传统的章节知识点教学模式,将相关的数据类型、运算操作符、变量、输入、循环、嵌套、图形界面、函数等知识点渗透到每章节的项目任务中。选取的任务要由易到难,在教学过程中采用案例教学法(即课堂以案例开头),逐步增加问题的变量和条件,引入新的程序设计语法要素,逐步增加程序的复杂度[3],循序渐进地引导学生不断扩展解决问题的思路。
我们构建了如图2所示的16课时校本教材结构,以海龟图形库为教学主体贯穿整个学期,在每个章节的任务教学中渗透知识点的教学,以项目式小任务来驱动学生主动学习、协作学习。在这个过程中,教师通过指导发掘出共性问题进行重点讲解,把有限的课堂时间还给学生进行思考和实操,改变了以往枯燥的理论教学模式。
鉴于Python 3.7自带的集成开发环境IDLE界面相对于小学生来说并不友好,我们选择MU 开发环境,它支持中文界面并能直接验证,这就使得学生能够及时体验到成功的喜悦,非常适合初学者。
三、 Python编程语言教学案例
自带库海龟绘图是小学Python语言教学中常用的入门教学用库,在校本教材的第三课,我们常常用刚刚破壳的小海龟历经千难万险走进大海的故事来带领学生进入Python语言图形世界。
(一)教学情境
播放纪录片《海龟奇妙之旅》中小海龟从沙滩躲避海鸟、毒蛇等进入大海的片段,引出Python世界里也有一只小海龟,它必须绘制不同的图形闯关才能逐渐强大起来,最后遨游于Python世界,从而引出本课学习的内容——海龟绘图。
教学方法上采用案例教学法和任务驱动法,通过案例的示范让学生理解命令、使用命令,随后通过案例演化出普通任务,生成进阶任务,在任务驱动中鼓励学生模仿创作,遇到难点自主学习、协作学习,逐步拓展解决问题的思路和方法。
(二)引入新知
首先是教师示范并讲解基础命令:在MU编辑器中输入“import turtle as t”,继续输入命令“t.forward(100)”,执行后可以看到一只海龟从一个XY坐标系(画布)(0,0)开始在屏幕上向右移动并画下一段长100像素的线段,在输入“turtle.left(90)”后海龜原地向左旋转了90度,如果继续重复输入这两个命令,就能绘制出一个边长为100像素的正方形。随后给出课堂小任务,请学生在老师示范的基础上结合已有的数学知识尝试绘制三角形、五角星。
从这个入门范例及基础任务中可以看出,Python是以接近自然语言的方式编程,将类似的命令进行组合,只要有一定的英语基础,小学生就可以很轻松地绘制复杂的图形,运用新知完成熟悉的简单任务,不仅增强了其学习自信心,还能为其接下来的学习做好积极的心理准备。
接着讲解如表1所示的turtle库基本绘图命令并张贴于黑板上以便学生参考使用。
(三)运用新知
发挥想象,先在学习单上绘制图形样式,然后参照表1在MU中新建程序文件,编写代码,实现复杂的图形设计,如“seth( )”可更改海龟方向,“goto( )”可至不同坐标绘制图形,“pencolor( )”可设置不同的笔画颜色等。自由创作能较好地适应学生的个性特点和能力差异,帮助其运用所学内容。在这部分的授课方式和课堂语言的组织上,重点突出对学生思维的诱导、指引并进行总结归纳,使学生从“我要做什么”向“我要怎么做”转变,最后做到“我还能这样做”[4]。
(四)交流展示
通过巡堂指导,根据学生完成的情况和课堂时间,挑选部分有代表性的作品如表2所示,鼓励学生主动分享作品,讲解创作思路和创作方法。通过作品展示、师生互评,不仅能够活跃课堂气氛,促进学生之间的交流与合作,而且更是学生自我反思和自我判断的过程,在思考、欣赏同学作品的过程中,对所学知识进行巩固。同时收集学生运用基础命令编程过程中遇到的难题和期望的更便捷的命令,如循环、多种颜色的使用、填充图形等,为下节课的开展做准备。
(五)新课预演
根据课堂交流中学生遇到的问题快速演示图3中所示图形,进一步激发学生的创作欲望和学习兴趣,也有利于其课后深入思考或自主学习。以课堂生成的问题为教学内容,不仅能真正做到让学生成为课堂的主体,让其在课堂中的生命活力得到最大限度的释放,而且对教师而言,以学定教可以打破以往传统教学的课堂知识体系导致的学用失衡,促进教学相长。从教学实践情况来看,学过Scratch的小学高年级学生都可以很好地学习Python语言。Python海龟绘图编程学习目的明确、过程清晰,只要教学内容和案例处理得当,学生有自主学习热情且整体参与度高,课堂任务的完成效果就很好,整节课的互动性和趣味性就会增强。
四、總结和展望
《教育信息化2.0行动计划》提出“完善课程方案和课程标准,充实适应信息时代、智能时代发展需要的人工智能和编程课程内容”,表明从国家层面对编程教育进入中小学教育有了明确的要求。从教学实践看,以小学高年级学生的思维模式和认知能力,他们完全可以接受Python语言课程,及早了解、掌握Python会为他们进行下一步人工智能的学习打下良好的基础。学习编程并不是要让学生掌握编写程序的技巧,而是让其逐步接触、理解、体验编程的逻辑操作、算法、数据结构、工程设计等通用的工程方法和数学知识[5],这些核心知识的掌握和能力的提升才是编程教学的根本目的。
参考文献
[1]施晓军.每个人都应该学习编程[J].中小学信息技术教育,2014,(z1):158-160.
[2]黄天羽,嵩天.以图形牵引兴趣的Python案例教学方法与实践[J]. 计算机教育,2017,(8):32-37.
[3]赵霞,张五旬,韩忠明,等.Python语言教学中问题解决能力和创新能力的培养实践[J].计算机教育,2017,(9):6-10.
[4]章伟.培养计算思维的小学编程校本教材开发与应用:以应用Scratch创作“迷宫大战”为例[J].中小学数字化教学,2018,6(3):55-57.
[5]刘欣.追本溯源探寻编程教育的本质[J].中国科技教育,2018,(1):10-13.
(责任编辑 杜丹丹)
Abstract: This paper explores the urgency and necessity of Python programming language teaching in primary schools,puts forward the forward curriculum,core curriculum and extended curriculum,and illustrates the implementation path and strategy of Python programming teaching in primary schools through cases.
Key words: Python;Scratch;visualization;computational thinking