本文分享自华为云社区《二阶思想》,作者:元闰子。

事情往往不是你幻想的那样,有时候,看似解决了问题,却在不经意间,引发了更严峻的成果。协助咱们考虑、决议计划、解决问题的最有用办法是,运用二阶思想

什么是二阶思想?

一阶思想是单纯而浅薄的,简直人人都能做到;二阶思想则是深邃、杂乱而迂回的,能做到的人少之又少。

—— 霍华德马克斯

咱们的每一个举动都会导致一个成果,而每个成果,都会有进一步导致其他的成果。由举动直接导致的成果,咱们称为一阶成果(First-Order Consequences);由一阶成果导致的,二阶、三阶… 成果,这儿,咱们统称为二阶成果(Second-Order Consequences)。

好的一阶成果,不见得会有好的二阶成果,许多时候,它们是反的。

学会二阶思维,你就能像巴菲特一样思考了

二阶思想(Second-Order Thinking),简略来说,便是做事情不能只看一阶成果,还要考虑二阶成果。相对于一阶思想,它更强调对问题的深化考虑,从逻辑、体系、因果、时刻等多种维度来归纳考虑

霍华德马克斯在《出资最重要的事》中有举到一个股票出资的比方:

一阶思想的人,会这么想:“公司的远景是光明的,这表明股票会上涨”。

二阶思想的人,则会考虑到:

  • 未来或许呈现的成果会在什么范围之内?
  • 我以为会呈现什么样的成果?
  • 我正确的概率有多大?
  • 人们的一致是什么?
  • 我的预期与人们的一致有多大差异?
  • 财物的当时价格与群众所以为的未来价格以及我所以为的未来价格相符的程度怎么?
  • 价格中所反映的一致心理是过于乐观,仍是过于失望?
  • 假设群众的观点是正确的,那么财物价格将会发生怎样的改动?假设我是正确的,那么财物价格又会怎样?

明显,二阶思想与一阶思想之间有着巨大的工作量差异,二阶思想对人的要求更高,实践起来也更杂乱。

二阶思想有什么用?

没有考虑二阶或者三阶成果,是形成众多苦楚而糟糕的决议计划的重要原因之一。

—— 雷伊达里奥

善用二阶思想,能协助咱们更好地决议计划、更好地找到问题底子然后解决问题

更好地决议计划

以软件开发中需求办理为例。咱们总说以客户为中心,那么,一阶思想者的做法,很有或许是,将客户/产品经理所提的每个需求都归入到版别中。这种不假思索的做法,看似满意了客户的一切诉求,实际危害更大。它忽略了最重要的一点,开发的人力是有限的,然后很简单导致版别无法按时交给。

学会二阶思维,你就能像巴菲特一样思考了

更好的办法是,运用二阶思想来进行需求的办理。

咱们能够从多个维度来决议计划一个需求是否应该被归入版别,比方,该需求能给客户带来多大的收益?在哪些场景下才有收益?没有它体系能不能正常运转?需求的工作量有多大?当时开发人力能不能满意?

这样,咱们就能大致估算出每个需求的价值,然后对需求做价值的优先排序,最终根据当时的开发人力做需求裁剪。保证在交给时刻点届时,咱们能够为客户供给一个可用的、价值最大的软件体系

学会二阶思维,你就能像巴菲特一样思考了

更好地找到问题根源

在决议计划中,咱们用的是正向的二阶思想,也即,从眼前一步步往后推演出未来的各种或许性。

而在找问题根源时,咱们用的是逆向的二阶思想,也即,从眼前要解决的问题开端,剖析发生这个问题的原因,然后不断扩展、推演,一向找到问题根源

比方,在《深化了解计算机体系的数值类型》中,有一个 double 转型为 float 的比方:

// Java
public static void main(String[] args) {
    double d1 = 3.267393471324506;
    System.out.print("double d1: ");
    System.out.println(d1);
    System.out.print("float  d1: ");
    System.out.println((float) d1);
}
// 输出成果
double d1: 3.267393471324506
float  d1: 3.2673936

从成果来看,转型的规矩并不是简略的四舍五入。假设是一阶思想者,很简单会这样想,浮点数的转换应该存在精度丢掉,然后就结束了。

假设是二阶思想者,你一定会有这样的疑问,为什么会得到这样的转换成果

那么,接下来,你很或许就会这样干:

  1. 查阅 《Java 言语标准》,发现 doublefloat 的近似规矩是 Round-to-even,但 3.2673934713245063.2673936 也不符合这个规矩。然后想,有没或许近似规矩是用在二进制的表明上?
  2. 持续查阅 《Java 言语标准》,发现计算机的浮点数完结都遵从着《IEEE Standard 754 Floating-Point Representation》 标准。
  3. 接着,从 《IEEE Standard 754 Floating-Point Representation》找到了 doublefloat 在二进制表明上差异,并发现 double 转型 float 时会呈现截断
  4. 对比 3.2673934713245063.2673936 的二进制表明,发现截断后,再经过 Round-to-even 来近似,就能得出正确的成果。

学会二阶思维,你就能像巴菲特一样思考了

看,经过这样的层层追溯,咱们最终找到了问题的答案!

怎样训练二阶思想?

经济领域中,最关键的是不论他人对你说什么,你总要问:“然后呢?”。 这个办法能够应用于简直其他一切领域。所以,你有必要经常问:“然后呢?”

—— 沃伦.巴菲特

二阶思想并不是与生俱来的,它更像是一种习气,需要咱们不断地实践、总结、养成

总要问:然后呢?

当你决定做一件事情前,总要问自己:“然后呢”

这时,能够拿出你的笔,在纸上列出一阶成果、二阶成果、三阶成果、…,把所能想到的或许性都显现地列举出来,以协助咱们更好地决议计划。

比方,作为架构师的你,想在事务服务和数据库之间加上一层缓存,来优化数据读功能。那么,在体系设计时,你不能仅仅看到这一点,而应该运用二阶思想,尽或许地,把增加缓存之后或许呈现的现象/成果,都列出来,剖析一遍:

学会二阶思维,你就能像巴菲特一样思考了

凡事从时刻维度多加考虑

在做决议计划前,在时刻维度上多加考虑,假设做了这件事,10 小时之后会怎样?10 天之后会怎样?10 周之后会怎样?10 个月之后会怎样?10 年之后会怎样?

比方,在《一步步降低软件杂乱性》提到的 战术编程战略编程 的比方,咱们总是倾向战术编程,由于它能够节约大量开发时刻,更快地完结需求交给。但是,当你从时刻的维度来考虑时,成果就会有所不同:

学会二阶思维,你就能像巴菲特一样思考了

另一个典型的比方是,背单词。咱们总以为每天背 10 个单词如同没有多大用处,要是真能坚持下来,1 年就能认识 3650 个单词,2 年便是 7300 个单词,10 年后是 3 万多个。所以,不要低估时刻的力气

多问几个:为什么?

触摸一个常识,碰到一个问题,多问几个:“为什么”

要养成问 “为什么” 的习气,经过质疑,不断找到现象或问题的底子所在。

对于一个常识,假设没有经过深度考虑,只能算暂时记住,并不能归入到你的常识体系中

比方,对于 SSL/TLS 协议树立连接的进程,假设只是流于外表地把它背下来,或许你会因此经过面试,却无法深化了解其背面所涉及的密码学、数字证书、网络通信等原理常识(详见《假设让你来设计SSL/TLS协议》)。

对于一个问题,假设没有定位到根因,暂时的躲避做法,往往会导致更严峻的成果

比方,在一个分布式体系中,当呈现服务恳求超时现象时,一阶思想者的做法,很有或许是,经过增加恳求超时时长来躲避问题。然而,呈现恳求超时的原因有许多,假设是下流服务处理不过来导致的,增加超时时长只会让问题益发恶劣,更好的做法是增加流控机制。

所以,多问几个“为什么”,找到根源,才能更好地解决问题。

最终

比较一阶思想,二阶思想能够让咱们更好地做出决议计划、找到问题的根源。但这需要更深化的考虑,耗费的时刻和精力也会更多。

这与人类的天然惰性是相违反的,就像在《懒散》里提到的,“读书很简单,但考虑很难”。

好消息是,二阶思想是一种习气,能够经过不断地操练来养成。本文列出了 3 个比较简单实践的训练办法:

  1. 做一件事前,总是问:“然后呢?”;
  2. 凡事从时刻维度多加考虑;
  3. 遇到常识/问题,多问几个:“为什么?”。

养成二阶思想的习气是一个绵长、苦楚的进程,但坚持下来,总会收获很大

文章配图

能够在 用Keynote画出手绘风格的配图 中找到文章的绘图办法。

参考

[1] Second-Order Thinking: What Smart People Use to Outperform, Mental Models

[2] 二阶思想Second-Order Thinking——让你脱颖而出的思想方式, 芒格学院

[3] 出资最重要的事情, 霍华德马克斯

[4] 深化了解计算机体系的数值类型, 元闰子

[5] 懒散, 元闰子

[6] 假设让你来设计SSL/TLS协议, 元闰子

点击重视,第一时刻了解华为云新鲜技术~