码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 扎实的基础知识+正确的方法是快速阅读源码的关键


    上一篇我们快速的复习了阅读源码的步骤,同时对比了JUnit3和JUnit4之间的差异。

    本篇是《如何高效阅读源码》专题的第十四篇,也是最后一篇,对专题内容做一次总结。

    首先,专题第一篇文章描述了几种不正确的阅读源码的方式:

    • 在不了解项目的情况下就去阅读源码

    • 直接就读最新版本的源码

    • 一行一行的读完整的源码

    • 通过debug的方式阅读源码

    这几种方式之所以是错误的方式,是由于我们的记忆所决定的:我们的记忆可以分为「短时记忆」和「长时记忆」!对于「短时记忆」来说,一般正常人一次只能记忆7(加减2)个左右的无规律信息。上面的四种方式实际就是在做无规律记忆。可没有哪个项目的行数是7行左右的,所以上述阅读源码的方式,是很难读完项目源码的。

    接着,专题第二篇提供了15种提高源码阅读效率的小技巧:

    • 了解作者开发项目的目的:知道了靶子,才知道方向

    • 先熟练使用起来:先学会走,再去跑

    • 阅读官方文档:最了解项目的还是作者本人,好好读读文档

    • 先理解概念:我们实际都是在通过概念来理解这个世界

    • 了解版本技术背景:了解技术限制,版本迭代改变的不一定是需求,可能只是技术本身

    • 没必要读最新版本的代码:新版本的功能多,但核心功能实际并没有变化

    • 不需要读完所有的源码:少则几万,多则几百上千万行的代码量你能读完?

    • 多版本比较阅读:了解版本间的差异,能更好的理解项目

    • 自顶向下梳理:先梳理整体流程

    • 自底向上归纳:总结很重要

    • 先做减法,再做加法:先找出核心模型,基于核心模型扩展

    • 从接口找关系:接口是对外协议,可以快速定位调用方

    • 画图辅助阅读:90%的信息来源于视觉

    • 设计模式辅助阅读:理解设计模式能加速代码的理解

    • debug只是辅助:debug只是用来验证梳理的流程是否正确

    这15个小技巧的目的,就是在建立对目标项目的印象和模型。
    最后,我们梳理了详细的阅读源码的步骤:

    • 「HelloWorld的大用途:通过demo,构建黑盒模型」:我们解释了什么是黑盒模型以及如何通过demo来构建黑盒模型

    • 「如何通过阅读文档,构建概念模型?」:我们解释了为什么要阅读文档;到哪里去阅读文档以及如何阅读文档。同时阐述了如何构建概念模型,最后通过概念模型验证和完善黑盒模型

    • 「聚焦核心模块,少阅读80%的「无用」代码」:我们解释了为什么要找核心模块以及定位核心模块的方法

    • 「高效阅读源码的关键:构建核心抽象模型」:我们解释了什么是抽象模型;为什么要构建抽象模型,以及如何构建抽象模型。最后通过JUnit4演示如何构建抽象模型

    • 「无需debug,通过抽象模型快速梳理代码核心流程」:我们演示了如何通过抽象模型来梳理核心流程

    • 「通过对抽象模型和概念模型的整合,细化项目整体流程」:我们解释了为什么要绘图;如何绘制核心流程图;以及如何将抽象模型和概念模型进行整合

    • 「模型的威力:基于模型,快速梳理源码」:我们解释了如何确定调用类;并通过梳理调用类来完善项目流程。

    • 「提出问题,解答问题!这才是理解代码设计的正确方法」:通过回答前面提出的问题,来理解代码的设计

    • 「Spring是如何整合JUnit的?JUnit源码关联延伸阅读」:我们梳理了TestRunner的执行流程以及Spring如何整合JUnit

    • 「同一项目、不同版本之间源码的阅读」:通过对JUnit3源码的快速梳理复习了一遍前面的阅读步骤,并对JUnit3和JUnit4进行比较。

    从上面的流程,你会发现,我们实际是在:

    • 不断的对源码进行建模

    • 再将模型代入到流程中,对流程进行细化

    不断的重复这两个步骤,从核心模块到非核心模块一点点对流程进行细化完善,最终得到完整的项目流程。

    读源码是个主动探索的过程,需要不停的根据代码来构建你的流程模型。当你发现你在机械的跟着代码StepIn、StepOver的时候,不妨喝口咖啡、上个厕所、歇一歇,这样反而能提高你阅读源码的效率。

    同时,你的基础越扎实,阅读源码的效率就越高,在「提出问题,解答问题!这才是理解代码设计的正确方法」一文中你应该深有体会,在熟悉设计模式的情况下,能快速的理解代码设计。相应的,如果你的算法知识扎实,你就能很快理解语言里集合的设计;如果你的IO和并发知识扎实,你就能快速的理解Netty的设计、Redis的IO模型。

    最后希望本专题提供的阅读源码的方法能助你读完第一个开源项目!

  • 相关阅读:
    网络网络层之(1)IPv4地址
    Matlab:访问表中的数据
    400电话怎么办理(申请开通)
    【MySQL】数据库排查慢查询、死锁进程排查、预防以及解决方法
    多元函数偏导数连续、存在与可微的关系
    P1529 [USACO2.4] 回家 Bessie Come Home 题解
    代码随想录算法训练营Day34 (Day33休息) | 贪心算法(3/6) LeetCode 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果
    职场人一起进阶吧(内附技术人进阶路径、Java开源项目完整推荐等)
    虾皮插件能做数据分析的-知虾数据分析插件Shopee大数据分析平台
    企业为什么要用Linux?为什么要学Linux?
  • 原文地址:https://www.cnblogs.com/ivaneye/p/16364889.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号