查看原文
其他

WeChat ID guokr_kid Intro 靠谱的儿童科学教育; 有料的亲子课讲座; 干货满满的线上分享课程; 以及,大家一起来动手的科学实验 周花卷老师(本名周自恒,资深计算机技术图书译者,科普专栏作者,自由全栈工程师。曾在计算机奥赛得过奖,四岁娃的父亲。译作有《图解密码技术》《有趣的二进制》《30天自制操作系统》《代码的未来》等。) “我认为这个国家的每个人都应该学习编程,因为它会教给你如何思考。” “我们在教育领域的最大发展机遇之一就是教更多的孩子学会编程。” “编程关乎美国的未来……我们需要孩子们熟练地掌握这些技术。” 这三句话分别来自于乔布斯、扎克伯格和奥巴马。 当我们带着孩子奔走于各种培训班的时候,在大洋彼岸的美国,5.2万间教室,350万个孩子正开始接受关于编程的普及教育……现在,你在pinerest上随便一搜就会有数十个教孩子学编程的app、网站跳出来。 教孩子学编程,或者自己编程(programming),听上去好像很难很高深,实际上一点也不高深,以后也越来越不高深,为什么呢?我们看一张图片。 图里的漫画很有意思,图中的小猪是程序员,它身后的狗问:“伙计,你说你觉得编程是更像艺术呢?还是更像科学?”程序员说,“你别吵,你没看见老子正在把300行代码给复制到7个地方去吗?”狗在后面无语的说好吧。其实这部漫画讲什么呢?它想说明在某些场合下,编程似乎已经变成一种体力劳动了。当然实际上没有这么夸张,这幅漫画试图告诉我们——其实编程离我们还是非常近的,并不是一个非常高深的学问。 那么编程到底是什么呢?其实就是把怎么样做一件事情,用机器的语言告诉计算机,让计算机能听明白。从本质上看,这跟给产品写一份人类能看懂的使用说明书也没有什么太大区别。比如使用微波炉热菜,说明书会告诉你首先需要把门打开,再把菜放进去,然后把门关上,选好火力,扭个时间,等时间到了,“叮”的一声响起,这时把门打开,东西拿出来就可以吃了。 编程也是一样的道理。如上图所示,我们把人比作计算机,他手里拿的纸上写着着一大堆步骤,就像产品说明书一样,称为指令,桌子上的飞机模型就是数据。指令,或者叫程序实际上是告诉计算机对什么样的东西进行怎样的操作,在这里的什么东西就是数据,怎样操作就是指令。程序的本质其实是一套逻辑,要把这种逻辑以合理的方式表达出来。 可能会有小朋友问,听起来好像很简单,但为什么还是有人说编程很难呢?这是因为教计算机做事跟教人做事还是有区别的。 首先,我们使用的语言不一样。教计算机做事或者写程序,需要用编程语言,而跟人说话则是自然语言。虽然现在编程语言很多,甚至有一些大家接触到的编程语言非常接近自然语言(以英语为代表),但是我们也不能够认为它跟自然语言是完全一样的。在结构、表达方式上,编程语言跟自然语言还是有很大差别的。 其次,计算机能理解的逻辑的严密程度,和逻辑的组织方式,跟人讲话是不一样的。因为计算机的结构和人类大脑的结构是两种完全不一样的结构。编程需要按照计算机的思考方式去组织逻辑,而跟人说话则是用人的思考方式去组织逻辑。 首先,现在不管做什么类型的工作,上班几乎都离不开电脑。即使不用电脑,日常生活中还是离不开手机、pad等等。所以其实大家都是在计算机的帮助下完成自己的工作,计算机已演变成一个非常重要的生产力,因此学习编程可以帮助我们更好的跟计算机交流。 其次,随着时代的发展,现在越来越多的硬件设备都已演变成为可编程设备。以前的设备以模拟控制电路为主,可能不大是可编程的,但现在的设备硬件灵活性越来越高,有可能核心就是一个可编程的芯片,设定一些程序进行相应的操作。当我们发现身边的什么东西都能编程了,那为什么不学编程呢? 由此也引出了最近比较火的话题,下图里Google的Alpha Go。 Alpha Go,是今年最火的人工智能,它以三比一的战绩战胜了韩国著名棋手李世石,也让大部分人觉得人类智力的最后一块堡垒被人工智能给攻破了。Alpha Go使用的是基于神经网络的深度学习,而以此为代表的人工智能也是在领域内发展迅猛。 未来人工智能甚至可以代替人类的部分脑力劳动。IBM的Watson曾经在智力问答节目中赢过人类,而最近推出的Health项目,则可以在10分钟内完成对病人的诊断。它的基本原理也是通过深度学习,学习了几乎所有的医学文献,再根据检测指标对疾病进行诊断。 在人工智能发展势头下,不管是用自动驾驶代替现有的人工驾驶,还是病情检测和诊断,它都有一套模式可以追寻。如果人工智能的深度学习,可以掌握更多的信息,那它理论上是可以做的和人一样,甚至是比人更好。我觉得都是人工智能的发展的一个前景,以此来替代一部分的人类的脑力劳动。 这是著名科幻作家,刘慈欣曾经写过的一个计算机诗人程序。这个诗现在看起来好像一般般,但其实这个程序是很早很早之前写的。而现在的机器人作诗实际上已经智能多了,不但能作诗,还能写音乐,可能还能画画。我们认为的一些创造性的、艺术性的东西,也许将来AI照样可以完成。因此在这样的背景下,未来社会中人机沟通能力(man-machine communication),也是非常重要的一个能力。即便对于现在很多不从事编程工作的人,你在做很多决策的时候,如果不懂得如何让计算机去完成的话,你的很多工作也是没有办法去好好完成的。而未来在大企业中,这种趋势只会越来越明显。 让孩子学编程,似乎听起来比较虚无缥缈,可能家长会觉得还是有点难。其实就像我们教孩子学数学一样,1+1=2,数学里面有难也有简单的,同样编程也有简单的,小朋友也可以学的。 第二个叫选择或者分支,我们在编写程序的时候,需要考虑各种可能出现的情况。比如做一个判断,当A等于B的时候,需要执行什么指令,然后A不等于B的时候,又需要做什么呢?如果这个地方没想到遗漏了,整个的逻辑和模式就不完整了,很可能会出问题。在另外一种情况下,有一个指令需要重复循环5次,就要思考是不是所有情况下都是固定不变的,有没有特例呢?思考这些问题的时候可以帮助孩子培养一个比较完整的逻辑,你总会问他有没有特殊的情况呢。而一个完备的逻辑,对于将来做任何事情或者思考任何问题都是非常有帮助的。 最后还有一个能力,我觉得也是很重要的,就是检查和排错(Debug)。这个能力其实换句话说也就是需要耐心和专注,人的思考是有极限,随着你写的程序越来越长,程序里面肯定会出错。出错的时候,怎么样去把错误找出来,然后把它改掉,这个在编程里面叫Debug。Debug实际上是一个非常头大的工作,在软件开发里面甚至有专门做测试的工程师。所以我们可以想象一下,对于孩子来说,他需要很好的耐心和专注力才能够一步一步地从头去检查自己的程序到底出错出在哪里,这个是非常考验人的。 首先简单讲讲我是怎么学编程。我是1984年出生的, 6岁的时候在表哥家里发现了一台中华学习机,可以通过Basic编程。于是就照着书上的实例写一些程序,当时还写过一个跟计算机玩猜拳的小游戏,也蛮有意思。后来表哥家有了电脑,包括爸爸的单位也有了。平常先把程序写在本子上,有机会去那边的时候,再把程序放到电脑上去调试。初中之后自己买了电脑,学习了更多的关于Windows编程、数据结构算法等知识,还参加了计算机奥赛。当时周围没有太多的人懂这个东西,也没有人能够指导,所以其实我学的也不好。但我想说明的是,在没有什么物质条件或者一些其他条件的情况下,如果你想学,其实还是可以学的,一切都是培养兴趣。 而现在的小朋友们学编程,他的条件已经比我当时要好的非常多。首先你家里肯定有电脑,还有智能手机、平板,然后智能硬件包括单片机,树莓派这种东西非常便宜,3D打印机也非常普及,想做个硬件出来也不难。我们以前编程会考虑到很多底层的事情,比如分配内存,垃圾回收等等,而现在的编程语言基本上不大需要考虑这些事情,所以对孩子来讲,入门会更容易一些。 同时现在还有很多开源软件,相关资源也非常丰富。但目前还没有一个非常好的模式的课程,所以我觉得如果真的要让孩子学编程的话,主要还是家长的引导和启发更重要一些。 4到6岁开始这个年龄段的孩子其实读写能力还比较初步,不大认多少字,也不大会写,英文可能就更难一些,键盘鼠标,可能也不是用的很好。因此应该选择一些可视化的,直观的在平板电脑上面,手机可用的,能够培养基本兴趣的开始。 这里我推荐两个app: The Foos和 Lightbot,用于小朋友的编程启蒙非常有趣。 截图来自The Foos。我们可以看到画面中有一个小人,想让他吃到最右边的甜甜圈,就需要编程序。比如先往右走一格,跳一下,再往右走一下,再跳一下,然后就吃到甜甜圈了。这一关非常简单。 后面还有比较难的,比如上图需要循环。跳格子需要跳几下才能够跳到最上面过关。后面还有一关涉及到条件判断,当客人点菜的时候,点了什么菜,需要用哪些原料做给他。这些都以游戏过关的方式呈现出来,非常好玩,小朋友在完的同时能够通过他掌握一些编程的一些思维方法。 lightbot更纯粹一些。它的每一关,是下图这样,先观察上面所有的蓝色方块,然后让小机器人在蓝色方块上面点灯,把所有的都点亮,就过关了。 上图中右下角的PROC1是可以重复利用的一个模块,这个其实对于孩子来讲有时接受起来是有一点难度的。你要告诉他为什么我要把它变成一个模块?因为它是可以重复利用的,这是我们刚才讲的模式识别和结构化提到的东西。 上图中有两个不同的模块P1、P2。两个模块对于孩子就更难了,我们可以看到在PROC2中嵌套了PROC1,一个模块可以调用另一个模块,也可以调用自己。 上图中涉及到了判断。当机器人在红色的格子,自己可以改变自己的状态,然后去做一些条件判断,再进行下一步的操作。这都是一些最基本的编程思路。 7到9,10岁的小朋友,已经具备一定的读写能力,包括英文读写能力,键盘鼠标用的比较熟练了,也会用电脑完成一些作业,这个时候可以开始接触一些比较系统的模块化的,可视化的编程平台,当然这个时候不需要真的去写代码。 像上图中的code.org,这个网站上面有很多的课程,基本上是适合从4岁开始,可能再稍微大一点的孩子学习编程。你可以点开图片,看看他是用一个一个小模块去拼成一个程序的,这里面其实主要的思路看起来跟上面的游戏差不多。但它会涉及到一些流程控制元素,能够写一些更复杂的程序。 图上可以看到一只猫,这也是Scratch的官方形象代言。右边可以看到一个比较复杂的程序,通过这些程序可以让这只猫完成一些复杂的事情。 复杂什么程度呢?比如说我们都玩过的Flappy Bird,一只鸟上下飞在管子中穿梭的游戏,都是可以用这种方式写出来。而这个年龄的孩子非常有创造力,有了这样的平台之后,还是能够写出一些比较有趣的东西的。 除此之外,想在手机上开发又可以使用什么呢?也是MIT开发的AppInventor,可以理解为Scratch的手机版。当然,它只能够支持安卓,还不能支持苹果的。一样可以用之前那种拼积木、搭积木的方法,写出一个程序,然后它就可以在安卓手机上面运行了。 推荐这个时期可以看得一些书籍: 《Scratch少儿趣味编程》 《写给大家看的安卓应用开发书:App Inventor 2快速入门与实战》 接下来进入9到12岁,这个年龄段的孩子,其实他的知识水平和逻辑思维能力都已经非常不错了。而且读写能力也非常强,英文也不差,这个时候可以去一行一行的写代码,就像我们真正的编程一样,用真正的编程语言去写代码,而不是用积木搭出来。 这个不同于之前拖一些模块来完成特定功能,而是需要真的把代码写在上面才能完成它。你学会了Swift语言之后,就可以去尝试写代码,编写一些iPhone上面的app,这个非常有趣。 除此之外还有一个在线收费的游戏平台Code Combat。通过编写代码,来完成关卡任务。这个游戏到后面会有点复杂,需要去编写一些很智能的逻辑,才能够完成任务。 这个游戏中的语言是可以选择的,比如现在图上的是JavaScript,当然还可以选其他的比如Python等等。图上的这个相对简单,就是一些序列化的,比如往下移动,往上移动的动作。到后面的一些关卡会比较复杂。 比如上图中的塔防任务,指挥大本营去造什么样的兵,通过怎样的判断,造了要多少钱,这些东西的都需要通过写代码来得到一个最优的策略,然后完成游戏里的一些任务才能通关。 而硬件的设备,现在比较流行的是Arduino,它是一个单片机,严谨点叫开源硬件平台。 实际上你可以理解为是一个很小的芯片,下面接很多外置的模块,比如接摄像头,接LED灯,传感器等等,成品可以跑,或者做一些其他的动作,基本上做出来是下图这个样子的。 推荐这个时期可以看得一些书籍: 《父与子的编程之旅:与 小卡特一起学Python》 《基于Arduino的趣味电子制作》 到13岁以上,这个年龄段跟成人也比较接近了。国外很多这个年龄的孩子已经可以写出非常酷的代码,做出很多非常酷的智能硬件,我记得有差不多这个这么大的孩子写了一个控制无人机程序。他们可以做机器人参加一些开源项目开发,或者比赛都可以。这里就没有什么可以推荐的了,基本上大学生在做的他们都可以去玩。如果真的想往这个专业方向去发展,学一下计算机科学的理论,数据结构算法,软件设计模式,虽然看起来是大学生专业学的东西,但实际上如果他真有兴趣,早点学也没有什么问题。 本文版权属于果壳童学馆,未经授权,谢绝转载 如有合作,请联系kids@guokr.com 点了赞,一起来学编程吧~ Author requires users to follow Official Account before leaving a comment Write a comment Write a comment Loading Most upvoted comments above Learn about writing a valuable comment Scan QR Code via WeChat to follow Official Account

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存