首都师范大学教授。中国教育学会中小学信息技术教育分委会理事,教育部高中、义教信息技术课程标准专家组成员。人民教育出版社-中国地图出版社高中信息技术教材联合总主编。
樊 磊
北京市东城区教育研修学院研修员,教育硕士,高级教师。北京市教育学会教育评价专业委员会理事。主持北京市教育学会“十三五”教育科研课题1项。特约撰稿人/专栏作者,发表文章300余篇。
魏 宁
对 话
*********************
中小学编程教学与Python编程语言教学:理念、原则与策略
编者按:
近年来,在信息技术课程变革和国家一系列政策的助推下,中小学编程教学受到了各方的普遍关注,成为了新的教育热点。不久前,教育部在答复政协提案《关于稳步推动编程教育纳入我国基础教学体系,着力培养数字化人才的提案》时,明确表示将编程教育纳入中小学相关课程。
本期对话,首都师范大学樊磊教授与北京市东城区教育研修学院研修员魏宁,将围绕中小学编程教学以及Python 编程语言展开深入探讨,以期为从事编程教学的一线教师提供参考。
魏宁:首先,非常感谢樊磊教授参与此次对话,樊教授是教育部高中及义务教育课程标准信息技
术学科核心专家组成员,多个版本的信息技术、人工智能教材主编,也是教育部刚公布的技术(信息技
术、通用技术)教学指导专委会委员,多年来一直倡导编程教学并做了大量工作,今天的话题我们就从
编程教学篇
对 话*********************
编程教学开始吧。
关于编程教学,我想,如果从计算机科学的角度看,算法以及基于算法的问题求解,既是计算机科学中最重要的组成部分,也可以说是编程教学中最基本、最核心的内容。我们看到,在高校的计算机以及相关专业中,算法已经形成了一个完备的知识体系,成为计算机科学里非常重要的一个分支学科,但在中小学的编程教学里,算法教学显然还没有形成一个体系。
既然中小学编程教学里的算法教学如此重要,我们该如何借鉴高校的成熟经验呢?中小学编程教学里的算法教学又该遵循怎样的指导原则呢?
樊磊:我认为,首先,不应把中小学编程教学里的算法教学简单地看作高校相关课程的预备或简化版本,中小学阶段的算法教学是为编程教学服务的,所以必须服从于编程教学的总目标。而且,限于中小学生的认知水平和知识深度,算法教学在内容、案例选择上无论广度还是深度都是有限的,当然,这种选择对算法教学也是十分关键的。
至于中小学编程教学里的算法教学应遵循的指导原则,我认为有以下几点:
第一,算法应该源自学生熟悉的应用情境,教师要为学生搭建起从最简单的情境到算法的一般性描述之间的抽象台阶,也就是我们通常说的教学的支架、脚手架。
第二,在算法的选择上,要把
握好高阶算法和低阶算法之间的
平衡。所谓高阶算法就是能直接
解决某类问题的算法,低阶算法是
指能高效完成特定任务的底层算
法。例如,我们可以考虑在小学、初
中阶段以高阶算法的案例为主,到
了高中阶段,适当加入少量的低阶
算法。
第三,算法的目标、直观思想以
及逐步导致形式化描述的演化过程
是高中(包括小学、初中)算法教学
的重要部分,教学中应避免直接提
出一般化、形式化的算法描述。
第四,算法中所涉及的核心思
想、形式化或半形式化表示、算法
推导的数学及背景知识应在学生
的知识范围内,或略微超过学生的
知识范围。
魏宁:对于算法而言,算法策
略是一种更高站位上的视角。因为
算法策略是在算法设计中所使用
的问题求解的策略,也是计算思维
最直接、最具体的体现形式。相对
具体的案例,教师该如何在自己的
教学中选择算法策略呢?
樊磊:在中小学编程教育中
的算法教学里,常见的算法策略和
它们用于处理的任务主要有:迭代
(也称为循环)——用于处理重复
性的任务;递归——用于完成迭代
的一种高效方法;蛮力法——在没
有更好的办法,而且计算资源(时间
和空间)允许的前提下,可以尝试采
用的求解问题的方法;回溯——用
于测试不可行的选择,目的在于尽
可能排除这类选择。
此外,启发式方法使用所有可
用的背景信息,以期合理地缩短求
解时间;分治法是求解困难问题时
“化难为简、化大为小”的基本策
略;动态规划策略用于尝试识别并
记忆求解过程中的重复性步骤,从
而避免无用的重复计算或浪费资
源;定界的目的则是尽量确定解的
边界,以缩小求解范围。
魏宁:刚才我们谈到了计算
思维,自从2007年美国卡内基梅隆
大学计算机系主任周以真教授提
出计算思维的概念以来,计算思维
受到了各国教育界的普遍重视,在
我国新修订的《普通高中信息技术
课程标准》中,计算思维也被列为
学科核心素养之一。
在计算思维的培养中,编程普
遍被认为是一种有效的途径。但目
前计算思维的研究仍处在起步阶
段,特别是对中小学编程教学如何
促进学生计算思维的形成,我们似
乎还缺乏有说服力的指导理论。
樊磊:是的,我们可以这样理
解编程教学与算法思维的关系,就
是把计算思维理解为求解信息处理
问题时的一种思维方式,把编程语
言理解为描述信息处理过程的形式
语言,而编程则是基于信息的推理
活动(计算也是一种推理)。编程语
言/编程在表示/求解信息处理问题
中的作用类似于抽象/逻辑在求解
数学问题时的表示和推理。
对 话*********************
著名数学家G.Polya在他的专著《怎样解题》中提出过一个数学问题求解的模型,就是著名的Polya模
型。它把解题的过程分为四个步骤:理解问题、设计求解方案、实施求解方案和核查评估。在Polya模型的基础上,我们可以设计一个基于计算思维的问题求解模型。具体地说,在基于计算思维的问题求解模型中,理解问题包括了要能正确地提出问题、表示问题,设计求解方案的重点在于要能设计出可以编程实现的算法,在实施求解方案中包括了用语言工具实施算法以及调试验证算法,核查评估环节重在评估求解方案的效率、代价和精度等。
这些重要的特点,显然有着方法论的特征,既体现了与一般的问题求解过程的不同,也说明了计算思维的培养是一个逐渐积累和不断优化的迭代过程。只有将问题理解(叙述、表示)和求解(算法设计、实现、评估、优化)看成一个整体,才能体现出计算思维的真正价值,较好地解决编程教学中的碎片化问题。
魏宁:对于中小学编程教学中的程序语言选择,我们看到,从20世纪90年代开始,至今已经历了Pascal、Fortran、C、VB、Java等语言的变迁。目前,仍有Pascal、VB、Scratch等多种编程语言在中小学编程教学中使用,以至于不少教师戏言,在信息技术课程中,“工具是最新的,语言是最老的”。但这是不
是一种编程语言发展的常态呢?
樊磊:编程语言的迭代是技
术发展的正常趋势,在教育领域,同
样也要遵从这种趋势,我理解这是
一种正常的现象。
相对于编程语言多样化的现
实,更需要我们思考的是,编程语
言的选择应从哪些原则出发考虑。
我想,我们既要站在国家层面上看
计算机发展和人才培养的需要,又
要站在教师角度充分考虑一线教
师的实际状况,同时也要符合学生
的长远发展。在编程教学语言的选
择上,要广泛征求各方面的意见和linux怎么用c语言
建议,采取科学合理的方案,多级
联动。面对汹涌而来的科技大潮和
技术快速迭代的现实,我们更需要
理性审视,不盲从、不武断,这才是
自信和定力的体现。
魏宁:我们再谈一个学校教
育之外的话题,随着国家一系列政
策的出台,近年来,编程培训产业链
条快速发展,少儿“编程热”也迅速
升温。据测算,2020年国内少儿编
程市场将接近260亿元的规模,少
儿编程继英语、奥数之后,成为新
的培训热门,甚至有人说:“不懂编
程等于半个文盲。”对于编程这种
社会现象,我注意到您一直持理性
态度。前一段时间您在一次接受记
者采访时针对社会“编程热”就说,
“并非每个小孩都需要学编程,在
学有余力且感兴趣的情况下可以
学”,您还提醒记者要冷静看待编
程学习,这被认为是给编程热泼了
一盆冷水。您是怎么看的?
樊磊:是的,我认为,从国家
和社会层面看,需要对计算机技
术、信息技术感兴趣且有潜力的学
生,也希望发现这样一批苗子。但
我们的校内的编程教学还不能完
全满足家长的需求,这就造成了一
个明显的缺口,编程培训市场就迎
合了这样一个需求。如果我们过于
拔高编程对学生的作用,甚至从未
来升学的功利性去考虑,那么,我
确实建议“并非每个小孩都需要
学编程,在学有余力且感兴趣的情
况下可以学”。
对大多数学生来说,从个人
发展来看,编程就像语言一样,是
一个主要用来沟通、表达创意和思
想、解决问题的工具。不同的是,编
程主要是和计算机或互联网的“沟
通”。所以,学习编程语言,就是让我
们可以解决新问题、使用新技术,
更好地表达自己。
从长远看,市场化的编程培
训还是应该纳入信息素养教育的
大框架下,让其成为信息素养教
育落地的一个载体,这样才会更有php explode函数分割日期
持续性。
总之,在“编程热”这个问题
上,学校、家长不要“走偏”,要牢记
编程是一个工具,是要为学生学习、
发展和思维培养服务的。
对 话*********************
魏宁:在中小学信息技术课程中,对于编程教学,目前的新教材普遍采用了Python作为核心编程语言。
我知道,前一段时间,您也专门编写了《面向中小学教师的Python编程入门》一书。作为国内Python编程语言方面的专家,您是怎样看待Python语言的呢?对于中小学的编程教学,Python语言的优势体现在哪里呢?
樊磊:Python是现代编程思想的产物,它具有语法简单、开源、跨平台、扩展性强等诸多特点,且拥有众多功能强大的应用扩展库,是众多领域的主流应用(如可视化、生物信息学、大数据分析等)开发的首选语言。
对于基础教育而言,它的优势主要体现在以下几个方面:
第一,从计算机科学的观点看,Python是一种比较中性的语言,既吸纳了近二十年来编程语言领域中的重要研究成果和新概念(如Lambda机制),同时在语言的最基本内核层面上又极少采用不成熟的或未经考验的新编程机制。
第二,从运行机制方面看,Python同时具备解释型、编译型和
脚本型语言的共同特点。
第三,从开发环境看,Python
的开发环境支持包括Windows、
OS X、Linux在内的所有主流操作
系统和平台。
第四,从扩展硬件方面看,
plant and equitmentPython的开源硬件接口库种类繁
多、功能完善,基本覆盖了当前基础
教育领域中用到的扩展硬件。
第五,从语言支持服务方面
看,Python是典型的开源平台,与
C/C++、JavaScript等重要编程语
言有很好的应用库共享机制。
第六,从应用层面看,Python
有大量各种各样的库/框架,使得
开发者仅需要编写相对较少的代
码就可以完成令人印象深刻的准专
业级应用。
第七,从教学实施情况看,
Python特别适合做数据处理(数
据管理、数据可视化、大数据分析
等)相关的应用,与新课标的理念非
常吻合。
魏宁:对于Python,我也听
到了一些不同的声音,如有些一线
教师反对Python进入中学课堂。
他们的理由是C语言或Java语言相
对于Python更加成熟、稳定,并且
在大学教育中都有很好的教学基
础,这也就意味着学生在中学阶段
学习C或者Java后,在后续的大学
阶段会有比较好的衔接。事实真是
这样的吗?
request后面加什么介词樊磊:我认为对编程基础几
乎为零的中学生而言,首先应该让
他们在编程的学习中体会到编程
的乐趣,尽快获得成就感,并爱上
编程,而不是把编程看作高深莫
测、枯燥乏味的事情,甚至对学习
编程“自带恐惧”。从当下的中学编
程教学来看,不喜欢编程教学的学
生不在少数,这是应该引起我们反
思的现象。从这个角度考虑,选择
Python作为编程语言还是有优势
的,因为它的语法简洁易懂,对语
法格式的要求非常低,可以说是最
接近自然语言的程序语言,非常适
合没有编程基础的学生。对教师而
言,Python代码在设计上强制要求
html5游戏开发摘要缩进,方便了学习和维护,教师不需
少儿python入门教程要花费大量的时间去处理代码的
格式错误。
至于说和大学的衔接,我首先Python篇
对 话*********************
要严肃地说明,Python绝不是一种“玩具(Toy)语言”,而是货真价实的“工作(Working)语言”,是主流编程语言,更是数据分析领域的首选语言。假如学生能在中学阶段接触并且系统地学习Python语言,完全能够打下良好的基础,并在进入大学后直接深入研究,更快地参与到实际项目的开发中,乃至为今后的就业增加有分量的筹码。
而且,说C或Java比Python 在大学有更好的教学基础并不准确。从国外的趋势看,Py thon正在被更多
的大学所青睐。有数据显示,美国综合排名前100名的大学超过70%都开设了Py thon编程语言类课程,卡内基梅隆大学从2010年开始就用Python取代了Java,作为计算机专业的第一门编程语言。斯坦福大学在2015年的时候,就已经开发了22门与Python 相关的课程,并且逐渐将部分的C 和Java语言淘汰。
国内的高校虽然步子比国外的高校慢一些,但也开始越来越重视Python了。北京理工大学是国内较早引入Python语言的高校,他们的公选课得到了学生们的高度认可,哈尔滨工业大学等也陆续开设了Python课程,《上海市高等学校计算机等级考试大纲(2016年修订)》中也新增了Py thon程序设计模块。我们有理由相信,在不久的将来,Python语言教学将会在国内迎来井喷期。
因此,通过中学阶段对
Python的学习,无论对今后的大学
专业学习,还是自主创业,都是有益
处的。
魏宁:刚才我们说到了
Python语言的很多优点,但对中
小学编程教学而言,Python语言
毕竟是个新事物。而且,在现阶段,
它在编程教学中似乎也存在着一
些问题。
樊磊:是的,不可否认,现阶
段,无论是小学、初中,还是高中,
Python在编程和算法教学中都存
在着很多问题。其中比较突出的有:
第一,由于课时和年龄的限制,现
有教材中涉及的算法内容无论在
深度上还是广度上普遍呈现“高
不成、低不就”的窘态;第二,由于
Python语言封装了很多基础算法
的实现,而且涉及交错复杂的概念
(如数据类型、抽象数据类型等),
再加上算法与数学、数据结构、编
程语言特性都是密切关联的,单纯
讲算法本身也很难实施,所以,究
竟是讲算法的底层方法还是讲高
阶应用,目前难以取舍;第三,算法
教学对课程的核心——运用计算
思维解决问题无论是在求解流程
还是在问题深度上,都具有很强的
示范性,如果实施不当,很容易将计
算思维培养带入误区,这也是实践
中较易出现问题的地方。
魏宁:前面您曾提到了算法
教学应遵循的几个基本原则,那
么,对具体的P y thon语言,它的
算法教学是不是也应该遵循这些
原则?
樊磊:关于Python语言算法
教学的指导原则,我想应该有以下
三点:第一,在算法的编程实现上,
原则上不涉及较复杂或有较高技
巧的编程,较复杂的编程实现只作
为Python-like伪代码实现,但算
法作为教学案例,必须首先讲清楚
其背后的关键思想;第二,高阶算
法所解决的问题应具有典型性、时
代性、选择性、普适性和适用性,并
且对学生的后续学习或其他学科
的学习有启示作用;第三,在时间和
条件都允许的情况下,应针对解决
同一类问题的、基于不同策略所实
现的算法之间做性能对比,并挑选
出较优算法。
魏宁:您能否用一个具体的
案例来说明,在编程教学中,如何贯
彻这些原则?
樊磊:好,我就用一个具体的
案例来说明Python编程及算法教
学中的一些特点,这个案例的场景
来自高中新课标教材,就是著名的
斐波那契数列的求解。
首先,斐波那契数列是最简单
的递归定义的函数,也就是函数体
的内部包含了对函数自身的调用,
而Python是支持函数的递归定
义的,这也是函数式编程语言的
特征之一。我们要注意到计算最
后一个值的时候是需要一点时间
的,因为在递归调用中,很多中间
值要重复计算。而为了优化斐波
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论