背景

最近在看左耳耗子叔的专栏,如何学习和阅读源码一篇,看完之后瞬间被折服。结合自己的经验,发现确实在阅读源代码上自己有很多错误方式。实习的那段时间,接触到实际的工程项目,发现模块那么多,类那么多。对业务知识也一知半解,什么表结构之类的都是模棱两可,真的是硬着头皮在看。问了同事,知道一些重要的交互流程。基本上读了多遍才理解那些程序的处理逻辑。

文档和源代码

文档是告诉你知道why,比如wiki文档会告诉你需求的背景,需要解决那些问题,最后达到什么样的效果。
但是源代码是告诉你细节,比如某个流程是什么样,数据是什么样子。业务的处理逻辑。
所以总结的话 文档是人和人交流的一种方式,而代码是人和计算机交互的一种方式
在具体的背景和目的下,要看我们想要目的是什么,如果想知道细节的话去看代码,想知道代码如何这样设计的话 去看文档和书籍。

如何阅读源代码

阅读源代码的准备

基本的几个要素就是,我们需要熟悉相关的开发语言基础,相关的技术中间件,常用框架等技术,以及相关的业务基础,比如互联网借贷/电商/支付等业务。也可能有部分同学是基础中间件开发的,
如果有项目接口文档的话,最好先大概阅读一下相关的readme文件
代码的组织结构,模块结构,包结构等

阅读源代码

1.接口抽象定义

一般来说,都会遵循接口开发原则,将一些行为,方法进行上层抽象,然后使用各种设计模式来处理业务逻辑。

2.模块粘合层

在业务处理逻辑中,可能会出现各种的和数据库/分布式配置/缓存/分布式搜索/消息中间件 交互的三方中间件交互处理,因为它们会把本来平铺直述的代码给分裂开来,让你不容易看明白它们的关系。

3.业务流程

代码的整个运行过程,一般来说,对于一个分布式系统,要么是上游系统调用你的接口进行触发,或者是现有项目的定时触发 这两种形式。需要对某一个业务流程梳理下,大概是怎样运转的,具体细节在慢慢看。

4.具体实现

4.1 代码逻辑
代码逻辑部分,其实一部分包含的是业务逻辑处理,另一部分则是程序的控制流转,也即控制逻辑,if/else。多线程,网络交互等,以及还有一部分三方的sdk 细节都可以忽略。
4.2 出错处理
大部分程序都是在做异常的处理,比如网络异常/数值异常 这种一般都可以跳过。
4.3 数据处理
对于数据处理的部分,从DB中查询 进行数据的逻辑处理等
4.4 重要的算法
可能会用到一些相关核心的算法,分布式ID等
4.5 底层交互
与操作系统 或者 JVM交互的细节

5.运行时调试

想要了解一个业务逻辑,最好的方式就是一行行debug,看具体的流程,在出现问题时,要根据错误信息分析出错的地方。

如何快速了解一个项目

上面阅读源码更多的是细节,程序员大多数时候,我们也要具备抽象的全局观思维,即站在系统的层面去思考问题。抽象思维,
1.了解自己项目所能提供的相关服务能力。
2.自己业务上下游系统的交互关系 【尤其是交互细节上的】
3.依赖的基础服务,中间件/数据库/部署硬件服务等

许大说:阅读源代码的过程其实就是反向推更高维的架构设计。这句话真精辟,确实,一般来说都是业务需求-》架构设计->编码。 而阅读代码->架构设计

【复盘】如何学习和阅读源代码-左耳相关推荐

  1. 成为一名更好的程序员:如何阅读源代码

    本文由EarlGrey@编程派编译,如需转载,请务必注明作者及出处. 原文链接:Python Practice Projects 译文链接:编程派 阅读源代码有许多益处.你会发现新的架构(constr ...

  2. 如何更好阅读源代码 .

    写在前面的话: 自从我在linuxaid.com.cn上发表一些文章开始,就不断的有网友发来电子邮件,或者是就其中某些问题进行探讨,或者是查询其他文章的地址(往往这些网友看的是其他网站转载的我的文章) ...

  3. [置顶] 为什么要阅读源代码?如何有效的阅读源代码? 选一些比较优秀的开源产品作为源代码阅读对象?...

    盛大TeamHost上有个关于学习开源项目的wiki :http://www.teamhost.org/projects/learn-with-open-source/wiki/Wiki 一.为什么要 ...

  4. 为什么要阅读源代码?如何有效的阅读源代码? 选一些比较优秀的开源产品作为源代码阅读对象?

    一.为什么要阅读源代码? 很多作家成名之前都阅读过大量的优秀文学作品,经过长期的阅读和写作积累,慢慢的才有可能写出一些好的.甚至是优秀的文学作品. 而程序员与此类似,很多程序员也需要阅读大量的优秀程序 ...

  5. 【独家】深度学习论文阅读路线图

    如果你是深度学习领域的一名新手,可能会遇到的第一个问题是"应该从哪篇论文开始读起呢?" 这里给出了深度学习论文阅读路线图! 路线图按照下面四个准则构建而成: 从提纲到细节 从经典到 ...

  6. 如何提高阅读源代码的效率 .

    如何提高阅读源代码的效率 记得在开源流行之前,我看过的代码紧限于所参与的项目,能有个几万行就不错哩.后来很多优秀开源项目都相继蹦出来了,阅读的代码量那叫一个大呀!不得不看.我现在掉到android这个 ...

  7. Zero-shot Learning零样本学习 论文阅读(五)——DeViSE:A Deep Visual-Semantic Embedding Model

    Zero-shot Learning零样本学习 论文阅读(五)--DeViSE:A Deep Visual-Semantic Embedding Model 背景 Skip-gram 算法 算法思路 ...

  8. 深度学习论文阅读目标检测篇(四)中英文对照版:YOLOv1《 You Only Look Once: Unified, Real-Time Object Detection》

    深度学习论文阅读目标检测篇(四)中英文对照版:YOLOv1< You Only Look Once: Unified, Real-Time Object Detection> Abstra ...

  9. 联邦学习论文阅读三:ChainFL

    联邦学习论文阅读三:ChainFL Secure and Efficient Federated Learning Through Layering and Sharding Blockchain 论 ...

最新文章

  1. Java老矣,尚能饭否?2020 Java生态系统报告出炉
  2. python glances来监控linux服务器CPU 内存 IO使用
  3. Swift中使用构建配置来支持条件编译-b
  4. Amazon运营如何做?Amazon运营需做好全局的加减法
  5. 家用计算机在拔下网线的情况下,为什么只有拔掉网线才可以关掉电脑
  6. 从2021年多篇顶会论文看OOD泛化新理论、新方法和新讨论
  7. 使用Apache KeyedObjectPool的ssh连接池
  8. 一个ssm综合小案例-商品订单管理-第二天
  9. Opencv ORC——文字定位与切割
  10. WITH RECOMPILE和OPTION(RECOMPILE)区别
  11. Java中变量及数据类型
  12. M6(面试)-01-牛客网Java面试题集锦
  13. Excel如何拆分字符串
  14. 简洁好用的Geek Unіnstaller
  15. SkeyeVSS综合安防视频云服务无插件WEB直播方案中实现抓取快照功能
  16. Yii2友好处理404
  17. 最新版NASA官方网站数据下载流程——以MODIS数据演示为例
  18. 巨子生物在香港上市:薇娅突击入股,范代娣、严建亚夫妇提前套现
  19. 进大厂一条龙服务(Java核心面试知识点+一线大厂Java笔试面试题+月薪3万Java优秀简历模板),看这篇就够了
  20. [Android]ProgressBar进度条

热门文章

  1. js获取当日前30天全部日期
  2. B2C电商项目 秒杀业务 工作总结
  3. MAT 分析OOM out of memory模拟OOM Killer
  4. 计算机网络class4(时延、时延带宽积、RTT和利用率)
  5. android studio配置阿里仓库gardle
  6. 缓慢变化维常见解决方案
  7. linux下卸载httpd,Linux卸载系统自带的httpd的方法
  8. 惊呆同事的自动化小工具来了!Python 批量将 PDF 转 Word
  9. Android dimen集合(建议收藏)
  10. ng:无法加载文件 因为在此系统上禁止运行脚本