#### 分享和开源精神值得俱备 | 1.什么是开源,为什么要开源? | |:-| 那么你正准备拥抱开源吗?恭喜你,开源世界欣赏你的贡献。接下来让我们聊聊什么是开源,我们为什么要开源。 | 2.“开源”意味着什么?| |:-| 当一个项目开源后,意味着 不论什么目的,所有人都可以浏览,使用,修改和分发你的项目。 开源非常的强大。因为它降低了使用的门槛,使新奇的思想得到快速的传播。 来理解它如何工作,想象下你的朋友正在吃便当,这时你带来了樱桃派。 - 每个人都会想要樱桃派(**使用**) - 这个派引起了一场轰动!周围的人会想知道你的烹饪方法(**浏览**) - 有一位朋友Alex是一名糕点师,他会建议少放一点糖(**修改**) - 另外一位朋友Lisa要求使用它作为下个星期的晚餐(**分发**) 同样的,闭源就像是你去餐厅必须付钱才能吃樱桃派。但是,餐厅不会告诉你樱桃派的烹饪方法。如果你恰好抄袭了他们的派,并以你自己的名义出售,那么餐厅将会采取行动抵制你。 | 3.开源是否意味着免费? | |:-| 开源最吸引之处就是它不用花钱。然而免费只是开源的价值的一个副产品。 因为 开源协议要求开源项目可以被任何人出于几乎任何目的使用,修改和分享,这些项目一般都是免费的。如果有些开源项目需要付费使用,任何人都可以合法地使用其免费版。 #### 开源精神里最重要的,是拿来主义 这和大部分人的想法不一样。开源需要贡献、需要付出,但在贡献和付出之前,首要的是去了解、去使用已经存在的。 比如前端工程师,会经常使用模板,天天用着,会有不爽,就会想着自己去写一个模板引擎。直接去写一个没什么不对,但更好的方式是,先去开源社区搜索下同类产品。看自己的想法,是否已经有人实现了,看自己的想法中,哪些是靠谱的,哪些是不太靠谱的。 注意不要去做「纯调研」,除非你已经是这方面的专家,有过体系化的研究和深入。「纯调研」是指,找到类似的产品,浅尝辄止地跑跑 `demo`,就开始出表格,横向比较优劣。更笨但更有效地做法是,直接去用,比如我们选择了 `Handlebars` ,在项目真正使用过程中,才能深触地感受到 `Handlebars` 的优点及其缺点。有过这么一段深入使用经验后,类似的前端模板引擎,比如 `Mustache`、`Hogan` 等,也有大概清楚个七七八八了。 拿来主义不光能省去开发成本,还能让你扩充见识和想法,而不会成为井底之蛙还茫然自得。 #### 在开源世界里,参与比主导更重要 遵循拿来主义,可以让你更懂得他人。在这过程中,会有欣赏、感谢,也会有抱怨、想法。 前端 `DOM` 操作类库中,很多公司包括支付宝都选择了 `jQuery`。使用过程中,`jQuery` 的一些 `API` 的设计非常赞,一些内部实现也非常漂亮。遇到这些让人欣赏的点时,别忘了将自己的感想写下来。那怕是一篇博文,或是跟朋友闲聊时的只言片语,所有这些,都是参与,都是正能量的传播。社区的赞誉,可以给 `jQuery` 开发团队最大的鼓励。很多坚持,是因为有肯定。 当然,`jQuery` 只要存在一天,就一定存在不足。比如 `data` 的 `API` 变化,比如动画不支持纯 `CSS3` 方式,还有 `Sizzle` 也并非那么完美。所有这些「缺点」,你遇到的 `bug`,你踩过的坑,当你有好的想法或解决方案时,不要忘记反馈给社区。`jQuery` 有详细的反馈渠道,一般成熟的开源社区都会有。比如托管在 GitHub 上的项目,一般都可以通过 `Issues` 给社区提交你的想法,甚至可以通过 `Pull Request` 直接提交你修改过的代码。 参与进去,可以让你更懂得美,懂得感恩之心,懂得回馈之情。这在过程中,你的功力,往往也会大增。不光是技术上的进步,还包括英语读写能力。在人性沟通上,你也会收获很多,这是无价的财富。 拿来主义是开源的第一步,参与则是开源中最漫长的一步。开发自己主导的项目不是必须的,除非你真的有很好的想法,同时刚好有旺盛的精力,否则不要轻易开始,那不代表什么,往往什么也不是。比如 `Sea.js`,如果 `RequireJS` 当初能接受我的建议,或者 `FlyScript` 的作者不退隐江湖,那么就不会有 `Sea.js`。让一些事情自然地发生,让豆瓣从土壤中发芽。更多地去享受参与,保持简单与自然。 #### 开源的是社区,代码仅是很小的一部分 虽然代码很重要,但在开源项目里,源码只是重要的因素之一。 除了代码,还有文档、测试用例、`Issues` 管理、版本发布、升级策略、书籍、视频等等。`jQuery`、`Backbone`、`AngularJS` 等成熟项目,成熟的是社区,而不是源码。好的社区,是在 `Google` 中一搜索,就能找到不少资料。好的社区,是你踩过的坑,经常已经有人也踩过并整理分享出来了。 社区的形成很难,需要核心团队澎湃持久的激情,还需要天时、地利、人和。`jQuery` 已经形成庞大的社区,但其兄弟 `YUI3` 的社区,一直不是很成气候。两三年前,我想找 `YUI3` 的总体设计文档,以及部分组件的设计文档,搜索了很多很多地方,最后给原作者发信,依旧都未能找到我想要的资料。但 `jQuery`,基本每个细节,都能比较轻松地就找到相关资料和讨论。 没有社区的开源项目,其源码会一直停留在「孤芳自赏」阶段。几年前的 `KISSY`,还有百度的 `Tangram`,个人觉得都停留在初始阶段,发展很难。有社区的开源项目,其源码会活起来,会自我不断进化升华。我参与过的一个典型项目是 `Backbone`,倘若你现在再回过头去看 `Backbone` 最初提交的代码,与现在的相比,真心会觉得有点挫了。最让人不可思议的是,`Backbone` 最初很挫的代码,在社区的参与下,在不断的讨论和 `Pull Request` 中,现在已经演化成非常高质量的代码,甚至每一小段代码里,都能说出一个故事来。我现在依旧非常关注 `Backbone` 的每一次代码变化,特别是自己修改过的部分。从其他人的修改中,能收获很多很多。 `Backbone` 的例子,也展示了一个更好的开源方式:有了好的想法,就分享出来,最初的代码展现基本的思路就好,然后通过社区的参与,不断往前演化,让大家都成为开发者,群体的力量远大于个体。个人英雄式的开源方式,已经过时了,就像 `sourceforge.net` 一样。加入我的开源社区,也给自己一个分享开源和拿来开源的机会。 最后,知易行难。上面的道理或许大家都懂,真要做到,则是一场修行。`MJ` 和 `LN` 也才刚刚上路,旅途中,有杭州西湖惬意的微风,也有萨哈沙漠般的烈日当头。好在,选择了,就不怕远。 #### 在分享和开源嘉年华中切莫走入误区 我曾在简书上看过一篇文章,意思如果写文章只盯着阅读量和打赏,就会慢慢的开始焦虑,渐渐地失去写作的兴趣。我同意他的观点。 我们学习总结,分享和开源自己的技术类作品,也不是为了阅读量,但是有时又难免为阅读量所累,毕竟文章就是分享给人看的,如果写了一个东西,来来回回没人看,心里也难免有点失落。但是如果有人看,有人留下评论,有个时候就会萌生 大家都挺关注这个事情的,明天再写一篇更加详细的分享给大家。 而且阅读量这个东西在保证准确的前提下,是一个文章(作品)质量的硬指标,读者也难免将阅读量和文章质量联系在一起。就像在 `GitHub` 上找框架关注 `Star` 数一样,读者在找一个知识的时候,同一个关键词搜出来的结果,一个有 `十万+` 的阅读量,一个阅读量只有 `十来个`,你会优先选择打开哪一个? 我想说的是,开源是一种精神,分享是一种美德。千里马和伯乐都是有的。有实力有风格的牛人也是有的。猴子尚且有分享和团协精神,你为什么 不行动起来「为何甘心败于拖延症」。不做「大牛」,做只「猴子」也不错。 #### 程序猿的独白 |是谁改变了世界?| |:-| 每个国家,人们最终尊敬的,必定是那些真正创造财富的人,而不是那些空言大话的人。程序员不但创造财富,而且努力提高创造财富的效率。所以,作为一个程序员,应该感到自信和自豪。 |我有一个梦想| |:-| - 码农呆子、怪人也有资格获得总统奖章、国会金质奖章以及其他能够承认他们贡献的高等级的奖项。 - 我是一个程序员,我和其他程序员是朋友,不是敌人。我不在别人面前贬低程序员。 - 程序员是聪明勇敢的,而且我们也很风趣。“内向不是我们的DNA,所以我们并不是生来就内向,我可以调整我的态度和社交能力”。 ######## 说明 该内容部分整理摘录于大神的Issues中的一个topic【什么是开源精神 #167】https://github.com/lifesinger/blog/issues/167 、[GitHub开源项目贡献指南中文版](https://github.com/CustomPBWaters/OfficialTranslation-SourceAnnotation/tree/master/github%20开源贡献指南中文版本)