春节加餐 系统性思维,高效学习和工作的利器
你好,我是陈现麟。
今天是除夕,首先在这里祝你新春快乐、虎年虎虎生威,在新的一年,学业有成,工作顺利,身体健康,疫情之下一定要做好防护。
学习和工作是我们人生中非常关键的两个部分,它们占据了我们大部分的时间,并且它们的结果也在很大程度上,决定了我们生活的质量和幸福感。那么在同样的时间里,如何让学习和工作变得更高效,就是我们自我提升的关键了。
在以往的学习和工作经历中,因为没有好的思维方法,导致我在学习一些新知识时,出现过不能理解也记不住的情况,在工作中也不能举一反三地处理好问题,经历过一些挫折。不过,随着一次次的经验教训,我慢慢总结出了对我影响最大的一个思维方式,即系统性的思维方式,它很好地提高了我学习和工作的效率和质量。
所以在这一期春节加餐中,我想先和你分享,我是如何使用系统性的思维方式在学习和工作中提效的,学完这节课程以后,你可以在学习中建立起自己的知识体系,在工作中形成高效解决问题的方法,让快乐学习和高效工作常伴左右。
对于学习,从深度和广度上运用系统性思维方式
在学习过程中,特别是计算机技术方面的学习时,我们经常会面临两个问题:一个是学习之前,觉得知识太抽象了,不好理解;另一个是学习之后,很容易就忘记了,记不住这个知识。其实这两个问题都是我们的学习方式不够系统导致的,下面就结合我的具体学习经历,从这两个问题出发,讲一讲如何通过系统性思维,高效地理解和掌握知识。
一方面,学习之前觉得知识太抽象,不好理解,很多时候是因为我们在学习一个知识时,直接面对的是这一个知识的结论,是高度总结和抽象的结果,所以在我们不了解这个知识相关的时代背景和原因的情况下,直接去进行学习,肯定会一知半解,甚至毫无头绪。
在 Spark 刚出来的时候,我就打算赶快学习一下,根本没有思考和设计怎么去学,就直接找了一本源码剖析的书啃起来,结果看完毫无头绪。后来静下心来思考,意识到自己的学习方法不对,我都不知道 Spark 的出现是为了解决什么问题的,自然就不知道 Spark 这个系统为什么要这么设计了。
如果跳过了这个知识产生的时代背景和原因,在深度的学习上就缺乏了系统性。正确的学习思路应该是:我们要知道一个知识是为了解决什么问题而产生的,后面又经过了什么样的迭代和优化,最终演变成了什么样子。
想通了这点以后,我立刻修改了我的学习方法,先暂停了源码剖析,去了解了这个项目的背景和设计,找到 Spark 作者 Matei Zaharia 的博士论文来学习,通过阅读论文,我明白了 Spark 是在计算引擎 MapReduce 因为存在大量磁盘读写的问题,导致性能不高的背景下提出的,并且掌握了 Spark 是怎么通过 RDD 来实现高效内存计算的。补充完 Spark 的背景知识之后,我再去看源码时,就非常清晰了。
另一方面,学习之后,容易忘记,记不住这个知识,是因为在广度的学习上缺乏了系统性。我们学习了很多零散的知识,但是却没有将知识点之间建立起联系,形成一个相互依赖的网状知识体系。
我在读大学的时候,用系统性的思维方法,高效地阅读了一本鸿篇巨著《百年孤独》。书中描述了一个家族七代人的传奇故事,有复杂的人物关系,又长又复杂的名字,并且这些名字之间经常重用,比如孙子重用了爷爷的名字,这导致我在看书的过程中非常崩溃,经常看着看着就忘记谁是谁了。
后来,我将这个家族的族谱网络画下来,族谱网络让人物之间的相互联系变得一目了然,而我只需要记住中间核心人物的名字及关系,就能简单推导出与核心人物有关的其他人物了。在建立好人物关系的知识网络后,记不住人物名字和人物之间关系的问题就被高效地解决了,当然这只是一个非常简单的构建网状知识体系的例子,但是我们却可以以小见大,把这个方法应用到更复杂的学习中去。
同时,《深入浅出分布式技术原理》这个专栏的设计思路也是如此,在学习中你会发现系统性思维方式一直贯穿其中,让你在学习知识的同时,还可以掌握高效的思维方法。
对于工作,通过系统性思维从根本上解决问题
上文中,我们提到学习中有很多零散的知识点,在工作中,需要处理的问题也是如此,我们经常会面临一个又一个独立的问题。如果我们只是见招拆招地解决,就会发现问题永远都解决不过来,并且还有可能会越来越多,直到我们被问题的黑洞所湮没。
对于这些问题,我认为系统性的思维方式是解决它们的根本。我们在每一次面对独立的问题的时候,应该跳过问题表层现象,深度思考这个问题的本质原因,系统性地解决。
为了让你更好地理解这种方式怎么运用于工作中,这里我举例带你分析。运维数据库的一个核心指标是数据库的稳定性,但是影响到这个指标的原因实在是太多了,对于技术中台内部可以控制的问题,我们通过一些高可用方案将其解决,比如网络故障、机器故障之类的。
但是业务研发侧引起的问题多种多样,比如没有建索引、索引建立不合理,请求的量急增了等等,并且这些问题在每一个表上都可能出现,我们没有办法通过穷举来解决。
那么这个时候,就要系统性地分析了,我们会发现这个问题的根本原因是,数据库的请求数量超过了它的负荷,比如对于没有建立索引请求来说,可能它的最大负荷就是 10 个并发;对于已经建立好索引的请求来说,可能它的最大负荷是 1000 个并发,索引建立不合理也是类似的情况。
所以我们就可以从数据库的请求数量超过它的负荷,这个根本原因上来解决,而不是一个表、一个索引进行梳理和优化。虽然一个表、一个索引进行梳理和优化也是非常有必要的,它可以大大地提高系统整体的性能,但是这些现象无法穷尽,问题也就无法完全解决。
那么具体应该如何解决,数据库的请求数量超过它的负荷这个根本原因呢?我们最终的解决思路是引入一个中间层,这个中间层是一个有数据库治理功能的 Proxy ,它能提供发现、熔断、降级、监控等服务治理功能,同时能够保证不论任何时候出现了任何问题,这个 Proxy 都能快速发现哪些请求导致的并发,超过了数据库的负荷,然后控制这些请求的并发或者完成抛弃,确保数据库快速恢复。
同样,当你学习专栏时,也会发现用系统性思维方式,解决问题的方法经常出现,你也可以运用于你的工作中。
总结
到这里,我们就从学习和工作这两个方面,讨论了系统性的思维方法,最后我们来总结一下。在学习中,从深度上系统性学习,我们可以了解一个知识的来龙去脉;在广度上系统性学习,我们可以明白知识之间的关系,并且建立好知识网络;在工作中,使用系统性思维解决问题,可以让我们找到问题的本源,从根本上解决问题。
有的人觉得学习非常痛苦,是因为学习效率不高,而且没有掌握好方法,在学习完这节课之后,希望你能使用系统性思维去搭建自己的分布式知识网络,让学习高效、快乐起来。如果这节课对你有帮助,也推荐你分享给更多的同事、朋友。
- 努力努力再努力 👍(8) 💬(1)
1 多思考是为了解决什么而存在,如果是你 你怎么做,人家为什么这么做 和我做的有什么区别 哪种更好 再加最重要的实践 2 遇到问题 多考虑深层原因是什么,然后怎么解决 希望能多点更新 哈哈😃 -认真听课 有梦想的程序员
2022-01-31 - peter 👍(5) 💬(2)
老师新年好,请教两个问题: Q1:数据库中间层是用第三方框架吗? 本篇中提到“引入一个中间层,这个中间层是一个有数据库治理功能的 Proxy”,MyCat是这样的中间层吗?(我认为MyCat是用来做分库分表的,和老师的意思不符合)。如果MyCat不是这样的中间层,那么有第三方框架吗? Q2:对于服务注册发现中心,为什么不提nacos和springCloud config?这两个比eureka更好啊。另外,nacos和sprincloud config也是AP吗?
2022-01-31 - Jack_1024 👍(0) 💬(1)
其他问题也可以加中间层吗?网络传输等也是加糖层解决的呗
2022-04-23 - Hello,Tomrrow 👍(0) 💬(1)
很多时候,还是我们的知识网络不够丰富,没有这个积累也就很难提出针对性的解决方案
2022-04-01 - 千军万马万马@ 👍(0) 💬(1)
得需要大量的阅读 才能逐渐看懂其他们的设计 要不真心看不懂
2022-03-12 - IT小村 👍(0) 💬(0)
豁然开朗
2022-10-01 - Jay 👍(0) 💬(0)
很多人往往不知道其实是自己缺少前置知识,而看不懂自己要学习的东西,这些前置知识很多时候是无意识的好奇心驱使下知道的,这样的话学知识乐在其中。所以说一个人的探索欲望这个力量被低估了。
2022-05-13 - Jack_1024 👍(0) 💬(0)
不太理解系统性思维
2022-04-24