learn-tech/专栏/深入浅出分布式技术原理/春节加餐系统性思维,高效学习和工作的利器.md
2024-10-16 09:22:22 +08:00

63 lines
8.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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