我是一个编程老师。
因为工作的关系,我经常听到、看到不少同行和家长在聊少儿编程的好处,说编程是现在每个孩子都要学习的课程,甚至有人把这门科目誉为“包治百病的一贴灵”。
那么,少儿编程真的有那么好吗?是不是有言过其实的地方呢?
作为一名奋斗在编程教育一线岗位的老师,我却不想将少儿编程捧上神坛,因为我觉得编程本身并没有神乎其技的功能。就目前而言,它只是一个课外的兴趣班而已。
但作为兴趣之余,我觉得编程还是有些内容值得探讨的,我想尽我所能客观地聊一聊少儿编程。
常见问题一
孩子学编程,对思维有什么帮助?
我的看法是:少儿编程是一颗种子,是在应试教育的土壤里,埋下应变教育的种子。
从小到大,我们接受的应试教育告诉我们,我们学习的一切都是为了考试。
而绝大部分考试的知识点,考验的不是思维,而是记忆。除了文科的要背,就连数学、物理这类注重思维的课程,大部分时候也是用套公式的方式解决。把公式背对了,题型做过了,这道题就算会了。
所有的内容,哪怕是开放性的命题,都会给你一个标准答案,而所有游离于标准答案之外的都是错!
网上关于语文阅读理解的真实故事,却像个笑话一般。
这种本末倒置的方式,只是把学生变成了考试机器,把求知变成了死记硬背,却忽略了考试原来只是检验学习效果的一种手段,学习的最终目的是为了能够让孩子提升各方面能力!
以至于一些孩子离开考试环境后,会变得无所适从,在面对实际问题的时候,并没有一套行之有效的、足以解决问题的方法论。
在做编程老师之前,我也曾混迹过职场。当时,同为管培生的某个同事表现欲很强,主管说什么他好像都能快速消化。然而,主管布置给他的工作,他却经常弄得一塌糊涂。
主管问责时,他却说:“这个东西我没做过,我怎么会做?你又没有教过我……”当然,最后他连试用期都没通过。
一听都会,一做就废。这是许多人都曾经历的痛楚,究其原因,就是我们原先接受的教育从来没有教过我们如何解决问题。而现实遇到的问题却不再像考试做题那样,会有单一的标准答案和规律的解题套路,真正的游戏规则无疑复杂得多。
你知道,为什么很多人都会觉得编程难吗?
因为它不同于我们一直接受的应试教育(一个问题背一个答案),只靠记忆就能应付考试。而编程却告诉了我们:一个问题,可以有许多不同的解法。
这种我们最需要的、能够帮助我们解决问题的能力,我们却几乎从来没有在应试教育里受到过训练。
某OJ平台的题库(专门做编程竞赛习题)
同样一道题的解法,代码的长度可能相差好几倍
因为1000个人,就有1000种不同的代码
前清华校长陈吉宁曾说过:中国可以培养太多A类学生(学习成绩好,表现出色)。但这类学生无法适应快速变化的社会,解决问题的能力很差。他们只能解决自己曾经见过和做过的问题,如果碰到新的问题,就不知道从何开始着手。
所以,应试教育的副作用时不时地就会表现出来。
今年2月,中国队折戟罗马尼亚数学大师赛(全球最顶级的数学国际赛事之一),作为奥数传统强国,只拿到了团体第6的名次,无人问鼎金牌。
失利的原因在于中国选手几乎被比赛的第三题“团灭”,除了一位同学拿了1分,另外5名同学全是0分。
而获得金牌的9名其他国家的选手,有7人在这一题上获得满分7分。
诚然,这题一定是有难度的,但以中国选手在其他5题上的表现来看,理论上不该如此惨败。只不过,靠刷题见长的中国选手,虽然做过的题很拿手,但面对陌生的题型,不擅解决新问题的缺点也就暴露了。
旧的问题得心应手,新的问题无所适从。
这些都是缺乏编程思维的原因。
常见问题二
什么是编程思维呢?
10多年前,卡耐基梅隆大学计算机教授Jeannette Wing就曾提出这一概念。
按我的理解来看,编程的核心,不是语法,不是算法,甚至不是数据结构本身。而是如何分析问题、拆解问题、解决问题的思维方式,也就是我们分析并发现规律、建立解决问题的模型、再映射到合适的数据结构和算法上,最后根据算法写程序的过程。
这个过程中,前两步的分解和模式识别,其实还属于数学思维的范畴,而后面的抽象和算法却是编程思维所独有的,也是我们应试教学上缺少的、真正可以解决问题的步骤。
那么,编程思维是如何应用的?我举个简单的例子:
要如何用一只手表达26个字母呢?
就通常而言,我们一只手最多数到5,就算再加上复杂的手势,最多也就数到10了。怎么样?一只手要演示多达26种手势,是不是毫无头绪?
我们试着将问题拆分,一只手5个手指,要么弯曲,要么伸直,如果我们能给五个手指不同的赋值,是不是就能产生不同的排列组合呢?
由此,运用编程最简单的二进制算法,我们用一只手就能表达32个数字。
攥紧拳头表示“0”
大拇指表示“1”
食指表示“2”
中指表示“4”
无名指表示“8”
小拇指表示“16”
将1-26与26个字母一一对应,就可以得到一组很容易理解的简单手势。
其实,不仅是这种智力题,在我们的日常生活中,小到炒菜之前先把饭煮上(多线程),大到治国平天下(秦国张仪用连横破坏六国合纵,其实是分治法),都能体现出编程思维。
别觉得我是生搬硬套,编程的各种经典算法,诸如暴力法、递推法、枚举法、递归法、贪心法……提供了我们许多解决问题的途径,而这些算法不仅是编程会用到,甚至在日常生活中也会给到我们启迪。
网上随便一查,铺天盖地都是编程天才少年的各种发明
你看,连一统天下的难题都能解决,还有什么难题,能难倒拥有编程思维的人呢?怪不得乔布斯都要说:每个人都应该学习编程,因为它教会你思考。
常见问题三
编程,会让孩子越来越聪明吗?
全球最高教育奖得主、斯坦福大学教授——卡罗尔德韦克告诉我们:普通人和天才之间,其实是思维方式的差距,普通人的固定型思维和天才的成长型思维之间的差距。
为了证明一个人的思维模式是可以改变的,德韦克教授曾对美国South Bronx小学四年级的学生做过一项实验,对他们进行了成长型思维模式的教育和训练。结果是,短短1年时间,这群学生的数学测试成绩从原来的垫底,上升到纽约州的第1名。
实验结果证实,成长型思维模式是可以教育和培养的。德韦克教授通过鼓励的干预方式,让孩子们乐于接受挑战,并积极地去扩展自己的能力,让他们相信困难和失败只是帮助自己进步的挑战,让他们对学习充满热情,让他们相信自己的潜力……
这种学习的方式会让大脑中的神经元形成新的、强有力的联结,长此以往,孩子们自然会变得越来越聪明。
这一做法,和编程的教育理念几乎不谋而合。
孩子们每次学习算法,尝试编写程序,其实都是在接受新的挑战;当他们在思考算法和筛查代码bug的时候,又潜移默化地训练了他们应对困难和失败的能力;而程序每一次成功地运行,更是在鼓励孩子,让他们继续对学习充满动力和信心……
不仅如此,作为一门专门提升解决问题能力的学科,编程会帮助我们更理性地分析利弊、更准确地抓住目标。
具有编程思维的人,不会轻易被困难吓倒,因为他们知道并相信——任何问题都是可以有解决方案的,他们也会更有勇气、毅力和自信去面对生活的挑战,不会轻易被挫折打败。
教编程的这一年来,我前前后后也教了好几十个孩子。不少家长都跟我或班主任反馈,自从学了编程以后,孩子的学习习惯变好了,各学科的成绩也有显著的提升。
就连国外权威机构也有研究表明:编程会让孩子的学习成绩整体提高30%。
我相信,这应该不是巧合吧。
常见问题四
编程,真的是AI时代的必备技能吗?
现在一提少儿编程,大家总说这是人工智能时代的必备技能。
这种说法是真的吗?我们又该如何理解这句话呢?
关于这点,华东师范大学的一位教授曾这样打比方:“从前的人是河边的牛,喝水时才到信息化的河里;现今的人则是水里的鱼,任何时候都在这条河里。”
如今的新生代,被称为数字时代的“原住民”,几乎都是伴随着电子设备成长起来的。对现在的孩子而言,信息化教育几乎是不可回避的。
如果他们只会在这些设备上玩游戏看动画,无法利用这些设备创造点什么,很难说得上是一个合格的“数字原住民”,只能算是一个熟练的 “数字消费者”。
芬兰的前教育部长曾说过:“在未来,如果你的孩子懂编程,他就是未来世界的创造者;如果他不懂,他只是使用者。”
从目前的经济驱动力来看,经济发展对信息技术的要求越来越高,包括经济、金融、医疗、教育,甚至是政府管理都需要大量的信息技术人才。就像之前的英语、数学学科一样,计算机科学已经不再是一门只是服务于应用的学科。
现在虽然不是所有工作都要用编程,但如果要用到,现学的难度很大。这也是为什么许多发达国家,把编程列入青少年教育的必修学科中。
就像二十年前,不管你是不是名牌大学毕业,只要你学习过一点C语言,能够会几行代码,你就是一个软件人才。
如果你会用烧录器擦写51芯片,那么你可能就会被当做一个嵌入式软件开发人员。
这和50年代拿小学生当知识分子是一个道理,但现在你仅仅拿着这些东西断然无法撬开求职的大门,更不要说未来了。
未来的孩子们,将会面对比一个比现在更AI化的时代。那时的他们,不仅要跟同龄人竞争,甚至还要跟24小时不眠不休的机器“抢饭碗”。
未来最容易被人工智能淘汰的几种职业
所以,我相信机会总是留给有准备的人。编程就和其他技能一样,只要学过,就一定有用得上的地方,而且不是只有当程序员这一条路,而是“编程”这一技能会在各个领域和行业中变得更加通用。
我的一个同学,计算机专业毕业后去当了公务员,当时他就一直吐槽他们的考勤系统非常糟糕。后来他索性自己动手,制作了专门的考勤系统、录入系统,优化了许多功能,也帮助同事们提高了工作效率。
现在,他已经是他们机关的红人,颇受领导赏识。
你看,会编程,或者说拥有编程思维的人大抵如此,寻找最优化方法的思维方式早已渗透进我们的血液里。而只要有使用计算机的地方,就一定会有编程的用武之地!
好啦,写的比较零散,就先到这里吧。
那么最后,话说回来,孩子到底要不要学编程呢?
我觉得作为一个新趋势,应该让孩子试着接触,如果他喜欢,就鼓励他坚持下去;如果他不喜欢,强扭的瓜,还是随他去吧!