中小学编程教学与Python编程语言教学:理念、原则与策略

对话 | 樊磊-魏宁 中小学编程教学与Python编程语言教学: 理念、原则与策略
来源: 中国信息技术教育

近年来,在信息技术课程变革和国家一系列政策的助推下,中小学编程教学受到了各方的普遍关注,成为了新的教育热点。本次对话,首都师范大学樊磊教授与北京市东城区教育研修学院研修员魏宁,将围绕中小学编程教学以及Python编程语言展开深入探讨,以期为从事编程教学的一线教师提供参考。

对话嘉宾 简介

樊磊: 首都师范大学教授。中国教育学会中小学信息技术教育分委会理事,教育部高中、义教信息技术课程标准专家组成员。人民教育出版社-中国地图出版社高中信息技术教材联合总主编。

魏宁:北京市东城区教育研修学院研修员,教育硕士,高级教师。北京市教育学会教育评价专业委员会理事。主持北京市教育学会“十三五”教育科研课题1项。特约撰稿人/专栏作者,发表文章300余篇。

编程教学篇

魏宁:首先,非常感谢樊磊教授参与此次对话,樊教授是教育部高中及义务教育课程标准信息技术学科核心专家组成员,多个版本的信息技术、人工智能教材主编,也是教育部刚公布的技术(信息技术、通用技术)教学指导专委会委员,多年来一直倡导编程教学并做了大量工作,今天的话题我们就从编程教学开始吧。

关于编程教学,我想,如果从计算机科学的角度看,算法以及基于算法的问题求解,既是计算机科学中最重要的组成部分,也可以说是编程教学中最基本、最核心的内容。我们看到,在高校的计算机以及相关专业中,算法已经形成了一个完备的知识体系,成为计算机科学里非常重要的一个分支学科,但在中小学的编程教学里,算法教学显然还没有形成一个体系。

既然中小学编程教学里的算法教学如此重要,我们该如何借鉴高校的成熟经验呢?中小学编程教学里的算法教学又该遵循怎样的指导原则呢?

樊磊:我认为,首先,不应把中小学编程教学里的算法教学简单地看作高校相关课程的预备或简化版本,中小学阶段的算法教学是为编程教学服务的,所以必须服从于编程教学的总目标。而且,限于中小学生的认知水平和知识深度,算法教学在内容、案例选择上无论广度还是深度都是有限的,当然,这种选择对算法教学也是十分关键的。至于中小学编程教学里的算法教学应遵循的指导原则,我认为有以下几点:

第一,算法应该源自学生熟悉的应用情境,教师要为学生搭建起从最简单的情境到算法的一般性描述之间的抽象台阶,也就是我们通常说的教学的支架、脚手架。

第二,在算法的选择上,要把握好高阶算法和低阶算法之间的平衡。所谓高阶算法就是能直接解决某类问题的算法,低阶算法是指能高效完成特定任务的底层算法。例如,我们可以考虑在小学、初中阶段以高阶算法的案例为主,到了高中阶段,适当加入少量的低阶算法。

第三,算法的目标、直观思想以及逐步导致形式化描述的演化过程是高中(包括小学、初中)算法教学的重要部分,教学中应避免直接提出一般化、形式化的算法描述。

第四,算法中所涉及的核心思想、形式化或半形式化表示、算法推导的数学及背景知识应在学生的知识范围内,或略微超过学生的知识范围。

魏宁:对于算法而言,算法策略是一种更高站位上的视角。因为算法策略是在算法设计中所使用的问题求解的策略,也是计算思维最直接、最具体的体现形式。相对具体的案例,教师该如何在自己的教学中选择算法策略呢?

樊磊:在中小学编程教育中的算法教学里,常见的算法策略和它们用于处理的任务主要有:迭代(也称为循环)——用于处理重复性的任务;递归——用于完成迭代的一种高效方法;蛮力法——在没有更好的办法,而且计算资源(时间和空间)允许的前提下,可以尝试采用的求解问题的方法;回溯——用于测试不可行的选择,目的在于尽可能排除这类选择。

此外,启发式方法使用所有可用的背景信息,以期合理地缩短求解时间;分治法是求解困难问题时“化难为简、化大为小”的基本策略;动态规划策略用于尝试识别并记忆求解过程中的重复性步骤,从而避免无用的重复计算或浪费资源;定界的目的则是尽量确定解的边界,以缩小求解范围。

魏宁:刚才我们谈到了计算思维,自从2007年美国卡内基梅隆大学计算机系主任周以真教授提出计算思维的概念以来,计算思维受到了各国教育界的普遍重视,在我国新修订的《普通高中信息技术课程标准》中,计算思维也被列为学科核心素养之一。

在计算思维的培养中,编程普遍被认为是一种有效的途径。但目前计算思维的研究仍处在起步阶段,特别是对中小学编程教学如何促进学生计算思维的形成,我们似乎还缺乏有说服力的指导理论。

樊磊:是的,我们可以这样理解编程教学与算法思维的关系,就是把计算思维理解为求解信息处理问题时的一种思维方式,把编程语言理解为描述信息处理过程的形式语言,而编程则是基于信息的推理活动(计算也是一种推理)。编程语言/编程在表示/求解信息处理问题中的作用类似于抽象/逻辑在求解数学问题时的表示和推理。

著名数学家G.Polya在他的专著《怎样解题》中提出过一个数学问题求解的模型,就是著名的Polya模型。它把解题的过程分为四个步骤:理解问题、设计求解方案、实施求解方案和核查评估。在Polya模型的基础上,我们可以设计一个基于计算思维的问题求解模型。具体地说,在基于计算思维的问题求解模型中,理解问题包括了要能正确地提出问题、表示问题,设计求解方案的重点在于要能设计出可以编程实现的算法,在实施求解方案中包括了用语言工具实施算法以及调试验证算法,核查评估环节重在评估求解方案的效率、代价和精度等。

这些重要的特点,显然有着方法论的特征,既体现了与一般的问题求解过程的不同,也说明了计算思维的培养是一个逐渐积累和不断优化的迭代过程。只有将问题理解(叙述、表示)和求解(算法设计、实现、评估、优化)看成一个整体,才能体现出计算思维的真正价值,较好地解决编程教学中的碎片化问题。

魏宁:对于中小学编程教学中的程序语言选择,我们看到,从20世纪90年代开始,至今已经历了Pascal、Fortran、C、VB、Java等语言的变迁。目前,仍有Pascal、VB、Scratch等多种编程语言在中小学编程教学中使用,以至于不少教师戏言,在信息技术课程中,“工具是最新的,语言是最老的”。但这是不是一种编程语言发展的常态呢?

樊磊:编程语言的迭代是技术发展的正常趋势,在教育领域,同样也要遵从这种趋势,我理解这是一种正常的现象。相对于编程语言多样化的现实,更需要我们思考的是,编程语言的选择应从哪些原则出发考虑。

我想,我们既要站在国家层面上看计算机发展和人才培养的需要,又要站在教师角度充分考虑一线教师的实际状况,同时也要符合学生的长远发展。在编程教学语言的选择上,要广泛征求各方面的意见和建议,采取科学合理的方案,多级联动。面对汹涌而来的科技大潮和技术快速迭代的现实,我们更需要理性审视,不盲从、不武断,这才是自信和定力的体现。

魏宁:我们再谈一个学校教育之外的话题,随着国家一系列政策的出台,近年来,编程培训产业链条快速发展,少儿“编程热”也迅速升温。据测算,2020年国内少儿编程市场将接近260亿元的规模,少儿编程继英语、奥数之后,成为新的培训热门,甚至有人说:“不懂编程等于半个文盲。”对于编程这种社会现象,我注意到您一直持理性态度。前一段时间您在一次接受记者采访时针对社会“编程热”就说,“并非每个小孩都需要学编程,在学有余力且感兴趣的情况下可以学”,您还提醒记者要冷静看待编程学习,这被认为是给编程热泼了一盆冷水。您是怎么看的?

樊磊:是的,我认为,从国家和社会层面看,需要对计算机技术、信息技术感兴趣且有潜力的学生,也希望发现这样一批苗子。但我们的校内的编程教学还不能完全满足家长的需求,这就造成了一个明显的缺口,编程培训市场就迎合了这样一个需求。如果我们过于拔高编程对学生的作用,甚至从未来升学的功利性去考虑,那么,我确实建议“并非每个小孩都需要学编程,在学有余力且感兴趣的情况下可以学”。

对大多数学生来说,从个人发展来看,编程就像语言一样,是一个主要用来沟通、表达创意和思想、解决问题的工具。不同的是,编程主要是和计算机或互联网的“沟通”。所以,学习编程语言,就是让我们可以解决新问题、使用新技术,更好地表达自己。从长远看,市场化的编程培训还是应该纳入信息素养教育的大框架下,让其成为信息素养教育落地的一个载体,这样才会更有持续性。

总之,在“编程热”这个问题上,学校、家长不要“走偏”,要牢记编程是一个工具,是要为学生学习、发展和思维培养服务的。

Python篇

魏宁:在中小学信息技术课程中,对于编程教学,目前的新教材普遍采用了Python作为核心编程语言。我知道,前一段时间,您也专门编写了《面向中小学教师的Python编程入门》一书。作为国内Py thon编程语言方面的专家,您是怎样看待Py thon语言的呢?对于中小学的编程教学,Pyt hon语言的优势体现在哪里呢?

樊磊:Python是现代编程思想的产物,它具有语法简单、开源、跨平台、扩展性强等诸多特点,且拥有众多功能强大的应用扩展库,是众多领域的主流应用(如可视化、生物信息学、大数据分析等)开发的首选语言。

对于基础教育而言,它的优势主要体现在