提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、调整心态,读懂代码
  • 二、摸清楚架构
    • 阅读代码的目的在于了解全貌而非了解细节
    • 由上而下理清架构,就可以轻易理解组成关系
    • 了解架构,必须要加上层次感

前言

由于新换工作,在熟悉项目和模块方面做出如下总结:

这个文章会随着自己的理解加深而不断修改


提示:以下是本篇文章正文内容,下面案例可供参考

在刚接手熟悉项目时,虽然会有老人大致讲解一下项目的功能结构,让自己对项目有一个大致的了解,但由于时间问题我们大部分只能记住个大概,其模块内具体功能则需要自己去详细了解。
以前熟悉项目或开源的第三方代码总是需要用到某个功能时才会去稍微看一下源代码及实现方式,比如在编写Dialog时也会时常查看代码是如何实现的其功能是什么。

一、调整心态,读懂代码

    程序是别人写的,只有写的人才知道他的真正用途和涵义,很多人都有逆反心理不愿意去阅读或了解别人所写的源代码,我之前也是如此,写代码是开心的,但是阅读别人留下的代码是我之前所恐惧的,有时候我也会如大部分人一样宁愿重写代码也不愿意使用别人已写好的代码(当然简单的例外)对于复杂的我不愿意去维护和修复和加强他们,为什么会这样自我?在看过网上同类文章后,自我总结为:程序是别人写的,只有原作者知道程序的含义和用途,如果自己要用就得去触碰这些代码,碰就得了解,了解就得阅读大致代码这样就产生了逆反心理。

    很多人会把接手别人留下的代码,当作头疼的事情当然我也不例外,因为这确实很费脑,因为得花时间去阅读并理解他是怎样的思路来写这些代码的,这得费时间去探索。
但是现实原因确实让我们不得不去接受这些代码,像同事离职留下的代码你必须去接手他遗留的工作,这只是其中一种情况,我们总是要触碰其他人所写的代码,但是换个心态来看待这些问题可能就会不一样了,我们可以透过同事留下的代码或在阅读开源源码时学习到优秀的新的技术,和高手是怎么设计架构的,以及设计模式使用的场景等等,当阅读完一个优秀的开源框架,我们可以从中提炼出自己的代码,可能这就是站在巨人的肩膀吸取养分吧。

    写代码只是一个程序员的技能之一,同样读懂并修改别人的代码也是一个很重技能。
如果不熟悉项目,就无法解决实际开发工作中带来的问题,也无法解决别人已经写好的代码问题,看着现成的代码也无法下手。

    接触别人的代码可以分为三种:1.了解,2.修改 扩充,3.抽取 提炼,了解别人写的代码是最基础的工作,如果不了解就不用说修改或者扩充也不能提取到自己所需的,回收再利用别人的代码。虽然说是阅读别人代码,但不能像读小说一样循序渐进一行一行下去,找到程序入口很简单,但系统复杂度一般很高,十分庞大有时候千头万绪。

    从程序入口开始读,如果循序读完所有代码很费时间,用这些方式很难建立系统的全貌,从而了解到系统的全貌,个人通过学习他人阅读技巧和自我实践认为阅读代码的重点,不至于读完每一行代码,在与有效的透过探索及阅读,从而了解系统的架构及行为模式,以便在需要了解到具体某个功能的细节时,能够很快在脑海出现具体代码的位置,到这个时候才是细读源码的时候。

    阅读源码首页得对写代码所使用的语言熟悉,在阅读中也能学习到语言的各种不同用法,其次是了解程序的命名规则这个也很重要,不同的人和团队都会有差异,但是如果团队都按照统一的规则那我们阅读起来就非常顺畅了。

    关注写这个代码的作者心态与习惯也能很好的帮助我们了解作者惯用的语汇。

二、摸清楚架构

    这一段总结:要了解一个系统,最好是采取由上而下的方式,先尝试了解系统架构性观念,不要过早的钻入细节,因为这样对于了解全貌没有多大帮助,阅读代码不是在于读完每一行代码,我们的目的也不是这样。

    最重要的价值是能读懂作者的代码,才有能力从中萃取自己需要的代码,以此提高生产力。

阅读代码的目的在于了解全貌而非了解细节

    读懂别人代码的基础就是了解所使用开发语言和对方命名惯例,有了这个基础,才算是有了基础的阅读能力,毕竟想要读懂俄文钢铁是怎样炼成的小说,总不能俄文都不懂吧。

    阅读代码我们很少从第一行开始读起,阅读代码的目的在于了解系统全貌,而不是为了地毯式阅读一遍代码。

    拿车这个对象来说,他会拆解为多个对象比如轮胎、方向盘等,我们读轮胎类可以明白他的作用和行为,但是对于他和方向盘是如何交互的怎么协同工作的我们根本不知道,因为每个类只描述他本身的行为,如果我们只阅读轮胎就很容易造成片面的认识。

由上而下理清架构,就可以轻易理解组成关系

    如果不想浪费大量时间去阅读源码,就得转换观点来看待系统,从个别类的行为入手,由上到下的方式去阅读。

了解架构,必须要加上层次感

    同样的,以Java写的Android程序中,也许会应用的okhttp之类的框架,这些都可以看做主要架构下的次级架构。甚至在okhttp次级架构下建立更自由的次级架构。

    对我们来说,谈到架构这样的观念时,我们必须要有层次感,不管是那一层级的架构都有各自的角色,以及每个角色的关系。对阅读代码的我们来说,相较于直接切入最细微的单一角色行为,不如直接了解某个特定架构中,究竟存在多少角色,以及这些角色之间的互动模式,比较能够帮助我们了解整个系统的运作方式。

源码阅读技巧总结-Android相关推荐

  1. 【源码阅读技巧一】查看类关系图,接口实现关系图(idea版本)Diagrams关系图

    我们在阅读源码的时候,往往需要理清楚各个类,各个接口之间的关系,然后再去理解他的设计思路,有个大概理解,然后去阅读源码,就容易很多,那么今天就来讲一下如何使用idea来查看关系图: 一.查看类的父类, ...

  2. 大神手把手教源码阅读的方法、误区以及三种境界

    丁威 中间件兴趣圈 读完需要 1 分钟 速读仅需 1 分钟 在技术职场中普遍存在如下几种现象: 对待工作中所使用的技术不需要阅读源码,只需在开发过程中能够熟练运用就行 看源码太费时间,而且容易忘记,如 ...

  3. Linux内核基础——Linux源码阅读工具Source Insight4.0

    Linux内核源码阅读工具--source insight4.0 Source insight4.0工具的使用入门 一.Souce insight建立工程.导入源码 二.遍历所有源码文件建立符号索引 ...

  4. android源码阅读笔记1-配置源码路径/阅读源码方法讨论

    开始之前 android studio中配置android源码路径 android studio中有源码的路径,你只需要打开SDK Manager下载源码然后重启android studio即可查看源 ...

  5. 12.源码阅读(app启动流程-android api 26)

    activity的启动流程之前已经通过源码了解了,那么app的启动流程是怎样的,从我们按下app的图标,到应用启动起来显示出画面,中间都经历了什么? 安卓是基于java的,所以和java有一定的相似性 ...

  6. Android Gradle Plugin 源码阅读与编译

    前言 为了解一些Andorid的构建流程,有时候需要阅读Android Gradle Plugin的相关源码的.自己阅读Android Gradle Plugin源码主要经历了三个时期: 1.AOSP ...

  7. Android 源码编译技巧--模块清理

    参考之前的 Android 源码编译技巧–模块编译_南国樗里疾的博客-CSDN博客 https://blog.csdn.net/weixin_44021334/article/details/1069 ...

  8. Android TV TIF源码阅读笔记

                                   Android TV TIF源码阅读笔记 1.SystemSever.java if (mPackageManager.hasSystem ...

  9. Android源码阅读---init进程

    Android源码阅读-init进程 文章目录 Android源码阅读---init进程 1. 编译命令和进程入口 1. init 进程编译命令 2. main函数流程 2. 主函数处理流程 1. 创 ...

最新文章

  1. CentOS部署JAVA程序、安装Tomcat以及安装导入mysql文件的方法
  2. docker portainer_Docker入门详解(十一) 图形Portainer
  3. LoadRunner12使用教程(三)——Action迭代
  4. 【转】Linux命令工具 top详解
  5. 【干货】不同场景下 如何进行MySQL迁移
  6. POJ - 1696 Space Ant(极角排序)
  7. my-innodb-heavy-4G.cnf 配置文件参数介绍
  8. 走入PHP-类与对象
  9. 微信小程序学习笔记01:微信小程序概述
  10. Tensorboard详解(下篇)
  11. 国产数据库的里程碑式新突破:贵阳银行核心系统4.2亿订单采购易鲸捷
  12. 微软应用商店安装包_微软苦恼了!微博UWP客户端停止服务:大家都用浏览器去了?...
  13. PS的液化功能使用(瘦身,拉长专用)
  14. docker nginx容器代理bug:upstream server temporarily disabled
  15. 面试技巧(2) 个人面试注意事项
  16. 理解服务器证书 CASSL
  17. 高数_第6章无穷级数__绝对收敛_条件收敛
  18. java 热更新class_线上java热更新代码实现
  19. 1.2开发小程序的准备工作
  20. 电路小知识之“GND”

热门文章

  1. ”从生命起源到智慧宇宙“全文(英文论文)
  2. ovn 通过网关虚拟路由器连接外部网络
  3. Windows10下CUDA与cuDNN的安装
  4. 大数据学习途径_社会支付计划和数据保护的途径和陷阱
  5. VBA日期校验(年月日,年月,年)
  6. 华为开发者大会主题演讲:抖音短视频网络性能优化实践
  7. MTK平台的LCM防静电(esd-check)机制
  8. 爱的乐章,Hibernate之三部曲
  9. linux系统打印机不兼容,linux系统下的打印机无法打印怎么解决?
  10. 牛客算法笔记【second week】