刷100道奥数题,不如学会这道逻辑题和它的思考方法,这才是数学和编程的通关密码
文章开始前,先给大家出道逻辑题:
假如你认识长得一模一样的三胞胎,约翰、詹姆斯和威廉。约翰和詹姆斯总是说谎,威廉总是说真话。 约翰欠了你一笔钱。有一天你在马路上碰到了三胞胎的其中一个人,你想要确认一下这个人是不是约翰,但你只能问一个问题,你会问什么问题呢?
听起来是不是无从下手?
别急,听我慢慢讲。
在前两天的文章《纠结要不要给孩子学编程?纠结怎么选?先搞懂这个问题,你心里才能有答案》里,我和大家聊到了编程思维,说到了让孩子具有编程思维,并不是让每个孩子都去学Scratch、Python、C++,做码农。这些都只是计算机语言,是一种工具。
就好像你要叫一个外国人帮你做一件事情,你掌握了英语的语法,但到底要叫这个人去做一件什么有趣的事,怎么样一步步做成这件事,还做的快、做的好、做的漂亮,后面的这些,才是编程思维。
这种广义上的编程思维,是一种思考的模式,一种解决问题的方法,一种创造力。这才是我们要让孩子具备的。
那么,编程思维到底是什么呢?
把它拆解一下,有几个核心的思维方法。今天我们先来聊前面两个——分解和分类,聊完之后,我们再反回来看这道题。
在之前提到过的日本NHK制作的关于编程的科普节目《Texico》里,有一个很好玩的游戏,叫“编程人”。
一个人假装自己是机器人,另外一个人给机器人编程。
如果你是叫一个人去扔垃圾,你会怎么说?
“嘿,帮我把垃圾扔掉吧。”
但是叫一个机器人去扔垃圾呢?你这么说,他可能坐着不动。你得把这个目标,一步步拆解成分解的动作。
你可以这么拆解:
转向右面——单膝跪地——捡垃圾——转向左面——扔下垃圾——往前跨一步——循环前面动作
而捡垃圾这个动作,还可以继续拆解:
五指张开——手臂往下——五指合拢——手臂抬起
把复杂的问题,拆解成小问题,再把小问题一步步分解、理顺,就是编程思维里最基础的思维。
这种思维在孩子的学习、工作、生活里都太重要了。
而它可以怎么训练呢?
这个“编程人”就是一个非常好的游戏,大家在家可以和孩子玩起来,我和妞妞有时就会化身机器人和遥控器,下指令让对方去做一件事。这个过程很好玩,经常会出现转错方向、撞墙的乌龙事件,笑料百出。
除此之外,对每天的行程进行计划安排; 做事情的时候,跟孩子一起列出“第一步、第二步”,都是对此的训练。比如说,出门前,让孩子想想穿戴的步骤,是先背上背包,还是先穿外套?是先穿袜子,还是先穿鞋子?
这种分解,除了能把事情理顺,里边还包含着创新的机会。
比如我们上厕所的时候,经常会把手机钱包往身后一放,就忘了。
可能我们会把这归结于记性不好,没有想过为什么。
用编程思维分析一下,其实是因为“起身——开锁——出门”这个顺序里,拿手机钱包不是必经步骤,那就难免要忘。那么,能不能把它变成必经步骤呢?
在日本的洗手间,有一种这样的设计,关上门之后,门锁就变成了放置手机、钱包的置物台。
把手机钱包放在这上面会怎么样呢?
当你想要出去,第一步,必须拿起置物台上的手机和钱包。
这就是通过改变分解的步骤顺序来发现问题、解决问题。
当你习惯于这样的刻意思考之后,创新真是无处不在啊。
除了分解步骤,还要分解情况,也就是分类。
编程人游戏里,有一次的任务是:吃巧克力的机器人。
肚子饿吗?
第一种情况是:YES
这种情况接下来的步骤就是:转向左边——吃巧克力。
第二种情况是:NO
那么:转向右边——抽纸巾,擦嘴巴。
但分类是不是就这么简单呢?
并不是,因为你必须考虑到所有可能出现的情况,并且让这些情况互相不重复。
比如说上面这个例子里,如果机器人依然肚子饿,转向左边,却发现巧克力吃完了,无法执行“吃巧克力”的步骤,怎么办?这个时候程序就得出错了,因为他不知道该怎么做。
所以我们还需要加上其他可能的情况:
巧克力吃完了,还是饿,拿来更多巧克力;
巧克力吃完了,刚好不饿了,转向右边擦嘴巴,等等。
这是一种非常重要的逻辑思维方式,叫MECE原则,是麦肯锡咨询顾问芭芭拉·明托在《金字塔原理》当中提出过的一种分类思考的方法,英文是Mutually Exclusive Collectively Exhaustive,意思是“相互独立,完全穷尽”。
也就是说,在考虑各种分类情况的时候,要既不重复、也不遗漏。
举个例子,我们要设计一个冰淇淋车的游戏。
有2种口味的水果(葡萄、苹果)和2种口味的冰淇淋(巧克力、香草),可以自由组合搭配出不同口味的“水果冰淇淋”,怎么才能涵盖所有的搭配方式,并且不重复呢?
如果你想着,先用葡萄搭配试试,再用苹果搭配试试,那么很容易出现重复或者遗漏,到最后自己脑子都乱了,不知道什么算了、什么没算。大家是不是经常碰到这种情况?
更好的方法是分级分类,先用大的类别进行框定:
1种水果+1种冰淇淋
1种水果+2种冰淇淋
2种水果+1种冰淇淋
2种水果+2种冰淇淋
这个大框架框住了所有可能性,也确保了不会出现重复。
然后,再在大分类里一级一级往下,逐级细分:
大家应该看出来了,这是数学里常见的排列组合问题。
所以说,编程思维也好、数学思维也好,其实是相通的,都是底层的分析、解决问题的思维模式。
今天我们说到的2种思维方法,“分解”和“分类”,其实都是“有序思考”。
有序思考不管是在数学、编程,还是日常的生活中,都非常重要。它能帮助你从一团乱麻似的问题里,找到一个线头,顺着它一点点往外拉,就把乱麻解开了。
很多乍一听非常复杂的问题,一旦你用这样的思维方式去拆解,就会变得很简单。
好,现在我们回到文章一开始的那道逻辑题。
三个长得一模一样的人,约翰和詹姆斯总是说谎,威廉总是说真话。你要问一个问题,来确认你碰到的这个人,是不是约翰。
来试试用有序思考的方法,把它分类拆解一下吧。
看,当你问“你是詹姆斯吗”,只有约翰一个人会回答“是”。所以,你只要问这个问题,就可以判断了。
你看,这就是思维方法的力量。这道题不难,你只是不知道怎么去思考。
那些看起来很聪明的人,其实不一定和智商有关,他们可能是经过训练的思维方法的赢家。
*快速了解帝呱呱星球,可以点击下方专辑哦~