丁威 中间件兴趣圈
读完需要
1
分钟速读仅需 1 分钟
在技术职场中普遍存在如下几种现象:
对待工作中所使用的技术不需要阅读源码,只需在开发过程中能够熟练运用就行
看源码太费时间,而且容易忘记,如果从实际使用过程中出现的问题出发,针对性的阅读源码,其学习效率会更高效,所以平时无需看源码。
对此我有着不同的理解,容我慢慢道来。
本文将从如下4个角度进行剖析:
源码阅读的必要性
源码阅读技巧
源码阅读的三种境界
源码阅读的误区
1
源码阅读必要性
1.1
通用型基础技术应该深入源码研究
在 JAVA 领域中笔者认为通用型基础技术包含 JAVA 集合、Java并发(JUC)。这类技术是项目中使用的高频技术,在合适的场景中选用合适的数据结构、选用合适的线程并发模型、合理控制锁粒度等都能显著提高应用程序的可用性、健壮性。
通用型技术正因为其具有普遍性,横向对比更具代表性,职场面试时的可辨别性非常高,如何在高样本中突出自己就显得极为必要,通过阅读源码,深刻理解其内部原理成为我们的不二法宝。
当然通过阅读源码并不是知晓原理的唯一方法,但作为一个名程序员、直面代码,亲自感受代码的魅力或许来的更加直接。
1.2
重点领域应深入源码研究
例如笔者所在公司在微服务、消息中间件领域分别采用了 Dubbo、RocketMQ,并且笔者有幸参与到这项技术栈的运用与运维,积累了丰富的使用经验,为此笔者为了突出在这两个领域的优势,详细阅读其源码,并作成专栏发布在『中间件兴趣圈』公众号与CSDN等知识分享平台,由于是成体系剖析的原因被出版社相中,邀请出书,《RocketMQ技术内幕》一书就在这样的背景中应运而生,从而成为笔者职业技能中非常亮眼的标签,助力职场。
源码阅读确实很重要,但一定需要成体系研究,大部分人认为在处理问题时再根据具体问题去看源码,会更有针对性,觉得没必要成体系看。
不可否认这有其正确性的一面,从问题本身出发,看源码效率更快,“投入产出比”更高,随着遇到的问题越来越多,对该技术理解也会越来越深,这个其实就是我们通常讲的“经验”。我觉得大部分情况下是可取的,这个过程其实是一个被动的过程,并且如果生产环节由于并发不高等因素,可能一年、两年也不会出现一两次故障,这样就会造成经验的积累会非常慢,从而使得工作了4、5年的朋友其竞争力还不如工作2,3年的重要原因,所以我的观点是如果是想打造成自己的专属亮点的话,我们还是需要主动通过阅读其源码,成体系掌握其设计理念、实现原理,更好的打造自己的专属亮点。
2
如何阅读源码
了解这款中间件的使用场景、以及架构设计中将承担的责任。
寻找官方文档,从整体上把握这款中间件的设计理念。
搭建自己的开发调试环境,运行官方提供Demo示例,为后续深入研究打下基础。
先主干流程再分支流程,注意切割,逐个击破。
阅读源码过程中带着思考与质疑思维。
理解了其使用场景后,结合官方文档,尝试理解该中间件需要解决的问题、并思考如何解决,思考过程中并不一定要求我们想出一个具体的答案,只是在真正步入源码阅读时能更快感悟其代码含义。
当然在阅读源码的过程中可能会到难题,遇到无法理解作者的实现意图,特别是遇到一些自己不太熟悉的编程方式(例如位运算),此时通常有两种解决方案:
通过DEBUG,结合运行时数据,方便对代码的理解。
从易到难,可以先尝试阅读一下JAVA集合框架的源码,提炼出一套自己的源码研究方法论。
源码阅读其实最难的不是代码本身,也不是无法理解其设计理念,最难的是坚持,故在这里借用笔者的座右铭与大家共勉:越努力越幸运,唯有坚持不懈。
3
源码阅读的三层境界
3.1
源码阅读的初级阶段
笔者的老粉丝们应该能感觉到笔者初期的源码阅读文章,基本上是记流水账,其最直观的表现现象是对源码一样一行加注释,只关注底层实现细节,但并未形成更高层次认知,对其设计理念并未提炼与深度领悟。
3.2
能提问、思考、并提炼
随着技术类文章的持续分享,笔者认识了很多大牛、发现与大牛交流的时候,一开始并不会说细节,而是讲设计理念,这就要求我们在阅读源码的时候多思考,并反问自己如果需要自己实现的话我们该如何着手,如何设计,带着疑问去研究源码,通过对比,思考,会对其背后的理念有了更深刻的理解。
3.3
思考、质疑、验证
其实无论是哪个开源框架都会存在BUG或者实现并不合理的地方,如果大家在阅读源码的时候能够思考并开始质疑其不合理性,并能通过验证证明自己的观点,然后与官方取得联系,交流,建Isuue,共同促进社区的发展,说明我们的能力、思考得到了极大的提升。
关于这一点,可以参考笔者对 Sentinel 对应熔断实现机制进行的质疑与思考过程,其链接如下:Sentinel Dubbo 适配器看限流与熔断(实战思考篇)
4
源码阅读误区
我在面试过程中发现好多候选者在谈到某一项技术时,首先不是介绍其原理,而是一下子具体到某个类啥的,这些类是如何如何工作等等,其实这是不太妥当的,源码阅读的目的是主要是深入理解其设计理念、工作机制,方便我们在实际使用过程中对其成体系的认识,加强对它的驾驭能力,做到提前规避风险。
其次源码阅读非常不建议一上来就直接DEBUG。如果一开始就使用DEBUG,很容易会迷失在代码的各个分支中,缺乏全局视角,从而变得没有头绪,极大的增加了源码理解的难度,很容易让我们半途而废。
最后学习一门技术并一定要深入源码,特别是非主流,非重点打造的领域。对于此类我们通常只需根据阅读官方文档,了解其使用场景、能解决什么问题,理解其设计理念、工作机制,灵活运用解决具体问题即可。
5
总结
源码阅读并不是目的,只是手段。对于通用型基础技术诸如 JAVA 集合、并发、需重点打造为亮点的领域建议大家阅读其源码,成体系深入细节掌握其工作机制,增强其驾驭能力,拥有提前规避风险的能力。
欢迎关注『中间件兴趣圈』,进专属微信交流群,与笔者交流中间件、架构设计、实战应用等技术课题,共同抱团发展。
- EOF -
想要加入中生代架构群的小伙伴,请添加群合伙人大白的微信
申请备注(姓名+公司+技术方向)才能通过哦!
阿里技术精彩文章推荐
往期推荐
深度:揭秘阿里巴巴的客群画像
多隆:从工程师到阿里巴巴合伙人
阿里技术专家楚衡:架构制图的工具与方法论
蚂蚁集团技术专家山丘:性能优化常见压测模型及优缺点
阿里文娱技术专家战獒: 领域驱动设计详解之What, Why, How?
阿里专家马飞翔:一文读懂架构整洁之道
阿里专家常昊:新人如何上手项目管理?
蚂蚁集团沈凋墨:Kubernetes-微内核的分布式操作系统
阿里合伙人范禹:常挂在阿里技术人嘴边的四句土话
阿里技术专家都铎:一文搞懂技术债
支付宝研究员兼OceanBase总架构师杨传辉:我在数据库梦之队的十年成长路
阿里技术专家麒烨:修炼测试基本功
阿里计算平台掌门人贾扬清:我对人工智能方向的一点浅见
蚂蚁资深算法专家周俊:从原理到落地,支付宝如何打造保护隐私的共享智能?
阿里高级技术专家箫逸:如何画好一张架构图?
阿里高级技术专家张建飞:应用架构分离业务逻辑和技术细节之道
蚂蚁科技 Service Mesh 落地实践与挑战 | GIAC 实录
阿里6年,我的技术蜕变之路!
蚂蚁集团涵畅:再启程,Service Mesh 前路虽长,尤可期许
阿里P9专家右军:大话软件质量稳定性
阿里合伙人程立:阿里15年,我撕掉了身上两个标签
阿里高工流生 | 云原生时代的 DevOps 之道
阿里高级技术专家邱小侠:微服务架构的理论基础 - 康威定律
阿里P9专家右军:以终为始的架构设计
阿里P8架构师:淘宝技术架构从1.0到4.0的架构变迁!12页PPT详解
阿里技术:如何画出一张合格的技术架构图?
蚂蚁资深技术专家王旭:开源项目是如何让这个世界更安全的?
阿里资深技术专家崮德:8 个影响我职业生涯的重要技能
儒枭:我看技术人的成长路径
阿里高级技术专家宋意:平凡人在阿里十年的成长之旅
阿里技术专家甘盘:浅谈双十一背后的支付宝LDC架构和其CAP分析
阿里技术专家光锥:亿级长连网关的云原生演进之路
阿里云原生张羽辰:服务发现技术选型那点事儿
蚂蚁研究员玉伯:做一个简单自由有爱的技术人
END
#架构师必备#
点分享点点赞点在看