六个开源软件开发的“潜规则”

news/2025/2/9 3:41:12

你想成为开源项目中得意满满、功成名就的那个人吗,那就要遵守下面的“潜规则”。

正如体育界不成文的规定一样,这些规则基本上不会出现在官方文档和正式记录上。比如说,在棒球运动中,从比分领先时不要盗垒,到跑垒员跑了第一时也不要放弃四坏球保送。对于圈外人来讲,这些东西很难懂,甚至觉得没什么意义。但是对于那些想成为 MVP 的队员来说,这些都是理所当然的。

软件开发,特别是开源软件开发中,也有一套不成文的规定。和其它的团队运动一样,这些规定很大程度上决定了开源社区如何看待一名开发者,特别是新加入社区的开发者。

六个开源软件开发的潜规则

按部就班,循序渐进

在参与社区之前,比如开放源代码或者其它什么的,你需要做一些基本工作。对于有眼界的开源贡献者,这意味这你需要理解社区的目标,并学习应该从哪里起步。人人都想贡献源代码,但是只有少量的人做过准备,并且乐意、同时也有能力完成这项艰苦卓绝的工作:测试补丁、复审代码、撰写文档、修正错误。所有的这些不受待见的任务在一个健康的社区中都是必要的。

为什么要在优雅地写代码前做这些呢?这是一种信任,更重要的是,不要只关注自己开发的功能,而是要关注整个社区的动向。

博闻强识,敦善不怠

当你在某个社区中建立起自己的声望,那么很有必要全面了解该项目和代码。不要停留于任务状态上,而是要去钻研项目本身,理解那些超出你擅长范围之外的知识。不要只把自己的理解局限于开发者,这样会让你着眼于让你的代码有更大的影响,而不只是你那一亩三分地。

打个比方,你已经完成了一个网络模块的测试版本。你测试了一下,觉得不错。然后你把它开放到社区,想要更多的人测试。结果发现,当它以特定的方式部署时,有可能会破坏安全设置,还可能导致主存储泄露。如果你将代码视为一个整体时问题就可以迎刃而解,而不是孤立地看待问题。这表明,你要对项目各个部分如何与其他人协作交互有比较深入的理解。让你的补丁填坑而不是挖坑。这样你朝成为社区精英的目标上又前进了一大步。

粗枝大叶,自寻烦恼

代码提交完毕后你的工作还没结束。如果代码被接受,还会有一些关于这些更改的讨论和常见的问答,还要做测试。你要确保你可以准时提交,努力去理解如何在不影响社区其他成员的情况下,改进代码和补丁。

和谐相处,助人助己

开源社区不是自相残杀的丛林世界,我们更看重项目的价值而非个体的贡献和成功。如果你想给自己加分,让自己成为更重要的社区成员、让社区接纳你的代码,那就努力帮助别人。如果你熟悉网络部分,那就去复审网络部分,用你的专业技能让整个代码更加优雅。道理很简单,顶级的审查者经常和顶级的贡献者打交道。你帮助的人越多,你就越有价值。

八面玲珑,面面俱到

作为一个开发者,你很可能希望为开源项目解决一个特定的痛点。或许你想要运行在一个目前还不支持的系统上,抑或你很希望改革社区目前使用的安全技术。想要引进新技术,特别是比较有争议的技术,最好的办法就是让人无法拒绝它。你需要透彻地了解底层代码,考虑每个极端情况。在不影响已实现功能的前提下增加新功能。不仅仅是完成就行,还要在特性的完善上下功夫。

糜不有初,鲜克有终

开源社区也有许多玩玩就算的人,但是承诺了就不要轻易失信。不要就因为提交被拒就离开社区。找出原因,修正错误,然后再试一试。当你开发时候,要和整个代码库保持一致,确保即使项目发生变化而你的补丁仍然可用。不要把你的代码留给别人修复,要自己修复。这样可以在社区形成良好的风气,每个人都自己改。

这些“潜规则”看上去很简单,但是还是有许多开源项目的贡献者并没有遵守。这样做的开发者不仅可以为成功地推动他们自己的项目,而且也有助于开源社区。

作者简介:

Matt Hicks 是 Red Hat 软件工程的副主席,也是 Red Hat 开源合作团队的奠基成员之一。他历时十五年,在软件工程中担任多种职务:开发,运行,架构,管理。




本文作者:佚名
来源:51CTO

http://www.niftyadmin.cn/n/1665941.html

相关文章

C++进阶篇二:C++标准模版库之算法

为什么80%的码农都做不了架构师&#xff1f;>>> 写在<algorithm>头文件之前 在CSTL的头文件<algorithm>中&#xff0c;各式算法函数往往会对支持该算法的最低迭代级别作出要求。任何算法作用的容器或迭代&#xff0c;只有支持的权限等于或高于算法要求…

cookie 与 SSO 的两三事

前言 前面的文章记录了proxy代理后端接口&#xff0c;其实践过程中也不乏踩坑之处。 SSO单点登录 这里有一篇文章写得不错&#xff0c;分析了淘宝、天猫的登录场景(漫谈单点登录)。 COOKIE 关于cookie的知识自己搜&#xff0c;我这就不废话了。关键看请求的response headers &a…

Katalon Studio 自动化测试工具介绍

前言 在软件测试这条道路上&#xff0c;大部分的职业技能发展道路都会是功能测试-> 自动化测试-> 性能测试-> 安全测试/测试开发。 但是却有着一部分人起初进入软件测试这一行看重的就是软件测试属于 IT 行业&#xff0c;门槛比较低&#xff0c;不需要代码基础。这就…

优秀的产品经理,必须翻越这三座大山

作为一个资深产品经理&#xff0c;这几年工作中遇到的挫折和收获&#xff0c;数也数不清。看到用户数的不断增长和好评我会犹如打了鸡血&#xff0c;听到伙伴的质疑和用户的指责我也会在回家地铁上默默掉眼泪&#xff0c;后悔当初的选择。对于新入行的童鞋&#xff0c;我这个老…

《深入理解计算机系统》使用指南

转自&#xff1a;https://book.douban.com/review/5627139/#comments Chapter 1 A Tour of Computer System 一个对计算机系统总体的介绍&#xff0c;简单明了。 应试 ★★★&#xff1a;可能在笔试中会有一些整体上的概念题。 修炼 ★: 属于计算机最基本的概念。 chapter 2 …

Node核心模块Http应用-防盗链

防盗链的原理是通过判断请求源地址的req的headers里面的host和referer进行判断&#xff0c;如果两个相等证明是同一个源下返回正确图片&#xff0c;不相同返回错误图片。 let fs require(fs);let path require(path);let url require(url);let http require(http);let whit…

web 自动化测试,一定得掌握的 8 个核心知识点

使用 cypress 进行端对端测试&#xff0c;和其他的一些框架有一个显著不同的地方&#xff0c;它使用 JavaScript 作为编程语言。传统主流的 selenium 框架是支持多语言的&#xff0c;大多数 QA 会的 python 和 Java 语言都可以编写 selenium 代码&#xff0c;遇到需要编写 js 代…

memset函数使用方法

将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值&#xff0c; 块的大小由第三个参数指定&#xff0c;这个函数通常为新申请的内存做初始化工作&#xff0c; 其返回值为指向S的指针。 需要的头文件在C中 <string.h>在C中 <cstring>更详细的解说…