选择开源项目的几点原则
本周末,阿里集团会在中南大学做校招。我作为校友,被邀请面向应届毕业生做一次技术分享。我想谈谈开源的问题。
由于技术分享的时间很短,我想在现场不太可能展开谈。所以在 blog 上先写一篇相关的子话题:在选择使用开源项目时,我的依据是什么?
我们在开发软件的过程中,总有一些模块的需求是普遍的,除了自己开发,使用一个具备合适的 License 的开源项目也是个不错的选择。
在一个程序员的职业生涯中,总会有那么一个阶段,不太愿意使用别人开发的代码。如果不是受项目进度压力所迫,宁愿自己实现。这并非是因为相信自己总能做得更好,而是希望少受牵制,能够自由发挥。而且,写代码往往比理解代码更简单。整合多块不同团队开发的代码也更难保证项目各个部分的一致性。
如果渡过了这个阶段,不那么执着于自己造轮子,选哪一个轮子必然会接受自己挑剔的眼光。毕竟,按捺了自己实现的冲动,要选也要选个合适的。
从我的角度,首先,我会选择的开源项目首先要是一个活跃的项目,有完整的更新历史。
软件代码,它们不是由一行行代码行构成的,而是在时间轴上,由一次次增删修改构成的。一个时间点上的快照无法帮助我理解软件,更不要谈融入到自己的系统中;任何一个问题,只要有人在关注,它就必然会随着时间演化。真正的用户是软件项目最宝贵的财富。一个几年不再更新的项目,就成了一个死项目(失去了所有的用户)。我们不应该把死项目融入到正在开发中的活项目中。
如果一个项目曾经很活跃,现在已经死了,那说明它的前一任用户已经离开。如果还是想继续用的话,要确认自己有没有精力让它活过来。即使是一个活的项目,你也很可能是除了原作者团队意外同时期唯一的外部用户。新的用户意味着新的需求和新的 bug 。自己必须有能力解决新产生的问题。
其次,要看项目的主导者是否善于沟通。
大部分开源项目都有一个灵魂人物,通常是项目的发起人。他可以脾气不太好,但要能做到讲道理,可以沟通;这个读一下项目的 issues 和 pull request 就能感受的到。如果是一个比较新的项目,还没有很多用户,那么也可以看看同一个人名下的其它项目。试用一段时间,发现 bug ,提几个单,会有更直观的感受。
任何一个基础功能,只要用户够多,需求肯定是千变万化。项目的这个灵魂人物起着分析和调解这些需求的作用。是他的沟通能力,而不是编码能力,决定了项目的演进方向。
最后,再来看一个开源项目专门程度。我个人倾向于解决单一问题的项目,能少做一点事情就少一点。不太希望使用包罗万象的大东西。这会方便我们组装,做取舍。而且一旦用过一段时间后发现不合适,也能回退回去,选择别的方案。
至于项目质量和代码质量,我觉得是个见仁见智的东西,没有什么固定的标准。我可以忍受没有注释、命名不规范、缩进不统一,没有测试案例的代码。接口不断的修改,bug 层出不穷通常也不是什么大问题。因为当选择了和一个开源项目共进退,就意味着不断的跟进,参与进去,一起把它改进的更好。大不了以后再换成另一个类似的模块,或者自己重写。
选择开源项目其实就是选择了和维护项目的人们合作。人才是最重要的因素:应选择 勤奋、开明、专注 的合作伙伴。
ps. 吐槽一下一些国内的所谓开源项目。做了一些声势浩大的宣传之后,扔出了某一个版本的代码快照,然后几年也不更新。最后几次提交,以及合并的 pr ,都是一些无关紧要的 typo 。开源还真不是这样玩的。
建议继续学习:
- 15个最好的免费开源电子商务平台 (阅读:10976)
- 介绍几个QQ开源项目及协议下载 (阅读:8861)
- 晒晒我们的开源项目 (阅读:4380)
- 我对开源的看法 (阅读:3785)
- 谁说开源不能赚钱? (阅读:3687)
- 如何选择开源许可证? (阅读:3634)
- 为什么GPL是更好的开源许可证? (阅读:3063)
- 三款面向 Amazon S3 的开源文件同步工具之对比 (阅读:3059)
- 开源在线编辑器推荐 (阅读:2868)
- 五大开源许可协议 (阅读:1803)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:云风 来源: 云风的 BLOG
- 标签: 开源
- 发布时间:2021-05-26 22:57:06
- [67] Go Reflect 性能
- [67] Oracle MTS模式下 进程地址与会话信
- [67] 如何拿下简短的域名
- [61] IOS安全–浅谈关于IOS加固的几种方法
- [60] 图书馆的世界纪录
- [59] android 开发入门
- [59] 【社会化设计】自我(self)部分――欢迎区
- [56] 视觉调整-设计师 vs. 逻辑
- [49] 给自己的字体课(一)——英文字体基础
- [47] 界面设计速成