最近,看到很多针对孩子的编程课,出于好奇和为娃的未来教育做准备,买了一本书:《写给所有人的编程思维》。
这本书的作者吉姆•克里斯蒂安,是英国著名的科技教育专家,因为有20多年的教学经验,所以他很擅长把复杂问题用浅显的语言讲明白。
这本书主要是写给孩子看的,内页有一些彩色小插图,还有很多逻辑谜题,采用寓教于乐的方式,让孩子能够有兴趣读下去,而对于不了解编程和计算机的大人来说,书中的一些内容,也会带来收获和启发。
为什么要学习编程思维
编程通常被认为是程序员的专属领域,普通人会觉得编程语言又复杂又抽象。其实,换一个角度来看,编程就和我们学习英语一样,是一种语言,是让计算机能够懂得人类意图的语言。
学习编程思维,并不是学某一种具体的计算机语言,而是这些语言背后的思维逻辑。通过了解这些,来锻炼我们的大脑,培养创造性思维和批判思维,提高解决问题的能力。
随着人工智能的发展,我们的生活、工作都越来越依赖于各种程序、系统,未来还会出现很多的基于科技的新工作,学习编程思维,能帮助孩子建立起面对未来的能力,即使不做具体的编程工作,编程思维也能够帮助我们在工作和生活中拆解问题,产生全新的创意。
有趣的手指游戏,直观理解二进制原理
计算机是建立在二进制基础上的,二进制作为一种数字语言,只用到两个数字:0和1。这个一般人都知道,但是如何来理解二进制的原理?
我们熟知的数字体系是十进制,逢十进位,而二进制就是逢二进位, 十进制下的1、2、3、4、5、6、7、8、9,10,分别对应二进制下的数字就是:1、10、11、100、101、110、111、1000、1001、1010。
这个转换的逻辑有点抽象,吉姆•克里斯蒂安把这两种不同的计数体系,通过图像来表示,对于孩子和没有基础的大人来说,就特别友好。我们一起来看一下。
按照书中的这个图,我们就知道二进制下101010,就是数字42,这个逻辑顺序,是从二进制转化成十进制,同样的,我们反向思考一下,如果知道了十进制的数字,如何用二进制进行编码。
通过这种双向的思维练习,我们能更深刻的理解二进制是怎么回事,同时也锻炼了大脑的思维能力。
在十进制下,用两只手我们可以数到10,而在二进制下,只用一只手就可以数到31,具体如下:
规则1:把五个手指头想象成数字:16,8,4,2,1;
规则2:手指攥紧,代表数字0;手指伸开,代表数字1。
大拇指代表数字1;食指代表数字2;中指代表数字4;无名指代表数字8;小拇指代表数字16
在理解二进制和十进制如何转换的基础上,我们就可以玩手指游戏:
英文有26个字母,我们赋予每个字母一个二进制数值,并用手指表示出来。
那么,“1000 101 1100 1100 1111 10111 1111 10010 1100 100”这组信息代表了什么含义?
二进制1000对应十进制下的数字8,第八个英文字母是H,以此类推,101是E, 1100是L,1111是O,10111是W,10010是R,100是D。这组信息连起来就是“Hello World”。
游戏的原则和逻辑都很简单,但是一开始要熟练得玩起来,却不是很容易。这是一个很好玩的游戏,大人和孩子一起玩,能够调动起整个大脑的功能,既能锻炼到逻辑思维能力,又能锻炼到视觉想象力。
编程思维,帮助解决复杂问题
工作就是解决问题的过程,生活也是。有些问题比较容易解决,有些问题比较复杂。不管是什么样的问题,都可以通过三步来解决:
1.弄清楚到底是什么问题。
2.思考问题的不同解决方法。
3.验证所考虑的不同解决方法。
书中举了一个例子:让机器人小智清理房间。
首先,需要给整洁的房间下个定义。床铺好,衣服收好、物件收好。
其次,思考具体怎么来做。
1 整理好床铺
2 把脏衣服放进洗衣篮里
3 把所有东西收起来,放进橱柜里。
最后,验证解决方案。这个时候发现,让小智整理好床铺,小智不知道如何去做。这说明这一步的指令不够清晰、具体。我们需要思考如何使指令更容易操作,于是整理床铺被更细化成:
1 将被子平整地铺在床上
2 将床尾一端的毯子折起来,压在羽绒被下面,再从床头一端把毯子拽平
3 最后,将枕头拿到床头一端,放在毯子上面
这个过程不仅需要具体,而且还要注重顺序性。因为“编写程序就像按照书做菜一样,每一步的顺序都极为重要,比如,你不能先搅拌了鸡蛋再将鸡蛋壳敲碎吧!”
这种情况,可以借助流程图,来将整个过程直观地展现出来,流程图可以用于梳理各种复杂的事情,也能用于与他人分享你的想法。
编程思维的启发
01 调试思维
在编程的过程中,大量的时间都用在代码调试上,因为计算机只能执行接受的指令,指令是否正确、可行就变得很重要。
“调试就是指仔细地检查编程构成、算法、流程图,排除并修复致使程序无法正常运行的问题或错误。”
有一种调试方法,叫“小黄鸭调试法”,原理就是,程序员向小黄鸭解释代码如何运行,在这个过程中,小黄鸭不用做任何反应,程序员自己就能意识到程序中的错误。小黄鸭在这里代表一个编程外行,程序员解释的过程就是反思、捋顺逻辑的过程。
调试思维意味着,我们在学习新技能、解决新问题的过程中,会遇到很多的问题,会不断犯错,而我们需要学会接纳错误,在试错中学习,提高自己,就像任何一个程序的编写,都经过无数次的调试,才达到了完美执行。
02 设定时间和框架思维
一件事情,如果没有具体的完成时间,我们就会一直无法完成,因为追求完美是没有尽头的。想一次性实现很多的奇思妙想,编程任务就会一拖再拖。
因此,编程也好,其他事情也好,我们都需要设定一个明确的完成日期,然后在这个日期约束下,去寻找解决问题的框架。
先把最基本的框架搭建起来,再去追求细节的完善。完美没有止境,而现实世界的资源总是稀缺。
03 善用约束条件
有一个过河谜题:农夫带着一箱金子,和小妖怪、恐龙在河边准备过河,但是船不够大,农夫一次只能带一样东西。然而,恐龙不能和小妖怪待在一起,因为恐龙会吃掉小妖怪;小妖怪不能和金子待在一起,因为小妖怪会吃金子。
如何在保证恐龙、小妖怪、金子都完好的情况下,把他们运到河对岸?
这里的约束条件是:恐龙和小妖怪不能在一起;小妖怪和金子不能在一起;一次只能运一样东西。
过河谜题的关键,是找到约束条件之外的信息,即这个谜题没有规定往返次数和是否可以把已经运到河对岸的东西再运回来。当你注意到了这一点,就会觉得答案很简单:
农夫留下恐龙和金子,先将小妖怪运到河对岸;
农夫返回来,再将恐龙运到河对岸;
农夫再次返回时,将小妖怪带回来,然后把金子运到河对岸;
最后,农夫再返回将小妖怪运过河,这样农夫、恐龙、小妖怪和金子就都到了河对岸。
我们生活的世界,几乎做任何事情都是有约束条件的。约束条件常常让我们感到不自由和受限制,然而,换个角度来看,约束条件其实是在帮助我们高效的思考,把有限的资源用到一个由约束条件构建的小范围中。
在解答过程中,我们不仅需要关注约束条件,有时候更需要考虑没有给出的条件和信息,从这些看不到的地方寻找让人惊喜的答案。这个过程能锻炼到大脑的创造性思维。
《写给所有人的编程思维》之所以讲的是编程思维,而不是编程代码,是因为吉姆•克里斯蒂安认为,编程语言会不断地变化,学习具体的编码,不如去学习编程背后的思维,即在变化的世界中,寻找稳定的元素。
想了解更多编程思维方面的内容,家长和孩子可以一起读一下《写给所有人的编程思维》,激活一下大脑也是好的。