开源项目的思考

GitHub是我使用的最频繁的网站之一,我有几个属于自己的长期经营的开源项目,在这些项目上工作了很多时间。我也向著名的大型项目提交过pr,有些也成功合并了。我是一个开源爱好者。

早些时候,我喜欢将自己写的代码公开出来出于很简单的理由:我写的程序是我的作品,我想要把这些公开出来以期望得到别人的认可。正如我会撰写博客一样。如果我是一个计算机专业的学生,我肯定会把我的所有作业,课程设计,读书笔记都会以开源的方式分享出去。因为公开,所以这些材料是我要认真面对认真思考的,这有助于防止浑浑噩噩的度过枯燥的日子,也有助于帮助所有其他有志于此的同学。而更因为可以进行版本控制的原因,所以也为知识网络的构建提供了写作的平台。这些公开的资料也同时能够证明我在某一个领域是有所投入和产出的。如果你熟悉web开发,如果你了解机器学习,如果你在精通编译原理,那么通过你有公开的仓库里你自己开发的网站,自己写的算法,自己写的parser,都可以完美的证明和佐证你在这些领域的能力和实际水平。从这个角度而言,开源项目,其实是长期在开发领域自我学习,自我驱动,自我进行投入和产出的平台。

我认识的一些朋友,他们持有这这样的一种观点:只有做的非常完善非常拿得出手的东西才有资格开源,否则就是献丑。开源事业在他们眼中是一种“事业”,是一种非常宏大的东西,和平时的软件开发工作相去甚远。我认为这种观点是狭隘的,因为一方面:我们不能 「因为害怕被批评而拒绝公开作品 」而放弃提升自我的机会。另一方面,开源并不是什么高大上的东西,可以肯定的是,99.99的仓库对于别人而言没有任何价值。99的仓库是彻底的垃圾,但这又如何呢? 一个软件开发者,把自己的代码,share到github上,和一个视觉设计师,把自己的作品,发布到behance上,有什么本质上的区别吗? 反过来,如果一个程序员不关注开源社区,正如一个设计师,从来不去关注优秀作品,有多大可能是一个优秀的设计师呢?

可能你解决了一个小的问题,你也有机会把它公开出来,但是你会觉得这个问题太冷门,别人不大可能用的到,自己的解法也说不上好,完全没有这个开源的必要。但我认为即便是这种情况,也是有价值的。我今年在工作中遇到了不少棘手的问题,在看了一些一些无人问津的代码,问了一些至关重要的问题之后才得以解决。这件事情给我一个感觉是:你公开的代码和信息,事实上是汇入了文明的集体智慧中,这些领域的可以被感兴趣的人检索到。写开源代码正如写博客一样,是件很cool的事情。在互联网的时代,我们不必把所有的心得,领悟,落于纸上,收藏在厚重的笔记中,而是变成可以分享传播的数据。互联网是印刷术般对于历史进程有着革命性影响的东西,这个道理是不言自明的。

去年圣诞节,著名的开源ui,antdesign因为彩蛋翻车了。。 这件事情又让我对开源又了新的认识。就是github不仅仅是behance,这仅仅是他的展示的分享的属性的。但其实最最重要的,是程序,是代码的发布平台。成熟的开源项目,是产品,「是产品,就要对用户负责」。对于产品级别的开源项目,我们要有足够的敬畏,如果用户因为我们的无谓随意,业余和失误,而造成损失,那么这个产品就是失败的。这无关开不开源,只是开源意味着公益,意味着免费,但公益和免费,并不意味着质量低下。很多人认为,开源的软件产品不如商业产品,这个说法不对,应该是,开源产品中好的比例远远低于商业产品。毕竟因为没有利益的保障。但是因为用户群是如此之广,优秀的开源软件,生命力和质量往往无可匹敌。所以理论上,其实成熟的开源产品质量是不错的。antd的问题是,少部分owner并没有质量的意识,这个问题别的开发者也看到了,但项目写的怎么样,准备怎么搞,话语权都是在owener里的,这同时决定了质量。而具体的问题最后也会反过来形成反馈的机制,这和商业软件并无二致。只是这个antd太过出名,自然是轩然大波。

最后我想说的是,我们几乎都是开源软件的受益者,记得要饮水思源。公司的项目主要是在一个著名的开源项目上进行定制的,虽然我们经常吐槽这个库的质量,但当我们发现新的缺陷都会尽快的提出issues和pr,帮助开发者进行解决。我们也会提出设计上的建议。我自己使用的一些库,当缺少了我想要的功能,热心的开发者竟然很快的加入了实现。伟大的软件就是这样建造出来的,能参与其中是件美妙的事情。不过去年,一些来自我国的低素质软件开发者在deno的仓库中随意调侃和发泄,这种事情是很不光彩的。如果你没有资格讲话,就应该闭嘴,如果不能添砖加瓦,就别浪费别人的时间。

都是一些很简单的道理,希望你能和我一样,热爱软件开发,乐于分享,乐于付出和收获,和我一起参与到 构建 自由开放优秀软件的 美好事业中来。