You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
9.3 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 特别放送 | 徐志强:学习这件事儿,不到长城非好汉
> 你好,我是聂鹏程。今天,我要和你分享的是,一名专栏订阅用户“徐志强”的学习经历与方法,主题是“学习这件事儿,不到长城非好汉”。
> 你在学习专栏的过程中,有没有什么独特的学习方法和心路历程呢?欢迎你写在留言区,我很期待能跟你在这里交流、讨论,一起学习进步。
> 话不多说,现在就请你返回文稿看看徐志强的故事吧。
大家好我是徐志强一名Java开发者从事互联网金融工作三年了。
从2016年毕业到现在我从一枚“小白”变成了“熟练工”。但我一直不甘心从“小熟练工”变成“老熟练工”所以我来了“极客时间”。回过头来看自学的这三年我收获很多也走了不少弯路。所以我想把自己的学习经历分享出来希望能帮你避开些弯路。
## 我是如何学习的?
我自学的三年,可以分为以下三个阶段。
**第一阶段**:啥都不懂,啥都想学。我买了非常多的书,数据库、操作系统、分布式等每个知识领域都买了一两本,但只是停留在“看了”的阶段。工作中遇到问题时,我不能融会贯通地用到所学知识,或者说我自学的知识基本用不到工作中。这就像大脑里装了很多武器,但我只记得它们的说明书,无法根据它们的特性做出选择。
其实在这个阶段,我们都很容易有个误解:觉得只要看了足够多的书、学了足够多的框架,能力自然就会得到提高,但其实蜻蜓点水般的学习收效甚微。所以,在我看来,广度学习虽然容易,但其实只算是到了长城脚下,只是起点。
**第二阶段**:调整思路,有选择地精读某些内容。觉察到不对后,我把之前那些书重新找了出来,并调整学习思路:挑选关键知识点采取精读的方式复习,并开始啃一些框架和库的源码。
“如果不了解核心原理,我始终都是一枚小白或者熟练工” 这是我经常暗示自己的话。为此我曾经通宵Debug就是为了搞明白一段很复杂的源码。每次我在源码中发现了书中描述的知识点后都非常有成就感原来就是这样呀这也让我持续有动力去啃源码。
但我发现,学习源码并没有提升程序设计能力,我又进入了新的困惑期:怎样才能更好地消化和理解知识、怎样才能做到举一反三,养成解决问题的能力。为了爬上长城,我继续寻找答案。
**第三阶段**:学习一些架构方面的知识,形成知识点和问题的映射。当精读某一领域的知识内容后发现,我在系统设计上短板暴露了出来。因为做系统设计需要有全局思维,需要对整个系统架构的技术栈有清楚的认识,能对比分析不同技术的差异和特性,而不能局限于一个分支。
于是,我开始学习架构方面的知识,学习知识点和问题间的映射关系。每遇到一个问题我都会多思考几套解决方案并进行对比分析,每学到一个新知识点就思考它可以用在哪些场景,以及各个知识点有什么共性和联系。
说到这里,我再分享一段我的面试经历吧。去年年初我去参加面试,因为平时看了不少书、也阅读了不少源码,可以很轻松地通过一面、二面,但最后一面我就有点招架不住了。后来,我请教面试官,自己还欠缺哪方面的知识和能力。他告诉我,单论某一个知识点我掌握得还不错,但我不能将所有知识由点串成线,由线串成面,最终形成网,建议我平时多思考、多总结。
他的这番话对我影响非常大,一下就点醒了我,帮我找到了困惑许久的问题答案。正处于第三阶段学习的我,或许后面我还会有新的困惑,但方法总比问题多。现在,虽然我不知道自己爬到了长城的第几级台阶,但我坚信自己终将站上最高的烽火台!
**总结我的学习经历,我觉得有下面几个点值得注意:**
1. 一定要坚持学习充电,否则很快就会被淘汰。
2. 不要惧怕学习新技术,新技术不管怎么变化,原理和本质都是不变的。
3. 一定不要只漂在技术的表面,一定要学原理,否则漂的时间久了你自己都不知道漂到哪了。
4. 师傅领进门很关键。学一门新技术,最好是找一本经典的书,或者一门经典的课程系统地学习。
5. 多思考,才能构建自己的知识体系和思维模式,才能将知识化作解决问题的方案。在学习时,我们要思考各个知识点的共性和内在联系,思考这个知识点能解决什么问题,以及遇到的问题能用什么知识点去解决。这样,脑中储存的知识,才能真正为我们所用。
## 为什么要学习分布式技术和原理?
分布式是当前技术领域的趋势之一,它扩展了计算机的计算边界,是区块链、人工智能、机器学习、大数据等众多前沿技术的基石。
所以,如果你不想永远当一枚小白或者熟练工,也不想被行业淘汰的话,就必须学习分布式技术,且一定要把原理学明白,不能局限于皮毛。我们不能一直随着浪花漂荡,要尝试将自己沉入海底,这样才能经受得住惊涛骇浪的洗礼,最终到彼岸。
我学习的第一个中间件是Kafka刚开始学的时候就被它的分区、选主、备份等概念搞得晕头转向后来又学习了Redis和Elasticsearch。这时我发现这些中间件有一些共同特点都会考虑分区来提高吞吐量都会考虑备份来保证容错和可用性多个备份之间都会选举一个主来提供服务。
慢慢地,对这些概念越来越熟悉后,我发现它们在分布式场景下都会遇到些类似的问题,只是各自的解决方案不同而已。因此,我心中萌生了系统学习分布式技术和原理的想法,因为只有弄清楚了分布式技术的本质和原理,才能在各种眼花缭乱的技术框架中游刃有余。
于是,我开始在网上搜集各种学习资料,又来到了极客时间,来到了“分布式技术原理与算法解析”这个专栏。
## 我是怎么学习这个专栏的?
说到我是怎么学习这个专栏的,因为之前已经自学过些分布式技术原理,所以可能会和其他人的方法不太一样。
首先,我不是利用碎片时间单篇文章地去学习,而是会找一个比较长的空闲时间,一气呵成地学习完一个模块的内容。这样我可以联系上下文,一下搞定相关知识点。
其次,学完每篇文章,我都会梳理、总结自己对这篇文章的理解,并尝试回答课后思考题,在评论区留言。同时,我也会关注其他同学的留言问题,并尝试做解答。在这个过程中,针对文章中的疑惑点,我会先去搜索相关资料学习,然后将具体的疑惑点留言给老师,等他的解答。
最后,关于知识点的思考和联想很重要。老师讲的很多分布式技术知识点都是通用的,在很多的中间件和框架中都有体现,根据这些理论去思考具体的组件是如何实现的,可以帮助我理解得更深刻。
## 学习到现在,我最大的收获和体会
到现在为止整个专栏已经更新了18篇文章可以说帮助我建立了对分布式技术和原理比较全面、系统的认知越往后的体会越深。
其实在学习这个专栏前我就对分布式的一些概念比如分布式事务、BASE理论、CAP理论、分布式锁等有些了解但这些知识点在我脑中是独立没有关联起来的。所以这个专栏对我最大的帮助是帮我打通了这些知识点有了一个系统化的认知。
此外,这个专栏给了我极大的信心。因为,聂老师的讲述是由浅入深的,并且还有大量形象的比喻和深刻的类比。比如,用事务模型来解释共享状态的分布式调度,在我看来就很形象、很有深度。
因此,这个专栏给我的感觉是“分布式技术和原理原来就是这么回事呀”,完全消除了我之前的畏难情绪。虽然学完这个课程不代表能透彻掌握分布式的技术原理和算法,但这肯定是一个非常棒的开始。
## 留给朋友们的建议
如果你之前没有接触过分布式的技术和中间件的话,我建议你先花点时间去补些基础,但这也不妨碍你将这个专栏作为你的“分布式技术和原理导论”来学习。
如果你之前了解过一些分布式技术和分布式组件,但是学得不深入的话,我觉得这个专栏可以帮你建立全面的分布式知识体系,直接带你练习上乘内功。非常值得拥有,我现在也正处于这个阶段。
如果你已经对分布式技术和常用组件都很熟悉了的话,我觉得这个专栏可以带你到更高的层次,去思考分布式的核心本质,帮助你更好地造轮子。
每个人都有自己的一座长城,有些人爬了一年数个月,有些人爬了十年,而有些人爬了一辈子,他们在长城上看到风景肯定大有不同。技术学习件事,我希望自己当一回好汉,爬上自己的长城,也祝愿各位小伙伴能爬上自己的长城!