阅读是最好的老师

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

从源码中学习源码作者的编程思路

如果刚好库对于你的工作学习有帮助,通过阅读深入了解该库的使用

1. 源码项目选择

读者肯定知道GitHub平台上有无数的高质量开源项目,那具体选择哪一个或者哪一些来阅读呢,如何才能选择到适合自己的源码项目,我们认为要从几个方面来考虑:跟学习一门知识一样,教材都应该是由浅入深,由易到难,读源码也是一样,要选择适合自己难度的项目来开始

我们要了解源码实现的功能,这里并不要求自己是这个功能领域的专家,而是说对该项目解决的问题或提供的功能要有一定的认识,用白话说的话,就是知道这个库在干什么

互联网上有很多实现同一个功能的开源项目,编码质量也会参差不齐,选择高质量的代码才能达到提升自我的目的,而低质量的代码反而会让我们的水平下降,跟读书一样,只有读好书才能有收获。笔者经验是,善用互联网,在选择一个开源项目之前,先关注一下几个方面GitHub 的 Star个数,会代表一个项目的受欢迎程度,一般越受大家欢迎的项目,除了项目将问题解决的很好,将功能实现的很好外,也代表了项目的编码质量

关注源码的作者,一般高质量的开源项目作者在业界都比较有口碑的

关注文档的丰富程度,一般文档较为丰富的项目,代码质量也会比较高,当然反过来文档内容少的项目,代码质量并不一定低。另外如果文档丰富,对于我们阅读代码来说也会有很大的帮助,或许很多我们不理解的地方,在文档里边可以找到解释

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

2. 阅读工具选择

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

一个好的代码阅读工具链应该包含下边几个功能点:能够使用代码索引,关键词高亮,代码片段预览等等功能辅助用户快速的搜索和定位类,实例,函数,变量。

调试功能,在遇到我们不理解的代码片段的时候,最有效的办法就是通过运行它,观察代码使用到的变量,数据结构,以及代码的输入输出,因此能够设置断点,并可以观察变量,调用路径的调试功能对阅读代码是非常有帮助。

代码的另一个特殊性是代码是变化的,也是可以比较的,因此在使用跟你选择的源码项目相同的版本控制软件(Git, SVN或其他,大部分情况是Git)以外,一个可以用来比较不同版本之间代码变化的工具也是很有帮助的,术语一般叫diff tool。

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

针对Python而言,笔者推荐使用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/mitsuhiko/flask: Flask是一个小型Web框架,有很大的用户基础,代码也是相当的优雅

大型项目:

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

最后,希望大家持续关注《跟我一起读源码》系列文章,让我们共同站在巨人的肩膀上成长。

扫码关注微信公众号,或用电脑访问网页以获取更好的阅读体验:https://pythonlibrary.net/

微信读书vscode插件_跟我一起读源码 – 如何阅读开源代码相关推荐

  1. 微信读书vscode插件_曾经我以为 VSCode 是程序员专属的工具,直到发现了这些……...

    如果你知道 VSCode,一说起它,你可能第一个想到的就是把它当做一个代码编辑器,而它的界面应该可能大概率是这样的-- 如果你恰好又是个程序员,那你可能经常会用到它,不管是 Python.JS 还是 ...

  2. 微信读书vscode插件_推荐 10 款有趣的 VSCode 插件

    如果你知道 VSCode,一说起它,你可能第一个想到的就是把它当做一个代码编辑器,而它的界面应该可能大概率是这样的: 如果你恰好又是个程序员,那你可能经常会用到它,不管是 Python.JS 还是 C ...

  3. 微信读书vscode插件_快来!让这款 VSCode 插件吹爆你的彩虹屁!

    公众号关注 "GitHubDaily" 设为 "星标",每天带你逛 GitHub! 大家好,我是小 G.不知道你们是否还记得,在去年三月份的时候,曾因在微信群内 ...

  4. 微信读书vscode插件_vscode 常用的插件

    这些是本人在使用vscode中用的比较爽的插件,个人爱好习惯不同,请按需拿取.先声明本人是一个前端,所用的,插件都是和前端匹配的,后台的同学可以不用浪费时间了 基础插件 chinese 英文是所有读书 ...

  5. 微信读书vscode插件_VSCODE插件推荐

    本文从一款前端开发编辑器的基本需求出发,推荐在VSCODE使用过程中让人愉悦的一些插件. 本文目录 代码补全 运行调试 代码同步 生产化 效率 编辑器主题 前言 如何在VSCODE中安装插件 Ctrl ...

  6. python 自动化微信小程序_干货 | 微信小程序自动化测试最佳实践(附 Python 源码)...

    原标题:干货 | 微信小程序自动化测试最佳实践(附 Python 源码) 本文为霍格沃兹测试学院测试大咖公开课<微信小程序自动化测试>图文整理精华版. 随着微信小程序的功能和生态日益完善, ...

  7. 仿得物微信小程序(动手就会,含源码)

    点击上方 前端瓶子君,关注公众号 回复算法,加入前端编程面试算法每日一题群 前言 最近正在学习微信小程序开发,也是与两个同学一起合作着手仿做得物APP微信小程序.这里主要分享一下我的学习过程及踩过的一 ...

  8. 微信小程序——智能小秘“遥知之”源码分享(语义理解基于olami)

    微信小程序智能生活小秘书开发详解 >>>>>>>>>>>>>>>>>>>>> ...

  9. 原生仿微信社交社区即时通讯聊天双端APP源码开源带PC客户端文档说明

    简介: 原生仿微信社交社区即时通讯聊天双端APP源码开源带PC客户端文档说明 5438亲测完美搭建 网盘下载地址: http://kekewangLuo.net/uiBBnJ8xQup0 图片:

最新文章

  1. android 过度绘制
  2. 实际用户ID,有效用户ID与保存设置用户ID
  3. Visual C#中的(ListBox)数据绑定
  4. 2019-10-06 线性系统的理解
  5. ---innerHTML---
  6. 高中计算机教师招聘试题,中小学信息技术教师招聘考试真题及答案.doc
  7. TP类库解析和使用系列[Input类]
  8. HTML标签的分类与特点
  9. mysql aa ap_商务移动首选 华硕便携式2in1无线AP
  10. mysql转txt_MyToTxt-MySQL转Txt工具下载 v3.6 官方版 - 安下载
  11. 解决ScrollView嵌套RecyclerView出现item显示不全的问题
  12. 微信小程序Axure元件库(2021最新版)
  13. linux 交叉编译 makefile,简单谈谈Makefile和交叉编译工具链
  14. MATLAB机器人运动学与动力学(自己学习用)
  15. eaxsinbx_二次微分方程的通解
  16. 独家对话 RT-Thread 创始人熊谱翔:国产操作系统厚积而薄发 | 人物志
  17. 勾股定理,西方称为毕达哥拉斯定理
  18. 揭开均线系统的神秘面纱_揭开动态规划的神秘面纱
  19. 小米系统shell_获取linux系统信息shell | 小米的博客
  20. 未明学院:量化金融训练营开始报名,成为兼具数据分析技能+项目实战经验的复合型人才!

热门文章

  1. 当 高并发系统下 Redis 发生高延迟时,其内部到底发生了什么
  2. Spark _18 _Shuffle文件寻址
  3. leetcode 309. Best Time to Buy and Sell Stock with Cooldown | 309. 最佳买卖股票时机含冷冻期(动态规划)
  4. leetcode 111. 二叉树的最小深度
  5. C++ cin.putback()输入【已知行数】但【未知每行数字个数】的思路
  6. web worker的介绍和使用
  7. Effective Java之必要时进行保护性拷贝(三十九)
  8. 可重入锁(递归锁) 互斥锁属性设置
  9. 【解题报告】Leecode 438. 找到字符串中所有字母异位词——Leecode每日一题系列
  10. Linux第二章自测习题——Linux系列学习笔记