天天看点

git 怎么读_跟我一起读源码 – 如何阅读开源代码

阅读是最好的老师

在学习和提升编程技术的时候,通过阅读高质量的源码,来学习专家写的高质量的代码,是一种非常有效的提升自我的方式。程序员群体是一群乐于分享的群体,因此在互联网上有大量的高质量开源项目,阅读这些项目的源码,对于提升自我是很有帮助的。但是很多人不知道怎么开始,看着一个又一个的开源项目,面对一大推的代码,容易迷失方向,跟我一起读源码系列就是希望读者能够跟着笔者的思路,完成源码项目的阅读,并从这个过程中学会:

  • 如何动手读源码
  • 从源码中学习源码作者的编程思路
  • 如果刚好库对于你的工作学习有帮助,通过阅读深入了解该库的使用

1. 源码项目选择

读者肯定知道GitHub平台上有无数的高质量开源项目,那具体选择哪一个或者哪一些来阅读呢,如何才能选择到适合自己的源码项目,我们认为要从几个方面来考虑:

  • 跟学习一门知识一样,教材都应该是由浅入深,由易到难,读源码也是一样,要选择适合自己难度的项目来开始
  • 我们要了解源码实现的功能,这里并不要求自己是这个功能领域的专家,而是说对该项目解决的问题或提供的功能要有一定的认识,用白话说的话,就是知道这个库在干什么
  • 互联网上有很多实现同一个功能的开源项目,编码质量也会参差不齐,选择高质量的代码才能达到提升自我的目的,而低质量的代码反而会让我们的水平下降,跟读书一样,只有读好书才能有收获。笔者经验是,善用互联网,在选择一个开源项目之前,先关注一下几个方面
    • GitHub 的 Star个数,会代表一个项目的受欢迎程度,一般越受大家欢迎的项目,除了项目将问题解决的很好,将功能实现的很好外,也代表了项目的编码质量
    • 关注源码的作者,一般高质量的开源项目作者在业界都比较有口碑的
    • 关注文档的丰富程度,一般文档较为丰富的项目,代码质量也会比较高,当然反过来文档内容少的项目,代码质量并不一定低。另外如果文档丰富,对于我们阅读代码来说也会有很大的帮助,或许很多我们不理解的地方,在文档里边可以找到解释

在文章的后边我们会推荐一些高质量的Python开源项目,另外,我们这个文章系列后续的文章中也会选择不同难度的源码项目跟大家一起阅读。

2. 阅读工具选择

虽然叫阅读源码,但是由于代码的特殊性,不同于图书,我们可以通过运行源码来辅助我们理解代码是怎么执行的。因此一个单纯的源码编辑器是不足以帮助我们很好很高效的阅读代码的。

一个好的代码阅读工具链应该包含下边几个功能点:

  • 能够使用代码索引,关键词高亮,代码片段预览等等功能辅助用户快速的搜索和定位类,实例,函数,变量。
  • 调试功能,在遇到我们不理解的代码片段的时候,最有效的办法就是通过运行它,观察代码使用到的变量,数据结构,以及代码的输入输出,因此能够设置断点,并可以观察变量,调用路径的调试功能对阅读代码是非常有帮助。
  • 代码的另一个特殊性是代码是变化的,也是可以比较的,因此在使用跟你选择的源码项目相同的版本控制软件(Git, SVN或其他,大部分情况是Git)以外,一个可以用来比较不同版本之间代码变化的工具也是很有帮助的,术语一般叫diff tool。

针对上边几个功能点,读者可以先检视一下自己平时用来编码的工具有没有涵盖这些功能,并且用起来很顺手。

针对Python而言,笔者推荐使用

  • Visual Studio Code(VS Code) 作为编辑器,可以提供代码高亮已经快速搜索定位
  • VS Code官方的Python插件 作为调试器,可以提供断点,单步以及变量观察功能
  • Kite 作为代码索引插件,Kite是一个基于机器学习的智能的代码补全和索引插件,并支持VS Code
  • Git 客户端可以选择 Fork,界面优雅,免费,而且支持全平台
  • 代码比较工具可以选择 Beyond Compare,这个是我使用过众多diff tool里边做的最好的一个

除了阅读代码本身需要使用的工具之外,我们还可以使用其他的工具辅助我们对代码的理解,比如,我们有时候需要将数据结构,调用关系,或者继承关系画出来,以便更好的读懂代码。

在这里给大家推荐一个网页版的支持框图,UML图的通用绘图工具,该工具是免费的:

https://app.diagrams.net/

3. 阅读方法

选择好了代码和工具,那么怎么阅读代码呢,阅读代码最重要的是要尝试去理解别人的设计思想,这是最重要的原则,所以在阅读的过程中要一直审视,重复问自己作者这样写的目的是什么。

除了最重要的这个原则外,我们还要做到下边几个方面:

  • 要对将要阅读的源码项目有一定的了解 ,知道该项目解决了什么样的问题,实现了 什么样的功能,了解深入程度视具体的项目复杂度而定,但是一定要确保你将项目文档中的的教程部分都仔细的阅读过了,同时教程中的例子也跟着做过了。
  • 跟源码交互 ,新建测试源码文件,当遇到有不懂的代码的时候,可以在测试源码中调用不懂的代码部分,这样就可以通过调试断点的方式来辅助阅读。你甚至还可以尝试修改源码,看看你的修改会带来什么样的影响。
  • 理解源码中的数据结构 ,有句古话叫程序等于数据结构加算法,可想而知数据结构对于代码的重要,不夸张的讲,理解了数据结构就理解了50%的代码。因此在阅读代码的同时,将数据结构按照自己的理解画下来,虽然一开始并不一定是完全正确的,但是可以随着阅读的深入不停的修改,直至自己完全理解。
  • 带着问题阅读 ,时刻要问自己,作者这里为什么要这么设计,另外也要提出一些开脑洞的问题,比如说看到一个dict的访问,你可以问自己说,如果有一个非法的key过来了,这个程序会如何应对,说不准你可以发现源码中的一个bug,亦或是能够掌握一种异常处理的技巧。
  • 做笔记 ,好记性不如烂笔头,跟学习其他知识一样,做好笔记可以帮我们以后巩固知识,另外,在阅读稍微大一点的源码项目的时候,我们不可能在几个小时或者几天时间内读完,阅读这样的项目是一个长期持续的过程,我们需要笔记帮我们回忆我们已经理解的部分。代码的好处就是可以在源码中做注释,所以一般我们以注释的形式做好代码阅读笔记。
  • 理清依赖关系 ,包括外部和内部,大一点的项目都会是模块化设计,同时也不可避免的需要依赖于一些外部的库,因此理清楚模块之间的依赖关系对于读懂源码也是相当重要的。对于Python来说,有一点比较好的就是Python的模块其实就是文件夹,我们只需要理解了文件夹结构就能比较好的理解内部模块的分类,同时结合代码中的import和类继承关系,就可以很好地理解内部模块的依赖了,对于外部模块,我们更多的是通过import和类继承来理清关系。
Python酷的这个《跟我一起读源码》是一个专题,本篇文章主要是从方法论的角度介绍一下如何开始读源码,在后续的文章中我们将选择一些不同难度的Python开源项目跟读者一起把源码阅读方法应用起来。

4. 高质量项目推荐

最后,Python酷来推荐一些高质量的Python开源项目,里边有很简单的单文件项目,也有较为复杂的大项目,这些项目都是公认的值得一读的代码项目,大家可以参考一下:

其实正如文章开头所说,高质量的Python开源项目多如牛毛,大家可以结合自己的兴趣和业务方向,选择跟自己最相关的开源项目,因为毕竟只要你真的需要使用某个库,或者对某某方面的技术很感兴趣的时候阅读它的代码才会有意义。这里仅仅给不知道如何开始的读者提供一些参考。

初级项目:
  • https://github.com/gleitz/howdoi :一个单文件项目,用户可以通过命令行来搜索如果用代码实现某个功能
  • https://github.com/kennethreitz/tablib:源码文件很少,模块简单,但是非常Pythonic的一个项目
进阶项目:
  • https://github.com/mitsuhiko/flask: Flask是一个小型Web框架,有很大的用户基础,代码也是相当的优雅
  • https://github.com/psf/requests:Kenneth Reitz大神的成名作,估计很少人不知道
大型项目:

如果你的学习工作中需要用到某一些领域的重量级的Python库,那么他们也是很好的阅读资源,如果能啃下来,无论是对业务,对算法,还是对于编码能力都会有巨大的提升,这里简单列几个:

  • https://github.com/scikit-learn/scikit-learn:数据科学神器
  • https://github.com/sqlalchemy/sqlalchemy:SQL数据库接口
最后,希望大家持续关注《跟我一起读源码》系列文章,让我们共同站在巨人的肩膀上成长。

扫码关注

微信公众号

,或用电脑访问网页以获取更好的阅读体验:https://pythonlibrary.net/

git 怎么读_跟我一起读源码 – 如何阅读开源代码