思维方法——改善你的思路
比起知识,我们更要重视思维本身。
1.抽象
抽象是人类最擅长的一种思维方法,具体的做法是把一件事复杂的细节过滤掉,留下有意义的部分。世界上有不同的事情,可以说每一件事都有不同之处,如果什么我们都要经历过,学会解决,那么我们什么都解决不了。因此,人类之所以那么聪明,最关键的一点是我们懂得过滤掉事情的细节,而剩下的部分和我们以往所经历的是相同的,所以我们可以依赖以往的经验去解决这件事情。
抽象的方法很简单,重点在于你是如何去抽象的,如何去过滤掉细节,也就是那些是细节,那些是本质,这依赖于知识和经验。
2.类比和映射
两件不同的事情,通过抽象之后,就会得出比较类似的结构,有时候是刚好一样,所以我们可以直接用其中一件事的解决方法去解决另一件事,有时候经过一些细微的调整,可以把一件事的结构转化为另一件事的结构。正是有这种类比和转换,我们才能利用经验去解决问题。
在抽象的基础上,把一件事的基本结构转化为另一件事的基本结构,是这个方法的基本思路。
3.逆向思维
从开始推导出结果,是正向思维,而反过来的逆向思维是我们不擅长的。很多时候,我们需要反过来思考,这回给我们增加一个看问题的角度,同时给我们提供更多的可能思路。
4.发散思维
发散思维和逆向思维是类似的,正向思维建立的是一种思路唯一的解决方案,而逆向思维通过定位随机(发散性的)结果,然后再思考和前提的关系,这会帮助我们得到更加灵活的方案。
5.对比
两件不同的事情,通过对比才能得到他们不同的地方和相同的地方,对比是我们认识事物,建立事物联系的基本方法。
6.逻辑和推导
逻辑是关于正确与否,和涵盖范围的一种判断规则。
7.归纳
如果你看到999个乌鸦都是黑色的,你有理由相信第1000个也是黑的。归纳结果未必是正确的,但是他是我们建立假设的一个重要方法。
8. 数学方法
对于普通人来说,数学是我们所学知识最有益思维的一门学科。很多问题如果能抽象为数学结构,就很容易运用我们学过的数学知识去解决。当然并不是所有问题都可以那么顺利的通过数学去解决,比如你不能用数学算出彩票的中奖号码。
9.不变量
变化是很难被人们所掌握的,我们往往需要寻找事情的不变状态去认识问题。
10.范围和边界
很多事情的正确与否,在于它所处的范畴,我们这里是白天,美国是黑夜。因此,解决问题必须注意适用的范围和边界,这对于我们程序员来说更加重要。我们很难编写任何情况下都正确的算法,因此我们必须向用户告知算法的适用范畴。
这个问题是比较严肃的,因为我们学习过程中很多都有个默认的范畴,比如小学三年级时候往往默认在整数范围内有没有解。语言中很多说法也有语境的问题,有时候我们看小学的题目也看不懂,因为没有那个语境,导致我们往往想多了。如果一个问题不加限定,往往都是不严肃的结论,比如中国人都是骗子,日本人都该死之类的论调。如果我们习惯于不精确的讨论,我们的结论往往就是没有意义的。
其他能够扩展思路的思维方式有待大家补充。