你好,我是聂鹏程。今天,我要和你分享的是,一名专栏订阅用户“徐志强”的学习经历与方法,主题是“学习这件事儿,不到长城非好汉”。

你在学习专栏的过程中,有没有什么独特的学习方法和心路历程呢?欢迎你写在留言区,我很期待能跟你在这里交流、讨论,一起学习进步。

话不多说,现在就请你返回文稿看看徐志强的故事吧。

大家好,我是徐志强,一名Java开发者,从事互联网金融工作三年了。

从2016年毕业到现在,我从一枚“小白”变成了“熟练工”。但,我一直不甘心从“小熟练工”变成“老熟练工”,所以我来了“极客时间”。回过头来看,自学的这三年,我收获很多,也走了不少弯路。所以,我想把自己的学习经历分享出来,希望能帮你避开些弯路。

我是如何学习的?

我自学的三年,可以分为以下三个阶段。

第一阶段:啥都不懂,啥都想学。我买了非常多的书,数据库、操作系统、分布式等每个知识领域都买了一两本,但只是停留在“看了”的阶段。工作中遇到问题时,我不能融会贯通地用到所学知识,或者说我自学的知识基本用不到工作中。这就像大脑里装了很多武器,但我只记得它们的说明书,无法根据它们的特性做出选择。

其实在这个阶段,我们都很容易有个误解:觉得只要看了足够多的书、学了足够多的框架,能力自然就会得到提高,但其实蜻蜓点水般的学习收效甚微。所以,在我看来,广度学习虽然容易,但其实只算是到了长城脚下,只是起点。

第二阶段:调整思路,有选择地精读某些内容。觉察到不对后,我把之前那些书重新找了出来,并调整学习思路:挑选关键知识点采取精读的方式复习,并开始啃一些框架和库的源码。

“如果不了解核心原理,我始终都是一枚小白或者熟练工” ,这是我经常暗示自己的话。为此,我曾经通宵Debug就是为了搞明白一段很复杂的源码。每次我在源码中发现了书中描述的知识点后,都非常有成就感,原来就是这样呀!这也让我持续有动力去啃源码。

但我发现,学习源码并没有提升程序设计能力,我又进入了新的困惑期:怎样才能更好地消化和理解知识、怎样才能做到举一反三,养成解决问题的能力。为了爬上长城,我继续寻找答案。

第三阶段:学习一些架构方面的知识,形成知识点和问题的映射。当精读某一领域的知识内容后发现,我在系统设计上短板暴露了出来。因为做系统设计需要有全局思维,需要对整个系统架构的技术栈有清楚的认识,能对比分析不同技术的差异和特性,而不能局限于一个分支。

于是,我开始学习架构方面的知识,学习知识点和问题间的映射关系。每遇到一个问题我都会多思考几套解决方案并进行对比分析,每学到一个新知识点就思考它可以用在哪些场景,以及各个知识点有什么共性和联系。

说到这里,我再分享一段我的面试经历吧。去年年初我去参加面试,因为平时看了不少书、也阅读了不少源码,可以很轻松地通过一面、二面,但最后一面我就有点招架不住了。后来,我请教面试官,自己还欠缺哪方面的知识和能力。他告诉我,单论某一个知识点我掌握得还不错,但我不能将所有知识由点串成线,由线串成面,最终形成网,建议我平时多思考、多总结。

他的这番话对我影响非常大,一下就点醒了我,帮我找到了困惑许久的问题答案。正处于第三阶段学习的我,或许后面我还会有新的困惑,但方法总比问题多。现在,虽然我不知道自己爬到了长城的第几级台阶,但我坚信自己终将站上最高的烽火台!

总结我的学习经历,我觉得有下面几个点值得注意:

  1. 一定要坚持学习充电,否则很快就会被淘汰。
  2. 不要惧怕学习新技术,新技术不管怎么变化,原理和本质都是不变的。
  3. 一定不要只漂在技术的表面,一定要学原理,否则漂的时间久了你自己都不知道漂到哪了。
  4. 师傅领进门很关键。学一门新技术,最好是找一本经典的书,或者一门经典的课程系统地学习。
  5. 多思考,才能构建自己的知识体系和思维模式,才能将知识化作解决问题的方案。在学习时,我们要思考各个知识点的共性和内在联系,思考这个知识点能解决什么问题,以及遇到的问题能用什么知识点去解决。这样,脑中储存的知识,才能真正为我们所用。

为什么要学习分布式技术和原理?

分布式是当前技术领域的趋势之一,它扩展了计算机的计算边界,是区块链、人工智能、机器学习、大数据等众多前沿技术的基石。

所以,如果你不想永远当一枚小白或者熟练工,也不想被行业淘汰的话,就必须学习分布式技术,且一定要把原理学明白,不能局限于皮毛。我们不能一直随着浪花漂荡,要尝试将自己沉入海底,这样才能经受得住惊涛骇浪的洗礼,最终到彼岸。

我学习的第一个中间件是Kafka,刚开始学的时候就被它的分区、选主、备份等概念搞得晕头转向,后来又学习了Redis和Elasticsearch。这时,我发现这些中间件有一些共同特点:都会考虑分区来提高吞吐量,都会考虑备份来保证容错和可用性,多个备份之间都会选举一个主来提供服务。

慢慢地,对这些概念越来越熟悉后,我发现它们在分布式场景下都会遇到些类似的问题,只是各自的解决方案不同而已。因此,我心中萌生了系统学习分布式技术和原理的想法,因为只有弄清楚了分布式技术的本质和原理,才能在各种眼花缭乱的技术框架中游刃有余。

于是,我开始在网上搜集各种学习资料,又来到了极客时间,来到了“分布式技术原理与算法解析”这个专栏。

我是怎么学习这个专栏的?

说到我是怎么学习这个专栏的,因为之前已经自学过些分布式技术原理,所以可能会和其他人的方法不太一样。

首先,我不是利用碎片时间单篇文章地去学习,而是会找一个比较长的空闲时间,一气呵成地学习完一个模块的内容。这样我可以联系上下文,一下搞定相关知识点。

其次,学完每篇文章,我都会梳理、总结自己对这篇文章的理解,并尝试回答课后思考题,在评论区留言。同时,我也会关注其他同学的留言问题,并尝试做解答。在这个过程中,针对文章中的疑惑点,我会先去搜索相关资料学习,然后将具体的疑惑点留言给老师,等他的解答。

最后,关于知识点的思考和联想很重要。老师讲的很多分布式技术知识点都是通用的,在很多的中间件和框架中都有体现,根据这些理论去思考具体的组件是如何实现的,可以帮助我理解得更深刻。

学习到现在,我最大的收获和体会

到现在为止,整个专栏已经更新了18篇文章,可以说帮助我建立了对分布式技术和原理比较全面、系统的认知,越往后的体会越深。

其实,在学习这个专栏前,我就对分布式的一些概念,比如分布式事务、BASE理论、CAP理论、分布式锁等有些了解,但这些知识点在我脑中是独立没有关联起来的。所以,这个专栏对我最大的帮助是,帮我打通了这些知识点,有了一个系统化的认知。

此外,这个专栏给了我极大的信心。因为,聂老师的讲述是由浅入深的,并且还有大量形象的比喻和深刻的类比。比如,用事务模型来解释共享状态的分布式调度,在我看来就很形象、很有深度。

因此,这个专栏给我的感觉是“分布式技术和原理原来就是这么回事呀”,完全消除了我之前的畏难情绪。虽然学完这个课程不代表能透彻掌握分布式的技术原理和算法,但这肯定是一个非常棒的开始。

留给朋友们的建议

如果你之前没有接触过分布式的技术和中间件的话,我建议你先花点时间去补些基础,但这也不妨碍你将这个专栏作为你的“分布式技术和原理导论”来学习。

如果你之前了解过一些分布式技术和分布式组件,但是学得不深入的话,我觉得这个专栏可以帮你建立全面的分布式知识体系,直接带你练习上乘内功。非常值得拥有,我现在也正处于这个阶段。

如果你已经对分布式技术和常用组件都很熟悉了的话,我觉得这个专栏可以带你到更高的层次,去思考分布式的核心本质,帮助你更好地造轮子。

每个人都有自己的一座长城,有些人爬了一年数个月,有些人爬了十年,而有些人爬了一辈子,他们在长城上看到风景肯定大有不同。技术学习件事,我希望自己当一回好汉,爬上自己的长城,也祝愿各位小伙伴能爬上自己的长城!

评论