董伟娜
摘要:当下信息技术在中学生思维培养当中越来越重要,故自身在大学和毕业后继续教育中编程学习的经验,以及这一年中用Python和C++在编程教学当中的实践,思考写下本文。
学而不思则罔,思而不学则殆。静下心来去写这篇文章,就是希望把这些经验和思考记录下来,总结其中的一些优秀做法,并能引起反思,为以后自身的学习和在教学过程中提供一些可能性的操作。
理论和实践的反复结合,才能开出最美丽的花。而实践不仅仅是教师自身,还有一位位的同学,教育管理能力和编程专业教学的思考两者并行,才是学生成长的最好方式。
关键词:编程;初中;计算思维;教育
2019-2020学年,在八年级的信息课程中,我立足当下,改良教材,分别引入了python和C++编程教学,在这里分享一些实践与思考。
一、背景:计算思维
在信息迅猛发展的今天,用计算机的相关方法和技术解决现实中的问题成为当代学生的基本素质之一。义务教育阶段的信息技术课程纲要明确指出:义务教育阶段的信息技术课程目标将围绕发展学生核心素养内容展开。而计算思维作为本学科的核心素养,在中学的信息课上至关重要,那么我们首先就要弄明白计算思维是什么,我们的初中编程和计算思维又有着怎样的联系。
1)计算思维概念
为了更好地培养学生的计算思维,2011 年,ISTE 和 CSTA 等国际组织给出其“ 操作性定义”,归纳出计算思维包含的九个核心部分,如表 1 所示。
计算思维的操作性定义把计算思维特征点归结为:问题分析、抽象、算法与程序和自动化四个方面,这也是我进行教学设计思路和学生计算思维评价的依据,具体见表二。
2)计算思维在初中信息课程中的分析
想要了解这个,要从小学阶段看起,小学阶段计算思维要求学生能够分析、界定简单问题;掌握用自然语言描述算法的方法;初步认识程序的三种基本结构;能够调试和运行简单程序。
初中阶段的计算思维要求学生能用计算思维界定问题;掌握用自然语言或流程图描述算法的方法;掌握程序的三种基本结构;能使用编程语言,解决生活中的问题。初中阶段的计算思维要求是小学阶段的一个深化,学生从能够分析简单问题到能够用计算思维界定问题;从初步认识程序的三种基本结构到掌握三种基本结构;从选择简单编程工具到能使用编程语言等等,具体如表 3 所示。
二、实践出真知
在确定了顺应时代需求,了解初中阶段的教学目标后,就开始了Python的学习,并经过一个学期的Python和一个学期的C++后,碰撞出了以下一些思考:
1)编程语言的选择-以师定教
编程语言其实就像我们日常交流说话一样,想要表达清楚,总得选择一种语言作为载体,方言、普通话、英语等都可以,只要交流无碍即可,但是和日常生活不同的是,信息技术发展的速度真的是太快了,语言是经过几千年的积累演变,可以编程语言时间短,各类又多,更新太快,目前顽强生长的并且在中小学教育里的主要就是Python和C++,尤其是Python已经写入了好几个省份的教材中,我也是第一学期选择了Python,因为其简单易学、语法简洁,入门快,学生一开始进入的是挺快,但是第二学期,我又重新选择了C++,这两次经历让我坚定了之后的选择。
接下来,我会毫不犹豫的继续进行C++,原因有二。其一是知识储备方面,信息学科不像语、数、英这些科目,初中要教授的知识不会有太大的变化,课堂辅导的参考书又多如牛毛,信息技术的更新速度,使信息课本都不能满足我们对知识的渴求,更别说教学设计等的参考内容,如果想真切地上好每一堂课,只能靠老师挖掘本身的储备,多下功夫创造课堂,在此,Python是近些年新兴语言,我也是初学,大学时期学的是C++,刚开始选择Python是新鲜,也是因为之前在市里组织的培训活动中进行了学习,但是通过实践教学后,深感自身的不足,就像俗语所说,想要给学生一碗水,自己就要有一缸水,而基础更是重中之重,在Python中,不能高屋建瓴地引导学生,这是想想就害怕的事情。其二是编程语言有共通性,虽然Python语言很受欢迎,入门快,但是初中阶段,学生的能力已经是可以理解到C++的入门的。所以综合自身和学生的情况,做出这项决定。
2)编程内容的界定-以学定教
在这一年的教学过过程中,有一个冲突是知识面的广和深。就像本文之前提到的初中阶段计算思维要求,学生能用计算思维界定问题;掌握用自然语言或流程图描述算法的方法;掌握程序的三种基本结构;能使用编程语言,解决生活中的问题。这个要求不难,但是由于学科的特点,学生这方面知识较少,所以就给教学带来了一些麻烦,但是在此过程中要坚持一个原则:初中编程的学习是体验和简单的问题应用,不是系统开发,系统的语言学习不是中学教学的本意,而且这也是在初中阶段不可能的事情,所以在实际中一定要多关注学情,在我们制定的教学内容上及时调整,注重培养学生的计算思维,培养他们解决问题的能力。
3)编程教学之思想先行
编程教学的前提是思想上的重视,之前提了很多计算思维,编程教学,社会上也在如火如荼的开展着编程教育,可是在很多校园内,不管是从学校层面,还是学生层面,还是家长层面,大家对信息技术,对编程教学的思想重视程序都或多或少的有些缺失。
在这一年的编程教学中,我对这一块也是有了更真切的认知。首先,编程教学的开展,不是一个人的事情,不是一个老师的事情,任何一本教材的编写,都是有经验的专家教师的心血,像我们经验不足,又是面对着新兴学科,只能自己多加重视,多取经,多实践,摸着石头过河;再者,信息技术非考试科目,一般的学生和家长不愿意在此学科上花费时间和精力,而由于编程的特殊性,即使是在中学阶段进行简单的普及,同样是需要学生花功夫在上面才可以的,否则学生两节课之后就像是在听天书了。另外,由于科目有一些难度,并且学生没接触过这一类的学習方式,所以需要一开始就吸引足学生思想上的重视和兴趣,让他们对这个学科充满期待,乐意去学,改变他们固有的认知。
所以,对于编程教学,在思想上,信息老师一方面要做各个层面的思想工作,一方面要做好面对繁难的教学研究工作的准备,还要抓住学生的心,在思想上重视,提高主观能动性,做好编程教学的先行工作。
4)编程教学之兴趣引领
由于学生身心发展的特点,他们在这个年纪只靠思想的重视是不够的,要根据他们的认知现状,采用贴近学生实际生活的案例,或者学生感兴趣的小知识,在课堂之初就激发出他们的兴趣和求知欲,引导他们主动去发现问题,吸收知识。
当然,这就对教师整合素材的能力提出了较高的要求,对此,其实社会上也早已有了建议—跨学科融合。信息老师不妨将初一、初二,尤其是本学期的数学课本细读一下,并在读的过程中结合我们要学习的编程知识,一边看,一边思考这个是否可以用到我们的案例当中,这样时间久了,即使有很多不能用的,也会慢慢养成思考的习惯,渐渐地就会不仅仅是课本了,生活中的一些小事情也会下意识的去想一下,而这些,才是和学生的生活最贴切的东西。不過,这些不是一蹴而就的,需要日积月累,并多和同事交流,并且可以是多个科目地了解,说不定不经意的一个小灵感,会开启学生的一扇门呢。
比如,学生体育和我们日常生活都会提到是否超重的问题,那我们是否可以做出自动计算的程序来实现呢,将这一活动贯穿到本节学习过程中,一下子就把抽象的程序问题转化为生动的生活问题了。
5)编程教学之学生主体
一切教育活动都要以学生为主体,在信息技术课程中,我们是在相对较大的物理空间里,每位同学面前又都有一台电脑,老师上课时,切换学生的电脑屏幕为教师的,每位同学只要看眼前的屏幕就可以,这虽然在技术上方便了,但是在效果上却打了折扣,今年的疫情中,使用线上教学时,这个折扣最是严重,在这样的课堂上,教师很容易把关注点更多的放在教上面,很难去关注到每一位学生的学,以及学的效果。
在此,有两点觉得可以对这一情况多多改善:
其一,教师可多多地各方面了解关注学生。学生的主体不仅仅是课堂那四十分钟,并且信息老师有一个特别的地方是每周一个班只有一节课,但是一个老师一周有八节课,也就是说一位老师一周见将近400位同学,却只见一节课的时间,并且信息老师和班主任及其他任课老师并不在一间办公室,听到的学生信息也少。可是哪一位同学不希望他/她在老师的心目中是有一份位置的呢,不希望是被了解、被认可的呢,所以,信息老师接手到一个班的课时,虽然我们每周和学生见面的时间少一点,但是我们可以更多的花功夫在课下,喊出他们的名字,多交流,多了解,这样在课堂上不会发生一些尴尬的事情,同样也让这些主体们真切地感受到自己的主体地位,并乐于在这节课上是表现自己的主体。
其二,教师加强课堂管理的业务能力。课堂管理总是一节课效果的保证,也是每一位老师成长为经验型教师前重要的学习内容,老师不能一味地讨好学生,我们是要关心爱护他们的成长,但是这不意味着我们没有原则。在课堂上,要让学生明白,课堂就是课堂,对于我们信息课来说,不管是在教室,还是在机房,都是严肃而神圣的地方,教室应有的纪律,机房当然要有,并且还要有专门的规定;不管是室内,还是在走廊上,仪表仪态都是我们的一部分。有些同学进入机房就兴奋,坐到电脑前就不能控制自己,这些必须要严肃声明。从这些一点一滴去规范我们的课堂,有奖有惩,有鼓励有提醒,不过这不是一朝一夕的事情,可以多向本学科及其他学科老师们请教,多实践,多改进。当学生在知道是上信息课时,就自觉的按着规矩来,明白这个课不能想干什么就干什么时,至少课堂管理就成功了一半。
6)编程教学之思维为重
初中编程入门时期,计算思维与流程图为重,代码次之。编程和数学考试不同的地方在于,数学有过程分,而编程没有,是黑盒测试,只检测你的运行结果,那么,一旦是从思维上有问题,那么,即使努力检查,可能都是徒劳。所以在入门时间,要先培养学生的计算思维,并学习使用流程图来梳理其中的逻辑,这两项解决了,再去用语法结构代码来实现,那就没多大问题了。
首先,面对问题,要运用计算思维去进行分析,从而发现问题、分析问题,找到问题的关键,并引导学生自主发现问题,重要的是教会他们其中的方法,在实际教学中,可以先用其感兴趣的案例来引入问题,再通过几个小提问来剖析这个问题,找到关键处,比如已知什么,要求什么,帮助学生将复杂问题简单化,从而结合原有的认知找到核心问题。从学生的思维和长远发展的角度来说,这一方面的培养比教会一点点代码要重要的多。
再者,当找到问题的关键后,就是怎么把问题用程序来解决,这是很多学生入门时的拦路虎。在教学时,找到核心问题后,不能直接带学生进行代码学习,代码只是一些语法结构,重头戏却是要先理清楚程序的逻辑关系,这时,就要先带领学生用语言来描述这个问题的程序应该是怎么样的,在教学初期,可以做成学案分发,可以多找学生来说,用自然语言来说明一些简单的算法。接着再带领学生一起看流程图,最好做成动画的样式来一步步呈现,这时期学生最起码要会看流程图,制作简单的流程图出来,之后再在学案上的流程图中呈现对应的代码,将自然语言转换成程序语言,甚至入门的前两节课,可以直接在教室上,养成好习惯,并且有了基本的编程思维和语法再去机房。
7)编程教学之评价反思
编程教学中对学生的评价和教师的反思都是重要的事情。
评价的途径为线上和线下。除了常规的线下和学生当面交流评价以外,由于信息技术效果的特殊性,须通过电脑这个媒介才可评价,故信息技术课程的作业和评价最好用一个专门的平台来承载,在这个平台中,学生可以下载学案,课件,微课,可以上传作业,可以询问问题,教师可以直接通过平台来批改作业,给予评价。平台上还有学生的作业评分排行,学生可以横向看学生相互之间的,也可以纵向看自己前后期的,并且作业保存都比较省力,所以有这么一个平台存在的话,对学生和教师来说都是比较好的。
评价的目的一方面是为了学生的发展,另一方面也是为了教师的反思,从而更好的教。从学生的表情、语言反馈和作业情况反思本节课的效果,以及下节课的计划和本学期、学年的发展,由于编程的难度和课时的数目并不太相匹配,所以到后期会有部分学生跟不上进度,这是很正常的,故老师要根据学生的情况和课程内容把握好进度,不贪快,每两节课之间要注意衔接,温故知新,对学生宽严相济,布置的任务内容难度要分层次,学生的程序不是写的多就好,可以少,但是灵活,多变,最好由一个项目进行多节课,比如体重问题,早期输入身高和体重,得知IBM值,之后再进行判断,是偏胖还是瘦,再之后可以循环输入判断。
总之,编程需要老师时刻关注学生的情况,不断地进行反思,从实际出发,灵活安排,最大限度的培养学生的计算思维和能力。
三、创新与发展
编程教学在初步发展阶段,这个时候一点点经验要注意总结,之后的教学中会将经验继续使用,教训多多探索改进,并注意创新,之后也可以尝试使用STEAM课程框架下使用例题设计来进行研究,也可以继续带领学生试试短期集训,一起进步。
总之,信息课程编程学习对学生来说重要而不易,我们一起且行且加油!
广东省深圳市龙岗区外国语学校 广东 深圳 518100