自2015年始,“少儿人人学编程”的热潮由国外蔓延到国内,少儿编程培训市场勃然兴起。目前编程教育存在两种主流模式:一种是英美等国模式,把编程当作单独的学科来进行教育教学;另一种是芬兰、新加坡等国模式,以学科融合的方式进行编程教育。也就是说,英美等国家少儿编程的具体教学工作还是放在了各级各类学校,这与我国少儿编程培训完全是两回事。现时代,信息素养对于人才培养的现实性及重要性不言而喻,但编程学习的紧迫性和必要性是否就如教育培训市场所宣传的“无法与机器沟通将不能成为未来的主人”“别让孩子输在新时代的起跑线上”“未来,不会编程的孩子就像现在不会英语的孩子一样让人焦虑”这般严重呢?编程能力一定要花费大量的财力与精力通过校外培训去获取吗?
本文将从教育学科视角对这种在我国被夸大了的人机语言学习的重要性及少儿人人参加课外编程培训的必要性进行辨析审视,还给少儿编程学习一个理性的导向及氛围。
少儿编程是什么
编程学习主要是指对编程过程所依托的编程语言——人类与计算机对话的一种语言的学习。编程语言是按照一定的语法规则、由表达各种意义的运算对象和运算方法构成的计算机高级语言,是一种接近于人类自然语言和数学语言的程序设计语言。也就是说,学习编程语言类似于学习一门外语的语法,只是提高效率的工具。
语言是思维的直接现实。几乎所有的少儿编程培训机构都宣称,少儿编程主要学的是编程思维以及解决问题的能力,而非编程语言本身的学习及高深专业代码的编写。因此,有必要进一步明晰“编程思维”概念。编程思维也称计算思维(computational thinking),是指包含了问题表达及由计算机执行的一套解决问题的方法[1]。编程思维并不是计算机的思维,而永远是人的思维。谷歌公司将计算思维概括为四种类型:分解问题、模式认知、抽象思维、算法设计。我国学者指出计算思维是一种解决问题的思维过程,能够清晰、抽象地将问题和解决方案用信息处理代理(机器或人)所能有效执行的方式表述出来[2]。尽管定义形式各异,但可见编程思维的本质是“解决问题的一种方法”,是一种复合型过程思维。
从1968年依托LOGO编程语言的小海龟绘图(Turtle Graphics)诞生,到2007年首个面向儿童的编程语言Scratch发布,计算机语言已经越来越接近人类思维,编程语言也越来越智能化,这是少儿编程得以实现的前提;信息化技术的日新月异和人工智能的普及,对未来人才提出了诸如信息的提取、处理和分析以及解决问题的能力等“特殊品质”要求,这是少儿编程日益受到重视的现实背景。可行性与现实需求两个条件的变化,使得少儿编程教育得以在全球教育领域兴起。
编程教育是时代发展的产物。编程教育特点符合以儿童发展为中心的学生观,以生活为内容的课程观,以解决问题为方法的教学观。编程教育不是某一种教学模式,而是以人机对话平台为载体,结合诸如设计思维(Design Thinking)、基于问题的学习(Problem-Based Learning)、基于项目的学习(Project-Based Learning)、做中学(Hands-on Inquiry Based Learning)等新教育理念及模式,以达成计算思维能力的养成。从这点看,它又是以心智或思维训练为目标的教育。编程教育的目的不是“learn to code”,而是“code to learn”,即学会“举一反三”,将计算思维能力迁移到其他领域的学习中、去解决人工智能时代生活中遇到的其他问题的能力。
“少儿编程培训热”背后的理论及实践困境
国内“编程培训”火热进行的同时却遭遇理论及实践困境,具体表现在以下方面。
(一)存在合理性困境
少儿编程并未凝练出“排他性”的核心能力目标。少儿编程学习所追求的“核心素养”到底指什么?目前少儿编程培训的具体学习目标有多种提法,如观察力、想象力、创造力、逻辑思维力、问题解决、空间思维、判断性思维、序列与条件、调试操作九大能力的培养;又如思考问题全面、有条理、深入、毅力、耐心、专注、严谨等。虽然目标更具体,好像什么都说了,但实际上又什么都没说,因为这些都不是编程教育所独有的真正内涵性要素。
编程思维是解决问题的一种方法,是一种复合型能力,其所包含的核心素养由表及里、由易到难,应当主要表现在信息的提取与处理和基本算法设计与理解。总体而言,编程思维是一种过程思维,而硬要被市场打造或虚构成一种结果性的具体能力,无疑会使基于形式训练而存在的编程教育陷入存在合理性困境。
(二)内容合理性困境
少儿编程一般是针对小学及以下幼儿设计的编程模式,把原来复杂的英文代码编程语言转换成图形化、指令化、模块化的方式,依据儿童的心智程度,设计一系列在人机交互模式下以游戏闯关、趣味数学、图形图画等为主要内容,以问题解决为目的的“项目”。因此,适宜儿童智力特征的趣味性是其第一原则。这样一来,有趣的少儿编程内容就成了“居间的事物”,应该“通过使学生了解存在的联系,从而使材料有兴趣”,而不是“通过外部的和人为的诱因使材料有兴趣”[3]。如果少儿编程内容过于强调趣味性,就会淡化编程教育的真实目的;如果为了使少儿编程居间于儿童与编程思维或计算思维之间,就容易强行“把某种富有魅力的特征加到本来不感兴趣的教材,用快乐行贿,引诱儿童注意和努力”。“少儿编程到底算不算编程”是有争议的,有部分家长及教师认为Scratch等少儿编程工具太简单太小儿科了。这种质疑的背后是对少儿编程培训内容严肃性的考问。此为少儿编程培训所遭遇的内容合理性困境。
让孩子直接学习目前流行的Java、C/C++等由字母代码组成的程序语言确实没有太大意义,毕竟作为工具的编程语言不断更迭是必然现象,若干年后它们将会被新的语法结构及规则所替代。因此,编程教育将重心放在了形式训练上,倡导“编程化学习”,强调代码字符和程序语法背后的核心素养,这是超越工具语言学习的“术”而应去追求的“道”。
(三)操作合理性困境
编程教育首先是教育。课程体系是编程教育的核心内容,是保证其健康发展的根本。没有持续性、体系化的课程,都算不上少儿编程教育。目前我国少儿编程培训市场火热,但规范性不足,尚未形成科学的课程体系和培训理念,课程设置良莠不齐,未形成基于教育科学理论的相对统一的标准,甚至存在虚假宣传、违反广告法的情况。课程体系的混乱还表现在师资短板上,培训市场并无行业资质标准,从业者大多只具备信息科学的专业性而不具备教育性。
对编程思维的理解及定位不清晰首先影响了课程目标的聚焦,进而使课程体系及培训理念陷入混乱。一些培训机构根据皮亚杰认知发展理论,认为孩子满7岁便处于具体运算阶段,可以通过可视化图形编程,以“积木”搭建的形式培养孩子编程思维。从教育学视角来看,这一学习过程需要以孩子的抽象思维能力为基础;但是同样根据认知发展理论,7-12岁的孩子并不具备抽象思维。理念矛盾的背后还揭示了少儿编程教育适宜年龄的问题,培训市场的鼓吹趋向少儿编程低龄化,已经扩展到了3-5岁群体,不得不说这种资本绑架教育的行为极不利于编程教育的长远发展。
在基础教育阶段,编程思维究竟是认知发展的高阶段结果还是促进认知进一步发展的基础?从形式教育角度看,编程思维无疑是综合了逻辑思维等思维能力的高级思维,但这样的高级思维需要学科实质内容的支撑才能开花结果,因此,编程教育的专业性与教育性需要进一步融合。此为少儿编程培训所遭遇的操作合理性困境。
毋因“少儿编程热”忽视非逻辑、想象力、生活经验的重要性
编程教育作为信息素养提升的一个重要组成部分,在当代基础教育中的重要性不言而喻,但少儿编程培训市场火热现象正如上文所分析,这种人机语言的学习是被夸大了的。下面将从教育学视角对此展开辨析。
(一)生活世界中非逻辑比逻辑更重要
生活中,我们除了要与机器对话,更要与人对话,前者只是为了利用机器解决某个问题,而后者才是人类生活本身及其所创造文明的本质。生活语言和人机语言这两种对话方式对逻辑有着不同的要求。在日常生活中,语言的理解不在于其多么符合“逻辑”,或者多么完美精确,而在于语境,在于放置于“上下文”之中,在于回归到整体情境和实际生活情境之中去理解,当说一句话“不合逻辑”的时候,实际上已经是将语言脱离了生活[4]。人们日常生活中的实践逻辑包含了科学逻辑,但远不止这些,生活不是单纯的逻辑,也允许大量非逻辑的存在。对处于认知及人格成长期的少年儿童来说,他们在成长过程中所接受的教育不应是片面且过度的,编程训练对他们绝不是最重要的,更不可以借此忽略甚至替代生活世界中的实践逻辑。
现实生活中的实践逻辑与隐喻[5]的思维方式非常相似。作为一种思维方式,隐喻是直接认同,逻辑是层层扩展;隐喻诉之想象,逻辑诉之规则;隐喻追求独特和生动,逻辑追求严谨和雄辩;隐喻善于创造,逻辑长于说明;隐喻的阅读依赖于文化背景和个体生活经验,而逻辑的掌握则依赖于专业知识的学习和应用……儿童面对的首先是一个生活世界,所使用的语言是日常语言,因此对他们来说,直接认同、想象、独特和生动、创造、文化背景和个体生活经验等非逻辑秉性在他们身上是重要且必需的存在。其实对成人又何尝不是这样,生活世界和人的问题的深层把握是很难通过逻辑途径来完成的,日常语言本身就携带了大量隐喻,消解甚至对抗着科学语言的“逻辑化”“客观化”和“中性化”。
(二)儿童想象力比程式化更重要
编程教育虽然属于以科创精神为特点的现代信息技术课程的主要内容,但编程思维不等同于创新素养。标准化、程序化的解题方法有可能导致机械化、单一化的思维方式。如果任由市场把少儿编程培训拔得过高,儿童过早、过度参与编程培训,那么宣称提升科技创新能力的编程培训反而有可能会禁锢思维、扼杀孩子的想象力。
有人认为生活中编程思维的运用随处可见,比如整理明天上学的书包:分解(拆解问题)——看课程表,取出今天的书、放入明天的书。模式识别(观察规律、趋势)——发现今天和明天上的课有些是重复的。抽象(建立自己的模式)——书包里保留今明两天重复上课的书,只取出明天不上课的书,放入明天上课的书。算法(设计步骤解决问题)——判断今明两天是否有重复的课,如果没有,取出今天所有的书,放入明天上课的书;如果有,保留重复课书本,取出明天用的书本,再放入其他明天上课用书。这些在科学话语限制下的种种表达使得少儿编程的培训、编程思维的学习显得既“生活化”又“科学化”,但如果将生活中的简单常识问题如此程式化、复杂化,难道不是一种自我束缚,不会摧残孩子的想象力吗?
年轻人富于想象,而老年人长于推理。儿童本应是充满童真、想象力和感性的,有条理和思路清晰是随着年龄增长而逐步增强的。想象力来源于早年发展所获得的常识,而常识产生于介于真假之间的“或然性”。意大利思想家维柯就强调了“或然性”[6] 对想象力的重要性,并反对运用批判的方法在维护真理、摆脱谬误的同时,还从头脑中清除了所有或然性。教育者绝不应当剥夺孩子的这种想象能力。为了保护想象力,“常识必须尽可能早地从青年人那里发展起来。要不然,在成年之后,他们的日常行为就会变得怪诞而狂妄”[7]。因此,过早接受强调真理性、客观化的编程训练,势必会压缩基于或然性的常识的生存空间,从而剥夺并影响孩子的想象力。
(三)编程技能并不需要“童子功”
上海STEM 云中心主任张逸中认为学编程是急不出来的,“开窍”了才学得好,超前学习反而有可能导致一知半解、思维定式、后劲不足[8]。有些技能如竞技类体育项目、乐器演奏等,需要在童年期依靠肌肉记忆、听觉记忆等打下坚实的基础,因此要靠童子功,但编程学习不是。少儿编程不是依样画瓢,更多的是习得一种在人工智能情境下、依靠人机对话方式达成解决问题的思维能力,而思维运用与提升都是建立在一定基础知识之上的,需要多种基础能力的搭建与匹配。思维的开始阶段是经验[9],情境应该具有引起思维的性质[10],生活中的经验感才是教育的逻辑起点。
对少儿来说,首要的事情是尽可能多地去感受体验外在生活,注重学习与现实世界的联系,而不能在儿童还“脑袋空空”的时候让他们一头扎进人机交互界面,被程式化人机语言将心智固化。总之,编程技能并不需要“童子功”,编程APP和类似玩具不应取代传统童年游戏活动。皮亚杰的认知发展理论认为,儿童成长过程中每个阶段都有必须完成的任务,否则就会为将来发展的自我统一性埋下危机。因此,我们应该顺乎自然地教给孩子科学,这样,孩子就渐渐地而不违反天性地习惯于按照他们的年龄能力来推论。过早、过度投入学习编程,不仅事倍功半,还会对儿童的全面发展形成诸多潜在不利影响。如很多孩子的绘画作品画的是人机交互画面,这虽然可以看作人类在时代特征投射下的一种自适应,但更是信息时代电子产品对人的异化、儿童生活经验贫乏所产生的现象。
编程思维是一种复合型过程思维,强调通过整体和学习的过程去获得,不能将其分成若干具体单项而进行基础训练。整体绝不是部分的简单叠加。除了生活经验之外,学校的基础课程可以为编程思维提供足够的认知基础能力的保证,如自然语言的读写及理解能力、数理逻辑能力、分析归纳能力等。再加上学校信息技术方面的课程,对于启发孩子思维训练及提高信息素养已然足够。市场上少儿编程培训内容主要是生活中常见的图形可视化游戏、数学趣味题等在一起混编而成的“项目化学习”模块,用“操作化指令”去完成项目式的闯关任务,其实是使用网络电子游戏的外壳,只是内容换成了智力趣味题。此现象是编程培训市场为迎合“超前学习”而作出的削足适履的行为,其结果必然是足伤而履弃。信息教育与少儿编程培训是完全不同的概念,对适龄儿童进行适切的编程思维训练是合理且有必要的,但炒作概念、夸大效用、以盈利为目的的“编程”营销是应该被抵制的。在规范少儿编程培训市场、健全市场准入制度的同时,我们也要反省学校教育的信息类课程建设是否存在落伍、形式化、枯燥等问题,存在一定程度的“缺位”,给“少儿编程培训热”留下了上位空间。
编程培训只应是面向特定人群的小众化项目,如同音乐、舞蹈等兴趣班一样平常,不能走向无序无度的资本赛道和竞赛狂欢。人人都要会驾驶,但不必人人都会汽车修理。过度追捧所谓“通往未来的语言”,将人机语言的“逻辑化”“客观化”和“中性化”过早植入少儿的全部心智,不仅焦虑了家长,还会异化了孩子,最终也会使编程教育不可避免地陷入类似“全民奥数”的怪圈,成为教育花园里盛开的一枝罂粟。如何在实现国家科技强盛的同时培育出健康、有趣的灵魂,这是值得我们去反思的。
(郭学军,系北京大学教育学院博士研究生,新疆石河子大学师范学院讲师;汪传建,系新疆石河子大学信息科学与技术学院教授、博士、硕士生导师)
《人民教育》2019年第10期