初中编程课程教学中的 常见问题与应对策略

2019-11-16 14:28周明柯奚晓枫
中国信息技术教育 2019年19期

周明柯 奚晓枫

培养中小学生的编程能力已经成为我国基础教育改革的新热点,基于编程课程的人工智能教育已经上升为国家战略。2017年国务院出台的《新一代人工智能发展规划》指出:要实施全民智能教育项目,在中小学阶段设置人工智能相关课程,并逐步推广编程教育。教育部教师工作司司长任友群指出:人工智能教育的目标是素养培育,抓手是编程实践,核心是实施不同层次的编程教学并培养学生的计算思维。在这样的大背景下,我校在初一年级开设了选修课程《编程与计算思维导论》。该课程以Python语言作为编程教学语言,旨在培养学生的编程能力与计算思维。在一学期的教学实践后,笔者总结了教学过程中常见的四大问题,并针对性地提出了相关的应对策略。

● 问题一:计算机基本操作能力缺乏

1.问题描述

本课程使用的编程语言Python是一种字符型编程语言,学生需要利用键盘输入程序代码。然而,对于初一年級学生来说,打字这一计算机基本操作仍是一种挑战。虽然电脑打字技能是小学信息技术课的内容,但是这并不足以让学生真正地掌握熟练的打字技能。另外,如今学生在家使用的都是手机和平板等触摸式输入设备,平时使用键盘进行打字练习的机会很少。因而,很多学生在课堂上表现出较弱的打字能力,输入一个简单的程序都需要很长时间。

与此同时,不少学生对切换输入法这一计算机基本操作也不熟练。通过对桑田系统中学生数据的分析,笔者发现有大约四分之一的学生出现的程序错误源于其程序中的中文标点符号。在高级程序设计语言中,标点符号是非常重要的分隔符,如引号、逗号、分号等。但是,程序中作为分隔符的标点符号必须是英文符号,不能使用看上去相似的中文标点。然而,笔者在课堂观察中发现,不少学生在输入代码时使用中文输入法,有的学生甚至不知道如何在中英文输入法之间进行切换。在这种情况下,许多学生在程序中错误地使用了中文标点。更重要的是,编程中常见的英文标点符号与中文标点类似(如中文的逗号和英文的逗号),当程序由此出错时,学生很难发现并纠正这种错误。

2.应对策略

从以上描述可以看出,学生缺乏的计算机操作技能是熟练的文字输入技能以及中英文切换的能力。笔者认为,可以在编程课程正式开始之前,对学生进行1~2课时的打字训练,尤其是英文打字训练,帮助学生熟悉键盘输入的方法。虽然课程的总课时并不宽裕,但正所谓“磨刀不误砍柴工”,学生打字能力的提升能够提升教学效率。根据笔者的经验,在课程的中后期,多数学生已经能够熟练地输入代码,教学效率也有了大幅度提升。对于中英文输入法切换的问题,笔者认为在课程初期也进行一些训练,并教会学生辨别中英文标点,定能事半功倍。

● 问题二:英语拼写的困扰

1.问题描述

因为Python编程的语句都是英文单词或者单词缩写,所以正确拼写这些单词成为学生进行编程的一大挑战。在Python编程中,不少单词学生还没学过,因此完成拼写较难。例如,Python中的random包可用于产生随机数,但是random这个单词学生还没有学过,因此在编程过程中经常拼错。另一个例子是错误地拼写math.sqrt()函数。Sqrt是英文Square Root的缩写,意思是求平方根。虽然学生学过这两个单词,但是这两个单词连在一起时的意思他们并未学过,因此常常出现拼写错误,如错误地拼写成sprt、srqt等。根据桑田系统的后台数据,笔者发现学生经常拼错的Python关键词和函数有import、random、input、float、print、sqrt等。

2.应对策略

要在短时间内提升学生的英语能力尤其是词汇量并不容易,但是帮助学生学习Python编程相关的英文词汇不是难事。对于英语拼写问题,笔者认为可以分两步走:第一,在备课时,罗列出课程内容所涉及的英文单词,并在上课时进行讲解。第二,在上课过程中,观察总结学生容易拼写错误的单词,并强调这些词汇的正确拼写方式。

● 问题三:对计算机智能的错误假设

1.问题描述

通过观察桑田系统的后台数据,笔者发现大约三分之一的学生出现的错误与Python编程的语法有关,而其中的大部分是因为学生使用了模糊的语法。编程语言要求程序的每一条语句都有准确的意义,不能有歧义,否则编译器或者解释器就会报错。而初一年级学生作为初学者,常常忽略语法的精确性,并使用自然语言的表达方式来编程。在笔者的课堂上,一个典型的例子就是学生使用print函数输出多行文字时,常常使用一个print函数,然后将输出内容写成多行。这种方式在日常写作中并没有错,但是在Python编程中需要用多个print函数来实现。当笔者问学生为什么用这种方式实现多行输出时,他们的回答非常一致:“我觉得电脑能够理解我的意思。”也许是受到科幻片的影响,或者是在日常生活中我们的计算机总是显得那么智能,学生有了一个错误的假设,那就是计算机很聪明,能够理解我表达的意思。然而,实际上计算机并不聪明,它只能执行非常精确的指令。在程序设计中,这一点尤为突出,每一行代码都不能有歧义。

2.应对策略

如何让学生明白计算机只能理解精确的代码呢?笔者认为构造认知冲突是一种有效的策略。所谓认知冲突,就是将错误展示给学生看,让学生明白自己一直秉持的观点是错误的。在教学中,教师可以展示一个错误的程序,并详细解释错误的原因,最后将修改错误的过程演示给学生看,从而帮助学生理解为什么自己原先的理解有错误。在演示过程中,教师要强调计算机并不像人一样智能。

● 问题四:数学知识不足

1.问题描述

在课程进行过程中,笔者发现学生数学知识不足也是他们学习编程的一大障碍。首先,在编程中有不少概念与数学息息相关,如变量、函数等。初一年级学生刚开始学习代数,虽然已经知道了方程、变量等数学概念,但是他们对这些概念的掌握还不深入且经常和编程中的相似概念混淆。变量这一概念就是一个典型的例子。在编程中,变量有名称,也有类型,一个Python变量可以是整数、小数,也可以是字符串,在进行变量运算之前,先要考虑变量的类型以及它所支持的运算。例如,将一个整数型变量和一个字符串相加,程序就会出错。然而,在数学中,变量不存在类型特征,变量之间的运算也没有类似的约束。因此,很多学生常常混淆数学和编程中的变量概念,当程序出错时,也很难理解错误的原因。另一种情况是编程中的相关概念在数学课上还没学过,如函数、平方根等。函数是编程中最重要的概念之一,但是初一年级学生还没有学习函数相关的数学知识,因此他们在理解编程的函数概念时就会遇到一些阻力。

2.应对策略

对于数学知识不足这一问题,笔者认为可以从两个方面着手:第一,对于数学上已经学习过且容易混淆的概念(如“变量”),在教学中应该对比这一概念在数学和编程中的异同点,帮助学生理解这个概念在编程中的独特之处。第二,对于数学上还没有学过的概念(如“函数”),我们可以在课程中对这类概念进行详细的介绍。如果某个概念在数学或者其他学科中也存在,只是学生还没有学习到,那么从本学科的角度先进行概念介绍,这样能够帮助学生更顺畅地理解这个概念。

随着人工智能教育的发展,编程课程将会逐步普及。本文主要介绍了笔者在初一年级《编程与计算思维导论》课程教学中所发现的常见问题以及相关的应对策略。由于我们的课程开设时间还不长,所以本文总结的问题并不全面。与此同时,在不同学校不同年级开设类似课程,教学中所面临的问题也会有所不同。希望未来能够与更多同人一起来探讨编程教育中的常见问题与应对策略。