每个人都想要,不少人都在试,但是创造它的过程,说起来却都是泪。我说的是自由软件,又叫开源软件(译者注:本文重点不是辨析自由软件和开源软件的概念,作者如此说,姑且认为两者是一回事)。今天我要用十条行之有效的法则,来谈谈我三十年的写代码经验。
-
先有人,后有代码
这是一条黄金定律,Isabel Drost-Fromm教我的。致力于社区建设,而不是软件本身。没有社区,你的代码解决的可能是错误的问题。这些代码会被废弃、忽略,最终消亡。先吸引人才,再给他们协作的空间。给他们有挑战的工作。不要自己写代码。
-
采用强制开源的许可证
强制开源(share-alike)的许可证是开源软件的保险带。别夸口说你不需要,总有一天你会被打脸,遍体鳞伤。不要被打脸,使用强制开源的许可证。如果GPL/LGPL对你来说政治意味太浓,那么用MPLv2。
-
别指望达成共识
做决定前寻求共识,就好像指望能找到理想的人生伴侣一样。有点不切实际。Github抛弃了共识,他们设计了fork/pull-request流程,所以2015年你已经没什么借口了。你接受补丁就可以了,就像维基百科会接受增补。先合并代码,再修复问题,最后再讨论。把所有开发工作都放在主分支上。不要让用户等。这样做你才能得到事实上的共识。
-
先问题后方案
让你自己和你队友们关注问题,而不是功能。每个补丁都必须解决一个实在的问题。欢迎实验性代码,欢迎异想天开的创意。但不要让这些东西过度膨胀。收集好的方案,抛弃坏的。允许失败,各个层面上的失败。这是成长的必经之路。
-
先定义后实现
积极地为API和协议的定义写文档并进行测试。用持续集成来测试公开的API和协议。代码覆盖率不重要,代码文档也不重要。重要的是,定义好的东西代码要去实现,并且实现得要好。
-
内部挖潜
让贡献者(contributor)成为维护者(maintainer),让维护者成为负责人(owner)。平稳地、放松地做这件事,别害怕。保留权力把表现糟糕的人踢出去。鼓励人们创立他们自己的项目,尤其是基于已有的项目开发的新项目,或者与已有项目构成竞争关系的项目。日常表现不好的人,卸下他们的权力。
-
写下规则
你有了自己的规则,就要写下来,这样大家才能知道。实际上都不用写了,借用我们为ZeroMQ设计的C4.1规则就行,如果你愿意,也可以简化这些规则。
-
公平地执行规则
你的权力应该用来执行规则,而不是威逼别人认同项目的愿景。最重要的是,你自己要遵守规则。有这么一小撮维护者,会仅仅因为他们不喜欢一个补丁而枪毙它,而你如果自己不遵守规则,就会助长这类小团体,没什么比这更糟糕了。好吧,这么说有点夸张,更糟糕的事情多着呢。但是这类小团体会对项目造成危害。
-
细分项目
力争建立一群小型、独立、自组织、互相竞争的小项目。不要搞大项目。这里说的“大项目”是指,有两到三个核心开发者的项目。不要用submodules(译者注:git的命令,用于指定外部项目的依赖性)之类的来指定依赖性。让别人自己选择想要集成的项目。这是基本的法则。
-
保持快乐的氛围
也许你注意到,我并没有提及“创新”。如果要提,创新可能会排在11或12位。无论如何,你要为社区营造正向快乐的氛围。不要说某个问题愚蠢,不要说某个人愚蠢。社区总有一些人表现糟糕,即使规则很清楚也要违反。除了这些人,其他所有人都值得我们珍惜,我们应该像远道来访的客人一样对待他们。
本文是pieterh在其博客上发表的《Ten Rules for Open Source Success》一文的翻译,经作者许可分享至InfoQ中文站。
感谢郭蕾对本文的审校。
分享到:
相关推荐
以下是他成功的四个黄金法则,对于程序员来说具有重要的借鉴意义: 1. **将软件视为一个理想化的工具**:盖茨坚信软件在未来将发挥关键作用,这一观点构成了微软公司的基础。他相信软件具有无限可能性,可以解决...
开源项目的成功很大程度上依赖于社区的活跃度。Numbrella可能会有一个论坛或GitHub仓库,供用户报告问题、提交改进建议或直接贡献代码。社区成员可以通过提供建议、翻译文档、编写插件等方式参与进来。 七、文档与...
首先,"成功万有定律"可能暗示了一个普适性的原则,即不论是在编程、系统设计、项目管理还是数据分析等领域,都存在着一套可遵循的法则。这些法则可能包括:深入理解基础知识,如计算机科学原理、数据结构和算法;...
在技术实现层面,作者介绍了如何在Android平台上利用NDK(Native Development Kit)和OpenCV(开源计算机视觉库)进行开发。NDK允许开发者用C/C++编写性能敏感的部分,而OpenCV则提供了丰富的图像处理函数库,方便...
本文主要探讨了从GitHub到长尾理论的应用,通过对GitHub上的用户数据进行分析,揭示了这个开源社区的特性和发展趋势。GitHub作为一个最初以代码托管为主的平台,随着时间的推移,逐渐演变成一个软件从业者交流、学习...
成功的法则!创业的技巧!奋进的环境! 更重要的是你可以找到与你志趣相同的网友!一起探讨奋斗的目标! 加入我们的队伍吧!让我们一起加油,为了自己远大理想而奋斗 欢迎进入人脉圈的家园 人脉网 ...
1. **种子法则**:就像苹果树的种子并非都能生长一样,在IT领域,我们尝试的每一个项目、学习的每项技能,都可能遇到挫折。成功往往需要多次尝试和失败,只有那些坚持下去的人,才能最终收获果实。在编程、软件开发...
贝泰妮旗下品牌薇诺娜在2019年皮肤学级护肤品市场中的市占率位居首位,且连续四年双十一期间销售额进入前十,显示出品牌在敏感肌肤护理方面的强大竞争力和品牌影响力。敏感肌肤护理作为一个增速高、渗透率低、市场...
2. STAR法则和FAB法则用于清晰、有力地描述经验和技能。 3. 项目经历应注重成果和贡献,技能描述要具体且真实。 4. 排版整洁,避免错别字和格式混乱。 5. 其他建议如保持简历简洁,使用专业工具优化排版。 三、常见...
在大数据处理领域,Hadoop作为一个开源的云计算平台,扮演着至关重要的角色。它基于分布式计算模型MapReduce,能够高效地处理海量数据。Hadoop的作业调度算法是其核心组件之一,负责合理分配和调度用户的任务,以...
QuorumNRW是一种用于分布式系统中的数据一致性协议,其中N表示数据复制的数量,R表示读取操作需要成功返回的数据副本数量,W表示写入操作需要成功的数据副本数量。通过调整这些参数,可以平衡系统的一致性和可用性。...
张三在汽车品牌4S店保养管理系统项目中,展示了他在技术架构、产品评审、技术策略实施以及模块开发上的作用,最终帮助项目成功完成并产生了实际效益。 5. **教育背景**: - 通常需要列出学位、专业以及毕业院校,...
总的来说,虽然“感人的亲情人生感悟”与IT知识表面看似不相关,但其核心理念——尊重个体差异、吸引共鸣、勇敢面对挑战,实际上都是IT行业成功的关键因素。将这些感悟融入到IT实践中,可以使我们的职业生涯更加充实...
你可以通过阅读专业书籍、参加线上课程、加入技术社区,甚至参与开源项目,来提升自己的技能。同时,建立一个强大的人脉网络,可以为你提供更多的机会和资源。 总的来说,面对就业面试,你需要具备扎实的技术基础,...
5. **把握机会**:"不做就永远不会有机会",在IT行业,勇于尝试新事物,如接手挑战性项目,参与开源社区,都是抓住机会的表现。 6. **行动胜于等待**:停滞不前是最遗憾的。在IT领域,这启示我们,不论是学习新技能...
建议用STAR法则(Situation, Task, Action, Result)组织语言,清晰表述自己的经验和成果。 - 简历编写:简历应真实反映个人经历,尤其是项目经验部分,应详尽描述个人贡献及成果,以便面试官深入了解。同时,避免...
这份资料经过多次更新,旨在提供一个简洁版的JavaGuide,由SnailClimb整理并来源于其开源项目。内容包括Java核心、Web开发、项目实践等多个方面,适合面试前的突击学习。 面试准备是一个关键环节,不仅需要了解自己...
经营的目的是效益,关注的是如何开源;管理的目的是效率,关注的是如何节流。经营需要激情和创新,以打破规则;而管理需要理性,以维护规则。经营的价值体现在战略制定和商业模式创新上;管理的价值则体现在战略执行...
例如,对于一个20阶线性方程组的求解,使用Cramer法则需要进行大量乘除运算,而采用Gauss消去法则所需运算次数大幅减少。在教学过程中引入这类成功的计算方法应用实例,如我国古代数学家秦九韶的成就,可以激发学生...
他还提出了企业成功的关键法则,并警告说,对于许多人来说,这个世界并不像看起来那么平坦,因为并非所有人都能平等受益于全球化。 总的来说,《世界是平的》是一部深入探讨全球化影响的著作,对于CEO和管理者而言...