田忆文,王莉娜,周 近,赵文秀,公欣仪
(江苏第二师范学院,江苏南京 210013)
随着国民经济的快速发展,我国已进入小康社会,普通家庭的收入显著提高,随之而来的教育投入也有明显提高,学校的常规教学已不能满足学生的多元化需求和社会深层次需要。如今科学技术的高速发展使得中小学生编程教育受到越来越多人的关注。经过一系列的调查分析,发现中小学生编程教育具有双面性及特殊意义。信息技术学科的教育目标中提到,中小学生的编程教育以培养计算思维为核心素养,旨在增强信息意识、培养创新能力、提高学生信息社会时代责任感。编程教育与其他常规学科不同,有自己独特的教学特点及方式。本文将对中小学生处于不同年龄阶段时的兴趣和思维发展特点进行分析,并总结中小学生的编程教育在每个年龄阶段的教育差异性。
在人工智能时代的大背景下,信息技术无处不在,它已经成为人们生活学习中不可缺少的工具。第三次科技革命以原子能技术、电子计算机的应用为代表,不难看出信息技术在推动生产力的发展方面有着越发重要的作用,且它与各个领域之间相互渗透,密切结合。因此,普及中小学生编程教育是在时代呼唤的宏观背景下的结果,能使学生更好地适应当下科技高速发展的信息时代,并发挥自己的想象及创造力来服务社会。编程教育是一项开放性的教育,涉及数学、逻辑、语言、计算机等多种学科知识的相互融合,让学生学习编程的同时掌握其他相关技能,使学生得到全方位提升,且符合以提高受教育者诸方面素质为目标的素质教育模式特点。素质教育是促进学生全面发展、个性发展,以培养创新精神和实践能力为重点的教育,而我们所提倡的计算机编程教育正体现了素质教育的内涵。
信息技术的高速发展下,编程教育出现在人们的日常生活中,一个个编程培训机构火爆起来,家长趋之若鹜。近年来,注入编程培训机构的资本也在急速膨胀。艾瑞咨询行业分析报告曾发表一篇关于少儿编程行业的研究报告,研究显示截至2018 年,编程行业规模约为35 亿元,而用户规模达到1600万左右。由此可见,编程教育掀起投资热浪,大批编程教育机构接踵而至。不仅相关培训机构、社会风气上存在编程热,学生家长对编程教育也十分支持。经在南京市对于中小学生编程教育现状的调查分析,如表1 所示,84.13%的家长支持学生参加少儿编程学习,不支持的家长仅占15.87%。我们了解到这些家长不愿意让学生参加编程教育的主要原因是为学生的健康考虑,如表2 所示,56%的家长不支持的原因为“长时间对着电脑,对身体不好”。因此,从总体来看,编程教育显而易见是备受家长所追捧的。编程教育的确可以提高学生的思维发展和创新能力,但不顾学生自身的兴趣爱好,一味盲目跟风则会适得其反,易使学生产生厌学心理,损害学习的积极性与主动性。随着编程教育热的不断升温,著名教育学者熊丙奇提到,对中小学生进行编程教育培训有助于培养学生兴趣爱好,是值得肯定的。但在推动编程教育进入中小学课堂的同时,应以培养学生的爱好和素养为主,避免功利化的学习。对此他提议,家长应考虑学生的自身情况,是否有兴趣和意愿学习编程,而不是盲目跟风强制性地要求学生学习这项技能。
表1 家长对孩子参加少儿编程学习的态度
表2 家长不愿意让孩子参加编程学习的主要原因
在2017 年出版的高中信息技术课程标准中提到,学校开展信息技术课程旨在提高学生自身的信息素养,使个体在当下信息时代具有较高的适应性和创造性。课标中强调把学生的计算思维作为学科的重点核心素养,并将其称为“是一种能够伴随学生终身学习和发展的必备的思维能力”。所谓计算机编程,本质上是用特定的计算思维来表达复杂问题,并将其转化成简单的机器语言,从而解决问题。这个过程中,要让学生体会编程思想,提高自身计算思维能力。
计算思维的定义是:个体运用计算机科学领域的思想方法,在形成问题解决方案的过程中产生的一系列大脑思维活动。计算思维能力可以使学生在学习活动中采用计算机处理问题的方式分析问题、抽象定义问题、形成逻辑程序、组织利用数据,经过对信息资源的合理分析和整合,形成高效的算法,从而快速解决问题。并且,利用计算思维解决问题的过程可以使学生思想得到启发,学会运用这种方法解决其他问题。编程教育正是提升学生信息素养,发展逻辑计算思维的教育,编程的过程也是强化逻辑计算思维能力的过程。
中小学生编程教育兼重理论学习和实践应用,在教学中会设定大量丰富的任务情境,使学生切实置身于解决问题中,提高学生学习的主动性和解决问题的积极性,努力营造数字化学习环境,让学生在技术先进的环境中学习与实践。编程教育中常用的学习方式是建立项目,鼓励学生用自己解决问题的方法创建项目。一个编程问题每个人的思路不同,编写的算法结构也会不同的,在这个过程中很有可能有学生提出一些新颖、巧妙简洁的算法思路,在很大程度上培养了他们的创新意识和创新能力。在这个数字化时代,编程教育可以使学生在科技化环境中养成适应数字化学习的能力,学会合理运用资源和学习工具,帮助学生提高自主学习和创新创造的能力,培养学生终身学习的能力。编程教育对学生具体化抽象能力进行培养,使学生形成较高的抽象性思维,并按照学生设计的程序运行。这个过程中,教师要培养学生进行想象创造、实践表达自己解决问题的思路方法,以提高学生数字化学习与创新能力为目标。
程序设计是中小学生信息技术课程教学中最常使用的一种基础工具和学习编程所必备的思维方式。程序设计所涉及的是算法的编写、程序框架的规划,编程是具体的代码实现。也可以说,程序设计更多体现思想,要考虑空间复杂度和时间复杂度;编程更多注重技巧,关键在于将程序设计中的思想高效率地正确实现。而对于中小学生编程教育,更要注重思想的培养,让学生积极思考,灵活掌握算法和有创造性地规划框架。程序设计可以培养学生的独立实践能力,同时对学生的创新能力起到一定的激发作用。在利用程序设计对学生进行编程教育培养时,体现了STEAM(科学、技术、工程、人文艺术与数学)教育的理想方法。当前Scratch 程序设计理念在中小学信息技术课程中广泛应用,教师在实际教学过程中带领学生重点分析任务结构,在进行编程设计时对每一环节进行仔细梳理分析,让学生重点掌握程序设计的思想,而不是要求掌握枯燥无味的编程代码。这种教育方式更符合当前我国小学生的学习规律,能够有效地将程序设计思想融入课程教学过程,培养学生的编程思维和程序设计思想,在体验程序的创意、设计、制作过程的同时,也让学生初步形成以编程方法观察事物和求解问题的能力,提高计算思维与创新能力。
编程和其他的学科有所不同,它需要有一定的数学基础,对逻辑有较高要求,当一些学生没有达到这样的认知水平时,学习编程会打击学生学习的积极性。这就要求在中小学生的编程教学培养上更注重学生的想象力而非记忆知识。编程知识大多是繁杂的,显然不适用在中小学生的编程教育中,记忆编程知识可能会给学生造成很大负担。中小学生编程教育的重点应放在培养编程思维上,激发学生想象力。学生掌握知识的过程往往是从发现问题开始,在解决问题中通过思考学习得到发展从而掌握知识。在编程教育中,教师通过创设问题情境让学生主动学习探索,并动手实践,构建程序算法,并在这个学习过程中激发学生求知欲,不断想象寻求更好的算法,从而提高自身的想象力和创新能力。年轻人富于想象,而想象力正是来源于早期发展所获得的常识。因此,在中小学生编程教育过程中,教师应该着重培养学生的想象力和创造力,使学生形成编程思维,学会运用数字化工具,充分发挥信息技术课程特有的教学环境优势,让学生体验研究和创造的乐趣,在知、情、意、行的动态学习中逐步提升自身的认知与创新能力。
张逸中博士曾说:有利于编程学习的年龄阶段应在升入小学以后。他认为学习编程是不能急的,“开窍”才能够学好,超前学习可能会导致学生似懂非懂,从而缺少学习兴趣。编程教育既是学习编程语言,实际上也是培养学生发现问题和处理问题的思维方式,是培养在数字化环境下、采用人机对话解决问题的能力,且这种思维方式同样适用于其他领域的学习。但要想熟练掌握这项本领是需要一定的基础知识,也需要多种基本能力的搭建和配合。因此,学生学习编程不是依样画葫芦,而需要多种能力匹配。在中小学生的编程教学过程中教师要积极创设教学问题情境,使学生的学习和生活相联系,不能在学生“一头雾水”的时候开展教学工作,而且教学重点应是培养表达事物、发现规律、解决问题的思维方式。总之,学生成长的每个阶段都有每个阶段的学习特性,我们不应该过早干预,而要顺其自然地教给学生科学。而编程教育的学习更是具有一定的要求,超前地使学生投入到编程的学习中未必是好事,甚至会使结果南辕北辙,对学生的全面发展产生不利影响。
编程学习要求学生具备扎实的数学功底,因为编程过程不仅有基本运算,更多的是逻辑抽象思维和算法。算法是解决问题的方法和步骤,是一种数学建模。算法是编程设计的灵魂,算法教学是编程教学的基础。教师在编程教学中可以先分析简单的问题特例,再逐步加深,循序渐进,慢慢深入,避免太难对学生造成心理负担,最后归纳总结形成算法。教师要让学生对程序设计和算法概念有由浅入深的接受过程,在过程中深入理解掌握,以降低学习的难度。
算法是通过精确表达的计算机指令进行设计的,通过机器语言在有限时间内表达问题,解决问题,而这就造成不同算法在解决同一问题时具有效率高低等差别。这可以激发学生积极思考创新,培养发散思维。教师可以创设问题情境,让学生经历利用算法解决问题的全过程,从现实问题出发,分析问题,创建数学模型,设计算法,从而用机器语言解决问题。这个过程中,教师要对学生的思路和方法进行引导,促进学生算法概念与抽象逻辑思维的形成。
著名儿童认知心理学家皮亚杰提出的四大阶段中,6 至12 岁的儿童被称为“具体运算阶段”,此时的儿童具有一般的思维逻辑结构;12 到15 岁的儿童被称为“形式运算阶段”,这时的儿童思维发展较灵活,智力发展逐步成熟,最有利于抽象逻辑的形成。对我国教育国情来说,有效开展信息技术教育教学的学生集体分为小学三至五年级、初中七至八年级、高一年级三个学段,而各学段的学生思维发展特点是不同的,这就导致各学段开展编程教学时存在明显差异。在各学段学生特点和新课标的基础上,基本明确了“小学段兴趣导向玩中学,初中段了解初步打基础,高中段深入算法会运用”的各学段学习重点。
对于小学段的学生来说,适合他们学习编程的工具主要有两类。第一类是图像编程工具,如美国麻省理工学院设计开发的Scratch,学生可利用拖拽“积木模型”的方式组合代码块,不需要输入具体代码就可以设计游戏、动画等,感受编程学习带来的乐趣。第二类是游戏类编程工具,如以色列开发的CodeMonkey 使学生在游戏中体会编程思维,且不会感到枯燥无趣。当然,这些工具都是对真正的编程进行了简化和优化,并设计更吸引学生的界面,也使学生更易上手,体会编程的魅力。
初中段以学习C 语言和Java 语言为主。C 语言是一门面向过程的计算机编程语言,它是编程思想建立的入门级语言。而Java 语言具有类似C 语言的“形式和感觉”,但比C 语言更易使用。总的来说,C 语言是面向过程的语言,而Java 是面向对象的语言。教师可以这两种基础编程语言为学习载体,通过教学案例分析与引导,建立学生对利用编程方式处理简单问题的过程的基本认识及基本概念的理解。
高中段是以Python 为主,Python 是一种广泛使用的解释型、高级和通用的编程语言。它既是基础编程语言,也上升一定高度,是一种较适合在高中时期学习的编程语言。高中信息技术新课标也把Python 语言作为核心编程语言。
事实上,中小学生编程的工具与成人学习编程的工具差异性很大,它们并不能称为真正意义上的编程。这类编程教育只是启发学生的计算思维,培养学生的编程思想,更像是一种启发式训练,引导学生掌握一定的程序设计意识和逻辑思考能力等。
编程教育虽然已经成为新课程改革的重点内容,但不可否认,编程教育作为一种新兴学科还存在多方面不足。师资力量不足是推广编程教育过程中最显著的问题。由于我国处于编程教育发展初期,中小学编程教师数量不足,且课程教学经验不足,优质教师资源非常匮乏,这一问题可能会造成编程教育发展的瓶颈。中小学生编程教育的教师不仅需要具备编程能力,有扎实的专业技能,同时还需要具备教学督导能力,能生动形象地将知识传授给学生。相关教育机构可以鼓励大量的计算机专业及相关专业的师范生从事编程教工作。
当前的编程教育没有系统的教学方法、学习方案,只是依靠一些编程工具引导学生学习,少有本土化课程和符合我国中小学生学情的编程教学标准。对此,教师可以利用范例教学的方法,首先使学生掌握基础的编程理论知识,接着对例题进行讲解学习,最后拓展加深,让学生自由创作,增加对创作作品的思维发散度,从而想出更好的创意并用编程方法实现它。因此,建立完善的教学体系、培养专业的编程教师、规范教学内容和教学方法也是发展中小学生编程教育的当务之急。
此外,社会各界对编程教育也存在一些意识偏差。许多家长和学生认为“编程难且枯燥”,这几乎成为社会对编程的固有印象。大多数人认编程是复杂无趣的,就是不停地敲代码改代码,是为了将来的职业生涯与计算机相关的少部分人开展的,是针对即将面临就业的大学生群体,而中小学阶段不需要学习这类知识。还有甚者认为编程就是“游戏”,开展编程教育课程就是“玩电脑”,浪费时间,对中小学生来说没有必要。这充分体现出很多人对编程教育并不了解。社会在与时俱进,编程教育也应该紧跟时代步伐,让更多人转变对编程的固有思想,真正了解编程教育。
推广编程教育,让中小学生接触编程,不是为了培养精通编程技术的程序员,而是通过学习编程思想培养学生的创新能力,使其学会用计算思维分析问题、处理问题。总的来说,提升解决问题的能力和培养计算思维才是真正的编程教育核心,也是开展编程教育的最终目的。