码农如何读源码逆袭成大牛

以下是我搜集的各种方法,我将一一尝试,会根据尝试结果,做个总结,与大家一起分享:


1、腾讯IMWEB负责人说:

首先,搞清楚自己要读懂他们的原因和动机。
其次,可以先看下这些优秀框架或者库的设计文档和架构图,这样会让你宏观上对一些概念有些认识。 
然后,从你最感兴趣的一个点,开始设置断点,跟进去看发生了哪些事情。 和架构设计哪一块是match的。

有人补充:最快,最易懂方法。断点单步调试。
如:jquery中 $.fn.show 源码是如何实现的。
自己写个 $('#test').show(),打上断点、单步调试、那么你可以看到jquery中每一步发生了什么事情。分析即可。


2、知乎匿名:

  • 我会先简单了解手上JS代码的依赖,这可以从阅读package.json或者bower.json看出来,也可以用静态分析工具比如jsanalyse.codeplex.com/
  • 我会用编辑器自带的静态分析功能,比如自动解析出function定义,然后利用编辑器搜索功能了解代码调用关系
  • 如果是客户端JS,我会用Chrome Devtools的断点调试功能去深入理解程序执行的脉络
  • 如果是后端JS,则是找到HTTP handler或者Socket的定义部分,然后从那里用

  • 3、csdn大家发言:

    1)source insight 看代码
    EA 反工程看uml 类图


    4、匿名发言:

    1)、一边阅读代码一边写注释。这是我用过的最好的方法,对代码理解得更深入,看一些重要代码或者特别难懂的代码时挺有用。更何况,注释也是一种文档嘛。


    2)、一边阅读代码一边绘制UML。这个方法适用于类之间的关系较复杂和调用层次较深的情况,我一般都是先绘制顺序图,然后为顺序图中的类绘制关系图。


    3)、通过Debug来跟踪程序的主要执行过程,这样就可以分清主次了,阅读的时候更有针对性。


    4)、类的快速阅读。先弄清楚它在继承链中的位置,看看它的内部状态,也就是成员变量,一般来说,类的对外接口都是对成员变量的访问、加工、代理等,然后看看它的对外接口,也就是公有成员函数,识别核心的一个或多个函数,这时候你应该可以大概了解这个类的职责或作用了。可能这个类是某个设计模式中的一个组成部分,所以,设计模式的掌握对代码的快速阅读也是很有帮助的。


    5)、带着问题去阅读。比如想了解android中的消息机制,那么看看Looper、Handler、MessegeQueue这几个类就可以了,其他的不要去看,要不然就跑题了。


      下面列几个阅读源码时所处的情景,在特定场景下用哪些方法:
         不太熟悉业务逻辑,还不是很清楚它是干啥的,可以用3、5。
         代码量很大,有几十万行,甚至百万行,可以用2、3、5。
         你无法看见程序的运行过程,比如没有用户界面,也有可能是无法运行的,可以用3、5。
         设计复杂,用了大量的设计模式,调用链很深,可以用1、2、3、4、5。
         时间有限,没有那么多时间让你看源码,可以用3、5。


    5、知乎上面匿名回答:

    1)读代码最忌讳的是不抓结构抓细节,只见树木不见森林

    2)首先应该先了解代码的功能业务,在了解业务逻辑的情况下,进行代码阅读觉得是事半功倍的,可以先多用用列跑起来,看看功能。

    3)阅读代码有两种模式:top-down 和 bottom-up。

    Top-down 模式,就是先设定一个 use case,比如说打开一个文件。然后静态跟着代码看,或者用 debugger 跟着看。每次出现函数调用的时候,把函数的执行层次纪录下来。大致如下:
    func1( )
       func2(  )
           func(  )
       func3(  )


    这种图表很随意,你可以根据自己的需要增加信息。比如我有时会把重要的「实际参数」一直标下来,这样阅读深层次代码不用再回头查形式参数到底指什么。这个图的基本作用是防止在阅读深层次代码时忘记总体执行层次。

    Top-down 模式进行到一定层次,往往会发现虽然图画了出来,但还是无法了解程序再干什么。这时需要转入 bottom-up 模式,一直深入到最底层,给能了解作用的底层函数一个一个的写文档。当然这时的文档是完全底层的观点。

    然后就是不断在两个模式之间转换,不断的细化两种模式的理解。

    4)「代码阅读方法与实践」推荐这本书


    6、网页中如何阅读人家的源代码呢,网易前端攻城狮回答:

    用Chrome打开开发者工具,切换到Sources选项卡,然后选择感兴趣的代码文件,并使用'Pretty Print'功能格式化代码。然后观察代码,打断点,调试一气呵成。

    补充:

    Chrome,按F12
    看Sources
    然后再看看 Network 因为有的JS是动态加载,sources里面会看不到

    你可能感兴趣的:(源码,阅读)