`
cppmule
  • 浏览: 447113 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

开源代码的学习方法

 
阅读更多




 

【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】

 

一、历史

 

    开源代码作为一种特色的产物,随着物联网的进步得到了前所未有的发展。一开始,很多代码其实不是开源工程,后来软件的开发商发现根本没法用这些代码来挣钱,所以索性把这些代码发布到网上,让更多的人来进行维护和开发,比如说IBMeclipse就是这样。当然,在网络上还是存在很多志趣相同的人,因为网络让他们走在了一起,一起讨论方案,一起讨论软件架构,慢慢社区的影响力也会越来越大,这方面做的最好的就是linuxkdegnome等软件。后来,在社区发展起来后,很多的大公司为了让这些开源软件在自己的硬件设备上跑起来,纷纷对这些开源工程投入资源、建立相应的基金会、贡献代码等,比如说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上面有autoconfautomake这个强大工具,编译看上去是件容易的事情,其实不然,

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

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

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

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

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

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

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

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

 

 

五、选择代码

 

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

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

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

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

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

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

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

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

 

 

六、下载工具

 

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

(1)svn工具;

(2)Git工具;

(3)ftp工具等等。

 

 

七、寻找代码

 

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

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

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

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

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

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

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

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

 

 

八、学习项目:

 

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

 

            

    http://coolplayer.sourceforge.net/

 

 

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

                   

    http://www.lua.org

 

 

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

        

    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:远程控制代码,clientserver皆有

 

          

    http://www.tightvnc.com/

 

 

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

 

                     

 

   http://www.tightvnc.com/

 

 

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

 

               

 

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

 

 

(10)Pnglibjpeglib:图片库文件

 

  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/

分享到:
评论

相关推荐

    开源代码使用指南

    开源代码使用指南  开源代码(Open Source):是促进软件发展的一种协作方式。与商用软件不同,它公开源代码, 允许用户直接拿来学习、开发。使用Open Source的应用受到Open Source的许可证限制,如有些 Open ...

    随想录(开源代码的学习方法).docx

    开源代码的学习方法是软件开发领域不可或缺的一环,尤其是在C语言项目中。开源代码因其开放性和社区支持,成为了许多开发者学习和创新的宝贵资源。本文将探讨如何有效地学习和利用开源代码,以及在不同环境中编译...

    有限元开源代码 FEAP

    《有限元开源代码 FEAP——探索混合有限元的科学计算之旅》 有限元方法(Finite Element Method, FEM)作为一种强大的数值分析工具,被广泛应用于工程力学、流体力学、热传导、电磁学等多个领域。在众多有限元软件...

    objective c 开源代码

    开源代码意味着这段代码是公开的,允许开发者查看、学习甚至修改它的实现,然后在自己的项目中使用。在给定的压缩包中,我们有两个文件:MBProgressHUD.h 和 MBProgressHUD.m,这通常代表一个Objective-C类的接口...

    金山卫士开源代码

    【金山卫士开源代码】是安全领域的一款知名软件,其开源版本为开发者提供了一次深入研究和学习安全软件实现机制的宝贵机会。金山卫士主要致力于保护用户的计算机免受病毒、木马、恶意软件等威胁,它包含了丰富的防...

    GNN github开源代码

    就像生物学利用自然和培养合作一样,我们拒绝“手工工程”和“端到端”学习之间的错误选择,而是倡导一种从其互补优势中获益的方法。我们探索如何在深度学习架构中使用关系归纳偏差来促进对实体,关系和组成它们的...

    金山最新开源代码需要的朋友赶快下载学习

    【标题】:“金山最新开源代码需要的朋友赶快下载学习” 这个标题揭示了这是一份来自金山公司的最新开源代码,可能是为了促进技术交流和社区发展。金山公司在IT领域有着丰富的经验和影响力,尤其在软件开发方面,...

    有限元开源代码ADINA

    有限元开源代码ADINA是基于有限元方法的高级软件,用于解决复杂的工程和科学问题。在计算机辅助工程(CAE)领域,ADINA是享有盛誉的解决方案之一,尤其因其在结构力学、流体力学、热传导以及多物理场耦合问题上的...

    分享C# 运动控制开源代码

    在IT领域,C#是一种广泛使用的编程语言,尤其在开发Windows桌面应用、游戏以及服务器端应用程序时。在“运动控制”这个特定的上下文中,C#可以被...开源代码分享则为学习和创新提供了宝贵的资源,促进技术的不断发展。

    安卓开源 代码

    开源代码可以帮助开发者解决在开发过程中遇到的问题,通过参考别人的实现方式,找到优化代码性能、提高用户体验的方法。同时,通过参与开源项目,开发者还能提升自己的编程技能和协作能力。 8. **安全与隐私**: ...

    机器视觉开源代码链接集合

    在提供的文档中,提到了有关"Online Selection of Discriminative Tracking"的项目,这表明开源代码集合中可能包含了用于学习和跟踪目标动态变化的技术。 5. 其他相关技术:例如,“Local Self-Similarity ...

    61850 开源代码

    本资料集中的"61850开源代码"为学习和理解这一标准提供了宝贵的资源。 IEC 61850的核心目标是创建一个标准化的通信环境,使得变电站内的不同设备,如保护继电器、测控单元、智能电子设备等,能够共享信息并协同工作...

    FTP开源代码 C++

    在这个开源代码库中,我们关注的是C++实现的FTP客户端或服务器端的代码,这为理解和学习FTP工作原理提供了宝贵资源。 首先,FTP协议基于TCP/IP协议栈,通过控制连接和数据连接两个独立的通道来实现文件的上传和下载...

    开源代码网站.docx

    本文将详细介绍一系列针对C/C++开发者的优秀开源代码网站,并推荐一些值得学习的C语言开源项目。 #### 二、开源代码网站介绍 1. **GitHub** - **简介**:GitHub 是全球最大的开源社区,拥有大量的C/C++项目。...

    迭代学习控制开源代码

    这通常涉及到滤波器设计、优化算法或机器学习方法。 5. **下一次迭代**:用校正后的控制输入进行下一轮操作,重复上述过程,直到达到预设的性能指标或满足停止条件。 在提供的代码中,`353c5a8e393e491abc5c7d48e...

    压缩并解压缩文件的开源代码

    在IT行业中,压缩和解压缩文件是常见的操作,特别是在数据传输、存储优化和软件分发等领域。开源代码为这些功能提供了...对于开发者来说,理解和利用这样的开源代码可以提升工作效率,同时也能深入学习和实践相关技术。

    开源代码学习

    开源代码学习是编程领域中一个极其重要且富有价值的主题,特别是在Java这个广泛使用的编程语言中。Java开源项目为开发者提供了丰富的资源,可以帮助他们提升技能、理解复杂系统的工作原理以及参与社区协作。开源代码...

    c# .net 远程桌面 开源代码

    开源代码意味着源代码是公开的,允许开发者查看、学习、修改和分发。 在描述中,没有提供具体的细节,但我们可以推测这是一个项目,它可能包含了一系列用于建立远程桌面连接的C#类和方法。这个开源项目可能提供了...

    ardinuo 四轴开源代码

    【 ardinuo 四轴开源代码 】是一个专为电子设计大赛初学者打造的开源项目,旨在提供一个学习和借鉴的平台,帮助他们理解和实践四轴飞行器的控制原理及编程技术。arduinuo,可能是Arduino的一个变体或特定版本,是这...

Global site tag (gtag.js) - Google Analytics