你有个任务,需要用到某个开源项目;或者老大交代你一个事情,让你去了解某个东西。怎么下手呢?如何开始呢?我的习惯是这样:
1.首先,查找和阅读该项目的博客和资料,通过google你能找到某个项目大体介绍的博客,快速阅读一下就能对项目的目的、功能、基本使用有个大概的了解。
2.阅读项目的文档,重点关注类似Getting started、Example之类的文档,从中学习如何下载、安装、甚至基本使用该项目所需要的知识。
3.如果该项目有提供现成的example工程,首先尝试按照开始文档的介绍运行example,如果运行顺利,那么恭喜你顺利开了个好头;如果遇到问题,首先尝试在项目的FAQ等文档里查找答案,再次,可以将问题(例如异常信息)当成关键词去搜索,查找相关的解决办法,你遇到了,别人一般也会遇到,热心的朋友会记录下解决的过程;最后,可以将问题提交到项目的邮件列表,请大家帮你看看。在没有成功运行example之前,不要尝试修改example。
4.运行了第一个example之后,尝试根据你的理解和需要修改example,测试高级功能等。
5.在了解基本使用后,需要开始深入的了解该项目。例如项目的配置管理、高级功能以及最佳实践。通常一个运作良好的项目会提供一份从浅到深的用户指南,你并不需要从头到尾阅读这份指南,根据时间和兴趣,特别是你自己任务的需要,重点阅读部分章节并做笔记(推荐evernote)。
6.如果时间允许,尝试从源码构建该项目。通常开源项目都会提供一份构建指南,指导你如何搭建一个用于开发、调试和构建的环境。尝试构建一个版本。
7.如果时间允许并且有兴趣,可以尝试阅读源码:
(1)阅读源码之前,查看该项目是否提供架构和设计文档,阅读这些文档可以了解该项目的大体设计和结构,读源码的时候不会无从下手。
(2)阅读源码之前,一定要能构建并运行该项目,有个直观感受。
(3)阅读源码的第一步是抓主干,尝试理清一次正常运行的代码调用路径,这可以通过debug来观察运行时的变量和行为。修改源码加入日志和打印可以帮助你更好的理解源码。
(4)适当画图来帮助你理解源码,在理清主干后,可以将整个流程画成一张流程图或者标准的UML图,帮助记忆和下一步的阅读。
(5)挑选感兴趣的“枝干”代码来阅读,比如你对网络通讯感兴趣,就阅读网络层的代码,深入到实现细节,如它用了什么库,采用了什么设计模式,为什么这样做等。如果可以,debug细节代码。
(6)阅读源码的时候,重视单元测试,尝试去运行单元测试,基本上一个好的单元测试会将该代码的功能和边界描述清楚。
(7)在熟悉源码后,发现有可以改进的地方,有精力、有意愿可以向该项目的开发者提出改进的意见或者issue,甚至帮他修复和实现,参与该项目的发展。
8.通常在阅读文档和源码之后,你能对该项目有比较深入的了解了,但是该项目所在领域,你可能还想搜索相关的项目和资料,看看有没有其他的更好的项目或者解决方案。在广度和深度之间权衡。
以上是我个人的一些习惯,我自己也并没有完全按照这个来,但是按照这个顺序,基本上能让你比较高效地学习和使用某个开源项目。
分享到:
相关推荐
【标题】"java开源项目源码"所涉及的是Java编程领域的开源项目,这通常意味着它是一个可供学习、研究和自由使用的软件项目。开源项目能够帮助开发者深入理解代码实现,提高编程技能,同时也有助于社区协作和技术创新...
这个开源项目被称为"embbnux-kails",显然受到了Ruby on Rails的启发,Rails是Ruby语言的一个著名框架,以其“约定优于配置”(Convention over Configuration, CoC)和“开发人员快乐原则”(developer happiness)...
通过阅读和修改文档,初学者可以在不干扰主程序代码的情况下,对项目有所贡献,并逐渐熟悉开源项目的运作。 另外,编写单元测试或测试用例也是参与开源项目的一个重要途径。这部分工作对于确保开源软件的质量至关...
1. **开源与免费**:作为一个开源项目,HslCommunication 7.0源代码的开放性为开发者提供了透明的实现细节,便于理解其工作原理,并可以根据实际需求进行定制和扩展。同时,7.0版本被称作最后的免费版本,对于预算...
微信小程序开源项目库汇总是一个非常宝贵的资源集合,它聚焦于JavaScript开发中的微信小程序应用。这个压缩包文件"awesome-github-wechat-weapp-master"显然包含了大量在GitHub上活跃的、由社区贡献的微信小程序项目...
【开源项目-Xeoncross-macappshell.zip】是一个面向Mac OS X操作系统的开源项目,它的主要功能是通过一个简单的bash脚本创建一个`.app`包装器,使得Go语言编译的程序可以在Mac上以标准的Mac应用形式运行。...
开源项目代码是软件开发领域中的一个重要组成部分,它代表了开发者们共享、协作和改进软件的开放精神。在本文中,我们将深入探讨开源项目代码的相关知识点,包括其定义、优势、参与方式、常用平台以及如何有效地利用...
【开源项目-steeve-homebrew-delve.zip】是一个开源项目,其主要目的是为用户提供一个自定义的途径来安装和管理Delve。Delve是Go语言的一款强大的调试工具,它使得Go程序的调试过程变得更加简单和高效。在这个压缩包...
开源项目“micro-micro.zip”是一个专注于微服务架构的工具包,它提供了全面的解决方案来构建、部署和管理分布式系统。这个项目的名称“micro”暗示了它的核心目标——简化微服务开发过程,使得开发者能够更加高效地...
描述中的“不是同一个项目,内涵多种项目”意味着这个压缩包可能集合了多个独立的开源项目,涵盖了不同的领域,如内容管理系统(CMS)、电子商务平台、博客系统、论坛软件、社交网络等。同时,“一目十行---保证头疼...
【开源项目-dotaheor-channelsync.zip】是一个开源项目,其主要目的是提供一个重新实现的频道同步解决方案。开源项目通常意味着源代码是公开的,允许开发者查看、学习、修改和分享代码,促进了技术社区的协作与创新...
【开源项目-xenolf-lego.zip】是一个包含开源软件xenolf/lego v0.1.0的压缩包,这个项目主要用于LE(Let's Encrypt)的自动化证书管理。Let's Encrypt是一个免费、自动化和开放的证书颁发机构,旨在使互联网上的加密...
标题中的“一个开源的网址导航网站项目您可以拿来制作自己的网址导航”揭示了这是一个基于开源代码构建的网址导航网站模板,适合个人或团队自定义打造属于自己的网址导航平台。开源项目通常意味着用户可以自由地查看...
"cznic-bc.zip"是一个开源项目,其中包含的是GNU bc的源代码。GNU bc是一款功能强大的交互式计算器语言,它支持算术运算、逻辑控制、字符串处理等,且完全符合C语言的语法。这个项目的标签是“开源项目”,意味着它...
2. **项目评估**:评估一个项目的活跃度、质量及社区参与度,可参考最后的更新时间、星星数、fork数、Issue和Pull Request的数量。 3. **参与方式**:初学者可以从报告Bug、编写文档开始,逐渐尝试修复代码和提交...
开源项目-ishanjain28-pluto.zip是一个专为高效、快速且可靠地下载大文件而设计的开源工具。该项目名为“Pluto”,它利用多部分下载技术,旨在提供卓越的文件下载体验。Pluto可能是一个用Python或其他编程语言实现的...
开源项目“HDM-NextNet”是一个用于网络分析和枢轴点发现的工具。这个项目的源代码被封装在名为“hdm-nextnet.zip”的压缩包中,其中包含的主要内容是“nextnet-master”目录,这通常意味着解压后你会得到一个项目的...
Android作为一个全球广泛使用的移动操作系统,其开发者社区非常活跃,提供了许多优秀的开源项目。"10个经典的Android开源应用项目(源代码,10个全)"这个资源集合,无疑是学习和提升Android开发技能的宝贵财富。它...