自信息技术新课标以Python语言作为核心编程语言推荐以来,Python编程与算法教学成为落实新课标课程目标的基础。如何在中小学Python编程与算法教学中,落实课标精神,围绕“算法以及基于算法的问题求解”这一核心问题,依据基础教育阶段学生特点把握适当深度和广度,通过算法学习和实践,为深入体会并应用计算思维(信息技术的思想、方法和手段)解决问题提供坚实基础,实现“运用计算思维解决问题”能力培养的课程目标,是广大信息技术学科教师共同关注的话题和主要研究点。
存在的问题和困难
作为普通高中信息技术新课标的重要内容,中小学Python编程与算法在教学中目前存在如下问题和困难:
第一,教学内容选择的困难。高校中计算机及其相关专业关于算法的教学已经形成非常完备的体系,但由于中小学生与大学生在年龄和认知上存在差异,学科基础也不同,所以基础教育阶段的算法及问题求解教学,不能是高校教学内容的简单简化,也不能只将其作为大学算法课程的前序准备而不涉猎本质问题。上述状况使得中小学算法教学内容在深度和广度方面普遍呈“高不成、低不就”的窘态。
第二,教学实践层次的困难。首先,作为计算机科学的重要分支,算法与数学、数据结构、编程语言特性密切关联,已经成为一个的完备的知识体系,单纯讲算法本身很难实施。其次,Python语言封装了很多基础算法的实现,而且涉及交错复杂的概念(如数据类型、抽象数据类型),究竟是讲算法的底层方面还是讲高阶应用难以取舍。再次,如何处理算法的直觉描述(非形式化描述)、流程图、伪代码(半形式化描述)和编程实现(形式化描述)之间的关系,也是教学实践的难点。
第三,案例选择的困难。中小学阶段的算法教学是为编程教学服务的,所以必须服从编程教学的总目标:运用计算思维解决问题。但限于中小学生的认知水平和知识深度,教学案例的求解流程和问题深度很难把握,所以选择适当的案例成为实施Python编程与算法教学的关键。
遵循原则
第一,算法应该源自学生熟悉的应用情境。
第二,在算法的选择上,要把握好高阶算法和低阶算法之间的平衡。
第三,算法的目标、直观思想以及逐步导致形式化描述的演化过程是高中(包括小学、初中)算法教学的重要部分,教学中应避免直接提出一般化、形式化的算法描述。
第四,算法中所涉及的核心思想、形式化或半形式化表示、算法推导的数学及背景知识应在学生的知识范围内,或略微超过学生的知识范围。
第五,算法的编程实现上,原则上不涉及较复杂或较具技巧性编程,较复杂算法可不做实际的编程实现或只做Python-like伪代码实现,但算法作为教学案例,必须先讲清楚其背后的关键思想。
第六,高阶算法所解决的问题应具有典型性、时代性、选择性、普适性和适用性,并且对学生的后续学习或其他学科的学习有启示作用。
第七,在时间和条件都允许的情况下,应对解决同一类问题的、基于不同策略所实现的算法做性能比对,并挑选出较优算法。
实施策略
1.明晰Python编程知识进阶,合理设计教学方法
在Python编程与算法教学中,要始终贯彻“需求导向、问题解决、做中学”的定位,明确学会使用函数比掌握编程技巧更重要。在设计编程案例时,要掌握输入/输出函数,能够灵活运用非数值数据类型,包括字符串、列表和字典;要了解Python语言异常灵活的循环及控制结构;鼓励教师将Python当作实现版的“伪代码”来使用,即使确实需要用伪代码,也建议使用Python-like风格;如果要使用Python的高级特性,编程案例应尽量依托Python语言特点,并以算法实现的需求适当渐次地引入。但笔者建议,非必要尽量不使用Pyt hon的高级特性。
2.熟悉算法策略,找准对应求解问题
算法策略是指在算法设计中所使用的问题求解的策略,是计算思维最直接、最具体的体现形式。算法策略的视角比实现算法时的具体编程实现方法在站位上要更高。
在中小学编程教育中,在算法教学里,常见的算法策略和它们用于处理的任务主要有:迭代(也称为循环)——用于处理重复性的任务;递归——用于完成迭代的一种高效方法;蛮力法——在没有更好的办法而且计算资源(时间和空间)允许的前提下,可以尝试采用的求解问题的方法;回溯——用于测试不可行的选择,目的在于尽可能排除这类选择。
案例解析
算法以及基于算法的问题求解是计算机科学的最重要的组成部分,也是信息技术新课程最基本、最核心的内容,算法教学中教学案例的选择是最重要的关键点。下面,笔者以斐波那契数列的问题解决路径为例,解析在上述原则和策略的指导下,如何实施Python编程和算法教学。