你好,我是陈现麟。

今天是除夕,首先在这里祝你新春快乐、虎年虎虎生威,在新的一年,学业有成,工作顺利,身体健康,疫情之下一定要做好防护。

学习和工作是我们人生中非常关键的两个部分,它们占据了我们大部分的时间,并且它们的结果也在很大程度上,决定了我们生活的质量和幸福感。那么在同样的时间里,如何让学习和工作变得更高效,就是我们自我提升的关键了。

在以往的学习和工作经历中,因为没有好的思维方法,导致我在学习一些新知识时,出现过不能理解也记不住的情况,在工作中也不能举一反三地处理好问题,经历过一些挫折。不过,随着一次次的经验教训,我慢慢总结出了对我影响最大的一个思维方式,即系统性的思维方式,它很好地提高了我学习和工作的效率和质量。

所以在这一期春节加餐中,我想先和你分享,我是如何使用系统性的思维方式在学习和工作中提效的,学完这节课程以后,你可以在学习中建立起自己的知识体系,在工作中形成高效解决问题的方法,让快乐学习和高效工作常伴左右。

对于学习,从深度和广度上运用系统性思维方式

在学习过程中,特别是计算机技术方面的学习时,我们经常会面临两个问题:一个是学习之前,觉得知识太抽象了,不好理解;另一个是学习之后,很容易就忘记了,记不住这个知识。其实这两个问题都是我们的学习方式不够系统导致的,下面就结合我的具体学习经历,从这两个问题出发,讲一讲如何通过系统性思维,高效地理解和掌握知识。

一方面,学习之前觉得知识太抽象,不好理解,很多时候是因为我们在学习一个知识时,直接面对的是这一个知识的结论,是高度总结和抽象的结果,所以在我们不了解这个知识相关的时代背景和原因的情况下,直接去进行学习,肯定会一知半解,甚至毫无头绪。

在 Spark 刚出来的时候,我就打算赶快学习一下,根本没有思考和设计怎么去学,就直接找了一本源码剖析的书啃起来,结果看完毫无头绪。后来静下心来思考,意识到自己的学习方法不对,我都不知道 Spark 的出现是为了解决什么问题的,自然就不知道 Spark 这个系统为什么要这么设计了。

如果跳过了这个知识产生的时代背景和原因,在深度的学习上就缺乏了系统性。正确的学习思路应该是:我们要知道一个知识是为了解决什么问题而产生的,后面又经过了什么样的迭代和优化,最终演变成了什么样子。

想通了这点以后,我立刻修改了我的学习方法,先暂停了源码剖析,去了解了这个项目的背景和设计,找到 Spark 作者 Matei Zaharia 的博士论文来学习,通过阅读论文,我明白了 Spark 是在计算引擎 MapReduce 因为存在大量磁盘读写的问题,导致性能不高的背景下提出的,并且掌握了 Spark 是怎么通过 RDD 来实现高效内存计算的。补充完 Spark 的背景知识之后,我再去看源码时,就非常清晰了。

另一方面,学习之后,容易忘记,记不住这个知识,是因为在广度的学习上缺乏了系统性。我们学习了很多零散的知识,但是没有将知识点之间建立起联系,形一个相互依赖的网状知识体系。

我在读大学的时候,用系统性的思维方法,高效地阅读了一本鸿篇巨著《百年孤独》。书中描述了一个家族七代人的传奇故事,有复杂的人物关系,又长又复杂的名字,并且这些名字之间经常重用,比如孙子重用了爷爷的名字,这导致我在看书的过程中非常崩溃,经常看着看着就忘记谁是谁了。

后来,我将这个家族的族谱网络画下来,族谱网络让人物之间的相互联系变得一目了然,而我只需要记住中间核心人物的名字及关系,就能简单推导出与核心人物有关的其他人物了。在建立好人物关系的知识网络后,记不住人物名字和人物之间关系的问题就被高效地解决了,当然这只是一个非常简单的构建网状知识体系的例子,但是我们却可以以小见大,把这个方法应用到更复杂的学习中去。

同时,《深入浅出分布式技术原理》这个专栏的设计思路也是如此,在学习中你会发现系统性思维方式一直贯穿其中,让你在学习知识的同时,还可以掌握高效的思维方法。

对于工作,通过系统性思维从根本上解决问题

上文中,我们提到学习中有很多零散的知识点,在工作中,需要处理的问题也是如此,我们经常会面临一个又一个独立的问题。如果我们只是见招拆招地解决,就会发现问题永远都解决不过来,并且还有可能会越来越多,直到我们被问题的黑洞所湮没。

对于这些问题,我认为系统性的思维方式是解决它们的根本。我们在每一次面对独立的问题的时候,应该跳过问题表层现象,深度思考这个问题的本质原因,系统性地解决。

为了让你更好地理解这种方式怎么运用于工作中,这里我举例带你分析。运维数据库的一个核心指标是数据库的稳定性,但是影响到这个指标的原因实在是太多了,对于技术中台内部可以控制的问题,我们通过一些高可用方案将其解决,比如网络故障、机器故障之类的。

但是业务研发侧引起的问题多种多样,比如没有建索引、索引建立不合理,请求的量急增了等等,并且这些问题在每一个表上都可能出现,我们没有办法通过穷举来解决。

那么这个时候,就要系统性地分析了,我们会发现这个问题的根本原因是,数据库的请求数量超过了它的负荷,比如对于没有建立索引请求来说,可能它的最大负荷就是 10 个并发;对于已经建立好索引的请求来说,可能它的最大负荷是 1000 个并发,索引建立不合理也是类似的情况。

所以我们就可以从数据库的请求数量超过它的负荷,这个根本原因上来解决,而不是一个表、一个索引进行梳理和优化。虽然一个表、一个索引进行梳理和优化也是非常有必要的,它可以大大地提高系统整体的性能,但是这些现象无法穷尽,问题也就无法完全解决。

那么具体应该如何解决,数据库的请求数量超过它的负荷这个根本原因呢?我们最终的解决思路是引入一个中间层,这个中间层是一个有数据库治理功能的 Proxy ,它能提供发现、熔断、降级、监控等服务治理功能,同时能够保证不论任何时候出现了任何问题,这个 Proxy 都能快速发现哪些请求导致的并发,超过了数据库的负荷,然后控制这些请求的并发或者完成抛弃,确保数据库快速恢复。

同样,当你学习专栏时,也会发现用系统性思维方式,解决问题的方法经常出现,你也可以运用于你的工作中。

总结

到这里,我们就从学习和工作这两个方面,讨论了系统性的思维方法,最后我们来总结一下。在学习中,从深度上系统性学习,我们可以了解一个知识的来龙去脉;在广度上系统性学习,我们可以明白知识之间的关系,并且建立好知识网络;在工作中,使用系统性思维解决问题,可以让我们找到问题的本源,从根本上解决问题。

有的人觉得学习非常痛苦,是因为学习效率不高,而且没有掌握好方法,在学习完这节课之后,希望你能使用系统性思维去搭建自己的分布式知识网络,让学习高效、快乐起来。如果这节课对你有帮助,也推荐你分享给更多的同事、朋友。