前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何阅读源码

如何阅读源码

作者头像
程序员小王
发布2018-04-12 17:01:05
1.8K0
发布2018-04-12 17:01:05
举报
文章被收录于专栏:架构说

从哪里开始读起,怎么读

这个问题简单,程序从哪里开始就哪里开始读起。譬如,C 代码,当然是从 main(),其他语言也是类似的。但阅读的时候,要带着问题去读。

带着最简单的问题,开始阅读源码。

拿到一个别人写的代码,或多或少,细节有很多,不可能一开始就能把所有的细节都吃透,所以需要一个简单的问题先把整个代码系统的阅读一遍,知道里面的整体框架是怎么样的。譬如 Memcache/Redis 这种 key/value 系统,当它们收到一个 set/get key 请求,是如何做相应的呢?整个服务是如何运作起来的?譬如 Django,当它拿到一个 HTTP 请求,是如何做相应的呢?带着这些简单的问题,浏览源代码能更快了解它们的代码框架是怎么样的,对于之后继续阅读里面的模块,也是非常有好处的。

读源代码,框架才是最先需要了解的,细节才是最重要的。

看到一个函数, 首先要做的是知道这个函数到底做了什么, 而不是他底层是怎么实现的。这有点类似于英语中的阅读理解,遇到文中陌生的单词,首先是根据上下文来判断它是什么意思,到最后真的不能理解再回头拿字典去查单词。

忽略变量声明。好的开源 C 代码会将所有变量提前声明,即放在函数的开头。实际上,没必要例会这一大坨的变量,等遇到用到这个变量的时候自然就能懂得这个参数是用来做什么,而不用我们首次见到就猜测它的用处。 画出函数的调用链,用自己认为最合适的图表说明问题。有时候 Redis 里面的调用链比较长,经常画满一张 A4 纸。在每个函数旁边都标注它所完成的事情,这是收集线索的一个过程,可能会非常的枯燥。

什么样的源代码适合阅读

一般是“麻雀虽小五脏俱全”的项目适合阅读,在这里 C/C++ 方面的可以推荐几个供读者参考

TinyXML cJSON Libevent Memcached Redis Leveldb Nginx Lua …… Python Web 框架方面:

Flask Django JavaScript 方面:

jQuery

不在浮沙筑高台

并不推荐一上来就是看源码,一般是当你在某个方向上有一定的基本知识积累了才开始去尝试阅读。譬如c 服务器的后台代码,当然是需要对 linux 下的网络/系统编程有一定的认识,甚至读过 W.Richard Stevens 的几本经典之作。譬如 Django Web 框架,当然是需要对 Python 和 Web 方面有一定的认识。不然,完全的新人去阅读代码,只会信心受打击。

推荐每一位初学者在某一技术方向上有基本的积累后,可以找一个优秀的开源项目,并试着阅读。不懂没有关系,既然是优秀且开源的项目,网上必定会有很多的资料以及文档,这些都能为你读懂源码提供很多的帮助。你会有很多的收获,首先可以见识业界的编程规范如何,这是程序员的基本素质;可以接触到一些优秀的框架或者模式,这些是前人在大量的实践中总结出来的,必定是行而有效的,夯实你在某个技术方向上的认知;最后,就是练就你的耐心和毅力了。阅读源码本身是枯燥乏味的过程,我经常看一个模块一两天,来来回回往往复复,假使心浮气躁,容易浅尝辄止,半途而废。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Offer多多 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 从哪里开始读起,怎么读
  • 什么样的源代码适合阅读
  • 不在浮沙筑高台
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档