一、历史
开源代码作为一种特色的产物,随着物联网的进步得到了前所未有的发展。一开始,很多代码其实不是开源工程,后来软件的开发商发现根本没法用这些代码来挣钱,所以索性把这些代码发布到网上,让更多的人来进行维护和开发,比如说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上面有visualstudio帮忙,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)到googlecode上面查找具体的代码;
(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/
相关推荐
开源代码的学习方法是软件...总之,学习开源代码是一个系统的过程,涉及选择合适的项目、编译环境的配置、代码阅读和理解,以及与社区的互动。通过实践和积累,开发者可以不断提升自己的技能,同时为开源社区做出贡献。
内容概要:这是关于作者针对自己的代码学习笔记《代码随想录》,进行两年后的全面更新与汇总的一则公告。新的PDF版本整合了所有最新内容,并修复和完善了一系列题目解释。尽管如此,作者仍推荐优先在网站上阅读以...
刷题笔记记录是代码随想录提供的一个功能,用于记录用户在刷题过程中的解题思路和方法。它可以帮助用户更好地理解和掌握题目解法,加深对算法和数据结构的理解。 ## 如何使用刷题笔记记录 使用刷题笔记记录非常...
《代码随想录》是一本深受程序员喜爱的算法学习书籍,其PDF版本为读者提供了方便的电子阅读体验。这本书主要针对准备参加编程面试或者想要提升自己算法能力的开发者,通过实例解析和实战演练,帮助读者深入理解算法...
《代码随想录》是一本深受程序员喜爱的算法学习书籍,尤其对于初学者来说,它提供了深入浅出的讲解和实战演练。这本书的核心是通过实际编程来帮助读者理解和掌握算法,提升编程技能,特别是C++语言的应用。在C++这个...
代码随想录贪心算法知识,非常管用
通过学习《代码随想录》,你可以系统地了解和掌握这些基础知识,为面试和工作中的问题解决做好准备。 书中可能包含以下核心知识点: 1. **基础数据结构**:数组、链表、栈、队列、哈希表、二叉树等。理解这些数据...
「代码随想录」二叉树专题精讲(v2.0)是一套涵盖二叉树基础知识、遍历算法、递归与非递归实现、BST、AVL树等...总的来说,「代码随想录」二叉树专题精讲(v2.0)内容详实,讲解深入浅出,适合各种水平的程序员学习。
《代码随想录》是一本深受程序员喜爱的编程学习资料,尤其在算法领域,它提供了丰富的实例和深入的解析,帮助读者理解并掌握动态规划、回溯、递归、二叉树以及贪心等核心算法。这些算法是解决复杂计算问题的基础工具...
从给定的文件信息来看,「代码随想录」动态规划专题精讲(v1.2).pdf 的内容涉及到编程算法中的动态规划专题的精讲。动态规划(Dynamic Programming,简称DP)是一种在数学、管理科学、计算机科学、经济学和生物信息...
"代码质量随想录"是一系列文档,旨在引导初学者和有经验的开发者优化他们的编码习惯,从而提升代码质量,成为更出色的程序员。以下是对这些文件主题的详细解读: 1. **代码质量随想录(一):可读是王道** 可读性...
本文围绕程序员Carl撰写的《代码随想录》,全面系统地阐述了一系列重要的利用双指针算法解决编程问题的方法,并深入解析了其背后的逻辑与实现细节。涵盖典型题目包括:27号题目移除元素,力扣上排名第15和第18的三数...
《软件随想录》是一本深入探讨软件开发与管理的经典著作,它涵盖了软件工程的多个重要方面,旨在为读者提供对软件行业的深度洞察。作者通过一系列的随笔和思考,揭示了软件开发过程中的关键问题、挑战以及解决之道。...
《软件随想录》是计算机科学领域的一部经典著作,由知名程序员、软件工程专家、敏捷开发倡导者Martin Fowler所著。这本书集合了他对软件开发的深入思考与实践经验,涵盖了软件设计、项目管理、团队协作等多个方面。...
《软件随想录》是许多程序员和IT从业者都推崇的一本书,它深入探讨了软件开发过程中的各种问题,包括团队协作、项目管理、代码质量、技术债务等关键议题。这本书结合作者的经验,提供了许多实用的建议,旨在帮助...
「代码随想录」背包问题专题精讲(v1.0)
他还提到,开源文化对于程序员的成长有着积极的影响,参与开源项目不仅可以学习到最新的技术,还能提升自己的影响力和职业发展。 《软件随想录》还涉及了职业规划和行业动态。作者建议程序员应关注行业趋势,适时...
而“代码随想录”可能是某个编程或者算法学习平台的名称。 综上,我们可以总结出以下IT知识点: 1. 回溯算法概念:一种通过试错寻找所有可能解的算法。 2. 背包问题概念:一类组合优化问题,分为0-1背包、完全背包...
《代码随想录》中的200道题目按照难度和知识点进行了编排,从基础到进阶,逐步提升学习者的编程能力。 3. **数据结构**: 数据结构是解决问题的基础,包括数组、链表、栈、队列、哈希表、树(二叉树、平衡树)、图...