代码不要忙着细读。要粗,找到大体的脉络。

要改。根据自己的设想,大胆去改,改了之后就运行,看看是否有预想的效果。动手才能有收获。

找简单的任务赶快做起来。上司没有布置任务,就自己给自己布置。

不要偏执,做不出来的事情不要硬撑,要及时放弃,或者求教。

了解全局的时候,关注执行流程、层次、调用之类的,对细节不求甚解,看不懂的,底层的,跳过就是。

读细节的时候,就只读系统内自己关注的某个点,甚至某个具体的方法或者函数,一行一行慢慢啃。

读代码和写代码一样,你得先明确目标。漫无目的的读代码是不会有结果的,就如你自己都不知道写什么功能的情况下,能写什么代码?

既然明确你想了解的具体功能,接下去就简单了,你只要找到这个功能的切入点,按代码顺序读下来就可以了,读代码的速度取决于你对整体代码的熟悉程度,刚上手肯定会慢一点

整个过程中最关键的是找切入点,我看了很多新手程序员根本找不到他想看的功能该如何看起,那就需要一些技巧了,找一些不会变的关键api来作为索引的关键字,比如网络相关的肯定有recv,文件相关的也就是fread这样的一系列函数。

没有做关注点分离的代码就像图像处理软件里面多个图层最后“Merge Visible”的产物,一般来说除了原作者谁也还原不了最初的思路,除非遇到水平远远高出的高手。他能还原是因为他很早以前做过一样的事,知道中手的思维方式

重构的过程真的是这样,你会发现首先要把代码用一种重构手法整理完之后,才能够再用另一种重构手法对解开的代码进行进一步的整理

根据我的经验,把握粒度很重要,每行每行读是不现实的,这样容易造成只见树木不见森林,但是又不能读的太粗糙,否则错过很多精华部分,以c代码为例,我一般是先以文件为单位,看看每个文件大致是干嘛的,然后再以函数为单位,这时不关心函数的具体实现细节,而是将注意力放在函数接口上,大致理解下函数的意图,控制流的流动等,然后觉得哪个函数比较重要,在看看其实现。。。

如果一上来就一行一行的啃就图样图森破了,上述过程完成之后,如果还有余力,最好亲手实现一下,正所谓知者行之始,行者知之成,知行合一,如果能自己写一个,就说明真的掌握了。。。

好像没人说这个。。。应该先打开它的trace或debug日志,跑起来,然后跟踪日志,可以最快的熟悉代码

读代码切勿一开始就钻进一些细节。就像工作中接触一个新项目,新人也是从解bug 开始。带着目标问题去读,效果更好。

要掌握一个整体架构,不妨自己动手画出一张完整的类图,对于理解代码架构非常有帮助。

一些主要的业务逻辑,继续画些流程图顺序图,就一目了然了。

最后才是语法方面的问题。我认为好的代码一定也是阅读起来超爽的......

如果没有技术文档,就阅读所有能找到的材料。项目介绍,wiki,源码包的readme等。明确项目的目标,应用场景,甚至是用到的技术方案。

根据源码包的架构,以及了解到的用到的技术方案,大概猜测一下各个模块的功能。

同样浏览所有的源码文件,通过文件名字猜测其功能。

推荐使用某些代码阅读工具,如source insight,开始通读代码。阅读的顺序就比较灵活了,可以按照模块来阅读,可以先大致浏览核心部分再到外围代码,或者反过来从外围到核心包围。

经过第四步的通读,大概就能明确各个模块的功能以及各模块之间如何结合的了,这时在心里已经对整个代码结构有个大致的印象了。如果做不到,就重做第四步。

细读部分代码。比如你感兴趣的部分是如何实现的,或者核心部分的细节。同样我认为,带有某种目的的阅读更有效,比如想借用某部分的实现思路,想改进某部分,那就针对自己的目标部分进行重点攻破。

经过以上几点,相信整份代码已经都理解的七七八八了。再往下做什么相信都不会是障碍了!

是的,我们这边提到了一个重点,阅读程式码的目的在于了解系统的全貌,而不是在于只是为了地毯式的读遍每一段程式码。

这是一个很重要的关键,当你试着进到最细节处之前,应该先试着找出参与的角色,及他们之间的关系。

不论某个系统所采用的架构是否为大部分人所熟知的,在试着探索一个系统的长相时,我们应该找出来几个答案,了解在它所用的架构下,下列这件事是如何被完成的:一,系统如何初始化,二,与这个系统相接的其他系统(或使用者)有那些,而相接的介面又是什么;三,系统如何反应各种事件,四,系统如何处理各种异常及错误。

读懂Java代码总结的更多相关文章

  1. 夯实Java基础系列7:一文读懂Java 代码块和执行顺序

    目录 Java中的构造方法 构造方法简介 构造方法实例 例 1 例 2 Java中的几种构造方法详解 普通构造方法 默认构造方法 重载构造方法 java子类构造方法调用父类构造方法 Java中的代码块 ...

  2. 少啰嗦!一分钟带你读懂Java的NIO和经典IO的区别

    1.引言 很多初涉网络编程的程序员,在研究Java NIO(即异步IO)和经典IO(也就是常说的阻塞式IO)的API时,很快就会发现一个问题:我什么时候应该使用经典IO,什么时候应该使用NIO? 在本 ...

  3. 读懂IL代码就这么简单(三)完结篇

    一 前言 写了两篇关于IL指令相关的文章,分别把值类型与引用类型在 堆与栈上的操作区别详细的写了一遍 这第三篇也是最后一篇,之所以到第三篇就结束了,是因为以我现在的层次,能理解到的都写完了,而且个人认 ...

  4. 读懂IL代码就这么简单(二)

    一 前言 IL系列 第一篇写完后 得到高人指点,及时更正了文章中的错误,也使得我写这篇文章时更加谨慎,自己在了解相关知识点时,也更为细致.个人觉得既然做为文章写出来,就一定要保证比较高的质量,和正确率 ...

  5. 读懂IL代码就这么简单 (一)

    一前言 感谢 @冰麟轻武 指出文章的错误之处,现已更正 对于IL代码没了解之前总感觉很神奇,初一看完全不知所云,只听高手们说,了解IL代码你能更加清楚的知道你的代码是如何运行相互调用的,此言一出不明觉 ...

  6. 读懂IL代码就这么简单

    原文地址:http://www.cnblogs.com/zery/p/3366175.html 一前言 感谢 @冰麟轻武 指出文章的错误之处,现已更正 对于IL代码没了解之前总感觉很神奇,初一看完全不 ...

  7. 读懂IL代码就这么简单 ---- IL系列文章

    读懂IL代码就这么简单 (一) 读懂IL代码就这么简单(二) 读懂IL代码就这么简单(三)完结篇 出处:http://www.cnblogs.com/zery/tag/IL%20%E7%B3%BB%E ...

  8. 【转载】读懂IL代码就这么简单(三)完结篇

    一 前言 写了两篇关于IL指令相关的文章,分别把值类型与引用类型在 堆与栈上的操作区别详细的写了一遍这第三篇也是最后一篇,之所以到第三篇就结束了,是因为以我现在的层次,能理解到的都写完了,而且个人认为 ...

  9. 【转载】读懂IL代码就这么简单(二)

    一 前言 IL系列 第一篇写完后 得到高人指点,及时更正了文章中的错误,也使得我写这篇文章时更加谨慎,自己在了解相关知识点时,也更为细致.个人觉得既然做为文章写出来,就一定要保证比较高的质量,和正确率 ...

随机推荐

  1. Vue API 3 (模板语法 ,指令)

    条件 v-if v-if 指令用于条件性地渲染一块内容.这块内容只会在指令的表达式返回 truthy 值的时候被渲染. v-show v-show 指令也是用于根据条件展示一块内容.v-show 只是 ...

  2. SpringBoot(1):初始SpringBoot

    一. SpringBoot 简介 1. SpringBoot介绍 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程.该框架使用了特 ...

  3. 【Linux】【Shell】【Basic】Bash

    命令历史:shell进程会在其会话中保存此前用户提交执行过的命令: ------------------------------------------------------------------ ...

  4. 【Linux】【Services】【Project】Haproxy Keepalived Postfix实现邮件网关Cluster

    1. 简介: 1.1. 背景:公司使用exchange服务器作为邮件服务器,但是使用Postfix作为邮件网关实现病毒检测,内容过滤,反垃圾邮件等功能.原来的架构非常简单,只有两台机器,一个负责进公司 ...

  5. idea集成开发工具快捷键大全

    1  执行(run)                                                 alt+r 2  提示补全 (Class Name Completion)    ...

  6. 赋能开发:捷码携手达内教育打造IT职业教育新生态

    近日,达内教育与远眺科技签约联合培养的第一批低代码开发方向的高职学生,在杭州未来科技城捷码总部顺利毕业,首期合格学员总数超过30名.随着这些接受了"捷码"低代码平台全程" ...

  7. KubeCon 2021|使用 eBPF 代替 iptables 优化服务网格数据面性能

    作者 刘旭,腾讯云高级工程师,专注容器云原生领域,有多年大规模 Kubernetes 集群管理及微服务治理经验,现负责腾讯云服务网格 TCM 数据面产品架构设计和研发工作. 引言 目前以 Istio[ ...

  8. AT2202 硬度フェスティバル / Kode Festival 题解

    Content 有 \(2^n\) 块石头,第 \(i\) 块石头硬度为 \(a_i\).重复执行以下操作直到只剩下一块石头为止: 让当前编号为 \((1,2)\).\((3,4)\).-- 的石头互 ...

  9. CF424A Squats 题解

    Content 给定一个长度为 \(n\) 的仅由 x 和 X 组成的字符串,求使得字符串中 x 和 X 的数量相等需要修改的次数,并输出修改后的字符串. 数据范围:\(2\leqslant n\le ...

  10. Java的垃圾回收机制:强制回收System.gc() Runtime.getTime().gc()

    垃圾回收 当引用类型的实体,如对象.数组等不再被任何变量引用的时候.这块占用的内存就成为了垃圾.JVM会根据自己的策略决定是回收内存 注意: 垃圾回收只回收内存中的对象,无法回收物理资源(数据库连接, ...