阅读源码的真正价值
源 / 文/
最近有位小伙伴求职遇到一些挫折,来找到我聊,其中有问到一个涉及到「阅读源码的必要性」的问题:“有很多场面试,面试官都有问到某个框架的某个功能是怎么实现的,难道真的要去看源码吗?但是感觉看源码除了面试有用,平时没啥用……”
我想可能有不少人都有一样的想法,所以我把我对阅读源码这件事的看法在这里和大家分享交流一下。
我曾经和一位同事聊天的时候打趣说,程序员可以分为4个层次。
1. 有阅读并吃透大型知名框架的能力
2. 能够知道并通过阅读框架源码来解决问题
3. 能够知道并通过找官方文档来掌握框架的使用
4. 需要有人手把手教或者自己踩过很多坑才能掌握一个框架的使用
这其实也体现了我对阅读源码这件事的看法。想成为厉害的程序员,阅读源码的能力必不可少,并且能够hold住的源码复杂度越高,水平越高。
我们程序员虽然每天都和代码打交道,但是大多数时候都是在「写」而不是「阅读」。唯有在接手一个新项目的时候,才会被逼着在短时间内阅读大量源码。毕竟,大多数情况下我们一直在固定的项目里“深耕细作”,阅读其它项目的源码,似乎对手头的项目没什么用。
但是在我看来,coding就好比写作,如果你想写出好文章,必然需要掌握很多语言组织上的技巧。比如,排比句、反复句等句式,比喻、拟人等修辞手法等等。这些其实就类似于coding中我们需要考虑的设计模式、算法这些东西。
在我们学生时代,老师会引导我们阅读大量的课外文章来提升这方面的能力,学习别人的写法,摘录别人的金句等等。
其实coding也是一样,如果你平时如果不多积累一些“美化”代码的“套路”,如何能写出优雅的代码呢?
所以通过阅读源码来提升你的编程能力,和阅读好文章提高自己的写作能力是一样的。
从这个逻辑也可以衍生一个新的逻辑,就是单凭自己顿悟、踩坑来提升编程技能的速度,必然比不过借助阅读别人源码来提升的速度。毕竟,参考、借鉴别人的东西可容易多了。你看,有哪个大文豪是不是阅读了大量的优质书籍?
回到本文的核心问题上,在Z哥看来,阅读源码的价值有很多,面试的作用只是一个短期价值。我认为它至少有以下5个价值。
/01 短期价值/
01 面试
正如前文提到的那位来找我咨询的同学,他也知道阅读源码对面试的作用是很大的。
因为有些实现细节如果我们只是会用,但不去看源码了解细节,其实就是所谓的“知其然而不知其所以然”。
比如,ArrayList 和 LinkedList 的区别?想要回答好这题,必须从源码入手,了解 ArrayList 和 LinkedList 底层实现。如果你没有阅读过源码的话,这道题肯定是回答不太好的或者回答的时候底气不足。
/02 长期价值/
01 在工作中更快地上手新项目
正如前文所说,每个程序员的职场生涯中,都无法避免“阅读源码”。因为你不可能一直在一个项目里工作,必然有机会接手很多陌生的项目。此时如何快速的了解项目的脉络、结构,以便自己快速的展开工作?这个时候,阅读源码能力高低就体现出来了。
虽说,如果上一位接手者还在职的话可以请教他,但是人家不可能真的像网传的「结对编程」图片那样,手把手解释给你,你说是吧?大部分时候还得看你自己的阅读源码能力。
这个新技术到底好在哪里? 能够改善或者提升当前的系统的某几项能力? 为什么它可以提升这些能力? 它是怎么实现的? 如果我们要用它,需要提前对哪些知识进行储备? ……
自认为自己的设计很牛逼,而实际上…… 觉得这样设计代码很变扭,但是又不知道有什么更好的方式。
在工作中更快地上手新项目 给自己创造用新技术的机会 完善知识体系 学习别人的设计思路
开学指南
有个程序员老公该多爽???
被“监控”的打工人:因算法裁定“效率低下”,近150名员工遭解雇
阿里某P8征婚:年薪170万,择偶要求却被群嘲!
END
顶级程序员:topcoding
做最好的程序员社区:Java后端开发、Python、大数据、AI
一键三连「分享」、「点赞」和「在看」