看到「为什么我们要阅读源码?」文章写的非常不错,所以就转载了。有些同学可能看的一脸懵逼,其实这很正常,这篇文章写的都是理论和方法,缺少源码阅读的实践。只有在你源码阅读达到一定的量以后,你才会真正明白这篇文章是对阅读源码很好的归纳和总结。
我这里把这篇文章精简一下,稍微帮助大家回顾一下重点,然后扩展一下思路,讲解一下如何找到适合自己阅读的源码。
一、为什么要阅读源码,why?
学会基础的语法和试验了若干 example 后,我们就火箭般蹿到了自己写代码打怪赞经验的阶段。这样略过大量阅读代码的阶段有三个害处。
- 写代码的基础是不牢靠的,打怪升级的过程也是最慢的。道理很简单 —— 前辈们踩过的坑,总结的经验教训,你都不得不亲自用最慢的法子一点点试着踩一遍。
- 很容易养成 stackoverflow driven 的写代码习惯 —— 遇到不知如何写的代码,从网上找现成的答案,找个高票的复制粘贴改吧改吧,凑活着完成功能再说。写代码的过程中遇到问题,开启调试模式,要么设置无数断点一步步跟踪,要么到处打印信息试图为满是窟窿的代码打上补丁,导致整个写代码的过程是一部调代码的血泪史。
- 你周围最强的那个工程师的开发水平的上限就是你的上限。
二、如何阅读源码,how?
读书一般分不同的场景:想要让自己明智,读史;想要让自己灵秀,读诗;想要让自己周密,研习数学;想要让自己深刻,攻读哲学等;同样的道理,代码的阅读也分不同的场景,不同场景下的阅读方法自然不同。
- 为了破案而阅读代码;专注,集中力量攻击且仅攻击一点是这样场景下阅读代码的主要方式。
- 为了明理而阅读代码;经验值增长太慢,要想涨快点怎么办?主动出击啊!计算机领域的很多算法,基础知识,理论,在看过书,读过文章后我们都似懂非懂,这时,阅读代码就是最快地巩固和加深理解的方式。
- 为了能级跃迁而阅读代码;打破平台期,成就能级跃迁,你需要吸收合适的「光子」。这光子可以是一个开天辟地的项目(比如说 Google 的 Google Map,docker 的 docker,阿里的淘宝等),可是这样的机会并非总能被你我赶上,大多数人都是在日复一日地做些并不起眼的,只能缓缓升级的小活,这时候,与其默默沉沦,不如学庄子口中的北冥之鱼那样,沉潜浮动,积蓄能量,等待下一次抟扶摇而上九万里。这种积蓄能量为跃迁准备的一种方式是读代码。读什么?读那些基础地不能再基础,你认为自己一辈子都不会去写的那些代码。比如 linux kernel,比如 OTP。
三、如何找到适合自己阅读的源码?
明白阅读源码的重要性以及方法后,重要的就是实践,阅读期间必然会遇到各种困难,尤其是没有人一起探讨时,更容易放弃,开发者圆桌会整理一系列关于阅读源码的实践文章与大家一起阅读、探讨、总结,坚持源码阅读,坚持更高级的进步。
要阅读源码自然要获取源代码才行,我们去哪里找到适合自己阅读的源码呢?开源组织或平台是一个不错的选择,这些组织或平台管理着大量的源码资源和说明文档,对我们阅读源码是非常宝贵的资源。下面列举几个比较知名的源码平台:
1. GitHub
GitHub是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。
GitHub 于 2008 年 4 月 10 日正式上线,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。目前,其注册用户已经超过350万,托管版本数量也是非常之多,其中不乏知名开源项目 Ruby on Rails、jQuery、Python 等。访问地址:https://github.com/。
2. Apache
软件基金会(也就是Apache Software Foundation,简称为ASF),是专门为运作一个开源软件项目的Apache 的团体提供支持的非盈利性组织,这个开源软件的项目就是 Apache 项目。访问地址:http://www.apache.org/。
3. 基础库
各编程语言的基础库,比如Java语言的JDK就是一个非常不错的源码库,可以学到很多大师级的代码实现逻辑和写法。
短时间内,可能无法确定自己应该阅读哪些源码,我觉得可以从以下三个方面着手考虑:
- 工作相关的;阅读与自己工作相关的源码,可以在实际工作中学以致用。
- 感兴趣的;兴趣是最好的老师,可以推动你探索更多的未知源码世界。
- 职业规划相关的;根据自身职业发展规划阅读相应的源码,比如要成为架构师、技术总监那么就需要阅读与该职业相关的源码和文档资源。
【本文为51CTO专栏作者“朱国立”的原创稿件,转载请通过作者微信公众号“开发者圆桌”获取联系和授权】