中小学Python编程语言教学
中小学Python编程语言教学
作为一名高中信息技术老师,被技术的发展潮流推动着,不断更新教学内容和方法,以适应快速发展的信息社会。
以前的中小学信息技术课程,老师们各显神通,身怀绝技,教PS,Falsh,网页制作,视频编辑等等,很多学校的信息技术老师还兼任电教,管理学校的投影、打印等。总是处于辅助的边缘角色, 学科定位不定,老师们的成就感和积极性也会受挫。一个学科的根本确定后,才能名正言顺的开展下面的教学工作。否则一直都是边缘学科,陪衬的角色。《普通高中信息技术课程标准》把信息技术学科的核心素养包括:信息意识、计算思维、数字化学习与创新和信息社会责任四个要素。计算机科学教育不仅仅包括编程教学,即编程教学并不是计算教育的全部。计算教育还要包括对学生信息意识的培养,数字化学习与创新的应用和承担起相应的信息社会责任。每个学校都有自身的特定环境,有的学校侧重数字化学习与创新的应用,并没有专门的计算机科学方面的课程,课程更侧重于信息技术与各科的融合。国外的学校会有专门的职位来推动这个融合过程,国内的大部分是信息技术老师兼任和各科老师们来开展。
那么编程语言学习更侧重于计算思维的培养,同时也渗透其他三个要素的培养。计算思维是什么?是指个体运用计算机科学领域的思想方法,在形成问题解决方案的过程中产生的一系列思维活动。具备计算思维的学生,在信息活动中能够采用计算机可以处理的方式界定问题、抽象特征、建立结构模型、合理组织数据(数据结构);通过判断、分析与综合各种信息资源,运用合理的算法形成解决问题的方案(算法);总结利用计算机解决问题的过程与方法,并迁移到与之相关的其他问题解决中。(迁移,学以致用)
为什么要学习编程?
编程语言是和计算机沟通必须的语言,学习一门新的语言就像打开一扇背后充满各种可能性的窗户,多一种认识世界的角度和方式。类似于几十年之前的英语的学习,先接触英语的一批人就优先的获取了新的讯息和视角。无需人人都从事专业程序开发,但计算思维已经是面向未来的必备基础素养。
为什么选择Python语言作为高中生的入门语言? Python是一种什么样的语言?
没有最好的,只有最合适的。编程语言就像厨房里面的勺子,样式不同,各有特色,满足不同需求,类似于油画的各类笔刷,不同艺术效果需选用不同的笔刷。从底层的机器语言到汇编语言再到高级语言,每种语言都有他们的特色。比如,C语言:操作系统底层;Java:跨平台面向对象语言;Python:人工智能时代的首选语言。
如何教授编程?
从学习分析角度,编程属于技能领域。编程的学习就要遵循技能学习规律。刻意练习是技能学习的不二法门。中小学学生有他们特有的认知和心理特点,不能只是简单粗暴的练习,导致学生们对编程畏难和绝缘。通过以往的教学经验,融入项目教学方法,总结出如下的教学模式流程:
(1) 抛出概念 问题(项目活动1)
概念和问题尽量和学生已有认知结构有关联,和他们日常生活息息相关的案例会更能激发他们兴趣和解决问题的动力。
可视化编程可以作为入门课程,比如Python里面的turtle模块。可视化编程可以提供即时反馈,降低初学者入门门槛,学习过渡会顺利一些,另外,可视化编程可以持续激发学生的兴趣。为后面的学习提供动力基础。
艺术创作(绘制创意艺术作品)。让学生体会到编程不仅仅是机械枯燥的数字和抽象模型,通过有限的逻辑控制,实现无限的创意。让学生从新的角度来理解编程。发现艺术中蕴含的编程之美。
语文文本分析(统计词频,数据可视化呈现)通过编程来实现文本分析,并把数据可视化。从信息中提取出有用的知识也是信息社会必备的技能。
数学(输出质数、输出最大公约数、判断是否为闰年、概率统计模拟等)数学是计算机科学的基础,可以通过计算机实现验证某些数学原理,帮助学生深刻理解数学概念。
科学模拟(自由落体、泊松运动等)有趣的科学实验和原理都可以通过计算机模拟实现,也是通过编程来学习科学的一条路径。
生活案例随机点名器(列表和字符串)密码技术(凯撒密码 随机替代密码 弗吉尼亚密码等)真实的案例和问题给学生提供了学以致用的机会,当用着自己或是学生的产品,会有很强的成就感。学生们也借机体会真实的程序开发过程迭代过程。
硬件结合(各类传感器应用)随着硬件套件的普及,学生们也有很多机会接触硬件。通过硬件的控制给学生提供了一个实物,可以通过编程来控制,并且这个事物还是一个看得见摸得着的实物。这样学生的积极性和兴趣持续时间会更长。对于老师的挑战就是工作量会增加,不仅要考虑软件,也要关注硬件的使用。
游戏开发,编程语言的教学可以借助游戏平台模块或平台进行开展。比如Python语言可以通过pygame模块开发2D的游戏;也可以通过Minecraft开发3D游戏。通过学生感兴趣的游戏入手可以激发学生的学习兴趣。
(2)学生手动体验活动(项目活动2)
具体的体验为后面的抽象提供了实践来源,只有这样才不至于跨度大,进而降低学习难度。相当于为学生提供了实践活动机会,体会具体的操作过程。顺利过渡到抽象阶段。我们学习一项新的技能,最好的方式就是在学生已有的认知和经验范围基础进行建构。从直观的体验和观察过渡到后面的抽象,认知负荷会小很多。比如让学生取扮演小乌龟的运动,让学生通过卡牌来展示各类排序过程,让学生通过角色扮演和实物演示来体验各种问题及解决思路。为学生后面的抽象建模过程提供了体验基础,符合认知建构过程。
(3)编程实现解决问题(项目活动3)
给学生们探究时间,允许犯错,及时反馈,迭代改进。这个时候就是从具体到抽象的提升阶段。学生们往往会不知如何下手,两眼一抹黑。刚才听的挺明白的,就是不知道怎么通过计算机抽象模拟问题情境,并解决问题。首先要明确问题,理出输入是什么,输出是什么?然后,分析如何能处理输入才能得到输出的结果;其次,根据需要选取合适的数据类型或数据结构存放数据。最后,通过编程实现问题解决并测试。debug的技巧:熟悉bug的类型,比如语法错误,一般运行时会报错,比较容易发现和修改,这也是初学者经常会犯的;还有逻辑错误,比较难去找到bug。能正常运行输出,但是不是想要的结果。一般在debug的过程中,可以通过输出语句和注释功能来逐步查找bug的位置。Debug也是编程学习必不可少的一部分,甚至会比前期的写代码时间还要长。
(4)迭代完善(项目活动4)
时间充足情况下,需给学生迭代进行完善的机会。这也是符合基本的工程原则,学生体验了解了工程思维。一个产品都是从一个稚嫩的雏形开始,经过打磨完善,诞生出来独一无二的产品。可以让学生在这个过程记录迭代过程,文字、图片或视频形式都可以。一开始就给学生评价标准,然后按照评价标准去完成任务,这样他们有的放矢,不至于浪费时间。
(5) 反思分享(项目活动5)
总结反思实践过程中遇到的困难,如何解决的,如果再碰到类似问题应该如何迁移解决。项目过程中兴奋时刻是什么时候?最抓狂时候是什么时候?是如何解决的?
概念可以再次螺旋深入认识和理解。
编程教学一些小技巧: