《中国信息技术教育》:如何正确认识算法在义务教育信息科技内容体系中的地位?
王荣良:算法在计算机科学学科中占据着重要的地位。20世纪初,奥地利数学家哥德尔发表了不完备性定理的论文,其主要观点是,在任何一个包括传统意义的算术系统的数学理论内,总有一些命题的真伪无法通过算法的手段来确定。该论文证伪了希尔伯特关于“数学是可判定的”猜想,同时开启了有关算法能力的研究。截至目前,计算机科学研究的大部分都是可计算问题,包括运用算法实现有效的计算。在大学计算机学科教育领域,算法也是主干课程。义务教育信息科技课程标准虽然没有明确界定信息科技与计算机科学学科之间的关系,但从算法成为信息科技课程重要学习内容这一事实,可以佐证计算机学科在课程中的重要地位。课程标准规定了有关算法的学习要求,但我们仍然需要思考,学习算法到底是在学习什么?是知道算法有三种结构,还是学习用流程图表示算法,或者可以判断一个算法必须有输入或者输出?即使是学习用流程图表示算法,也涉及是学会流程图的使用,还是以流程图为工具学习算法。因此,为什么要学习算法,为什么要在信息科技课程中学习算法,仍是一个值得深入思考的问题。
魏雄鹰:我们要认识到,算法的学习并不是很简单的,学生要理解算法、掌握算法,形成算法学习所特有的思维模式,需要有一个长期的过程。因此,尽管在义务教育信息科技课程体系中,已安排了“身边的算法”这一独立模块,但仅仅一个模块的学习时间,是很难学好算法的。而作为逻辑主线,算法的学习将贯穿整个义务教育阶段,成为核心内容之一。
鲍通:既然是“体系”,就要从整体来看。过去的信息技术,主要就是识别信息、获取信息、处理信息、输出信息,可视为一个简单的信息系统。如今的信息科技,已不再是单纯的信息加工,而是赋予了“智慧”能量的智能系统。从简单的物联网搭建,到复杂的人工智能,这之间离不开庞大的数据处理,信息的来源、信息分类以及信息的获取方式等都发生了很大变化。面对错综复杂的底层逻辑,如何整合数据提高系统的运行效率、提高安全系数,将是整个智能系统的重中之重。而此时,“算法”的价值得以体现,它将把复杂的问题简单化,集各路信息为一体,做出更有价值的综合判断。义务教育阶段的学习,则是引导学生走进今天的科技圈,从实际案例中了解算法的含义以及原理,最终将算法在智能系统中所起到的作用、将这种“精髓”辐射(迁移)到更广泛的学习乃至实际生活中去,让自己变得更加优秀。
《中国信息技术教育》:算法与编程教育之间的关系是怎么样的?在义务教育信息科技课程实施中,应如何正确处理算法和编程之间的关系?
王荣良:依据一般的理解,编程教育主要目标是学习编写程序,所以,编程教育肯定会涉及算法。通过编程教育,是否一定能有效地达成算法学习的一般性目标,则需要依据编程教育的具体学习内容和教学方法来定。了解算法与编程的关系,可以清晰地知道具体的编程教育课程对算法学习的贡献。通俗地理解,算法是规定某一任务怎样完成的一组步骤。数学中的解题步骤是算法,如求解一元二次方程的解题流程;生活中很多做事的步骤也是算法,称之为生活算法。依据计算机学科对算法的理解,在一台计算机装置完成一项任务之前,就要找到完成该任务的算法,并且以该计算机装置能够识别的方式编码、表示、存储并最终运行。这样一个算法的表示,就称为一个程序。开发一个程序,并以该计算机可以识别的形式进行编码并输入到计算机之中的过程,就称为程序设计,也称为编程。
学习算法,重要的是算法发现,也就是找到完成一个任务的算法,这样完成该任务的工作就可转变为遵循算法的指示办事的过程了。从某种意义上说,解决该问题的智能被编码到这个算法之中了。当然,算法不一定都需要通过编程表示,当预设的目标是由计算机自动地完成这项任务,才需要编程。算法可以独立于编程而存在,而编程则是算法的某一种形式的表达。
因此,站在计算机学科的角度来看,一个算法发现的全过程如下:①理解问题;②得到一个解决该问题的算法过程的想法;③形式化地描述这个算法,将它表示为程序;④评估这个程序的正确性和精确度,同时评估它作为解决其他问题的工具的潜力。在此算法发现四步骤中,将算法用程序的形式表达并运行,是特别有意义的环节。
从算法与编程的关系分析来看,在算法学习中融入编程技术,学会用程序表达算法,可以真实地实现用程序验证算法,有利于学生学习算法,也有利于学生通过算法的学习很好地达成课程目标。
魏雄鹰:编程教育的起起落落,使人们对算法的认识也在不断发生变化。在中小学计算机课程时代,算法与编程实际上是没有严格区分的,在大众眼里,学编程等于学算法。中小学的计算机课时非常有限,学生也只能以语言为基础来初步了解算法的三种基本结构。近几年,随着图形化编程语言的兴起,编程教育更偏向于编程作品创作,而算法学习更注重思维上的提升,注重问题解决过程中的抽象、建模与算法的设计、优化等,算法学习与编程教育密切相关,但不完全等同,学算法不等于写“代码”。
义务教育信息科技课程标准在“身边的算法”模块明确给出了教学提示:本模块要求学生体验计算机程序,鼓励学生从多个方面熟悉程序,不要求每个算法问题都由学生编程实现,阅读理解、修改运行等也都是有意义的体验。在开展算法教学时,要注重培养学生利用算法求解简单问题的能力,形成初步的算法思维。编程主要用于验证算法,通过编程实现算法,进而能够对算法的正确性与执行效率进行初步分析。
梁祥:第一,算法与编程是同一件事情(抽象)的两种属性。算法是在有限步骤内解决问题所使用的方法,是用作人类表达思想的语言。编程是程序语言将这种思想转换为计算机可以理解的方式。第二,算法与编程的对比。算法是求解信息处理问题时的一种思维方式。编程是应用编程语言实现算法的过程。其中编程语言是描述信息处理过程的形式语言,而编程则是基于信息的推理活动(计算也是一种推理)。
我认为,义务教育阶段应避免将编程及编程语言本身(如语言要素、特征、程序构造、编程技巧等)作为教学目标或重点。教学目标应根据新课程标准,突出算法逻辑主线循序渐进和螺旋式发展的作用。例如,在小学阶段通过指挥计算机“做某种动作”“完成某种任务”等多种形式体验编程;初中阶段以能读懂、运行并欣赏用编程语言书写的算法及过程,通过实现算法(包括计算、查找与搜索、数据处理、模拟过程、反馈控制等)来学习实践和掌握编程。
鲍通:算法的概念不局限于编程,生活中也处处离不开算法。算法可以让编程教育不再是为了编程而学习编程。对于编程教育本身而言,具体还要看编程教育的目标是什么。如果侧重培养学生的思维,那么对算法的理解是关键(明白算法的含义,简化复杂问题,寻找最优解决方案,让事务变得更加清晰有条理,学生可以通过开发小型案例逐步观察算法的优势,充分体验“省时省力”的做法);如果侧重培养学生的技能,那么对算法的应用是关键(在学习掌握“操作系统原理”的基础上,结合实际项目,思考如何提高功能模块的运行效率,如何让模块之间尽量保持“低耦合、高内聚”,学会从软件工程过程的角度思考问题,做整体的软件设计,以将项目逐步打造成为一个产品为目标)。无论是对思维还是技能的培养,算法学习总归是编程教育中一个不可缺少的环节,虽然前后侧重点不同,但二者相辅相成。
《中国信息技术教育》:如何看待算法与计算思维之间的关系?
王荣良:第一,计算思维是计算机科学的学科思维,算法是计算机学科的核心内容,计算思维与算法,从学理上有着天然的联系。虽然算法不是计算思维的全部,但是算法学习是很好的计算思维培养的渠道。第二,义务教育信息科技课程标准把计算思维界定为“个体运用计算机科学领域的思想方法,在形成问题解决方案过程中产生的一系列思维活动”。根据课程标准的描述,具备计算思维的学生应有以下两个特质:其一,能对问题进行抽象、分解、建模,并通过设计算法形成解决方案;其二,能尝试模拟、仿真、验证解决问题的过程,反思解决问题的方案,并将其迁移运用到解决其他问题中。前一条特质,“通过算法形成解决方案”说明了算法的核心作用;后一条特质,“解决问题的过程”“解决问题的方案”,都是算法的具体表现。由此可知,在信息科技课程中已将算法作为计算思维培养不可或缺的内容。第三,进一步分析算法发现四步骤,可以发现,对步骤1理解问题,需要待解决问题的学科知识,也需要对该问题进行建模的数学思维,如果学生还具备计算机学科的基础知识和思想方法,就可思考问题解决的方案是可以在计算机工具的支持下自动完成的。而这正是计算思维的价值所在,可以将具体问题所涉及的学科知识与生活经验、数学建模以及计算机学科思想方法结合在一起,将思维从步骤1理解问题有效地推向步骤2、步骤3以及步骤4。
魏雄鹰:中小学生学习算法,开展编程教育,不是为了培养“码农”,而是为了发展学生计算思维,提升全体学生的数字素养。计算思维是指个体运用计算机科学领域的思想方法,在形成问题解决方案过程中产生的一系列思维活动。算法是最能体现用计算机解决问题所特有的思想方法,因此,培养学生的计算思维,学习算法是一条很好的路径。信息科技课程标准也明确提出,算法是计算思维的核心要素之一。通过学习算法,学生能够用明确的、可执行的操作步骤描述问题求解方案,能够用顺序、分支和循环三种基本控制结构设计程序解决问题,这些都是计算思维的重要表现。
梁祥:第一,“算法”只是“计算思维”系列有序步骤的一部分。计算思维是一种问题解决的过程,这个过程包括问题表征、数据分析、数据抽象、形成自动化的解决方案、分析试用各种解决方案、扩大解决方案应用范围等一系列有序步骤。其中通过“算法”的思想(一系列有序的步骤)生成自动化的解决方案只是其中之一。第二,计算思维的培养是一个逐渐积累和不断优化的迭代过程。在基于计算思维的问题求解模型中,理解问题包括要能正确地提出问题、表示问题。设计求解方案的重点在于要能设计出可以编程实现的算法,在实施求解方案中包括用语言工具实施算法以及调试验证算法,核查评估环节重在评估求解方案的效率、代价和精度等。只有将问题理解(叙述、表示)和求解(算法设计、实现、评估、优化)看成一个整体,才能体现出计算思维的真正价值,较好地解决编程教育中的碎片化问题。
《中国信息技术教育》:在义务教育阶段,将通过哪些方式实施算法教学呢?
王荣良:任何教与学方式的选择,都是为教学目标服务的。我认为,以计算的观点学习算法,并且学会以计算的观点看待世界,是算法学习的一般化方式,也是算法学习的普及性目标。算法发现是算法教学的重要内容。在算法发现四步骤中,每一步骤的落实都要求是可计算的。从“理解问题”阶段开始,学生就应该学会基于计算原理及基础知识对问题进行抽象,并建立可以在计算模型支持的运行环境中执行的操作序列,而不是随心所欲地编写执行流程,也不是机械地照搬算法结构,保证每一步操作都是确切可执行的,并能达成预设目标。思想实验是一种值得提倡的教学方法。所谓思想实验,就是运用人脑思维而不是实物观察的实验过程,从已有且公认的经验事实出发,并经过一系列的推理推导出最终的结论,用来作为对某一理论的支撑和证明。在算法教学中,可以运用思想实验的方法,在大脑中确定算法运行环境即计算模型的基础上,逐步推演算法的每一步操作,得出最终的算法运行结果。思想实验的过程与结果,可以在真实的计算机上运行算法得到验证。因此,通过人的大脑,可以将反映真实问题的现实世界与完成对应算法的计算机世界有机结合,使其成为一体。
魏雄鹰:根据我国义务教育阶段的教学实际,算法教学可以采用必修与选修相结合、集中学习与融合分散学习相结合的方式。首先,“身边的算法”作为信息科技课程标准中独立存在的内容模块,学生可以在第三学段的信息科技课中系统学习该模块所安排的算法基础知识,理解算法对生活的指导意义,学会用算法解决生活中的问题。其次,在一、二年级,可以在信息科技与其他学科融合学习过程中,进行计算思维的启蒙教育,学生从识别任务实施步骤、能将大问题分解成小问题开始,逐渐培养用算法解决问题所特有的思维方式。最后,除了信息科技课程,还可以利用拓展性课程、选修课、社团活动等形式开展算法学习,尤其是在创客教育、机器人教育、信息学竞赛等活动中,算法是这些活动开展的基础,一些学有余力、对算法与编程特别感兴趣的学生,就可以在这类课程中进行深入学习。
梁祥:第一,通过观察法培养学生描述算法的能力。算法应该源自学生熟悉的应用情境,从身边可以直接观察到有序的、能够完成具体任务的流程。第二,通过对比法培养学生分析算法的能力。分析算法的能力需要教师为学生搭建起学习的支架,可以从最简单的算法走向一般性描述的抽象台阶。第三,通过编程体验法培养学生应用算法的能力。要正确引导学生的学习兴趣,重点关注学生的学习体验和获得感,这样才能真正实现循序渐进和螺旋式发展。第四,在课程设计上不应过分追求知识体系的系统性。算法关注学生个人经验与认知发展,在课程设计上,不应过分追求知识体系的系统性,而应根据真实性与体验性的项目学习需要,让算法中所涉及的核心思想、形式化或半形式化表示、算法推导的数学及背景知识在学生的知识范围内,或略微超过学生的知识范围进行介绍。在教学时应避免直接提出一般化、形式化的算法描述。
鲍通:小学阶段可以借助图形化编程工具来模拟信息系统的算法,多设立一些具有输入输出、带有人机交互性的案例。图形化编程对于小学生而言比较通俗易懂,但如果仅仅围绕一些小游戏、小动画的制作,并不能体现编程的真正意义,因为图形化程序本身不涉及计算机代码,它更像多媒体制作工具拖拖拽拽,因此小学阶段可以将重点放在对学生“思维”的培养上,注重案例本身的“整体性”和“层次性”,以及教学过程的“研究性”和“完整性”,激发学生悟性“开小门,见大山”,使其充分领悟算法的含义,养成良好的学习习惯。
《中国信息技术教育》:当前,实施算法教学会面临哪些挑战?如何破解遇到的困难?
王荣良:义务教育信息科技课程对算法教学进行了整体设计,其学习目标的制订、学习内容的布局与原有的信息技术课程不可同日而语。在新课程的实施过程中,教师们既要学习、接受新课程所要求的新理念、新内容、新方法,也要克服原课程教学中养成的与新课程教学目标不一致的教学行为惯性。
算法教学面临的困难会有很多。其中,学生年龄低、认知能力相对弱、缺乏计算机学科相关知识储备等,都是开展抽象的算法学习所面临的困难。如何让学生学好算法,掌握算法最核心的思想方法,需要不断地探索。因此,教师需要从教学细节中了解学生,发现问题,改进教学方法。
教师需要认识到算法的普遍性以及算法教学对促进计算机科学的理解、培养计算思维的重要性。算法教学,不应该局限于知道某几个典型算法,也不应该满足于在某一个编程平台验证算法,而应将算法思想渗透到信息科技课程的教学中,算法是作为课程的逻辑线索贯穿于全学段课程学习内容的。因此,广大教师需要在信息科技课程实践中,根据不同年龄学生的认知基础与知识储备以及算法学习的内在规律,组织梳理算法相关教学内容,在三、四年级能够为五年级的算法学习提供扎实基础,在六、七、八年级能够丰富算法相关知识,提升算法应用能力,支持其他模块的有效学习,从而确定各年级的算法学习目标,形成立体的算法教学内容体系。
魏雄鹰:算法教学内容有很强的专业性,对教师专业水平要求较高,因此,加强有关算法方面的专业技术学习,是教师们首先要面对的现实问题,这个问题的解决可以从两方面来考虑:一是建立信息科技教师专业化成长培养体系,明确信息科技教师的专业要求和职业成长路径;二是信息科技教师自身要加强学习,不断提升自己的专业水平。其次,算法教学不同于多数信息科技教师所熟知的作品教学方式。在信息技术学科时代,操作性是信息技术课堂最大的特点,但是在算法教学时,如果还是延续这种教学方式,会发现要完成教学任务非常困难。算法教学与作品教学有很大的不同,如何根据算法教学特点,解决思维培养中的难点,提升学生思维水平,是需要全体信息科技教师共同研究的课题。
梁祥:第一,学科教师专业化程度有待提高。具体表现为具有计算机学科专业背景的教师比例不高,不少教师所学专业为教育技术专业,甚至有一部分教师是来自其他学科的兼职教师。第二,算法教学缺乏科学的评价体系。在教育教学过程中,课程、教学和评价是一个有机整体,三者缺一不可。第三,算法教学中存在学段之间衔接困难的情况。随着课程的进一步落地与实施,特别是在小学和初中同步落地教学的过程中,需要充分考虑不同学段之间的关联。第四,学生计算思维能力的培养与训练缺乏方法。在算法教学过程中,目前因没有教材,一线教师在学生计算思维能力的培养与训练上缺乏方法,常出现发力不足或发力过猛的情况。
鲍通:以小学阶段现状为例,遇到最大的挑战就是时间问题。三年级开始了解计算机结构及操作系统,四年级学习WPS文字及WPS演示,五年级开始接触图形化编程,六年级学习机器人物联网。不难看出,实施算法教学最快也要放在五年级下学期,按照每周1课时来计算,时间确实紧迫。要想实施算法教学,前期对基础知识的铺垫是必不可少的,而且需要进行系统性的、连贯性的学习。我有两点建议:一是四年级开始学习图形化编程;二是2课时合并为1节课(1节课90分钟),每两周上一节课,这样有助于学生对程序的深入研究。