- 前言
- 这份文档的目标读者
- 基本条件
- 你需要明确的一些事情
- 预备
- 学习软件开发的几条主要途径
- 为什么借助开源学习是最有效的
- 在学习一门语言之前
- 选择一门语言
- 必须初步掌握的基本功
- MOOC 课程
- 关于开发工具 1. 关于开发工具的分类(by 李路) 1. 各种参考资料
- 版本管理,包管理和语言环境搭建
1. 下载源代码的N种办法
- 关于源代码管理与版本控制
- 寻找早期开源项目的源代码
- SVN、Git、Mercurial快速介绍
- 基于包管理的方式获取源代码 1. 让代码运行起来
- Ruby版
- PHP版
- Java版
- Python版
- JavaScript版
- C/C++版 1. 如何克服可能遇到的困难
- 如何选择开源项目
- 到哪里去寻找开源项目
- 什么样的开源项目适合初学者
- 值得推荐给大家的开源项目
- 各语言的Awesome List 重点讲解:按语言,按难度选择示例讲解
- 理解源代码
- 寻找文档,熟悉功能,先玩一遍,记下功能。
- 静态理解: 1. 目录结构 1. 包名与文件名 1. 类名、函数名与变量名 1. 注释与Readme 1. UML图 1. 外部文档
- 动态理解 1. 输出日志 1. 设置断点与单步跟踪 1. 抛出异常 1. 修改代码,破坏性尝试
- 主线与支线 1. 寻找入口 1. 跟踪关键流程 1. 寻找挂接点
- 外围代码 1. 必须存在的外围功能 1. demo/example 1. 单元测试
- 知其所以然
- 修改开源项目
- 改一个游戏来练手
- 二分查找捉虫记
- 为开源项目做贡献
- 提bug与建议
- 帮助完善文档
- 提交代码(功能代码与测试代码)
- 周边代码(demo/扩展/子项目)
- 外部宣传
- 其他各种杂务
- 成为组织的一员
- 交流圈
- 组织结构
- 开源项目的组织方式
- 基本礼仪
- 自己发起一个开源项目
- 延伸阅读
- 指导开发者快速学习编程的网站推荐
- 贡献者
- 开源问答