因为项目的要求,近期花了较多的是时长看来开源项目的代码,在这篇文章中,简易总结一下对为何要看源码、如何看源码这两个问题的思索。
看源码的实际意义
看源码仅仅一种方式、方式,而非目地。我也曾经为自己制订过“阅读xxx源码”的总体目标,如今看上去很蠢,一点不smart(specific、measurable、attainable、relevant、time-bound)。仅有弄清楚了阅读代码的总体目标,才可以以问题为导向,抓住重点,高效率达到每日任务。
看源码的实际意义汇总下去包括但不限于以下几个方面:
一、解决困难(BUG)
只需是代码,便会有bug,仅仅说bug的多与少、深与浅而已。如今大家都喜欢公布、应用开源项目,不一样的开源项目小区成熟情况、代码品质又会有比较大的差别,碰到bug就习以为常了。
自然,碰到bug肯定是先往网上搜索是不是有相似的难题,一般能够在google、Stack Overflow、项目的issues里边有相应的搜索关键词。假如找不到,那么就只有看源码解决了
二、学有所用
我还在[怎样学习新技术应用、精英团队技术性型号选择时要注意些什么][Link 1]里边提及过,假如我们应该将一个开源项目使用自身的项目中,那么就务必掌握此项项目的优缺点,并自知基本原理,对一部分关键点(特别是项目的优点、feature)开展深入分析。如果是完善的开源项目,遇到问题或许能google到许多回答;但如果是一个处在迅速发展里的开源项目,多掌握其构架、关键基本原理,也可以协助快速定位难题。
此外,有些项目文本文档可能不那样丰富多彩,但又必须应用,那样如何以正确的姿势应用呢?也得参照源码
三、学习培训
看源码也是一种很好的学习方法(尽管不一定并不是最好的方法),特别是针对较为杰出的开源项目,能让人惊叹不已。
即使是出自于学习的目的,都是有许多偏重于的,例如
语言学习:代码设计风格、标准、常用法、高端英语的语法。针对某一语言表达的初学者,找一个了解行业的开源项目来深层次把握这门语言表达,都是一个很好的留意。
学习设计:api接口、架构、整体架构
学习理论:优化算法、协议书。例如我以前写过的[raft协议书][raft],光看论文是很枯燥的,并且优化算法基础理论到工程实践或是有一定的差异,这个时候融合开源项目([mongodb][])完成通常更事倍功半。
别的
四、更新改造
一般来说,大家一开始只是应用一个开源项目,但由于采用的深层次,会看到一些自身必须的作用并没非常好的适用,向项目组提的issues也有可能无法得到迅速的反应,这个时候就需要自己开支系,改代码,加作用了。自然,比较好的是由自身支系比较好的新feature 给原项目提merge request,哺育开源项目,例如阿里巴巴的[Blink][]
五、参考
它山之石可以攻玉,假如有必须从头开始自身代码重构,那样参照一些已经有的、出色的车轮子肯定是有帮助的。
六、副产物
这一点,不应该做为大家阅读源码的立足点,可是的确能在具体中对找个工作、招聘面试有加持,算得上副产物吧。
如何看源码
看源码的目地非常大水平上影响了看源码的方法、必须阅读的代码的范畴。例如,如果是为了能修一个网上bug,那样阅读代码的标准就重点围绕bug自身;而如果是为了能掌握某一分布式系统优化算法,那么就必须按很多的、很有可能运作在不一样连接点(过程)里的代码,掌握其互动基本原理、工作内容。
接下来说一些常用的方式。
首先看文本文档,总体掌握
一般来说,文本文档应该是代码的相对高度凝炼,一个高质量开源系统一般会包括tutorial、specification、API reference等documents,根据可选择性的粗读、选读这种文本文档,就可大概掌握项目的整体架构、设计原理。准确的线路是通过文本文档去了解这一项目,然乎根据阅读代码去认证文本文档、深层次关键点,而非根据立即啃源码来认识这一项目,断章取义。
了解代码机构,文件夹名称,类名
当必须看代码的情况下,不必找到一个文档就逐渐,先看看代码机构,粗略地看一下文件夹名称、类名,基本上就可猜测到每一部分。例如redis的源码就机构得很好,大部分看文件夹名称就能够快速定位每一个command的完成部位。
关心一个问题,从难题跟踪代码
看源码的总体目标取决于此刻的侧重点,不论是处理碰到的bug或是学习培训某一优化算法,都使我们对焦到一个实际的情况,从这一实际的情况去跟踪代码,忽视掉现阶段不用关心的细微末节,一步步深层次,直通总体目标。自然在处理一个问题的情况下,有可能引起一个新的难题,特别是学习的时候,这时只需纪录新问题(放进搜集篮,不必马上散发),待以前跟踪的问题处理以后,再看来新发现的问题。
处理一个issue
要是自身没有问题,那么就帮助处理别人的难题,一般而言,开源项目都是有很多待处理的issue,从这当中选择一个下手就可以。
调节
只需能够,一定先让代码编译程序根据、跑起来,那样不论是加log、打印出启用栈或是断点调试都便捷许多。特别是针对像python这类动态性种类代码,不跑下去难以了解究竟在做什么。
加注解,记笔记
假如某份源代码的阅读并非一锤子买卖,日后还可能回望、再次阅读,那么就一定要搞好代码注解和笔记。手记目的是为了架构图、类图、流程表,目标是建立索引,便捷日后迅速追忆。而注解便是阅读代码时的关键点,再次阅读的情况下看注解(尤其是函数公式的注解)能减少许多时长。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。