« 服务的创建和退出问题 | 返回首页 | 扩展 Lua 的常量类型 »

选择开源项目的几点原则

本周末,阿里集团会在中南大学做校招。我作为校友,被邀请面向应届毕业生做一次技术分享。我想谈谈开源的问题。

由于技术分享的时间很短,我想在现场不太可能展开谈。所以在 blog 上先写一篇相关的子话题:在选择使用开源项目时,我的依据是什么?

我们在开发软件的过程中,总有一些模块的需求是普遍的,除了自己开发,使用一个具备合适的 License 的开源项目也是个不错的选择。

在一个程序员的职业生涯中,总会有那么一个阶段,不太愿意使用别人开发的代码。如果不是受项目进度压力所迫,宁愿自己实现。这并非是因为相信自己总能做得更好,而是希望少受牵制,能够自由发挥。而且,写代码往往比理解代码更简单。整合多块不同团队开发的代码也更难保证项目各个部分的一致性。

如果渡过了这个阶段,不那么执着于自己造轮子,选哪一个轮子必然会接受自己挑剔的眼光。毕竟,按捺了自己实现的冲动,要选也要选个合适的。

从我的角度,首先,我会选择的开源项目首先要是一个活跃的项目,有完整的更新历史。

软件代码,它们不是由一行行代码行构成的,而是在时间轴上,由一次次增删修改构成的。一个时间点上的快照无法帮助我理解软件,更不要谈融入到自己的系统中;任何一个问题,只要有人在关注,它就必然会随着时间演化。真正的用户是软件项目最宝贵的财富。一个几年不再更新的项目,就成了一个死项目(失去了所有的用户)。我们不应该把死项目融入到正在开发中的活项目中。

如果一个项目曾经很活跃,现在已经死了,那说明它的前一任用户已经离开。如果还是想继续用的话,要确认自己有没有精力让它活过来。即使是一个活的项目,你也很可能是除了原作者团队意外同时期唯一的外部用户。新的用户意味着新的需求和新的 bug 。自己必须有能力解决新产生的问题。

其次,要看项目的主导者是否善于沟通。

大部分开源项目都有一个灵魂人物,通常是项目的发起人。他可以脾气不太好,但要能做到讲道理,可以沟通;这个读一下项目的 issues 和 pull request 就能感受的到。如果是一个比较新的项目,还没有很多用户,那么也可以看看同一个人名下的其它项目。试用一段时间,发现 bug ,提几个单,会有更直观的感受。

任何一个基础功能,只要用户够多,需求肯定是千变万化。项目的这个灵魂人物起着分析和调解这些需求的作用。是他的沟通能力,而不是编码能力,决定了项目的演进方向。

最后,再来看一个开源项目专门程度。我个人倾向于解决单一问题的项目,能少做一点事情就少一点。不太希望使用包罗万象的大东西。这会方便我们组装,做取舍。而且一旦用过一段时间后发现不合适,也能回退回去,选择别的方案。


至于项目质量和代码质量,我觉得是个见仁见智的东西,没有什么固定的标准。我可以忍受没有注释、命名不规范、缩进不统一,没有测试案例的代码。接口不断的修改,bug 层出不穷通常也不是什么大问题。因为当选择了和一个开源项目共进退,就意味着不断的跟进,参与进去,一起把它改进的更好。大不了以后再换成另一个类似的模块,或者自己重写。

选择开源项目其实就是选择了和维护项目的人们合作。人才是最重要的因素:应选择 勤奋、开明、专注 的合作伙伴。

ps. 吐槽一下一些国内的所谓开源项目。做了一些声势浩大的宣传之后,扔出了某一个版本的代码快照,然后几年也不更新。最后几次提交,以及合并的 pr ,都是一些无关紧要的 typo 。开源还真不是这样玩的。

Comments

云风大佬就是国内发扬开源精神,热衷开源事业的佼佼者。skynet是我接触最优秀的一个开源项目。

hw这种公司,各个领域到处蔓延,估计中国的开源未来会更加绝望,国内的程序员生存更加艰难。

开源项目,需要有人资助(苹果等公司经常支持开源资助),有兴趣的社区支持。就国内这个环境,不太可能有兴趣社区,即使有,一堆杠精过来就可以搞死。中国人非工作,绝对不能谈技术的。即使是技术QQ群,也不能谈,要是谈技术,那真是奇葩。

国内没有这种工程师文化。现在内卷越来越严重,只需要听话的廉价劳动力。资本横流,工人权益没有保障,工作完成没尊严。这种环境能出好的开源项目,那是很稀少的

国内的不能跟国外的比较的。因为国内的程序员一直生存在温饱线上挣扎。成天加班,如果不是经常失业,不太可能有时间和精力。第二个是软件产业链,国内的软件产业偏低端。低端的已经被欧美占领了。高端的,没机会接触。国内程序员做开源更多是纪念意义。不像云大财务自由了。可以专注做好一个事情。

国内的不能跟国外的比较的。因为国内的程序员一直生存在温饱线上挣扎。成天加班,如果不是经常失业,不太可能有时间和精力。第二个是软件产业链,国内的软件产业偏低端。低端的已经被欧美占领了。高端的,没机会接触。国内程序员做开源更多是纪念意义。不像云大财务自由了。可以专注做好一个事情。

初学者,一点也不想看别人的代码,最多看看注释和循环头,都是逼着自己一点一点去看源码的。

开源软件维护起来真的不易。

> ps. 吐槽一下一些国内的所谓开源项目。做了一些声势浩大的宣传之后,扔出了某一个版本的代码快照,然后几年也不更新。最后几次提交,以及合并的 pr ,都是一些无关紧要的 typo 。开源还真不是这样玩的。

非常认同,这不叫开源,这只是打着开源的名号在挣快钱。

The google filament(https://github.com/google/filament) may be an alternative of the Unity.

非常想知道那个,20年前让云风大哥不爽的时任网管怎么样了,哈哈

所见略同

赞同"个人倾向于解决单一问题的项目,能少做一点事情就少一点"
偏好开发特定的模块(Rendering,Animation,Streaming etc)而不是整个引擎

云风大哥,I Love You.

云风blog从入学中南看到研究生快毕业。因为学的是数据库可能和简悦无缘了,希望未来能向云风这么优秀的技术加管理人才学习,能真正的热爱和认真对待我从事的工作。

个人认为真正的开源只存在于衣食无忧的环境。

最后的吐槽,开篇的那个厂躺枪了吧[吃瓜] 之前翻过OceanBase的repo,就是这个感觉,刚去再看了一眼,干脆整个下掉了,这开源的玩法……

接口不改,一次设计好固然好。但实际上所有项目都无法一次到位,很多时候需要做第二遍才有正确的理解。

这里维护者的品味和经验的确非常重要。

其他都好说,还挺在意接口不断的修改的,作为维护者本不应该让调用者有这方面的负担,而且这和开源与否关系不大,API 设计的品味和能力是挺容易被忽视的技能

Post a comment

非这个主题相关的留言请到:留言本