刷100道奥数题,不如学会这道逻辑题和它的思考方法,这才是数学和编程的通关密码

图片

文章开始前,先给大家出道逻辑题:

假如你认识长得一模一样的三胞胎,约翰、詹姆斯和威廉。约翰和詹姆斯总是说谎,威廉总是说真话。约翰欠了你一笔钱。有一天你在马路上碰到了三胞胎的其中一个人,你想要确认一下这个人是不是约翰,但你只能问一个问题,你会问什么问题呢?

听起来是不是无从下手?

别急,听我慢慢讲。

在前两天的文章《纠结要不要给孩子学编程?纠结怎么选?先搞懂这个问题,你心里才能有答案》里,我和大家聊到了编程思维,说到了让孩子具有编程思维,并不是让每个孩子都去学Scratch、Python、C++,做码农。这些都只是计算机语言,是一种工具。

就好像你要叫一个外国人帮你做一件事情,你掌握了英语的语法,但到底要叫这个人去做一件什么有趣的事,怎么样一步步做成这件事,还做的快、做的好、做的漂亮,后面的这些,才是编程思维。

这种广义上的编程思维,是一种思考的模式,一种解决问题的方法,一种创造力。这才是我们要让孩子具备的。

那么,编程思维到底是什么呢?

把它拆解一下,有几个核心的思维方法。今天我们先来聊前面两个——分解和分类,聊完之后,我们再反回来看这道题。

图片

分 解

在之前提到过的日本NHK制作的关于编程的科普节目《Texico》里,有一个很好玩的游戏,叫“编程人”。

一个人假装自己是机器人,另外一个人给机器人编程。

如果你是叫一个人去扔垃圾,你会怎么说?

“嘿,帮我把垃圾扔掉吧。”

但是叫一个机器人去扔垃圾呢?你这么说,他可能坐着不动。你得把这个目标,一步步拆解成分解的动作。

你可以这么拆解:

转向右面——单膝跪地——捡垃圾——转向左面——扔下垃圾——往前跨一步——循环前面动作

图片

而捡垃圾这个动作,还可以继续拆解:

五指张开——手臂往下——五指合拢——手臂抬起

把复杂的问题,拆解成小问题,再把小问题一步步分解、理顺,就是编程思维里最基础的思维。

这种思维在孩子的学习、工作、生活里都太重要了。

而它可以怎么训练呢?

这个“编程人”就是一个非常好的游戏,大家在家可以和孩子玩起来,我和妞妞有时就会化身机器人和遥控器,下指令让对方去做一件事。这个过程很好玩,经常会出现转错方向、撞墙的乌龙事件,笑料百出。

除此之外,对每天的行程进行计划安排; 做事情的时候,跟孩子一起列出“第一步、第二步”,都是对此的训练。比如说,出门前,让孩子想想穿戴的步骤,是先背上背包, 南京四小凤还是先穿外套?是先穿袜子,还是先穿鞋子?

这种分解,除了能把事情理顺,里边还包含着创新的机会。

比如我们上厕所的时候,经常会把手机钱包往身后一放,就忘了。

可能我们会把这归结于记性不好,没有想过为什么。

用编程思维分析一下,其实是因为“起身——开锁——出门”这个顺序里,拿手机钱包不是必经步骤,那就难免要忘。那么,能不能把它变成必经步骤呢?

在日本的洗手间,有一种这样的设计,关上门之后,门锁就变成了放置手机、钱包的置物台。

图片

把手机钱包放在这上面会怎么样呢?

当你想要出去,第一步,必须拿起置物台上的手机和钱包。

图片

这就是通过改变分解的步骤顺序来发现问题、解决问题。

当你习惯于这样的刻意思考之后,创新真是无处不在啊。

图片

分 类

除了分解步骤,还要分解情况,也就是分类。

编程人游戏里,有一次的任务是:吃巧克力的机器人。

肚子饿吗?

第一种情况是:YES

这种情况接下来的步骤就是:转向左边——吃巧克力。

图片

第二种情况是:NO

那么:转向右边——抽纸巾,擦嘴巴。

图片

但分类是不是就这么简单呢?

并不是,因为你必须考虑到所有可能出现的情况,并且让这些情况互相不重复。

比如说上面这个例子里,如果机器人依然肚子饿,加盟服务转向左边,却发现巧克力吃完了,无法执行“吃巧克力”的步骤,怎么办?这个时候程序就得出错了,因为他不知道该怎么做。

所以我们还需要加上其他可能的情况:

巧克力吃完了,还是饿,拿来更多巧克力;

巧克力吃完了,刚好不饿了,转向右边擦嘴巴,等等。

这是一种非常重要的逻辑思维方式,叫MECE原则,是麦肯锡咨询顾问芭芭拉·明托在《金字塔原理》当中提出过的一种分类思考的方法,英文是Mutually Exclusive Collectively Exhaustive,意思是“相互独立,完全穷尽”。

也就是说,在考虑各种分类情况的时候,要既不重复、也不遗漏。

举个例子,我们要设计一个冰淇淋车的游戏。

有2种口味的水果(葡萄、苹果)和2种口味的冰淇淋(巧克力、香草),可以自由组合搭配出不同口味的“水果冰淇淋”,怎么才能涵盖所有的搭配方式,并且不重复呢?

如果你想着,先用葡萄搭配试试,再用苹果搭配试试,那么很容易出现重复或者遗漏,到最后自己脑子都乱了,不知道什么算了、什么没算。大家是不是经常碰到这种情况?

更好的方法是分级分类,先用大的类别进行框定:

1种水果+1种冰淇淋

1种水果+2种冰淇淋

2种水果+1种冰淇淋

2种水果+2种冰淇淋

这个大框架框住了所有可能性,也确保了不会出现重复。

然后,再在大分类里一级一级往下,逐级细分:

图片

大家应该看出来了,这是数学里常见的排列组合问题。

所以说,编程思维也好、数学思维也好,其实是相通的,都是底层的分析、解决问题的思维模式。

今天我们说到的2种思维方法,“分解”和“分类”,其实都是“有序思考”。

有序思考不管是在数学、编程,还是日常的生活中,都非常重要。它能帮助你从一团乱麻似的问题里,找到一个线头,顺着它一点点往外拉,就把乱麻解开了。

很多乍一听非常复杂的问题,一旦你用这样的思维方式去拆解,就会变得很简单。

好,现在我们回到文章一开始的那道逻辑题。

三个长得一模一样的人,约翰和詹姆斯总是说谎,威廉总是说真话。你要问一个问题,来确认你碰到的这个人,是不是约翰。

来试试用有序思考的方法,把它分类拆解一下吧。

图片

看,当你问“你是詹姆斯吗”,只有约翰一个人会回答“是”。所以,你只要问这个问题,就可以判断了。

你看,这就是思维方法的力量。这道题不难,你只是不知道怎么去思考。

那些看起来很聪明的人,其实不一定和智商有关,他们可能是经过训练的思维方法的赢家。

思维改变命运,这是我发自内心的深刻体会。除了知识,我最希望给到妞妞的,是视野和这些核心的思维方法。今天我们聊到了两个,下回咱们再来拆解另外几个吧。

*快速了解帝呱呱星球,可以点击下方专辑哦~

图片

图片