A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

通常,入职一家新公司后,往往都会遇到先熟悉公司项目源码和相关业务知识,很多人会觉得阅读他人写的代码是一件很头疼的事情,因为每个人写代码的思路不同,风格不同,如果再没有一定的review代码的能力,就需要先理清一个阅读陌生代码的思路,下面是我整理收集出的6点心得体会,希望可以帮到即将参加工作或换工作的朋友,无论是技术菜鸟还是工作多年的编程老鸟,都会从中受益。

1. 读懂程式码,使心法皆为我所用。
先了解系统架构与行为模式,再细读。
接触他人的程式码,大致上可以分为三种程度:1了解,2修改,扩充,3抽取,提炼。
阅读程式码的重点,不在于读完每一行程式码,而是在于有效率地透过探索及阅读,从而了解系统的架构及行为模式。
熟悉沟通语言与惯例用语
除了认识所用语言之外,再来就是要先确认程式码所用的命名惯例(命名惯例)
当你拿到一套必须阅读的程式码时,最好先取得命名惯例的说明文件。
掌握程式码撰写者的心态与习惯
了解对方所使用的语言,以及惯常运用的语汇。

2.摸清架构,便可轻松掌握全貌。
要了解一个系统,最好是采取由上至下的方式。先试着捕捉系统架构性的观念,不要过早钻进细节。
阅读程式码的目的,在于了解全貌而非细节。
阅读程式码的目的在于了解系统的全貌,而不是在于只是为了地毯式的读遍每一段程式码。
由上而下厘清架构后,便可轻易理解组成关系。
在阅读程式码时,却应该先采由上至下(自上而下)的方式。
系统的架构是整个系统的骨干,支柱。它表现出系统最突出的特征。
知道系统架构究竟属于那一种类型,通常大大有益于了解系统的个别组成之间的静态及动态关系。有些系统因为所用的技术或框架的关系,决定了最上层的架构。例如,采用的Java Servlet的/ JSP的技术的应用系统,最外层的架构便是以J2EE的(或起码的J2EE中的Web容器)为根本。
了解架构,必须要加上层次感。
相较于直接切入最细微的单一角色行为,不如了解某个特定的架构中,究竟存在多少角色,以及这些角色之间的互动模式,比较能够帮助我们了解整个系统的运作方式。
探索架构的第一件事:找出系统如何初始化。
2.1系统如何初始化;
2.2与这个系统相接的其他系统(或使用者)有那些,而相接的介面又是什么;
2.3系统如何反应各种事件
2.4系统如何处理各种异常及错误。
系统如何初始化是很重要的一件事,因为初始化是为了接下来的所有事物而做的准备。
系统所反应的事件类型,以及如何反应,基本上就代表着系统本身的主要行为模式。

3.优质工具在手,读懂程式非难事。
善用文字编辑器或IDE中,加速解读程式码。
许多文字编辑器提供了常见程式语言的语法及关键字标示功能。
找出某个函式位在那一个原始档里,接着找到该函式所在的位置。
搭配htags制作的HTML文件,更是如虎添翼。
能够帮你将已制作完成的索引结构,制作成为一组相互参考的的HTML文件。

4.望文生义,进而推敲组件的作用。
好的说明文件难求,拼凑故事的能力很重要。
利用简单的列表,直接将它们列出。
或者,你也可以利用基于UML中的类别图,合作图,循序图之类的表示方法,做出更详细的描述。
探索架构的第一步,找到程式的入口。
对java来说,便是main()函数。在找到入口后,再逐一追踪,摸索出系统的架构。
系统多会采用相同的架构处理插件程式。
如果你是个有经验的程式人,多半能从函式所回传的结构,猜出这个函式实际的用途。
当你已经知道它是一个插件程式时,就应该要明白,它可能采用的,就是许多系统都采用的相同架构处理插件程式。
随着实务经验,归纳常见的架构模式。
例如,如果你熟悉设计模式,你更会知道这是简单工厂方法这个设计模式的运用。
善用名称可加速了解。
“望文生义”很重要,我们看到函式的名称,就可以猜想到它所代表的作用。

5.找到程式入口,再由上而下抽丝剥茧。
根据需要决定展开的层数,或展开特定节点,并记录树状结构,然后适度忽略不需要了解的细节─这是一个很重要的态度。
因为你不会一次就需要所有的细节,阅读都是有目的的,每次的阅读也许都在探索程式中不同的区域。
探索系统架构的第一步,就是找到程式的入口点。找到入口点后,多半采取由上而下(自上而下)的方式,由最外层的结构,一层一层逐渐探索越来越多的细节。
展开的同时,随手记录树状结构。
这部分必须要留意几个重点。首先,应该一边阅读,一边记录文件。因为人的记忆力通常有限,对于陌生的事物更是容易遗忘,因此边阅读边记录,是很好的辅助。
无法望文生义的函式,先试着预看一层。
当我们试着以树状的方式,逐一展开每个动作的子动作时,有时必须多看一层,才能真正了解子动作的意义。
根据需要了解的粒度,决定展开的层数。
只是需要概括性的了解,那么也许展开两层或三层,就能够对程式有基础的认识。
基于特殊的需求,专门针对特定的动作展开至深层。
了解的深入程度,再决定要展开的层数。你更可以依据特殊的需要,只展开某个特定的节点,以探索特定的细目。

6.阅读的乐趣,透过程式码认识作者。
建立架构观点的认识是最重要的事情。
要透过重点式的程式码“摘读” ,达到对系统所需程度的了解。
阅读程式码是新时代程式人必备的重要技能。
善利用开放原始码所提供的资源,不仅能够更快学习到新的技术。
我们反覆提起了“由上而下”的阅读方向的重要性。
由上而下的阅读方式,是因为我们重视架构更胜于细节。从最外层的架构逐一向内探索,每往内探索一层,我们了解系统的粒度就增加了一个等级。
好的名称能够摘要性地点出实体的作用。
多观察不同命名体系的差异,并且尝试归纳彼此之间的异同,有助于更快地提升对名称的感受及联想力。
转换立场,理解作者的思考方式。
他写下这段程式码的用意是什么?为什么他会采取这样的写法?顺着原作者的思考理路阅读,自己的思考才能更贴近对方写作当时的想法。 当你短暂化身为原作者时,才能更轻易的理解他所写下的程式码。
从程式码着手认识作者独有的风格,进而见贤思齐。
你或许会在阅读他人的程式码时,发现令人拍案叫绝的技巧或设计。
有可能在阅读的同时,发现原作者所留下的缺失或写作时的缺点,而暗自警惕于心。这也算是阅读他人程式码时的一项乐趣。
当你从视阅读他人的程式码为畏途,转变成为可以从中获取乐趣的时候,我想,你又进到了另一个境界。




3 个回复

倒序浏览
虽然不是看的很明白,但还是记下了,
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
回复 使用道具 举报
虽然看不懂但是觉得好厉害
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马