魏晓风,蒋家傅,钟 红,韩 奇
(佛山科学技术学院,广东 佛山 528000)
2011年,美国计算机科学教师协会(CSTA)和计算机协会(ACM)在全美中小学计算机教育调研基础上研制了《K-12计算机科学标准》,它将编程教育的内涵界定为两个层次:一是培养计算思维;二是计算实践和编程。其目的是通过编程语言的学习,培养学习者的计算思维,从而提高批判思维和解决问题的能力,最终目标是培养学习者的创新创造能力[1]。因此,我们可以把编程教育定义为通过编程语言的学习,培养学习者计算思维,从而提高批判思维和解决问题能力的一种教育。其概念模型如图1所示。
图1 编程教育概念模型
其中,计算思维是计算科学实践的核心,它从本质上来说就是一种计算机解决问题方式的思考过程,也可以说它是一种解决问题的思考方式。这种思考需要通过一种可视化或被人所接受的结构方式来表达,比如编程语言[2],这就是人们为什么要学习编程语言来培养计算思维的一个重要原因。
受到“计算思维”思潮的影响,教育部发布的《普通高中信息技术课程标准(2017年版)》中,关于学科核心素养的说明中也明确指出计算思维能力。由此可见,计算思维对于编程教育而言是一个十分重要的培养内容和目标。
编程教育其实不是什么新奇的教育方式和理念,早在20世纪80年代,前苏联计算机教育学家伊尔肖夫就提出“文化论”的观点,他认为“程序语言是第二文化”,主张将程序设计等编程语言作为学生学习的重要内容,以此来锻炼他们的计算思维能力。因此,曾有一段时间全球的中小学生都在普及编程教育。但到20世纪90年代,因为“工具论”的兴起,强调工具技术的使用,人们慢慢转向更重视计算机技术的实际应用,导致编程教育一度没落甚至被边缘化和淘汰,直至如今又再一次重新回到人们的视野中。
世界各国为什么又重新开始重视编程教育?笔者认为原因有如下几点:
(1)随着工业4.0的到来,人工智能的理念不断在我们的生活中渗透,人们的生产、生活和学习都逐渐向智能化的领域迈进。由此,工具技术的使用也变得智能化、可视化和简单化,操作起来非常方便和易懂,仅仅懂得技术的使用已经不能够满足当今时代发展的需求,这就要求更进一步地研究智能时代的核心技术——程序语言。因此,编程语言的教育愈来愈凸显出时代价值,再一次受到人们的广泛关注。
(2)近年来STEM教育和创客教育成为各国教育的一个热点,全球都在兴起STEM教育的浪潮。美国作为STEM教育最早的提出者,将Scratch编程软件应用其中,并作为STEM教育内容的重要组成部分,受到了广泛的支持和欢迎,也为编程教育提供了一个崭新的平台,使其进入人们的视野,让人们重新认识到编程教育给中小学生带来的巨大影响。
(3)从培养中小学生信息素养的角度出发,人们也意识到计算思维的重要性,它有助于提高中小学生解决问题的能力。“计算思维”不仅是一种思维,从根本上说是一种能力,它跨越了单一计算机科学边界,融合多学科范围,如STEM教育,甚至有艺术与人文等学科[2],这就与跨学科的教育理念不谋而合。通过编程可以和数学、语文等其他学科融合,不仅使学生获得多学科的知识,而且使他们学会系统推理、创造性思考与分工合作等知识能力,这些都是学生未来在各方面通向成功所需的必备技能[3]。这也是编程教育受到人们广泛关注的一个重要原因。
从2012年开始,美国、英国、澳大利亚、新加坡、日本、韩国等纷纷开始重视编程教育的巨大作用,相继颁布政策将编程列入中小学的必修课程。其中,美国、英国的编程教育发展最具代表性和影响力,笔者结合两国编程教育发展经验进行了研究,并且总结出一些启示。
美国是世界上最早开始关注编程教育的国家,在上世纪60年代,麻省理工学院就对幼儿进行编程教育实验,开始教授LOGO语言。期间发展缓慢,直到2012年后编程教育受到美国各界广泛的关注和支持,由此开始迅速发展和扩散。如今在美国,程序语言已经成为继儿童阅读、写作、算术等必备技能之后必须掌握的第四项基本能力。
在政策层面,2016年初时任美国总统的奥巴马在其国情咨文中提出“面向所有人的计算机科学”新计划,美国众多知名互联网企业都参与其中,向中小学生提供包括编程在内的计算机课程,从而兴起一场中小学生计算机编程教育运动[4]。同年,美国政府投入40亿美元的教育巨资,在全美各州开展从幼儿园到高中的完备优质的电脑科学教育,使小学生更早开始接触编程与计算机,旨在实现让美国的儿童能在小学阶段具备最简单的编程能力的目标。这些政策为编程教育的发展提供了政策制度层面上的支持。
在企业社会层面,苹果公司现任首席执行官蒂姆·库克也曾说过:“越早教孩子学习编程越好,希望编程能成为所有小学生的必修课。”而工商界早已看到编程教育对于国家民族发展的重要性:例如,在2013年计算机科学教育周,美国一家专注于青少年在线编程教育的非盈利组织Code.org发起名为“编程1小时”的活动,旨在通过采用趣味欢乐的教学形式引起中小学生对程序编写的了解,从而激发孩子们对计算机领域的兴趣,自2014年起,“编程1小时”成为一项全球性活动,吸引了全世界数百万人参加[5];此外还有“天堂谷学区”“洛斯阿图斯学区”等社会编程教育机构涌现出来;同时,美国多家企业如微软、Facebook等都涉足到编程教育的活动中,受到了社会媒体的广泛关注,这些都极大地促进了美国编程教育的发展。
在学校教育层面,《K-12计算机科学标准》(2011年)设计了小学(K1-6)、初中(K6-9)、高中(K9-12)三个不同水平阶段的计算机科学教育,目的是在全美中小学普及计算机科学课程。
编程教育作为计算机科学课程学习的核心内容之一,在标准总体目标中充分体现了让学生能运用计算机科学技能(尤其是计算思维)解决问题[6]。此外计算机科学标准还可作为当前学校中IT和AP课程的补充[7]。从2013年12月以来,美国共有几十个学区同意增设编程课;部分州已将计算机科学设定为与数学等一样的基础课程,不再将其作为选修课来对待[4]。同时,在美国得克萨斯州还通过一个法案,允许有些学生用编程语言学分代替外语课程的学分。由此可见,编程语言在学校教育中的地位越来越重要。
英国对于编程教育的重视程度并不亚于美国,他们很早就预见到编程教育在基础教育中的重要作用,在上世纪60年代开始就不断进行计算机教育改革,因此才能领先全球完成基础教育的改革,将编程教育和计算机教育引入到基础教育中。
在政策层面,英国教育和科学部在2013年9月正式公布《Computing课程学习计划》,Computing课程的核心是计算机科学,目的是让学生在每个阶段都能接受优质的计算机知识教育和编程教育,从而学会使用计算思维来创造性地理解和改变这个世界,自此“编程教学”正式进入英国中小学[8]。2014年,英国政府为激发儿童对计算机的兴趣,将编程知识引入小学课本,而且还将2014年定为“编程年”[9],旨在激励全民进行程序语言学习,培养计算思维,提高解决问题的能力。同年,英国教育和科学部还启用了新的计算机教学大纲,把“计算机素养”作为更广泛的学习目标[8],要求儿童从 5岁起就学习简单的编程语言。这些政策促使编程教学呈现低龄化趋势,显著提升了英国学生的ICT素养,也促进他们更善于实践活动和拓展个人项目,为初高中学习和未来面临的工作挑战奠定了基础[10]。
在企业社会层面,英国众多科技企业和民间组织纷纷发起了促进编程教育的活动。其中,影响较大的一个组织是在2012年4月由克莱尔·萨克利夫和琳达·桑德维克联合创建的“编程俱乐部”。这是一个由免费志愿者为主导的、主要针对9-11岁儿童的全国性课外编程学习网络[8],其目的是鼓励孩子们创新创造,乐于分享自己的想法,提高儿童的学习乐趣,从而促进编程教育的发展。在整个民间企业和政府相互联动配合以及社会各界的支持下,英国的编程教育得到顺利普及。
综上所述,在分析美英两国编程教育的发展过程中,我们可以看出,其大都遵循着一种自上而下,政、企、校、社会联动促进的发展模式(见图2)。
从“上”的方面看,美英两国都较早关注到编程在基础教育中的重要价值,两国政府都陆续颁布了中小学校发展编程教育的一系列政策,为编程在基础教育中的普及提供了强有力的制度保障,而且政府还投入了巨额的教育资金,旨在为中小学生提供优质的编程教育资源。在地方与学校方面,美国各州立政府在响应联邦政府推行的编程教育政策制度的同时,也都不同程度地颁布了相应的法案,推动本地区学校的计算机科学教育普及工作。在大多数地区的中小学校中都增设了编程课程,并且使编程等计算机课程的地位得到提升,甚至有些地区将其与数学等主科设为同等的基础课程学习,还允许学生用编程语言学分代替外语课程的学分,这都体现出美英两国学校教育对编程教育的重视。
从“下”的方面看,社会企业等各界力量都在积极推动与促进编程教育的实施与发展,努力营造一种全民学习编程的社会氛围,例如美国的“编程1小时”“天堂谷学区”等各种学习社区,英国的“编程年”等,都从社会大环境和舆论导向中积极推动编程教育,为全国发展编程教育创造了良好的环境条件。因此形成了一种国家倡导、地方推行、学校实施、社会营造环境,由上至下、相互促进和推动编程教育发展的良好模式,如图2所示。从美英两国编程教育的发展经验和模式中,我们可以汲取有益的经验,结合我国教育现状,推动具有中国特色的编程教育发展。
图2 美英两国编程教育发展模式
我国的编程教育在20世纪80年代也曾风行一时,邓小平同志曾说过:“计算机的普及要从娃娃抓起”,从而为我国计算机教育开启了先河。但后来由于“工具论”文化的流行,在中小学进行编程语言学习的现象一度消失,以至在中小学校中无人问津。在世界各国都在关注和推进编程教育普及之时,我国则显得有些落后。但随着STEM教育浪潮的推动,我国也逐渐意识到编程教育对未来发展的重要作用。
在政策层面,教育部2016年印发的 《教育信息化“十三五”规划》中,提出实施全民智能教育项目,在中小学设置人工智能相关课程,逐步推广编程教育[11]。2017年7月,国务院印发《新一代人工智能发展规划》,明确指出要在中小学阶段设置人工智能相关课程,逐步推广编程教育[12]。该规划的出台,加速推动了编程教育在中小学的普及。2018年伊始,教育部发布的《普通高中课程方案和语文等学科课程标准(2017年版)》中,信息技术学科大幅提升了在编程、计算思维、人工智能等方面的学习要求,重新规定了编程教育的学习内容。这些政策都进一步推进了编程教育在我国基础教育阶段的实施与普及。
在学校教育层面,我国编程教育的兴起是在STEM教育和创客教育普及过程中逐渐受到社会各界的重视的,因此编程教育与STEM教育是紧密结合在一起的。
目前编程教育在国内的推广主要有以下几种形式:①在许多创客空间与培训机构以及各类竞赛中推广和教授编程。②逐步在中小学校信息技术课程中普及编程教育。一般学校都会使用Scratch编程软件或C语言等进行教学,培养学生的计算思维和逻辑思维能力。③通过科技竞赛和社团活动教会编程语言,为学生参加科技竞赛提供技术支持。如佛山市石门中学,在信息技术教师江涛的带领下,屡次在全国各类信息学竞赛中取得佳绩,参赛的学生纷纷被清华、北大等高等院校提前或降分录取。此外,北京景山中学、温州中学等在创客和编程教育方面都走在国内同行的前列。
综上可见,我国政府已经开始关注到编程教育的重要意义,正逐步在中小学校中进行推广。在形式上,编程教育依靠创客教育、学生社团和科技竞赛等载体,并且和信息技术学科紧密联系,逐渐出现在我国中小学教育中,整个发展呈现一种蓬勃的态势。但我们也要看到,由于我国在编程教育方面经验不足、起步较晚,整个社会还处在编程教育发展的初期阶段,还未形成一种良好的发展模式。此外,我们也不能一味生搬硬套别国的成功经验和模式,还要结合本国实际情况。
因此,如何发展适合我国国情的编程教育,需要从以下几个方面考虑:①如何自上而下地协调好国家与地方、高校与中小学校的关系,以及如何依靠社会环境等因素共同促进编程教育的发展。②如何发展属于本国特色的编程教育模式。③如何把编程教育与信息技术等学科融合,更好地促进学科发展。
基于我国编程教育发展的现实情况,借鉴美英两国编程教育的发展经验和启示,笔者从不同主体视角由上而下地思考了我国中小学编程教育发展的路径和模式。
政府作为编程教育发展的顶层倡导者和推动者,需要在政策法规上给予强有力的发展保障,切实将编程教育纳入中小学教育发展战略规划中,分阶段、分地区、分年级逐步推进,并且要为编程教育发展投入相应的资金支持和开展人才培养,为中小学提供相配套的优质教育资源。同时,还需制定编程教育的相关标准,建立良好的发展体系,规范编程教育的推广机制,联合校、企、社等各方机构与平台,共同创造一种热学爱学编程、创新创造的社会氛围,促进形成全民学习编程的社会新气象。
地方政府作为编程教育发展的地区推动者和执行者,需要积极响应国家推行编程教育的政策,根据本地区的教学现状和教学条件制定编程教育发展纲要和相应的规划方案等,借助地区学校和科研机构的力量,通过编程教育实验校等建设,总结实验经验和成果,转化成为本地区特色的编程教育发展模式。最后,将特色模式在本地区逐步推广实施,并加强对其动态管理和监督,定期进行评估优化。
高校和中小学校作为编程教育发展的研究者与实施者,需要紧密结合在一起。高校研究力量走进一线实地考察,在试点校中指导和培训中小学校更好地开展编程教育,帮助中小学校开发课程资源,在研究中形成地区特色发展模式,从而做到产学研相结合,易于转换实践成果,加快推进编程教育更接地气的发展。中小学校在高校研究力量的支持与帮助下,要积极配合推进编程教育的发展,结合本校的实际情况,建设编程的资源平台与空间环境,整合学校的课程,提倡跨学科融合的教育。同时,也要重视相关师资人才的引进或培养,成为推动编程教育发展的中坚力量。
社会企业等各方力量作为编程教育发展的促进者和有益补充成分,需要加强与政、校、科研机构等社会各方的合作与支持,生产编程教育产品和平台,为中小学校提供教育环境、课程、资源、技术、培训等多方面有关编程教育的服务与支持[13]。同时,联动各方力量,举办具有影响力的编程教育比赛或者科技创新竞赛以及相关的线上线下编程学习社区,在全国范围内掀起学习编程的浪潮,培养中小学生的编程兴趣与爱好,营造一种良好的社会氛围,造势推动编程教育的发展。
信息技术学科作为编程教育实施和发展的载体,对当前中小学信息技术课程的结构和改革有着重大的影响。在中小学信息技术学科中,要定位好编程教育的价值,教编程不是要把每个学生都培养成程序员,而是培养学生的思维和能力,最终成为具有创新创造能力的人才。编程教学不应是单纯的程序语言教学,需要创设学习情境,激发学生的需求和兴趣。 最后,编程教育不仅只是借助于信息技术学科载体,还需要跨学科融合,支持数学、语文、物理等多学科教学,丰富学习形式,促进学习效率。
随着一些试点地区在高考中加入信息技术学科,越来越多的人们开始重视编程知识的考核,也越来越广泛地关注编程教育。但是,如何使编程教育在中小学中具体实施和顺利推广,还需要教育部门、学校、科研机构、企业等社会各方力量的共同研究和努力,发展适合本国、本地区特色的编程教育模式,培养当代学生创新创造的能力,这样才能使编程教育真正发挥出巨大的教育价值。