`
xiangxingchina
  • 浏览: 508214 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

源码阅读学习的捷径

阅读更多
源码阅读,自然是计算机学习的捷径之一,其重要性在此就不再赘述。

因项目需要,最近在读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)回顾,得到此项目设计的精髓;

最后不要忘记在相关主流社区共享这些资料,留下联系方式,如有纰漏,会有人给你指出的,人人为我,我为人人。
分享到:
评论

相关推荐

    程序员经验点滴桌面源代码加应用程序-菜鸟学习的捷径

    MDI子窗口等示例,按下ESC键退出程序,避免应用程序二次运行,程序执行后自己删除自己等等很多精彩内容,欢迎delphi同行的下载

    STL源码剖析 源代码

    阅读STL源码是由第一层次直贯第二层次,而渐达於第三层次的一条捷径,当然也是条荆棘之路。如果你是一个勇於征服险峰的程式师,如果你是一个希望了解under the hood之奥秘的程式师,那麽当你在攀登STL这座瑰丽高山的...

    Delphi7数据库编程学习捷径 光盘

    《Delphi 7数据库编程学习捷径》光盘使用说明 ◇ooo◇ooo◇ooo◇ooo◇ooo◇ooo◇ooo◇ooo◇ooo◇ooo◇ooo◇ooo◇ 光盘内容 光盘中的内容是作者讲解使用Dephi 7开发数据库程序时编写的实 例源代码和...

    Delphi7数据库编程学习捷径.rar

    光盘中的内容是作者讲解使用Dephi...例源代码和教学讲解的PowerPoint文件,具体内容如下: ※ Code:源代码文件夹 ※ PPT:PowerPoint教学讲解文件夹 ※ Readme.txt:光盘说明文件 ※ Start.exe:光盘启动运行文件

    程序员经验点滴桌面源码文件菜鸟学习的捷径(第四部分)

    不让应用程序显示在任务栏上,处理Windows应用程序的命令行参数,调整显示分辩率,更改Windows桌面,制作托盘图标等等精彩内容

    WPF Recipes in C# 2008(WPF学习经典资料)+16个WPF源代码示例程序

    WPF学习经典资料,外加附送16个WPF源代码示例程序。 深入学习WPF捷径。

    linux系统命令源码

    linux系统命令源代码,如pwd,ls,split等常用的系统命令源代码都可以在这里找到,学习操作系统命令的实现,是提供自己代码质量的捷径。

    android手机开发源代码--7、8

    android平台google手机开发 的源代码,在eclipse(推荐android1.5SDK)下导入工程即可编译、运行,新手入门的快速捷径。 50多个经典小程序,值得学习。

    h.264源代码和文档及源代码详解.rar

    本资源包括h.264源代码,源代码的讲解,及标准协议中文版和英文版,是学习h.264不可多得的资料,为有兴趣的朋友提供捷径

    java编写的蜘蛛纸牌 包含源代码和打包程序 极具参考价值

    ava编写的蜘蛛纸牌 其中包含源代码和可执行程序 是学习java的捷径

    毕业设计 基于SNS社交网络的捷径猎头网源码+详细文档+全部资料(高分项目)

    毕业设计 基于SNS社交网络的捷径猎头网源码+详细文档+全部资料(高分项目)毕业设计 基于SNS社交网络的捷径猎头网源码+详细文档+全部资料(高分项目) 【备注】 1、该项目是个人高分毕业设计项目源码,已获导师指导...

    c#网络编程 socket源代码

    c#网络编程源代码 学习网络编程socket的入门捷径。

    STL源码剖析 电子版

    学习编程的人都知道,阅读、剖析名家代码乃是提高水平的捷径。源码之前,了无秘密。大师们的缜密思维、经验结晶、技术思路、独到风格,都原原本本体现在源码之中。 这本书所呈现的源码,使读者看到vector的实现、...

    vb2008 自学教程源码

    vb2008完全自学教程 随盘源码 我已付上目录 学习编程,最好的捷径就是读源代码

    STL源码剖析

    学习编程的人都知道,阅读、剖析名家代码乃是提高水平的捷径。源码之前,了无秘密。大师们的缜密思维、经验结晶、技术思路、独到风格,都原原本本体现在源码之中。 这本书所呈现的源码,使读者看到vector的实现、...

    侯捷-STL源码剖析

    学习编程的人都知道,阅读、剖析名家代码乃是提高水平的捷径。源码之前,了无秘密。大师们的缜密思维、经验结晶、技术思路、独到风格,都原原本本体现在源码之中。  这本书所呈现的源码,使读者看到vector的实现、...

    STL源码剖析简体中文完整版-(清晰扫描带目录).rar

    学习编程的人都知道,阅读、剖析名家代码乃是提高水平的捷径。源码之前,了无秘密。大师们的缜密思维、经验结晶、技术思路、独到风格,都原原本本体现在源码之中。 这本书所呈现的源码,使读者看到vector的实现、...

    STL源码剖析简体中文完整版(清晰扫描带目录).pdf

    学习编程的人都知道,阅读、剖析名家代码乃是提高水平的捷径。源码之前,了无秘密。大师们的缜密思维、经验结晶、技术思路、独到风格,都原原本本体现在源码之中。 这本书所呈现的源码,使读者看到vector的实现、...

    Visual c++通用范例开发金典 韦朴 源代码

    Visual c++通用范例开发金典 韦朴 源代码 解压后310M 读范例金典,走开发捷径,11大类编程应用,31个主要技术方向,112个细分应用点,355个经典范例,应用为纲、范例为目,深入介绍Visual C++的约722个重要程序代码...

    STL源码剖析 中文繁体 侯捷 著 PDF格式 有书签目录 高清文字版 无水印 文字版

    学习编程的人都知道,阅读、剖析名家代码乃是提高水平的捷径。源码之前,了无秘密。大师们的缜密思维、经验结晶、技术思路、独到风格,都原原本本体现在源码之中。 这本书所呈现的源码,使读者看到vector的实现、...

Global site tag (gtag.js) - Google Analytics