说实话,在当初列这个提纲的时候,我并没有想好如何写这一节。但是,开放地做事情,就常常会有奇妙的事情发生,佛家称之为“助缘”,各种对这件事情有帮助的缘分,都会在不经意间出现。
一位叫李军的朋友,给我发来邮件,信中写道:“我想是否我们能够通过沟通,然后你在对我有些了解,给我指出点建议,并且是详细的建议,我看学apache开源框架应该不错的 ,不知道我是否适合,谢谢。期待你的回复。”
在与他的往来邮件中,我也真的将这一节渐渐的想清楚了。另外,在与李军的讨论中,我还发现,需要开辟一个专门的章节,讨论:“学习开源项目,能够提升软件开发中的哪些能力。”
在此,我想对李军表示感谢,更希望有越来越多的朋友,参与到这个文档的讨论中来,相信它会变得越来越完善。
明确自己的目的
选择一个开源软件,首先要明确的,是自己的动力何在。是出于兴趣?还是出于工作需要?比如,有人对于搜索引擎特别感兴趣,想了解搜索引擎是怎么做出来的?那么首先可以考虑先寻找一些专业的书籍,来了解一些关键的知识点。如果对于某一领域的知识点,缺乏必要的了解,可能完全无法理解一个项目里的代码。在掌握初步的知识以后,自然可以去找Lucene、Sphinx来学习。
也可能是出于工作需要,比如平时是用PHP开发Web应用,已经在用某一个常见的PHP框架了,希望能够对这个框架有一个深入的学习了解,甚至希望横向的比较多个不同的PHP Web框架,这些都是非常清晰的目的。自然在学习的过程中,不太会迷失方向。
比较危险的一种,是听说某某项目很有名气,甚至是为了将来找工作比较容易,就贸然一头扎进某个项目中去了。这种学习目的,往往会选择到那种很庞大,也很成熟的项目,打开文件夹一看,成百上千的源文件,根本无法看完,一下子就蒙了,再就是颓了。心想自己大概不是学软件开发的料吧。
优先选择能够独立运行的项目
开源的项目有很多种类,能够独立运行的项目,当然很多。但是也有不少项目,是其他开源项目的插件,类库,扩展包之类的东西,这些在一开始接触开源的时候,最好不要涉猎,因为理解他们,可能会需要理解他们背后的那个庞然大物,往往会遭遇很多难解的细节,一不小心,就进行不下去了。
当然,还有一类项目,他们虽然是独立运行,但是想要让他们独立运行成功,还得安装、配置很多其他的依赖项目,这个往往会让初学者特别绝望,搞了一个礼拜,居然这个项目都还没有运行起来。
所以,小的,能够独立运行的,不依赖于太多其他项目的开源项目,可以优先选择。
选择活跃的项目
项目的活跃程度,包括两个部分,一个是开发者提交新代码的频繁程度。另一个是在社区中对于这个项目的讨论热烈程度。提交代码越是活跃,提交的人越多,越能证明这个项目是很有价值的,也证明这个项目是值得你花精力去学习的。而项目在社区讨论的热烈程度,则能够确保当你遇到问题的时候,能够搜索到别人的答案,或者你自己提问以后,能够有人热心回答你。
当然,活跃程度都是相对的,如果你真的对一个项目感兴趣,可以直接试着给这个项目的作者发邮件,提问题。大多数开发者都会很高兴有人关注他的项目,也会通常会热心的回答你的问题的。
判断代码质量
并非所有的开源项目,都是高手写的,都值得你去学习。事实上,有很多垃圾开源项目,代码仔细一看,写得真是一塌糊涂。所以,试着阅读一下这个项目的代码。至于如何判断一个项目的代码质量,之前我在知乎回答过一个类似的问题《如何让自己写的代码易维护? 》。推荐各位朋友参考一下。
当然,更加推荐的,是阅读《Clean Code》一书,非常好的一本介绍如何提交代码质量的书。附一篇书评,可以一读:《写代码犹如写文章 》
选择合适的版本
最后,面对已经发展了多年的开源项目,最好不要选择最新的版本。如果你是在工作中要想使用这个项目,当然应该选择最新的稳定版,甚至测试版、beta版。但是如果是出于学习的目的,为了减少复杂度,快速的理解这个项目的核心结构与开发思想,选择第一个稳定版,是一个比较妥当的办法。
然后,在初步理解了第一个版本的代码之后,再不断的通过阅读changelogs,追踪最新的版本中的代码变更,体会作者修改代码的目的、手法与技巧。这样应该会有很大的收获。
庄表伟,1997年毕业于华东师范大学,现任盛大创新院的高级研究员。在2009年加盟盛大之前,曾担任印客网的技术总监。多年来一直在编程的第一线,并以Coding为最大的乐趣。