探讨基于算法教学开展小学信息技术程序设计学习

2021-05-30 04:53谭国聚
中国信息技术教育 2021年26期

谭国聚

摘要:程序设计在小学生信息技术课堂开展,已经得到了广泛共识,同时,教学过程中也伴随着各种问题出现。本文针对问题,提出改进办法,即小学生程序设计课堂教学应围绕算法结构和特定算法逐步开展,并概括总结以算法学习为核心教学内容的几点优势。

关键词:算法结构;程序理解;算法思维;浅层学习;深层学习

中图分类号:G434 文献标识码:A  论文编号:1674-2117(2021)S2-0045-03

问题提出

目前,程序设计的教学内容已经深入到小学的信息技术课堂,编程的主要软件是scratch图形化编程软件。教师基于课程知识结构体系,依次讲授该课程知识点,课堂教学内容以项目式為载体,大多数知识点辅以相应的例子讲解,通过学习相关的命令模块,提升学生编写脚本的能力;但从学生的角度来看,认知程序设计的过程是基于案例的认知,通过简单拖拽命令模块,把命令模块拼接到一起,这样就完成了一个程序案例的编写。通过这种方式学习程序设计存在以下三个问题:

(1)学生在学习过程中,分不清重点,往往“胡子眉毛一把抓”,学生学得很累,最后整个课堂教学效果不是很理想。

(2)教师单方面知识输出,学生被动接受。教师与学生之间缺少双向交流,难以激发学生的学习兴趣,导致学生积极性、主动性不足,一旦学生在学习过程中受挫,就容易产生畏难情绪,造成厌学,甚至弃学。

(3)学生大量模仿操作,缺乏理解,过一段时间会忘掉相关的知识,同时缺乏对案例涉及到的知识点训练过程。学生在独立编写程序脚本的过程中,遇到问题,没有解决问题的思路和方法,提升算法思维能力沦为“纸上谈兵”。

问题解决办法

结合以上问题,在实践中,笔者把课堂教学内容调整为以“算法结构和特定算法”为核心,辅以一定的针对算法的操作练习,运用讲练结合的课堂模式,为学生独立编写程序、解决程序设计中出现的问题提供了思路和方法,收到了很好的教学效果。

1.基于算法结构的教学内容设计——以重复执行举例说明

在scratch中,算法结构分为顺序、重复执行、判断和自定义模块程序结构。在一个案例中,很少会使用单一的程序结构,而是结合几种算法结构综合使用。教师在整体分析案例的基础上,提炼出要讲的算法结构,课堂上设计任务,进行针对性练习操作。

(1)结合具体案例提炼算法结构,帮助学生认知算法结构

例如,在讲解大鱼吃小鱼的程序设计时,在讲解之前,针对角色的造型和移动的程序设计,提炼重复执行的算法结构,强调学生对重复执行的认知,明白重复执行程序设计中能够带来什么样的程序效果。以后再遇到任何程序设计中角色的造型变化和移动都可以采取类似办法,不至于做得五花八门,没有头绪,为学生操作提供了思路和方法——提升了算法思维能力。

(2)针对程序设计中出现的问题,引导学生应用算法结构解决问题

在课堂实践中,操作任务的难度增加,教师应深入理解算法结构,引导学生应用算法结构来解决程序设计中出现的问题。例如,在讲解如何让程序停止的设计时,学生提出多种不同的方案,教师引导提示,如何通过算法结构的设计来停止程序,那么学生最容易想到,碰到角色,让程序停止,用到判断的算法结构解决问题。还有的学生提出如果变量累加到一定的数值,就让程序停止。这两种办法都涉及用算法结构解决问题。在实践中,无论采取哪种方式来停止程序,都没有解决程序结束的问题。特别是通过变量解决问题,出现了一个问题,当变量值累加到一定的数值时,程序并没有停止,变量还在继续一直累加。通过和学生互动,验证运行结果,加上重复执行的算法结构,问题得到很好的解决。

(3)针对程序设计内容,通过自定义模块,优化算法结构,提升算法思维能力

在讲解“鸡兔同笼”的程序时,用常规的思路输入信息、处理信息和输出信息,学生在完成相关的操作之后,进一步通过自定义模块讲解操作,把程序分解成三个自定义模块,分别是输入信息、处理信息和输出信息模块,让学生优化已有的程序设计,这样不仅能够帮助学生理解程序结构,而且能够帮助学生很好地理解算法,使算法思维能力的提升落实到具体的程序设计操作中。

算法是程序设计的核心。在一个程序设计中,算法结构的构建是编写好程序设计的基础。围绕算法结构开展的教学是教学中不可缺少的内容。在小学生程序设计的课堂教学实践中,设计算法结构、有意识地引导学生应用算法结构,都能够很好地解决程序设计中出现的问题,提升算法思维能力。

2.特定问题设计特定算法的教学——以列表运行举例说明

著名计算机科学家Wirth提出“算法+数据结构=程序”。算法是解决“做什么”和“怎么做”的问题,数据结构是加工对象。不了解算法就谈不上程序设计。随着教学内容的增加,程序设计学习的难度增大,因此,教师不仅要学会通过算法结构来解决问题,还要对特定问题设计相应的算法开展教学。

例如,列表(scratch 1.4版本称链表)是一种数据结构,那么如何运行列表数据结构,需要特定的算法。在课堂实践中,不仅要注重脚本的讲解,更要对具体程序设计目标要求和具体任务进行分析,强调编写脚本的思路和方法,并演示验证思路和方法。不是教师单方面讲解相关的命令模块,而是师生共同推导算法的结构,帮助学生建构列表运行算法的结构,理解列表运行算法的结构,记住列表运行算法的结构,有效地提升学生的算法思维能力。

课堂实录(点名册的程序设计)

师:通过一条一条运行列表中的项目数,那么我们班有48名学生,这样一条一条按照顺序罗列下去,列表运行非常烦琐,那么怎样优化这个程序结构?

生:通过重复执行,可以让列表的项目运行!

教师边演示,边操作,把重复执行的命令拖到脚本区,验证列表是否能够按照顺序运行,结果是运行,但是,不是点完姓名就完全停止,而是列表中的项目反复运行,没有优化。

生:对重复执行的次数不要有限制,可以重复执行列表中的项目数。

根据学生所说,教师演示操作,并验证程序的结果,还是不行,不是我们想象的结果。怎么办?(这里已经通过演示和验证帮助学生建构重复执行算法的结构)

师:能不能声明一个变量,来帮助我们完成列表的运行?(演示操作声明一个变量)。

师:我们观察一下,当我们把学生名单存储到列表时,添加项目数,会发现计算机给每一个项目默认一个位置,这个位置是按照顺序添加。那么,我们通过变量的累加让计算机读取位置,这样就可以运行列表了。就像我们在班里点名,点到学号就知道是谁一样。

变量的增加的目的是什么?我们为什么要声明变量才能够运行列表?变量的累加的目的是什么?这等一系列的追问,促使学生发生思考,这个过程就是学生学习知识的过程,算法思维的培养搭载了知识的学习,这样的课堂是才真正的课堂学习。教师进一步讲解,变量的累加,是通过给变量赋值,从而建立和列表项目数的关系,就像点学号,我们通过学号的读取,就知道对应的同学一样。变量的累加后的赋值,和列表项目所在的位置对应,变量累加的值在和列表中对应的项目数的位置,这样就可以读取列表的项目数。通过梳理程序运行过程,不停地验证,这样逐步建构列表运行的模型,加深重复执行和变量的使用方法,确立变量累加和列表中项目数的位置的关系,便于学生独立做练习,完成相应的操作。

师生共同理解程序、验证程序的过程在程序设计课堂中尤为重要,这是提升算法思维的有效办法。师生共同阅读程序,厘清思路、推导算法,建构算法结构的过程,就是帮助学生理解程序、理解算法的过程。学生在“润物细无声”中提升了算法思维能力。

算法为核心的课堂教学的优势

首先,对于算法的学习,是重点突出的课堂,有利于学生学习和记忆。师生共同推导运行算法的结构(如列表运行)、建构的模型,学生清楚,记忆也非常方便,无论在什么时候遇到列表运行,无论是静态列表还是动态列表,都可以用到同样的办法,学生能够很快解决问题,能够独立编写好关于运行列表的脚本。

其次,提升了對程序理解的意识,为下一步独立编写程序打好基础。根据问题建立模型、设计算法并编写程序解决问题,是算法思维的显性体现。程序理解分为认读程序、编写程序、验证程序,帮助学生从感性认知上升为理性认知。通过解释程序脚本的含义,让学生修改程序,体验不同的运行结果,引导学生理解程序是怎样解决问题的,体会程序中蕴含的算法思维要素,为下一阶段独立设计算法、编写程序做好铺垫。

再次,算法学习,使程序设计的学习成为深层学习,提升算法思维不再是“纸上谈兵”。算法的学习是深层学习,学生基于对所学知识的理解,主动地完成程序设计知识的自我构建,建立起程序设计知识与算法思维之间的关联性,能够运用算法完成相应的操作任务,运用算法进行程序设计脚本的迁移。程序设计深层学习不同于浅层学习,浅层学习通过反复模仿,通过记忆的方式掌握一些最简单、最基本的技能,学生是被动地接受知识,是为了应付学习任务而实施的学习行为,学生对所学知识缺乏理解。算法学习是在浅层学习基础上,让学生注重学习体验,积极主动地学习知识,通过自主学习,不仅完成程序设计知识的积累,而且在积累知识的过程中,通过自主体验,批判地获得知识,将操作和算法思维训练有效结合。

最后,算法学习,通过结合数学等跨学科的学习,有效提升学生综合素质。例如,在程序设计中结合一些经典的数学命题、编写音乐等教学案例展开,课堂不仅是一节信息技术的课堂,也是一节跨学科综合实践课堂,更是一节通过信息技术解决问题的实践项目,这样的学习,可以有效促进学生综合素养的提升。

结语

程序设计的学习越来越受到重视,而且,程序设计作为信息技术学科特有的知识体系,是其他学科无法替代也无法比拟的。未来,小学生程序设计学习,无论是在内容上还是在课堂学习的模式上,都会发生变化。以教授算法为核心的教学内容将会促进小学信息技术学科程序设计教学内容迭代发展,促进小学生算法思维能力逐步提升。

参考文献:

[1]谭浩强.C语言程序设计(第四版)[M].北京:清华大学出版社,2010.

[2]李必信,郑国梁,李宣东,等.软件理解研究与进展[J].计算机研究与发展,1999(08).