参考文章:https://blog.csdn.net/iteye_9166/article/details/82649745
六个章节:
( 1 )读懂程式码,使心法皆为我所用。
( 2 )摸清架构,便可轻松掌握全貌。
( 3 )优质工具在手,读懂程式非难事。
( 4 )望文生义,进而推敲组件的作用。
( 5 )找到程式入口,再由上而下抽丝剥茧。
( 6 )阅读的乐趣,透过程式码认识作者。
与其抗拒接收别人的程式码,不如彻底了解相关的语言和惯例,当成是培养自我实力的基石。
你可以透过开放原始码学习到新的技术,学习到高手的架构设计,大幅提高学习的效率及效果。你甚至可以直接自开放原始码专案中抽取,提炼出自己所需的程式码,站在巨人的肩膀上,直接由彼端获得所需的生产力
倘若撰写程式码是程式人的重要技艺之一,那么读懂别人的程式码,接着加以修改,也势必是另一个重要的技艺。
阅读程式码的重点,不在于读完每一行程式码,而是在于有效率地透过探索及阅读,从而了解系统的架构及行为模式
熟悉沟通语言与惯例用语
从个别的类别行为着手,是由下至上(自下而上)的方法(错误的做法);在阅读程式码时,却应该先采由上至下(自上而下)的方式。对程式码的阅读来说,由上至下意谓着,你得先了解整个系统架构。
当我们明白某个系统采用这样的架构时,便可以很容易地知道各个组成之间的关系(比如Java Servlet框架)。
当我们谈到“架构”这样的观念时,必须要有层次感。而不论是那一层级的架构,都会定义出各自的角色,以及角色间的关系。对阅读者来说,相较于直接切入最细微的单一角色行为,不如了解某个特定的架构中,究竟存在多少角色,以及这些角色之间的互动模式,比较能够帮助我们了解整个系统的运作方式。
例如,对事件驱动式的架构而言,有3个很重要的角色。一个是事件处理的分派器(事件调度) ,一个是事件产生者(事件发生器) ,另一个则是事件处理器(事件处理程序) 。 事件产生器产生事件,并送至事件分派器,而事件分派器负责找出各事件相对应的事件处理器,并且转交该事件,并命令事件处理器加以处理。像的图形用户界面的Windows应用程式,便是采用事件驱动式的架构。
探索架构的第一件事:找出系统如何初始化
在试着探索一个系统的长相时,我们应该找出来几个答案,了解在它所用的架构下,下列这件事是如何被完成的:一,系统如何初始化,二,与这个系统相接的其他系统(或使用者)有那些,而相接的介面又是什么;三,系统如何反应各种事件,四,系统如何处理各种异常及错误。
从初始化的方式,内容,能知道系统做了什么准备,对于系统会有什么行为展现,也就能得窥一二了。之所以要了解与系统相接的其他系统(或使用者) ,为的是要界定出系统的边界。其他的系统可能会提供输入给我们所探索的系统,也可能接收来自这系统的输出,了解这边界所在,才能确定系统的外观。
好的说明文件难求,拼凑故事的能力很重要:
我喜欢将系统的运作情境,比拟成系统会上演的故事情节。在阅读细节性质的程式码前,先知道系统究竟会发生那些故事,是必备的基本功课。
我们采取由上而下的方式,从一个点再分支出去成为多个点,因此,通常也会以树状的方式记录.当我们试着以树状的方式,逐一展开每个动作的子动作时,有时必须多看一层,才能真正了解子动作的意义
根据需要了解的粒度,决定展开的层数
适度地忽略不需要了解的细节,是一个很重要的态度,因为你不会一次就需要所有的细节
,阅读都是有目的的。每次的阅读也许都在探索程式中不同的区域;
建立架构观点的认识是最重要的事情.透过重点式的程式码“摘读” ,达到对系统所需程度的了解
阅读程式码俨然成为了新时代程式人必备的重要技能之一。
读完几行程式码,我会试着猜想原作者在写下这段程式码时的心境。他写下这段程式码的用意是什么?为什么他会采取这样的写法?
当你从视阅读他人的程式码为畏途,转变成为可以从中获取乐趣的时候,我想,你又进到了另一个境界。