开源代码的学习方法【转】

开源代码作为一种特色的产物,随着物联网的进步得到了前所未有的发展。一开始,很多代码其实不是开源工程,后来软件的开发商发现根本没法用这些代码来挣钱,所以索性把这些代码发布到网上,让更多的人来进行维护和开发,比如说IBM的eclipse就是这样。当然,在网络上还是存在很多志趣相同的人,因为网络让他们走在了一起,一起讨论方案,一起讨论软件架构,慢慢社区的影响力也会越来越大,这方面做的最好的就是linux、kde、gnome等软件。后来,在社区发展起来后,很多的大公司为了让这些开源软件在自己的硬件设备上跑起来,纷纷对这些开源工程投入资源、建立相应的基金会、贡献代码等,比如说hp、富士通等。等到后期,一些公司主动开发开源软件,根本不指望他们能给公司带来什么收益,而是希望借此带来广阔的人气,比如说android软件。

关于开源代码,其实要说的内容很多,每个人也有自己的体会。今天我抛砖引玉,就开源代码谈谈自己的一些经历,当然谈及的项目基本上都是以C语言项目为主,对于其他的搜索项目、框架项目、平台项目没什么经验、也谈不好,希望大家多多谅解。

二、特点

相比较私有软件,开源代码有很多的自己的特点,我们不妨聊聊看看,

(1)开源代码质量差别迥异;

(2)开源代码形态各异,有的是完整的软件,有的只是插件;

(3)开源代码热度不一样,很多软件其实已经没有人维护了;

(4)开源代码一般没有专门的支持人员,很多事情需要自己解决;

(5)开源代码的编译环境迥异,要努力寻找合适自己的。

三、阅读代码

要阅读代码,需要很多的前期条件。首先,你得把软件编译出来吧;其次你需要基本的软件知识吧,常用的调试方法也必须掌握;最后,对于软件本身需要的内容你 得明白吧,搞视频播放的得知道视频编解码的相关知识,搞压缩软件的要知道压缩的相关算法,搞搜索引擎需要知道爬行、分词和索引查找的相关知识吧,当然这些 都是一些基础条件。那么,如果我们已经做到了上面几点,接下来应该怎么做呢?

(1)下载代码,本地编译通过,生成版本;

(2)熟练使用该软件,明白软件的基本功能和操作方法;

(3)根据软件功能分析软件的模块结构;

(4)寻找到某一个软件最被可能断住的地方设置断点,查看上下文;

(5)围绕上下文判断代码的来龙去脉,逐步展开;

(6)尝试修改代码,重新编译验证自己的想法,循环之;

(7)不断拓展代码的阅读范围,注意记录笔记和与网友分享;

(8)分析代码的时候,忌快,一目十行不如看懂一行。

四、编译环境

对于C语言和C++与来说,使用的比较多的还是windows环境和linux环境。其实C语言的编译其实挺简单的,windows上面有visual studio帮忙,linux上面有autoconf和automake这个强大工具,编译看上去是件容易的事情,其实不然,

(1)不同的编译器对C语言的支持标准是不一样的;

(2)编译器的不同版本也会出现编译不一致的情况;

(3)很多软件常常需要进行修改,这就是对大家基本功的考验;

(4)某些软件需要依赖第三方库,需要自己动手编译;

(5)部分软件只支持高版本的编译器,移植到低版本的编译器要靠自己;

(6)部分软件使用linux可以编译通过,但是在windows的cygwin就是编译不过;

(7)部分软件编译时间长,而且内存占用大,一旦编译失败,前功尽弃;

(8)头文件失败、链接失败、数据类型转变失败,很多情况需要自己处理解决。

五、选择代码

网上的代码很多,但是要选择真正对自己有用的代码。否则,对于那些低质量的代码,即使你下载下来也没有什么用。

(1)下载高质量的代码;

(2)下载的代码要结构清晰、编写规范;

(3)下载的代码要可编译;

(4)下载的代码最好一直在演进中;

(5)下载的代码最好经过了很长时间的验证;

(6)下载可以独立使用的一段代码,好阅读、好总结;

(7)使用业内广泛使用的开源代码,降低成本,尽量不要一个人战斗。

六、下载工具

目前关于代码下载的办法还是很多的,当然最简单、最方便的还是直接从服务器上面进行下载使用,不过现在也有很多的下载软件了,比如说,

(1)svn工具;

(2)Git工具;

(3)ftp工具等等。

七、寻找代码

我平时看代码主要是C和C++代码为主,Java代码也会偶尔看一下。平时除了自己积累一些代码之外,也会主动去寻找一些代码,比如说,

(1)到sourceforge上查找相关代码;

(2)到google code上面查找具体的代码;

(3)到apache网站上寻找java的相关代码;

(4)直接到开源项目网站上面寻找代码;

(5)到csdn等网站下载代码,偶尔会有意外的收获;

(6)到图书出版社下载图书附录的代码;

(7)直接和软件作者联系,看看能不能获取相关的开源代码。

八、学习项目:

(01)CoolPlayer:一个完整的mp3播放器

http://coolplayer.sourceforge.net/

(02)Lua:一个完整的脚本虚拟机

http://www.lua.org

(03)FTK:一个简单GUI解决方案,windows和linux都可以使用

http://code.google.com/p/ftk/downloads/list

(04)Ucos:实用的实时嵌入式操作系统代码

http://micrium.com/page/home

(05)eMule:好用的p2p代码

http://www.emule.org.cn/download/

(06)Irrlicht:开源3d引擎

http://irrlicht.sourceforge.net/

(07)TightVNC:远程控制代码,client和server皆有

http://www.tightvnc.com/

(08)ToDoList:强大的任务管理软件

http://www.abstractspoon.com/

(09)Notepad++:实用的文本编辑工具

http://notepad-plus-plus.org/

(10)Pnglib、jpeglib:图片库文件

http://libpng.sourceforge.net/

http://sourceforge.net/projects/libjpeg/

(11)CUnit: 单元测试库文件

http://cunit.sourceforge.net/

(12)Libsvm: 好用的数据挖掘库

http://www.csie.ntu.edu.tw/~cjlin/libsvm/

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-03 13:48:01

开源代码的学习方法【转】的相关文章

iOS流行的开源代码库

本文介绍一些流行的iOS的开源代码库 1.AFNetworking 更新频率高的轻量级的第三方网络库,基于NSURL和NSOperation,支持iOS和OSX.https://github.com/AFNetworking/AFNetworking 2.GPUImage 图像处理库,基于OpenGL ES,图像处理效率高.https://github.com/BradLarson/GPUImage 3.Masonry 自动布局库.https://github.com/SnapKit/Mason

C++开源代码项目汇总

Google的C++开源代码项目 v8  -  V8 JavaScript EngineV8 是 Google 的开源 JavaScript 引擎.V8 采用 C++ 编写,可在谷歌浏览器(来自 Google 的开源浏览器)中使用.V8 根据 ECMA-262 第三版中的说明使用 ECMAScript,并在使用 IA-32 或 ARM 处理器的 Windows XP 和 Vista.Mac OS X 10.5 (Leopard) 以及 Linux 系统中运行.V8 可以独立运行,也可以嵌入任何

【141030】金山卫士开源代码,VC++完整源码

VC++金山卫士开源代码,包含所有模块的源码,促进互联网行业的开源计划 :也是你学习VC++的绝佳范例,可以接触到中国最专业的安全类软件源代码,你可以自由的使用/研究/修订/再发布 这些代码以及延伸作品.VC++金山卫士开源代码下载. 游戏源码下载地址:点击下载

GitHub + VSTS 开源代码双向同步

GitHub已经是全球开源代码的大本营了,通过以下统计你可以看到仅仅javascript在github就有超过32万个活动的repo.很多开发人员都会把自己的一部分代码分享到github上进行开源,一方面可以提高自己在编程领域的知名度,也可以吸引其他的开发人员帮助你一起改进,当然还可以认识更多的朋友,要不怎么说github其实是个交友网站呢. 但是github上免费的repo只能是公开的,对于一些我们不希望完全开源的项目,就没有办法免费分享了,当然你可以付费升级到专业版,这样就可以托管私有rep

PHP爬虫(3)PHP DOM开源代码里的大坑和字符编码

一.开源代码的问题 在PHP爬虫(2)中介绍了开源工程Sunra.PhpSimple.HtmlDomParser.在实际工作中发现一个问题,例如http://www.163.com的网页数据怎么也抓取不下来. $url = "http://www.163.com"; $content = Http::request($url); $dom = str_get_html($content);//dom返回值为false 检查simple_html_dom.php代码发现, if (emp

常见的Android开源代码以及框架

Android SDK源代码 http://grepcode.com/project/repository.grepcode.com/java/ext/com.google.android/android/ 开源代码 http://www.open-open.com/lib/view/open1404286864296.htmlhttp://www.apkbus.com/android-170798-1-1.html Gif 图片显示框架https://github.com/koral--/an

Material Design设计的开源代码

https://github.com/telly/FloatingAction http://www.csdn.net/article/2014-11-21/2822753-material-design-libs/1 android 属性动画的开源代码: http://www.jcodecraeer.com/a/opensource/2014/1012/1746.html

如何学习开源代码(摘自互联网)

如何阅读和学习开源代码 通过阅读开源代码,可以学习其中的框架和模式.代码技巧.算法等.但是经常有些人拿到开源代码以后不知道如何下手,这里分享一下我的一些经验. 1.拿到代码以后编译运行它,了解它干什么的,实现了功能. 2.从入口点开始阅读,按照流程,了解这个软件是怎么运行起来的. 3.从整体上观察这个软件是有哪些模块组成的,最好能画一画图. 4.修改软件的功能,并且能够调试它.不能仅仅停留在阅读代码上,一定要改代码,这样才能增加对开源代码的理解. 5.做笔记,把这个开源代码实现的功能,实现方式.

22个值得收藏的Android开源代码-UI篇

  FileBrowserView 一个强大的文件选择控件.界面比较漂亮,使用也很简单.特点:可以自定义UI:支持复制.剪切.删除.移动文件:可以用在Fragment.ativity.DialogFragment中:支持快速切换目录. 项目地址: https://github.com/psaravan/FileBrowserView MultiItemRowListAdapter 多列效果的ListView,采用重新包装adapter的方式,使你的ListView可以显示成多列,跟普通的List