学习是一件需要长期投入的事情,尤其是在当下大环境恶劣的背景下,我们程序员必须要多多的投资自己,去加强自己的技术硬实力和软实力。
作为一个技术人,一定学会在有限的时间之内去高效的阅读源码,这个是非常重要的技能。如果你告诉我,你自己压根就不看源码,那么请忽略本篇文章的内容。
一般我会建议大家按照如下步骤来看:
(1)培养看源码的兴趣;
(2)从功能及配置入手;
(3)尝试自己去画架构图;
(4)带着问题去阅读源码。
培养看源码的兴趣
兴趣是所有问题的根源,也就是说只要你有兴趣,剩下的事情就可以交给时间去验证。一般很多人可能会觉得,不就是一个技术吗?我干嘛需要有兴趣呢?又不是物品(比如名牌手表和名牌包包等等),但是这里我想告诉大家的是兴趣真的很重要。
我这里给大家列举一个非常简单的例子,“一般晚上熬夜做事情是不是都会感觉到很累,比如工作或者做家务”,必会感动更累,但是这个时候叫你去“吃宵夜或者是几个小伙伴一起开黑打游戏”,这个时候你应该不会很快感觉到累,因为这些事情都是娱乐性质的事情,并且也是你感兴趣的事情,还有一点你会发现就算是通宵,你也会觉得时间过的很快。
我再给大家举一个比较贴心的例子,假如你跟你喜欢的女孩子在一起,一起去坐船游览杭州西湖的景色,明明已经在船上坐了快三个小时了,但是你会觉得时间过的真快,一瞬间就结束了,然后你也不会感觉到累。
好了,我们在回过头来看看“阅读源码”这是事情,假如你没有兴趣,就算是拿着刀架在脖子上,你也不会主动的去看源码,因为它根本就不会刺激到你的大脑细胞。
假如你对看源码非常有兴趣,你一般会这样来做事情:
(1)碰到技术问题了,第一时间去查阅源码,并记录和总结经验;
(2)利用工作之余的碎片时间去查阅相关核心源码,大致的看一下,看能不能看懂;
(3)利用搜索工具,在网上搜索一下,有没有大V分享一下看源码的经验;
(4)经常去逛技术社区,并解答一些源码性质的技术问题;
(5)查阅开源项目的问题集,并尝试着自己去解决一下。
如果大家在工作中,有上述那些习惯,那么我要恭喜你,你有成为技术专家的潜质。
从功能及配置入手
很多人都在说,项目那么大我怎么才能选择我需要下手的源码呢?其实被这些问题困惑的小伙伴,也不需要害怕看源码,因为笔者也是从小白过来的,那个时候也是碰到过这样的问题,但是当作为过来人,回过头来看这些问题的时候,有时候会觉得非常好笑,这么简单的事情居然还搞的这么复杂。
这里结合我的经验,我就直接告诉大家,要从“功能及对应的配置项入手”,这样你们是不是觉得非常简单呢?但是就是这么简单的方法论,只要你能够坚持下来,我想任何技术你都是可以学会的,你也不用再惧怕说没有现成的技术大咖去指导你。
我列举一个简单的案例,假如你想入门Skywaking,它是一款非常优秀的分布式链路追踪框架,当你拿到这个项目之后呢,你怎么入手呢。又或者你从我的书“Spring Cloud Alibaba微服务架构实战派(上下册)”书籍中得知可以利用Skywalking完成链路告警,那么你需要去梳理链路告警模块,那么你该如何去做呢?
我建议大家按照如下步骤去做,如图所示,是我为大家总结的七步走策略。
如果你按照以上策略去查阅Skywaking告警模块的源码,你会很快的能够搞懂它的原理。
尝试自己去画架构图
为什么要这样做呢,很多人都在说开源框架,人家官方已经画好了,我直接捡现成的不就好了,但是你要去想想,人家开发者画出来的东西,比不一定能够看的懂,人家是站在它们已经熟悉了的视角去画图的,很定会忽略很多细节,但是往往这些细节就会决定你对这些新的框架的认知程度。
那么我们作为一个源码爱好者,我们更应该去认真的揣摩原作者当初的设计思路,并将这些设计思想转换为自己的思维,从而你能够反推出更优秀的解决方案,从而能够反向推动该框架版本的迭代。当你达到这个程度之后,你就会发现,自己去画架构图有多么的重要了。
再比如我们平常在做项目的过程中,很多人觉得架构图根本不重要,其实我是想告诉大家的是,图才是你和别人沟通的一种最快的方式,也是大家都喜闻乐见的形式。你可以尝试的去想一下,当你直接口述的和别人交流之后,自己以为很多事情都沟通的到位了,但是事实证明总会有很多遗漏的地方,这个时候就需要再次去确认,真的很烦。
如果你采用图 额外的文字描述,你会发现这些问题好像都能解决,因为大家更加愿意和你沟通,这些也会精力非常集中的去跟踪这些问题。
比如下面是Skywalking官网给的架构图,你能从中获取到多少对你入门有有用的信息呢?
当你尝试去做转换,比如像我一样你将你理解的画出来呢?这样你就能获得更多有用的信息,是不是呢?
你们还是自己去领悟吧,所谓授人以鱼,不如授人以渔,我这边给大家一个提供的小小的方法论,还是需要大家自己去实践,不然你就会当作是一篇口水文,看了之后就忘记了,或者是嫌弃它太简单,而眼高手低了。
再偷偷告诉大家,其实大厂的技术其实很多都是很简单的实现,也就是说用最 简单的技术去解决最复杂的问题。
带着问题去阅读源码
这里我想说的是不光是阅读源码,其它的也是一样的,只要我们有问题了,我们才会更加有效的去驱动自己去解决问题,从而能够更好的去做自己感兴趣的事情。当然很多自我驱动能力非常强的人,它根本就不需要问题也能够自觉的去学习,这个就是人与人之间的差距。
比如你觉得你自己应该去了解Dubbo源码中负载均衡相关的原理,那么你就应该去查阅源码,而不是一直拖延,从而到最后就把这个事情忘记了。
总结
一定做一名合格的35岁程序员,这样才能够将自己立于不败之地。