学习方法:如何看懂源代码!

  我们在写程序时,有不少时间都是在看别人的代码。例如看小组的代码,看小组整合的守则,若一开始没规划怎么看,就会出问题。不管是参考也好,从开源抓下来研究也好,为了了解箇中含意,在有限的时间下,不免会对庞大的源代码解读感到压力。

  网络上上有一篇关于分析看代码的方法,做为程序设计师的您,不妨参考看看,

换个角度来分析。 也能更有效率的解读你想要的程序码片段。

六个章节:

( 1 )读懂程序码,使心法皆为我所用。

( 2 )摸清架构,便可轻松掌握全貌。

( 3 )优质工具在手,读懂程序非难事。

( 4 )望文生义,进而推敲组件的作用。

( 5 )找到程序入口,再由上而下抽丝剥茧。

( 6 )阅读的乐趣,透过程序码认识作者。

 

       阅读他人的程序码( 1 )——读懂程序码,使心法皆为我所用

  程序码是别人写的,只有原作者才真的了解程序码的用途及涵义。许多程序人心里都有一种不自觉的恐惧感,深怕被迫去碰触其他人所写的程序码。但是,与其抗拒接收别人的程序码,不如彻底了解相关的语言和惯例,当成是培养自我实力的基石。

 1. 消除人类内心深处对于陌生事物的原始恐惧。

 2. 读懂别人写的程序码,让你收获满满。——在现今开放原始码的风气如此盛行的今日,你可以透过开放原始码学习到新的技术,学习到高手的架构设计,大幅提高学习的效率及效果。你甚至可以直接自开放原始码专案中抽取,提炼出自己所需的程序码,站在巨人的肩膀上,直接由彼端获得所需的生产力。从这个观点来看,读懂别人所写的程序码,就不再只是从负面观点的“被迫接收”,而是极具正面价值的“汲取养份。”

 3. 先了解系统架构与行为模式,再细读。——接触他人的程序码,大致上可以分为三种程度:一,了解,二,修改,扩充,三,抽取提炼。了解别人的程序码是最基础的工作,倘若不能了解自己要处理的程序码,就甭论修改或扩充,更不可能去芜存菁,从中萃取出自己所需,回收再利用别人所撰写的程序码。

所以,阅读程序码的重点不在于读完每一行程序码,而是在于有效率地透过探索及阅读,从而了解系统的架构及行为模式。以便在你需要了解任何片段的细节实作时,能够很快在脑上对映到具体的程序码位置,直到那一刻,才是细读的时机。

  4. 熟悉沟通语言与惯例用语(即命名规范)——不论如何,有些基本的准备,是阅读他人程序码时必须要有的。

  5. 掌握程序码撰写者的心态与习惯——想要阅读程序码,得先试着体会程序码作者的“心”。想要这么做,就得多了解对方所使用的语言,以及惯常运用的语汇。

 

阅读他人的程序码( 2  -摸清架构,便可轻松掌握全貌

  在本文中,我们的重点放在:要了解一个系统,最好是采取由上至下的方式。先试着捕捉系统架构性的观念,不要过早钻进细节,因为那通常对于你了解全貌,没有多大的帮助。阅读程序码不需要从第一行读起,我们的目的并不是在于读遍每一段程序码。

 1.由上而下厘清架构后,便可轻易理解组成关系。

 2.了解架构,必须要加上层次感;——事件产生器产生事件,并送至事件分派器,而事件分派器负责找出各事件相对应的事件处理器,并且转交该事件,并命令事件处理器加以处理。像的图形用户界面的Windows应用程序,便是采用事件驱动式的架构。

 3.探索架构的第一件事:找出系统如何初始化。——有经验的程序人,对于时常被运用的架构都很熟悉。常常只需要瞧上几眼,就能明白一个系统所用的架构,自然就能够直接联想到其中会存在的角色,以及角色间的关系。然而,并不是每个系统所用的架构,都是大众所熟悉,或是一眼能够望穿的。这时候,你需要探索。目标同样要放在界定其中的角色,以及角色间的静态,动态关系。

 4.要了解一个系统,最好是采取由上至下的方式。先试着捕捉系统架构性的观念,不要过早钻进细节,因为那通常对于你了解全貌,没有多大的帮助。


阅读他人的程序码( 3  -优质工具在手,读懂程序非难事

  系统的复杂度往往超过人脑的负荷。阅读程序码的时候,你会需要更多工具提供协助。使用好的整合式开发环境( IDE )的或文字编辑器,就能提供最基本的帮助。

  因为在阅读程序码时,最常做的事,就是随着程序中的某个控制流,将阅读的重心,从某个函式移至它所呼叫的另一个函式。所以对程序人来说,阅读程序码时最常做的事之一就是:找出某个函式位在那一个原始档里,接着找到该函式所在的位置。

 

阅读他人的程式码( 4  -望文生义,进而推敲组件的作用

  先建立系统的架构性认识,然后透过名称及命名惯例,就可以推测出各组件的作用。例如:当AOL的Winamp尝试着初始化一个插件时,它会呼叫这个结构中的初始化函式,以便让每个插件程式有机会初始化自己。当AOL的Winamp打算结束自己或结束某个插件的执行时,便会呼叫退出函式。

  在阅读程式码的细节之前,我们应先试着捕捉系统的运作情境。在采取由上至下的方式时,系统性的架构是最顶端的层次,而系统的运作情境,则是在它之下的另一个层次。“望文生义”很重要,我们看到函式的名称,就可以猜想到它所代表的作用。

 

阅读他人的程式码( 5  -找到函数入口,再由上而下抽丝剥茧

  根据需要决定展开的层数,或展开特定节点,并记录树状结构,然后适度忽略不需要了解的细节─这是一个很重要的态度。因为你不会一次就需要所有的细节,阅读都是有目的的,每次的阅读也许都在探索程式中不同的区域。

探索系统架构的第一步,就是找到函数的入口点。找到入口点后,多半采取由上而下(自上而下)的方式,由最外层的结构,一层一层逐渐探索越来越多的细节。

  我们强调一种不同的做法:在阅读程序代码时,多半采取由上而下的方式,而本文建议了一种记录阅读的方式,就是试着记录探索追踪时层层展开的树状结构。你可以视自己需要,了解的深入程度,再决定要展开的层数。你更可以依据特殊的需要,只展开某个特定的节点,以探索特定的细目。

  适度地忽略不需要了解的细节,是一个很重要的态度,因为你不会一次就需要所有的细节,阅读都是有目的的。每次的阅读也许都在探索程式中不同的区域;而每次探索时,你都可以增补树状结构中的某个子结构。渐渐地,你就会对这个程式更加的了解。

 

阅读他人的程式码( 6  -阅读的乐趣:透过程式码认识作者

  即便每个人的写作模式多半受到他人的影响,程式人通常还是会融合多种风格,而成为自己独有的特色,如果你知道作者程式设计的偏好,阅读他的程式码就更得心应手。

  阅读程式码时,多半会采取由上而下,抽丝剥茧的方式。透过记录层层展开的树状结构,程式人可以逐步地建立起对系统的架构观,而且可以依照需要的粒度(粒度),决定展开的层次及精致程度。

  建立架构观点的认识是最重要的事情。虽然这一系列的文章前提为“阅读他人的程式码”,但我们真正想做的工作,并不在于彻底地详读每一行程式码的细节,而是想要透过重点式的程式码“摘读” ,达到对系统所需程度的了解。每个人在阅读程式码的动机不尽相同,需要了解的程度也就有深浅的分别。只有极为少数的情况下,你才会需要细读每一行程式码。

阅读程式码是新时代程序员必备的重要技能。

 

总结

   当你从视阅读他人的程式码为畏途,转变成为可以从中获取乐趣的时候,我想,你又进到了另一个境界。

阅读更多

没有更多推荐了,返回首页