孙 丹 李 艳
(浙江大学 教育学院,浙江杭州310028)
近年来,随着智能技术的飞速发展,世界各国纷纷开始部署战略规划,试图抢占人工智能领域研究与实践的高地。国务院发布的《新一代人工智能发展规划》,提出要“广泛开展人工智能科普活动,在中小学设置人工智能相关课程,逐步推广编程教育”[1],这是我国首次将“编程教育”写入政府决策。美国新媒体联盟(NMC)在《2017年地平线报告(基础教育版)》中指出,在未来1-2年内,编程作为一项专业素养,将逐渐成为驱动基础教育发展的关键要素[2]。
作为智能时代的一项重要技能,编程能力逐渐被国际产业界和教育界所重视,日益成为世界各国进行创新性人才培养战略的实施重点。美国、英国、澳大利亚以及欧盟等发达国家和地区,已经将青少年编程教育纳入到国家层面的战略规划或行动计划中,无论是在正规的学校教育体系,还是在校外培训领域,都已获得了较为广泛的社会影响力。相比之下,我国青少年编程教育的实践与研究总体还处于初级发展阶段,主要以行业、 企业的推广和实践为主,中小学阶段编程教育的课程标准尚未建立,正规的编程教育师资队伍极为短缺,规范的教材体系和成熟的教学模式尚在摸索之中。
因此,我们需要进行相关研究。本文通过文献研究法、比较法研究等,对国内外编程教育研究现状、热点及教学实践等进行充分梳理与分析,以期对我国青少年编程教育的开展提供一些借鉴;同时,就智能时代我国编程教育的实施,提出了一些策略性思考。
编程语言是开展编程教育的实际载体,可以让学生更深入地了解他们所处的数字世界。表1呈现了目前国内外青少年编程教育中典型的编程语言。其中,C 语言等传统的编程语言,因其与计算机的思维方式具有类似的表征,编译方式相对简单,语言体系相对独立,一直被较多地应用于高学段的学生群体中。而可视化编程语言(如,Logo、Scratch 等),因其使用图形化界面以及易操作,越来越受到中低段学生的欢迎。学生只需要拖动封装好的语法命令积木模块,便可以实现各类算法操作,创建属于自己的程序。同时,可视化编程语言让学生更专注于编程中所涉及的逻辑与结构,不必过度关注语法,从而减轻了学生的学习负担。
表1 国内外典型的青少年编程语言
近年来,国外青少年学习编码呈现“爆炸式”增长的态势,涌现出了很多具有代表性的青少年编程教育平台。比如,2017年10月,美国著名的新闻网站HuffPost 发布了“教授儿童如何编码的炫酷产品”(Cool Products for Teaching Kids How to Code),并介绍了适合不同年龄段学生使用的编程教育产品[3];2018年1月,Apex Striving 数据公司发布了“25 个教会孩子如何编码的教学资源”(Top 25 Resources for Teaching Kids How to Code)[4]。基于此,本文梳理了国外有代表性的青少年编程教育平台的发展概况(见表2)。
表2 国外有代表性的青少年编程教育平台
其中,创立于2011年8月的Codecademy,2012年推出“编程年”(Code Year)活动,有超过45 万人参与其中(活动持续至2013年)。2015年8月,该公司与白宫合作,在12 个月内为贫困妇女和少数民族群体的600 名学生组织了面对面的编程学习体验活动[5]。Code.org 旨在鼓励美国学生学习计算机科学,2013年12月9日,该平台在全美范围内推出了“编码一小时”(Hour of Code)活动[6]。截止2019年1月,Scratch 在线学习平台已被翻译成70 多种语言,并且拥有超过4600 万个项目[7]。此外,可汗学院(Khan Academy)等在线教育平台,纷纷推出青少年编程课程,爱尔兰的Shaw Academy 也推出了Coding for Kids 1:Scratch for Beginners 系列课程。
从适用年龄来看,国外有代表性的青少年编程平台基本涵盖了各个年龄段,其中隶属于Google 旗下的Made with Code 编程平台,专注于青少年阶段的女学生,专门为女生搭建学习编程和计算科学的平台。从典型课程来看,各大青少年编程教育平台主要 围 绕JavaScript,HTML & CSS,Python,Scratch等主流编程语言,同时教授Ruby,SQL 等语言。从运营模式来看,国外典型的青少年编程教育平台大多采用“线上”运营模式,以在线的方式开展教育教学;同时,很多平台也会与学校或社会教育培训机构合作,开展面对面交流或夏令营等线下活动。
近年来,青少年编程教育的重要性逐渐受到我国教育界的高度重视,社会融资与各类专项资金不断流入编程教育领域。据2018年6月亿欧智库发布的《2018 中国少儿编程教育行业研究报告》显示,国内青少年编程教育正在向快速发展阶段过渡[8]。基于该报告的核心内容,结合各大平台的基本数据,本文梳理了国内有代表性青少年编程教育平台(见表3)。
从上述平台本身来看,各有自己的亮点和特色。“优必选”通过创意搭建、逻辑编程学习以及亲子、伙伴间的分享,来培养青少年的创造力和跨学科综合运用知识解决问题的能力;“乐博乐博”于2008年自韩国引入我国少儿编程教育领域,它采用项目管理中的“P-D-C-A”(情境导入、探索体验、反思学习、总结重构)模式开展教学;“编程猫”以游戏、动画、图形化为主要特色,采用PBL 项目式教学,利用AI 定制学习规划,目前已有超过200 万中小学用户[9]。从适用年龄来看,各大平台都涵盖从学前至中学段的青少年编程教育内容。
从课程内容来看,各大平台主要围绕“机器人教育” 以及“编程教育”,讲授的语言主要有Python,Scratch,App Inventor 以及C++。其中,多个平台将全国青少年信息学奥林匹克联赛(NOIP)作为授课的重点之一,这与国内考试升学的制度紧密联系在一起。此外,结合Arduino 等开发的STEAM 教育智能机器人,是当前国内青少年编程教育中主要的教学模式之一。从运营模式来看,越来越多的平台采用线下线上相结合的教学模式,总结线下教学经验,利用线上平台展示教学深度,来吸引家长与学习者。
表3 国内有代表性的青少年编程教育平台
我们通过对国内外青少年编程教育中典型编程语言以及教育平台的梳理,不难发现,国内外该领域的发展势头十分强劲,且发展特点同异并存。相较而言,国外青少年编程涉及的语言更为多样,且存在各类非营利组织为学习者提供学习机会。同时,还有平台专门关注女性学生群体的编程学习与发展。反观国内,青少年编程教育多为编程机器人、信息学奥赛以及图形化编程等,注重小班教学以及利用各类教学方式(游戏化、PDL 等),以打造更优的编程学习体验。
2017年10月,全球知名开发人员技能评估平台HackerRank,就各国对青少年编程教育的重视程度和渗透率进行了分析,发布了《2017 开发者技能报告》。该报告指出,目前青少年编程教育渗透率最高的国家是美国(44.8%),远远超过排名第二的澳大利亚(10.3%)和排名第三的英国(9.3%)[10]。我们结合调研发现,欧盟很多成员国在青少年编程教育上已经做出了许多努力。我国尽管在渗透率上远低于欧美国家(0.96%),但近些年出台的一系列政策,已反映出对青少年编程教育正在不断重视与提高。
2010年,美国国家科学基金委 (NFS) 开展了iDREAMS 项目,旨在重塑K-12 学校的计算机科学教育,在常规课程中利用可扩展游戏设计的方法(Scalable Game Design)[11],增加计算机科学教育,并扩大服务的范围(包括城市中心和偏远地区等)。在常规课程中开展该项目,是为了让包括少数民族和女性在内的所有学生都有机会接触到计算机[12]。2014年,时任美国总统奥巴马为“编程一小时(Hour of Code)”活动致辞,呼吁全美年轻人放下对计算机科学的恐惧,来亲自体验一次编程[13]。截止至2017年12月,该活动的代码小时数已经超过5 亿小时[14]。2016年初,奥巴马在其任期内最后一次《国情咨文》中宣布,在未来三年将投入40 亿美元预算,为各州青少年提供计算机课程,奥巴马的呼吁,直接激发了政府和社会对从小培养儿童编程兴趣的关注[15]。
2016年,美国计算机科学协会、计算机科学教师协会、网络创新中心及国家数学与科学计划中心,联合发布了 《青少年计算机科学框架》(K-12 Computer Science Framework),该框架明确界定了青少年阶段计算机科学学习的核心概念以及核心实践[16],有力推动了中小学阶段编程教育的发展。2017年9月,现任美国总统特朗普签署了一份中期备忘录《扩大获得高质量科技教育和计算机科学教育的机会,为找到好工作提供更多途径》(Expanding Access to High Quality STEM and Computer Science Education Provides More Pathways to Good Jobs),宣布每年向美国中小学的计算机科学教育投入2 亿美元,以扩大学生学习计算机科学的机会,还承诺增加妇女以及代表性不足的少数族群(underrepresented minorities)的参与[17]。
此外,美国社会各界对编程教育的发展起到了极大地促进作用。自2009年起,在美国每年5月份都会开展Scratch Day 活动 (第一期于2008年7月24-26日举行),旨在为基础教育段学生营造浓厚的编程学习氛围[18]。此外,美国学界一直关注Scratch培养目标方面的研究,娜塔莉·鲁斯克(Natalie Rusk) 教授认为,Scratch 兼具学习编程和开发思维能力的功能,她提出了Scratch 能培养学生问题思考与解决、信息交流、沟通和自我管理能力这一观点[19]。2014年,杰士明·卡法(Yasmin Kafa)和奎恩·伯克(Quinn Burke)在著作《联结编程:为什么儿童需要学习编程》中,详细描述了计算思维转变的四个维度:从代码编写到编程应用的转变; 从工具到社区的转变;从“白手起家”到“再创造”的转变;从软件到智能硬件的转变[20]。这些,均有效推动了编程教育发展。
2015年5月,澳洲教育与培训部门发表题为《立即采取行动,振兴学校的STEM 研究》(Taking Action Now to Revitalize STEM Study in Schools)的报告,并拨款1200 万美元大力支持教育部门实施STEM 教育活动,以提升澳大利亚的创新和竞争力。相关举措包括:开发创新的课程资源;支持不同年级引入编程; 建立P-TECH 试点学校; 以及资助各类STEM暑期学校等[21]。2016年,澳大利亚正式将编程列入全国必修课程,学生从5年级开始学习“21世纪计算机编码”(21st Century Computer Coding),7年级开始学习编程[22],相关培训被设立为国家教学课程[23]。2016年7月,澳大利亚天主教学校办公室发布《青少年编程政策》(Programming K-12 Policy),旨在支持教区学校实施编程课程。报告指出,编程要成为教学和评估中的重要内容,学校要提供合作、反思和评价的机制,校长等教学领导者需全面负责提供高质量的学习机会,并监测政策的执行情况[24]。
澳大利亚将编程教育贯彻到小学至高中的《数字技术》(Digital Technology,DT)课程中,以学科结合的形式开展编程教育。DT 课程是一门包含英语、数学、科学和艺术等科目的多学科课程,核心是发展学生的计算思维能力[25]。澳大利亚根据学习者的性质确定了三大年龄组:5~7 岁、8~11 岁以及12~16 岁,相应的编程教学方法因年龄段而异。数字素养和计算思维的培养始于5~7 岁,此阶段以定向游戏为基础,这有助于学生理解真实世界和虚拟世界之间的关系,通过学习精确的指令和简单问题的解决,让学生了解数字世界的重要性;在8~11 岁,学生们被引导去更广泛地理解技术对家庭和社区产生的影响;在12~16 岁及以上,学生们需要更多地考虑伦理因素,以及解决更为复杂的问题[26]。
除了在校内开展编程教育之外,校外编程教育机构同样开展的如火如荼。CodeCamp 作为澳大利亚最全面的青少年编程教育平台,已经吸引了来自一百多个城市的超过45000 名青少年学习者学习编程。在2016年,该平台专门开设了Code Camp World这一世界级编程空间,旨在更好地为学习者提供学习资源[27]。Code Clubs Australia 成立于2014年,专门为8~15 岁青少年提供编程教育,每周为超过75000名青少年提供免费资源与培训。通过为青少年展示如何制作电脑游戏、动画、网站等,来教会孩子们编程,志愿者每周都会花一小时去当地中小学或者图书馆等场地,教授编程项目[28]。
20世纪80年代以来,信息通信技术教育(Information and Communication Technology Education,ICT)一直是英国基础教育的一项重要内容。然而随着时代发展,重在信息技术应用的ICT 课程受到了社会各界的批判。因此,2013年9月,前任首相卡梅伦宣布对全国中小学教学大纲进行改革,将“计算科学”(Computing) 列为英国小学阶段的必修课程,并且规定学生从5 岁开始接受编程教育[29]。
英国主要将编程教育融入 《计算》(Computing)和《设计与技术》(Design and Technology)两门科目。《计算》课程明确规划了学生编程技能的发展:在第一阶段(一至二年级),学生将直接接触编程语言,包括掌握创建和调试简单程序的技能,以及提高网络安全意识和逐渐形成数字素养。在第二阶段(三至六年级),学生将发展更复杂的编程技能,包括分解、迭代和选择、逻辑推理以及错误调试。在第三阶段(七至九年级),编程学习将转向更抽象的层次,学生需要学会探索解决现实世界的问题,掌握两种及以上编程语言,以及学习更深入的算法。《设计和技术》课程,在第一阶段注重学生在结合信息和通信技术的条件下,对物理结构进行设计、制作和评估。在第二阶段开始强调学生的数字素养和其计算科学知识,将编程能力作为开发与管理产品的关键技术能力。第三阶段则更加重视学生的数字素养 (包括计算机工具使用以及数字演示和建模的能力) 和计算科学知识(强调运用计算知识进行产品设计,明确输入输出要素等);同时,使学生更深入地理解技术对社会和伦理的影响[30]。
除了在正规学校融入编程教育之外,英国社会也不断助力青少年编程教育的发展。英国Computing at School 是一个公益组织,它鼓励学生将自己编写的程序应用于生活场景和真实环境,以提升学生的获得感与成就感[31]。此外,英国广播公司BBC 于2014年9月宣布为青少年编程教育提供服务。BBC为旗下的儿童频道(CBBC)和少儿频道(CBeebies)设计了一系列的科技节目,旨在鼓励英国小朋友参与到编程中去。例如,在 “Absolute Genius with Dick and Dom”的每一集中,主持人都会使用新的技术开发一个创新的作品。“Nina And The Neurons:Go Digital”专门面向4~6 岁的孩子,节目利用五个神经元作为动画人物,帮助孩子们理解基础科学,主持人Nina 和小朋友们在旅行过程中,学习电脑编程及互联网的工作原理。
2014年,欧洲委员会( European Commission)正式在欧洲推行“编程周”(Code Week)活动,该活动受到了广泛的关注并且一直持续至今[32]。编程周旨在向社会公众宣传,通过编程能够提升学习者的创造力、 解决问题和协作能力,通过代码将想法变为现实,并将有动力的人聚集在一起学习。2014年,欧洲学校网(European Schoolnet) 对欧盟21 个国家教育部,进行了一项“编程与课程整合”的专项调查,结果发现:编程已经成为11 个国家的优先事项,已经有12 个国家将编程整合到课程中。其中,大多数国家在普通教育的高中阶段开展编程教学,爱沙尼亚和希腊则将编程纳入了小学教育。2015年,欧洲学校网对21 个国家重启了调查,发现各国将计算思维视为编程课程中习得的关键能力。相较于2014年,更多的国家与地区在学校层面设立了编程课程。
其中,芬兰在全国实施了新的《国家核心课程大纲》,首次将编程纳入小学教学大纲,从小学一年级开始教授编程; 法国和西班牙也首次将编码纳入课程;在丹麦,了解简单编程是物理、化学和数学课程的必修内容; 马耳他和波兰计划强制所有学生进行编码学习;在斯洛伐克,编码同样作为一项强制性内容被纳入各级学校教育。
此外,越来越多的国家将编程融入跨学科学习,尤其是数学学科[33]。在波兰,计算机课程分为三个阶段进行: 第一阶段是培训小学生进行基本的计算机操作、绘画和阅读;在第二阶段,学生接受计算、计算思维和解决问题等方面能力的培训;到第三阶段,计算机课程是参与高中期末考试的重要课程之一。这三个阶段的主要目标是帮助学生理解和分析问题,并将计算思维应用到社会生活中[34]。欧盟将编码纳入学校课程,是为了让所有学生具备在当今数字社会中日益受到重视的软技能,如,问题解决能力、逻辑思维技能与设计能力,并在一定程度上应对欧洲缺乏IT 技能劳动力的问题。
据艾瑞咨询发布的《2018年中国少儿编程行业研究报告》显示,截止2018年10月,国内少儿编程行业市场规模约为30 亿至40 亿元,用户规模约为1550 万,行业规模将在5年内达到300 亿。少儿编程将以“政策为导向,经济为依托,社会为基础,技术为核心”,迎来整个行业的快速且高质量发展[35]。
近年来,基于Scratch 的少儿编程逐渐开始走近国内中小学校,开始形成了几大实践流派。其中,以北京景山学校的吴俊杰和毛澄洁为代表的T-ARE(基于艺术、研究、工程和技术学习)景山流派提出,Scratch 作为学生易于掌握的图形化编程语言,同时能够成为数字化实验很好的编程工具[36]。此外,一线教师积极尝试并出版系列著作,例如,常州市管雪讽老师出版了《Scratch 趣味编程》系列教材,提出青少年编程教育要从“趣味编程”转向“趣味创造”[37]。浙江温州中学谢作如老师编写了《S4A 和互动媒体技术》 等书籍,利用开源软件Scratch 和硬件Arduino作为平台,通过将理论与项目相结合,帮助学生形成基本的编程思想[38]。
在香港地区,香港青年协会于2005年开始,与美国麻省理工学院媒体实验室(MIT Media Laboratory)以及香港中文大学合作举办了“创意科技工程(Learning through Engineering,Art and Design,LEAD)”活动,该活动以“协作分享、不断创新、共同进步” 作为核心思想。自2010年起,已举办多届“Scratch 三小时单元学习”活动,范围覆盖香港地区的180 多所学校。LEAD 每年都会策划“Scratch Day Hong Kong”为主题的研讨活动,该活动更是在2011年创下了“最多人参与计算机游戏设计课堂”的吉尼斯世界纪录[39]。
本文选取Web of Science 中核心合集作为国外研究样本库,以“Coding Education”和“Programming Education”为关键词进行检索,筛除非青少年阶段的研究,截止2019年1月2日,共得到35 篇文献(article)。同时根据研究的内容,采用“滚雪球”方法从文章的参考文献中获取相关的文献资料,最终获得样本50 篇。国内研究样本源于“中国知网”(CNKI),以关键词“编程教育”进行检索,筛除非青少年阶段的研究,截止2019年1月2日,共检索出核心文献27 篇,采用“滚雪球”方法得到另外期刊论文9 篇,硕博士论文3 篇,最终获得样本为39 篇。
借助科学文献分析软件Citespace,对已获取的数据进行分析。我们发现,国外青少年编程教育研究的热点集中于计算思维、Scratch、课程、学习动机、协作学习以及性别等主题; 国内青少年编程研究热点集中在编程教育、创客教育、信息技术、人工智能、计算思维、教育应用、Scratch 以及STEM 等主题(见图1)。在青少年编程教育领域,国外最具影响力的前三位高被引作者分别是是雷斯尼克(Resnick,Scratch 语言发明者)、周以真(Wing,“计算思维”概念的提出者)[40]以及帕尔特 (Papert,Logo 语言创始者)。从高被引文献来看,来(Lye)于2014年发表关于如何在K-12 领域通过编程培养计算思维的综述文章,获得了最大的关注[41];雷斯尼克对Scratch 进行了深度的介绍,在学术研究领域引起了强烈的反响[42];登纳(Denner)探讨了女中学生利用编程创建游戏的能力,探究是否能够促进其计算机科学概念的理解[43],该文章也吸引了众多研究人员的目光。从高被引作者来看,国内暂未有特定的研究人员或机构在此领域形成鲜明的领先优势。其中,王晓东出版的著作《计算机算法设计与分析》 引起了较广泛的关注,该书以算法设计策略为知识单元,系统介绍计算机算法的设计方法与分析技巧[44]。
图1 国内外青少年编程教育研究热点词云
思维是指通过分析、概括、抽象、具体化等一系列过程,对感性材料进行加工并转化为理性认识及解决问题的能力[45]。思维能力是学习能力的核心,它也是青少年编程教育的重要目标。为了探索Scratch是否能够使幼儿在创建多媒体产品的同时,学习编程的概念和技能,李(Lee)针对一名9 岁的小学生开展了为期六个月的个案研究。研究发现,Scratch 采用的视觉编程方法和基于类比的教学策略,使幼儿能够在创建各种多媒体产品的同时,成功学会计算机编程的基本概念和技能[46]。卡扎克夫(Kazakoff)考察了机器人编程对幼儿期测序能力的影响,实验组的儿童接受了20 小时的图形化编程课程,实验发现,编程活动对儿童测序能力有显著的影响[47]。
作为21世纪学生应具备的关键能力,计算思维与编程教育密切相关,越来越受到教育者的关注[48]。计算思维已被纳入美国《CSTA 青少年标准》、 英国“新课程计划”。澳大利亚“新课程方案”也将计算思维作为其新信息技术课程的重要内容[49]。在我国2017年发布的《普通高中信息技术课程标准》中,已经将“计算思维”列入信息技术学科的核心素养。
在计算思维研究领域,国际上的研究多集中于青少年阶段,而国内计算思维的研究目前还处在初级阶段,大多集中于高等教育领域,基础教育层面的研究仅占20.48%[50]。例如,赵兰兰研究利用Scratch培养中学生计算思维能力,发现学生的创新能力和逻辑思维能力均有一定的提高,并且学生的合作能力也得到了加强[51]。罗小青结合计算思维和游戏化教学,提出了基于游戏化教学的高中计算思维培养方案[52]。方海光指出,Python 能较好地体现计算思维中的“抽象特征、建立模型、组织数据、设计算法以及分析信息资源”等内容,但不太适合“分析问题和问题的迁移训练”等内容[53]。郁晓华利用App Inventor探讨基于可视化编程的计算思维培养模式,为中小学信息技术课堂提供了有效的实践指导[54]。西班牙研究团队开发了计算思维评估工具Dr.Scratch,该工具能够自动对静态代码进行分析[55]。
在中小学课程的实施中,编程教育往往与信息技术课程(计算机课程)相整合,一些研究人员开始关注编程教学的有关方法与策略。登纳(Denner)提出一种游戏编码策略Stagecast Creator,探讨中学女生在编程课程中使用该策略的学习效果,他发现,游戏编码可以很好地支持学生学习计算机科学的概念[56]。欧泽尔(Ozer)通过游戏化的翻转课堂开展编程课程,在通过14 周的教学后发现,绝大多数教师对游戏化的翻转课堂编程教学感到满意[57]。塔贡(Tugun)等研究了翻转课堂模式对学生开发数字游戏的影响,研究发现,与传统实验室环境相比,翻转课堂模式更容易得到学生的青睐[58]。
近年来,越来越多的研究转向将编程中强调的计算思维与其他学科进行整合。斯坦福教授罗伊·皮(Roy Pea)指出,编程是学习计算思维的关键工具,将编程教育与STEM 相结合,可以让学生更好地开展STEM 学习[59]。2018年12月,美国白宫和STEM 教育委员会(The Committee on STEM Education,CoSTEM)联合发布 《制定成功路线: 美国STEM 教育战略》(Charting a Course for Success:America’s Strategy for STEM Education),报告提出了美国STEM 教育2019-2023 的五年战略计划(见图2)。其中,在培养公民的计算素养中提到,推进计算思维融入所有学科,鼓励为儿童提供在正式与非正式学习环境中培养计算思维的机会,同时,加强教师的专业发展及其计算思维。
图2 美国STEM 教育的实现路径[引自《制定成功路线:美国STEM 教育战略》(2019-2023)[60]]
在学科融入等研究层面,卡恩(Kahn)等利用编程环境ToonTalk 向9~13 岁的小学生教授“无穷”这个数学概念。研究表明,精心设计的编程教学,可以帮助儿童建构和解释程序,从而达到学习数学概念的目的[61]。伊思瑞尔(Israel)对编程与小学科学课程进行整合,进行了多个案例的质性研究。研究发现,不同的教学环境需要不同的实施模式,持续的教师专业培训能够增强教师的参与能力,同时,残疾学生或贫困学生也能够受益于计算机教育[62]。伯克(Burke)发现,Scratch 可以很好地和儿童写作活动结合起来,使得编程教育能与英语教学相结合[63]。布莱楠(Brennan)从社会学的视角,寻求学习者能动性与社会支持间的动态平衡,尝试探索最大化发挥学习者能动性的路径,以此提升学习者的计算文化适应力。研究还提出了五项支持编程学习者能动性发展的策略,包括引入可能性、鼓励实验、支持资源获取、培养与他人协作以及创造反思的机会[64]。
近年来,亲子结对编程吸引了研究人员的目光。林梅泉和刘淑芬利用“多案例法”,研究父母和孩子如何在MSWLogo 中学习编程并开展相互合作。研究表明,尽管三对亲子表现出不同的互动模式,但父母和孩子在编程中会自然形成一种特殊形式,父母和孩子分别扮演了“评审者”和“驱动者”的角色。在此模式下,儿童能以更系统的方式编写程序,并且花更多的时间在分析和设计上,编写的程序更紧凑、结构更合理、错误更少。与孩子的单独学习相比,亲子合作中的儿童,往往更多地反思他们的解决方案,并且参与的父母和孩子都非常乐意学习协作计划[65]。菲赛克斯(Fessakis)等利用33 个Logo 编程任务,开展了亲子结对研究。结果表明,协作编程能够促进学生以更系统、更有逻辑的方式编写程序,而不是仅仅停留在调试与修补程序上面。孩子们会花更多的时间进行分析和设计,这对于成功解决问题至关重要。此外,协作编程可以增进亲子之间的相互理解[66]。
除此之外,研究学者还关注到在编程教育中对学生心理效能的评估,探索儿童编程学习结果与学习过程中的各种心理因素的相关性。例如,推理能力、问题解决能力、元认知能力、学习动机、学习态度、自我效能等。王秀莺开展了Scratch 教学对初中生自我效能和学习成就的探索,以97 名初三学生为实验对象,发现学习者的Scratch 学习成就在后测有显著的提升,同时,自我效能与学习成就之间呈现一定的相关性[67]。潘培钧和赖阿福探讨了基于不同学习策略(个别学习、合作学习)的Scratch 程序设计,对小学生问题解决能力的影响,并在312 位五年级学生中开展实验研究。结果发现,合作学习策略能够提升小学生的问题解决能力,在Scratch 学习成就上,合作学习组优于个别学习组[68]。董炳信等利用布鲁姆分类理论,来探索合作学习对程序设计课程中学生认知能力的影响。结果显示,合作编程能够有效提升职业学院学生的认知层次,因此,教师可以根据学生的认知层次调整教学策略,以提升学生的学习成效[69]。索伊勘(Soykan)通过编制并发放“青少年编程自我效能量表”发现,接受过编程教育的学生与没有接受过的学生相比,具有更高的自我效能,并且超过一半未接受编码教育的学生表示,他们希望参加这门课程[70]。
近两年,随着创客运动席卷全球,国内外掀起了一股创客教育的研究热潮。创客教育在广义上是一种培养创客精神为目标的教育形态; 狭义上则是一种以培养青少年学习者创客素养为导向的教学模式。在创客教育实践中,往往包含教育机器人、3D 打印等能够利用技术将创意转变成现实的工具或程序,这与编程教育更是密不可分。
国外的代表性案例有美国维尼亚地区高中(Vineyard High School)的创客教育,国内代表性案例包括浙江温州中学、北京景山中学的创客教育[71]。2014年1月,在美国的创客展览会上,美国维尼亚地区高中展示了小型电动卡丁车项目。该项目由五名毫无工程车制作经验的学生,利用有限的素材,在教师的指导下共同完成。项目实施过程运用了数学、物理和机械学知识,充分发挥了探索和创新精神[72]。在温州中学开设的系列创客教育课程中,有多媒体编程、电子制作、网页编程等编程相关内容,受到了世界范围内的关注。景山中学研发出来的系列机器人课程,注重培养学生创造兴趣与能力。此外,英国威尔士技术营地(Technocamps)作为英国最知名的创客教育基地,为11~19 岁学生提供编程、机器人、游戏设计以及应用开发等各项内容[73]。
在研究方面,王滨设计了项目教学法指导下的图形化编程课程教学活动,并且通过实验证明,这种方法能够激发学生的学习积极性,提高学生的创新精神以及团队协作能力[74]。于宝东利用Scratch 构建了小学信息技术教学模式,发现创客教育理念的应用,能够调动学生的学习兴趣和积极性,提高学生的创新思维和操作技能[75]。此外,黄德初探讨利用Mixly 电子创意编程来促进中小学生信息技术应用能力提升的应用策略[76]。李健辉利用积木式编程工具开展中小学创客教育[77]。范利玛探讨农村小学创客教育理念下的编程教学[78]。褚(Chu)在创客教育的思路下,从自我效能,动机和兴趣的角度,来探讨如何培养8~11 岁的小学生成为创造者[79]。
2018年12月,HackerBank 在14 多万开发者的基础上,对科技行业中女性开发者进行了调查,报告指出,当前女性科技工作者的比例比1983年多了33%,然而,男性比女性更倾向于选择计算科学[80]。根据NSF(2015)报告,各学科领域的学位授予存在明显的性别差异,特别是计算机科学领域,本科毕业生中女生比例仅为18%,工程类为19%。受社会文化影响的性别差异,这一倾向在学科和职业选择上充分体现出来[81]。
一些学者通过案例研究表明,学生计算思维发展水平与性别无关。不过,女孩若想达到与男孩同等的水平,则需要花费更多的练习时间[82]。马斯特(Master)等研究发现,男生和女生对计算机科学和工程学的思维定势,在很小的时候就己经存在,这种思维定势会影响女生对这些领域的兴趣和自我效能。性别差异在计算机科学领域客观存在,不仅是女生持有这种观点,男生也表示了强烈地认同[83]。有学者在对287 名4~6年级小学生进行了编程概念化测评时发现,男孩对于编程节目的兴趣比女生更为强烈[84]。然而,克莱罗谷(Kalelioglu)借助code.org 平台进行编程教学,并对32 名小学生的反思能力进行了分析。研究发现,经过编程学习后女学生在解决问题方面的反思技能有所增加,并且对于编程表现出与男学生一样的积极态度[85]。
因此,教育者呼吁要为女孩提供更多的编程机会、提高女生的参与动机,以消减社会偏见带来的领域知识选择差距。在课堂中,教师也要更多关注到女孩的表现,给予及时的鼓励和反馈,以提升她们的学习兴趣和自我效能感。
综上,为了更好地适应智能时代的发展需求,国际上有代表性的国家与地区均已在青少年编程教育领域有所举措,出台了国家层面的政策和规划,并且通过一些有影响力的项目来推广青少年编程教育实践,相关的研究也如雨后春笋般涌现。在我国2017年出台的《新一代人工智能发展规划》中,明确指出要在中小学设置AI 相关课程,逐步推广编程教育,鼓励社会力量参与编程教学软件、 游戏的开发和推广。2019年3月,教育部公布了《2019年教育信息化和网络安全工作要点》,同样指出将开始推动在中小学阶段设置人工智能相关课程,逐步推广编程教育[86]。但我国青少年编程教育仍处于起步发展阶段,在相关的课标制定、课程建设、教材研发,以及人才评价等领域,都还需要投入大量人力、物力来推动。
基于当前国际青少年编程教育领域的现状、热点与趋势,本文尝试对我国青少年编程教育的发展,提出了一个面向智能时代的多渠道实施策略框架(如图3所示)。内容包括四个方面:(1)加快编程教育领域的课程标准和内容制定;(2)确保编程教育在中小学及相关校外机构的实施;(3)加强中小学编程教育的师资培养和在职培训;(4)开展真实情境下青少年编程教育的实证研究。
图3 智能时代我国青少年编程教育的实施策略框架
青少年编程能力的培养是一个循序渐进的过程,各国尝试将该过程分解到不同的年龄层次(例如,澳大利亚分为三大年龄组,英国分为三阶段学习)。因此,我国也需根据义务教育学制的规定以及学生身心发展规律,制定适应国情的分阶段编程教育的课程标准和教学目标。一般而言,低段年级编程教育的开展,可以从游戏化编程入手 (如,Scratch、App Inventor 等可视化编程),以帮助学习者建立真实与虚拟世界之间的联系,在参与游戏的过程中构建编程意识,了解编程技术的重要性以及培养基本的数据素养;中段年级可以渗透更复杂的编程技能,例如,选择、循环、逻辑推理等,帮助学习者建立基本的编程思维以及解决问题的能力; 高段年级的学习则需要转向对更为抽象问题的分析,同时,引导学生思考技术对社会、家庭等带来的伦理影响,提升学生在技术社会中的文化修养、道德规范以及明确应当承担的责任与意识(如,安全地使用技术、保护个人隐私等)。
除此之外,编程教育教学内容的制定,对于大规模推广编程教育具有重要意义。近年来,我国市面上涌现出形形色色的编程课程辅导材料以及教刊,虽然这让青少年编程教育的教材从无到有,体现了时代的进步,但已有教材的设计是否符合学生的身心发展和认知规律,目前尚无专业化的评估。就目前已有的教材来看,往往集中于某一编程工具的介绍与使用,真正体现思维能力培养,尤其是“计算思维”培养的编程教育教材寥寥无几。
高质量的教学内容往往需要多方协商来共同制定,需要具有国际视野的编程教育研究人员在宏观层面上,进行课程标准解读、关键内容设计等方面的整体把关,也需要具有丰富编程教育经验的一线教师和教研人员,对具体单元内容及活动进行精心的设计与开发。在教学内容的制定原则上,要紧紧围绕编程教育领域出台的课程标准,体现不同学段内容的层次性和连贯性。但在具体内容和形式上可以百花齐放,体现地方和学校特点;同时,鼓励编程教育与不同学科融合的一些校本教材的开发。
值得注意的是,目前在线学习的广泛应用,为青少年编程学习提供了一大契机。作为传统面对面学习的补充,在线学习平台能够很好地克服时空的限制。因此,编程教育的在线内容制定,也是值得研究和探索的领域,前提是需要遵循在线学习规律以及多媒体学习规律。考虑到很多在线编程教育活动需要通过游戏化情境来设计内容,因此,对内容的制定也需要符合游戏设计的规律。
2017年发布的 《新一代人工智能发展规划》指出,要在全民智能教育的大环境下逐步推广编程教育。不过除了浙江省率先在高中阶段将编程教育融入信息技术学科,并配有相应的学科内容与评测机制之外,其余省市/地区并未将编程教育正式融入高中常规课堂。在初中及以下学段编程技能的习得,往往仅靠兴趣拓展课,或者是面向个别学生的竞赛来驱动,并未形成全面铺开的编程教育课程建设。
因此,在课程规划方面,中小学应当主动开展符合校情的编程教育课程实践。由校长等领导牵头,教务处等部门开展课程规划,严格将编程教育落实到每个学期。积极引进或培养专职编程教育教师,同时引进或研发适合本校的编程教学内容。通过促进学校之间、校企之间、学科之间教师的沟通合作,来提升教师编程教学能力。此外,积极鼓励、组织参与各类国家、省市级学科竞赛活动,并以此提升学生的学习兴趣以及学校的知名度与影响力,更能够吸引具有专业特长的学生加入,形成良性循环。
由于当前校内编程教育课程体系尚未成型,校外编程教育实践对于青少年学生学习编程起到了举足轻重的促进作用。近年来,各类人工智能众创基地、青少年活动中心、创客教育场馆、科技馆、科学教育营地等场所,都为青少年搭建了各式各样的编程学习平台。但校外编程机构同时存在“课程同质化严重、教师水平参差不齐、盲目竞争”等痛点问题,需要引起相关部门的广泛重视,并受到市场的监督。
作为各大活动中心而言,首先需要充分考虑自身特色,确定目标群体,针对不同年龄段的中小学生推出科学、系统的课程。此外,必须注重师资配备,要以高规格、严把关的标准招募教职人员。同时,也要根据不同师资的特长情况,量身定做各类在其能力范围之内并且兴趣所在的课程或项目。如此,才能够促进教师专业水平的极大发挥,为学生学习提供基础的教学保证。与此同时,不妨也可以同高校、企业等合作,推出趣味性与教学性兼宜的学习内容,充分发挥社会教育资源,真正实现全民智能化教育,通过培养复合型人才,打造我国人工智能人才高地。
在世界范围内,青少年编程教育都属于起步阶段,相关的师资培养是关键性制约因素。据英国的调查发现,英国青少年编程教育缺少合格的计算机教师以及配套的支持措施,大多数编程教育的教师都是从其他领域“借来”的[87]。为了应对这一问题,英国也将教师技能培养提升到战略层面,提出建立“CAS卓越网络”(Computingat School Network of Excellence),致力于解决教师信心与经验不足、教育学知识欠缺、相关技能薄弱等问题[88]。
面临同样境遇的我国青少年编程教育,也需要进行职前和在职师资培养和培训。对于职前师范生的培养,应在教育技术学专业(或计算机科学等相关专业)的培养方案中,加强编程语言、人工智能、机器人、编程教育、机器人教育、创客教育等相关内容。为了更好地适应未来的青少年编程教育,在职前师范生培养方案中,还可以增加中小学信息技术课程(以及编程教育课程) 标准解读和现代教学设计理论的相关内容。此外,考虑到游戏化元素或机制是青少年喜爱的学习方式,也是当前国内外编程教育中经常采用的内容,在职前师范生培养中,既可以增加教育游戏设计的教学内容,也可以通过特定的教育游戏来学习相关课程的教学内容,从而让师范生们对游戏化教学设计有更多的体验和反思,这对其日后的教学实践具有重要的影响。
学校开展编程教育的在职教师,一般是学校原来的信息技术老师,作为传统意义上的副课教师,他们往往存在“人少事多、身兼数职”等问题,即教师数量难以覆盖到全校学生的日常教学,即便可以,课时方面也会受到一定的压缩。同时,信息技术教师还肩负着学校网站维护、多媒体设备运用和管理、新闻录播和报道等职责。此外,部分编程教育的内容也未融入到传统课标和教材中。因此,对于在职教师而言,他们需要花时间以自学的形式,接受系统培训编程语言及教学设计等相关内容。这种在职培训十分必要,据英国的一项调查显示,在86 名受访小学教师中,有71%的小学教师认为,他们应当接受“编程教学知识”的培训[89]。在职教师可以借助教育部强制要求的三年或五年培训计划,选择线上或线下的编程技术或编程教学技能方面的课程,通过积极参与新技术的培训,来提升自身的教学能力。同时,组织教师培训的单位或机构,需要充分意识到编程教育、创客教育以及机器人教育等内容是智能时代教师培训,尤其是科技教育领域教师培训的重要内容,应及时补充相关内容进入培训方案。国家和省市层面可以制定一些激励机制,鼓励在职教师参加相关培训或竞赛。
此外,考虑到校外编程教育培训机构对青少年编程教育影响巨大,教育管理部门也应对校外编程教育培训机构的师资进行一定的监管和培训。可以考虑实行编程教育行业教师资格培训和认证,培训的内容既包括编程语言的学习,也有对编程教育教学设计、教育学、心理学等领域的知识和技能培训,以此保证从业教师的教学质量。
综观国内外现有的青少年编程教育研究,我们不难发现,国际上该领域注重实证研究,而国内学者更多聚焦于创客教育、STEM 教育的本土化探讨,以及青少年编程教育的价值取向等研究[90]。然而,为了让青少年编程教育实践更加科学有效,我们必须让青少年编程教育遵循青少年成长规律、 学习规律和认知规律;同时,也要遵循编程语言的教学规律,如果是在线开展编程教育,还需要遵循在线教学与在线学习规律。此外,青少年阶段编程教育的发展必须关注到年龄的影响,关注到不同性别、不同地域等因素对编程教育的影响。所有这些都离不开研究,只有通过大量基于真实情境的实证研究,才能不断探索编程教育的各类影响因素,通过深入挖掘拓展应用典型,从而不断拓宽研究思路与视角,从各类研究中验证并推广行之有效的策略与方法,为我国青少年编程教育的发展,提供更好的理论与实践支撑。
国内外青少年编程教育领域的研究热点,聚焦于编程对青少年计算思维等高阶思维能力的影响,编程教育融入中小学各学科发展的情况,编程对亲子关系以及学生心理效能的影响,编程与创客教育的整合以及性别对青少年编程学习的影响等领域。而国内在该领域的研究,在一定基础上呈现出侧重价值探讨、追随国际热点等特点。
在未来数年内,青少年编程教育这一新兴领域的理论发展和实践应用,都将会迎来一个飞速发展的时期。在理论层面上,该领域需要探索青少年编程学习的认知规律,基于这样的认知规律以及对该领域关键概念的理解,来编制青少年编程教育的课程标准和核心素养内容。同时,还需要探索适合青少年编程教育的教学规律,需要构建适合不同群体和针对不同编程内容的多样化编程教育模式。在实践层面上,该领域亟需一大批专业的青少年编程教育教师,因此,在我们现有的师范教育中,需要考虑编程教育教师的培养内容和培养模式。在现有的教师培训中,也需要增加适量的编程教育教学内容。此外,校企合作以及大中小学合作开展青少年编程教育实践,也将是未来发展的重要趋势。