源码阅读,自然是计算机学习的捷径之一,其重要性在此就不再赘述。
因项目需要,最近在读OpenSSH & OpenSSL 的源码库,一开始进展奇慢,龟速,后来掌握了一些技巧后,快了一些。在此,将我总结的所谓的“技巧”贴上来,我先扔出一块砖,大家拿玉的砸过来!!
读一份好的源码就像挖宝藏。
1.工欲善其事,必先利其器——铁锹?
源码阅工具推荐:
桌面软件或web开发推荐 ms vs 或eclipse+plugins,即相应的IDE即可;
linux项目相关推荐使用source insight(wine/samba)。
可以根据个人习惯确定。
2.选择好的项目——什么才算宝藏?
好的项目:质量过关的项目;
个人认为,质量过关的代码应该至少具备:
1)软件架构、模块接口设计良好,高内聚、低耦合;
2)代码书写规范、流程清晰;
3)注释、文档、及相关网络资料齐全;
具体到某个项目的优劣可以参考主流论坛对之的评价。
除此之外,好的项目,也必须是适合自己的项目。
根据自己的水平,兴趣,专业方向等做出选择,更多情况是因为一些限制条件,比如:工作或学习需要。
这样做的目的是,让我们能够有目标的去读,一则因为实际需要,易于端正态度、不会轻言放弃;二则于情景中阅读源码,更容易理解,事半功倍。
举例说明:
要学习 asp.net的架构设计、设计模式的相关内容,并且毕业设计想实现一个电子商务网站的,可以阅读一下 petshop;
如果要学习http协议的具体实现,可以阅读一些web server的源码,micro_httpd、shttpd、boa、apache……
如果学习龙芯或MIPs CPU架构,熟悉mips汇编,建议阅读mips模拟器源码,pcspim 、vmips、msim ……
……
3. 关注Doc——关于宝藏
很多开源项目中的readme、Q&A、buglist、manual等都会提供大量的信息,了解这些文档,显然会对整个项目的把握很大的帮助,然而这部分也是最容易被我们忽略的。
我们也可以通过 wiki & google扩展这些资料。
4.搭建环境——出发前的准备
一个可运行的环境对于代码阅读会有很大的帮助:
1)便于我们从功能面上了解项目;
2)通过调试、跟踪等手段,理解源码运行的流程。
5.分析项目架构——画地图
通过以上几步已经大体把握了项目的架构,我们再结合源码,即可分析出项目的架构,常用手段如下:
1)借助项目目录;
2)分析项目管理工具Makefile,分析模块的依赖关系;
3)浏览源码,这里不必具体到每个函数,遇到关键函数可以阅读注释即可;
4)阅读文档、借助google等
做到这里,我们已经对项目的架构应该有了七八分的了解,有些问题即使想不透彻也没关系,留到下面,咱们秋后算账。
在继续下一步之前,我们应该动手将项目的架构图画出来,和概要设计时的系统模块图类似,不清楚的地方空出来,可以借助visio、Rose、smartDraw等工具。
注:这一步是必须的,因为这是我们寻宝的地图,它可以使我们不至于迷失在茫茫的源码海洋之中。
6.深入源码——给我搜
根据上一步的地图,我们开始深入到各个模块,逐个歼灭,顺序大体如下:
1)自底向上的原则
这和我们在软件设计阶段自顶向下,逐步求精的思想相反;对模块内部的分析,我们需要从底部实现着手,结合地图,逐步cover此模块,蚕食之。这也是我们画地图的主要原因。
2)公共模块优先
公共模块基本上是一些通用性比较强的代码,可复用性比较高,例如一些工具性代码;
这些代码的模块接口通常比较清晰,这些代码基本上可以算是金子啦,这里的很多代码、甚至整个模块我们都可以直接用到其他项目中去。我们要将这些代码存入自己的代码库,这样还不行,我们还要加上这些代码的使用说明和可运行的实例代码。
3)虚拟数据,模拟接口,让每个模块都可以独立运行。
模拟这个概念比较重要,有点孤立敌军的意味。用虚拟数据包围当前模块、切断与其他模块的关系,将模块独立开来,歼灭之。
这一步需要的技巧比较多,难度通常和所选的项目有关,这也是前文中我们强调低耦合的原因。关于这些我们可以参考单元测试中的Mock原理,在书写大量伪装数据的同时,我们对模块间接口交互、数据流等有了更深层的了解。
这一步我们可以站在软件设计者的角度来思考,此时应该可以写出此模块的详细设计文档。
7.总结
一个源码项目阅读完了,我们再要回顾整个过程,把开始地图中留下的空填上。
我们不能满足于抽取了一些代码,对这个项目甚至类似的项目有了一些了解,这些仅仅是鱼;更重要的是要学会打渔的方法,正所谓:千金在手,不如一技傍身。
早期共*产*党 为啥能够在如此艰苦的环境下存活甚至发展壮大,个人认为,主要是源于不断地思考和不断地总结!我们要时常猜测设计者的设计意图:
为什么这样做?为什么不那样做?
如果是我来设计,我应该怎么实现?应该避免什么,注意什么?
这样做真的最好吗?有没有其他更好的实现方法?
把这个将这些思路整理出来,可以称之为源码阅读心得。
就这样我们阅读一个项目基本上三遍就差不多了:
1)浏览,得出模块设计概要图;
2)细品,得出模块的详细设计,丰富了个人代码库;
3)回顾,得到此项目设计的精髓;
最后不要忘记在相关主流社区共享这些资料,留下联系方式,如有纰漏,会有人给你指出的,人人为我,我为人人。
分享到:
相关推荐
《C++ 捷径教程(第三版)》是一本旨在快速掌握C++编程语言的教程,源代码的提供使得读者能够深入理解书中的概念并实际操作,从而提高学习效率。该教程覆盖了C++的基础知识到高级特性,是学习C++编程的重要资源。 ...
标题中的“程序员经验点滴桌面源代码加应用程序-菜鸟学习的捷径”暗示了这是一个面向初学者的编程资源,特别是对于那些使用Delphi编程语言的人。这个资源可能包含了一系列的源代码示例,帮助新手理解并掌握Delphi...
在深入探讨"C#高级编程学习捷径"这个主题之前,我们先来理解一下C#语言的基本概念。C#是由微软公司开发的一种面向对象的编程语言,广泛应用于Windows平台的软件开发,尤其是.NET框架下的应用程序。它具有现代编程...
通过阅读和理解Target Bands.MQ4源代码,交易者可以了解其背后的逻辑,包括如何计算价格波动、何时发出买入/卖出信号、如何设置止损和止盈等。这对于定制个人化的交易策略或者优化现有策略具有极大价值。 其次,源...
阅读STL源码是由第一层次直贯第二层次,而渐达於第三层次的一条捷径,当然也是条荆棘之路。如果你是一个勇於征服险峰的程式师,如果你是一个希望了解under the hood之奥秘的程式师,那麽当你在攀登STL这座瑰丽高山的...
《SQLite权威指南》第二版是深入理解SQLite的重要参考书籍,其源代码包含书中所有示例的数据库文件和代码实例,为读者提供了实践和学习的宝贵资源。 源代码中可能包含以下知识点: 1. **SQLite 数据库结构**:...
总的来说,"VC++编程学习捷径"这个资料集提供了一个良好的起点,让你逐步掌握C++语言和Windows应用程序开发。通过分析和实践这些源程序,你将能够逐步构建起自己的VC++编程基础,从而在Windows开发领域更加游刃有余...
"CODE"则很可能包含了源代码示例,读者可以通过阅读和运行这些代码来加深理解。 此外,"Readme.txt"文件通常会提供关于如何使用这些资源的指南,可能包括安装步骤、运行环境要求、代码解释等信息。"LOGO.ICO"和...
- 学习编译器的基本原理和如何将源代码转换成机器语言; - 阅读和调试C语言程序,积累编程思路,学习使用伪代码来构建常见问题的算法。 3. 程序设计的核心技术:成为程序员,需要掌握汇编语言程序设计、算法与...
在Java中,源代码(.java文件)通过Javac编译器被转换为这种`.class`文件,这是Java虚拟机(JVM)能够执行的格式。`ko1_1`可能是类或方法的名称,具体含义需要查看源代码才能确定。 `stylesheet.css`文件是CSS...
《实战Hadoop--开启通向云计算的捷径》这本书是学习Hadoop的宝贵资源,其源码更是理论与实践结合的桥梁,能帮助读者深入理解Hadoop的工作原理和应用。 Hadoop的核心由两个主要组件构成:Hadoop Distributed File ...
《Delphi 7数据库编程学习捷径》光盘使用说明 ◇ooo◇ooo◇ooo◇ooo◇ooo◇ooo◇ooo◇ooo◇ooo◇ooo◇ooo◇ooo◇ 光盘内容 光盘中的内容是作者讲解使用Dephi 7开发数据库程序时编写的实 例源代码和...
光盘中的内容是作者讲解使用Dephi...例源代码和教学讲解的PowerPoint文件,具体内容如下: ※ Code:源代码文件夹 ※ PPT:PowerPoint教学讲解文件夹 ※ Readme.txt:光盘说明文件 ※ Start.exe:光盘启动运行文件
描述中提到,资料是“WORD格式”,意味着这些技巧和源代码以Microsoft Word文档的形式呈现,便于阅读和打印。Word文档通常包含了文本、表格、图片等多媒体元素,用于清晰地展示PB编程的知识点和示例。此外,资料特别...
通过深入研究JSF 1.2的源代码,开发者不仅可以更好地理解JSF的工作机制,还能学习到如何有效地利用框架特性,优化代码,提升应用程序的性能。这不仅对于JSF初学者是一份宝贵的参考资料,对于有经验的开发者来说,也...
深入研究Rexsee的源代码,开发者不仅可以提升HTML5和JavaScript的技能,还能了解如何将Web技术应用于移动平台,这对于那些希望跨平台开发或者熟悉Web技术但不熟悉Android原生开发的开发者来说,是一条捷径。...
《风行游戏Windoom源代码解析与学习指南》 Windoom,一款在游戏历史上具有深远影响的经典第一人称射击游戏,其源代码的公开对于广大游戏开发者和编程爱好者来说是一份珍贵的学习资源。源代码是软件的灵魂,它揭示了...
《Delphi7数据库编程学习捷径》是一本专注于教授如何使用Delphi 7进行数据库编程的书籍,其配套光盘包含了大量的实例代码和资源,帮助读者深入理解和掌握Delphi 7与数据库集成开发的关键技术。在本文中,我们将详细...
此外,还可以参考一些知名的开源项目,通过阅读这些项目的源代码来学习优秀的编程习惯和技巧。 ##### 强化英语能力 英语能力对于学习编程语言至关重要。因为大多数编程资料和文档都是英文的,具备良好的英语阅读...
不让应用程序显示在任务栏上,处理Windows应用程序的命令行参数,调整显示分辩率,更改Windows桌面,制作托盘图标等等精彩内容