开源维护者Lawso:最让人火大的是哪类人?

简介: 在物理世界,路与桥等基础设施的建设,人们都非常重视。可是,在数字世界呢?那些维护数字基础设施运转的开源项目维护者们,他们的喜怒哀乐,你重视过吗?最最让他们火大的是哪类人,你了解吗?

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud


在物理世界,路与桥等基础设施的建设,人们都非常重视。在思想观念上,比如说“要想富,先修路”,已深入人心。在资金保障上,人们也毫不吝啬,比如说,亚投行的建立、“一带一路”战略的确立,都是把基础设施的重视,提升到非常显赫的高度。

可是,在数字世界呢?

6821196772f69cb8d4ac4aa91185d5e531b981bc

支撑整个数字世界“纵横捭阖”的各类“基础设施”——软件,特别是占据大半壁江山的开源软件,比如,大到你常用的Linux、Android,中到大数据常玩的Hadoop、Spark、HBase,小到Accumulo、ACE、Bahir、Bigtop、Coveralls、Travis、Sauce Labs、Kafka、Knox、Lens、Libcloud、Logging、ZooKeeper等等,数以万计的、你可能都叫不上名字的开源软件,是它们,正以“润物细无声”地方式,让你每天可以愉快地“玩耍”着手机,浏览着新闻、刷着朋友圈、逛着淘宝网……,这些数字基础设施的背后劳作,你曾经重视过吗?


天上不会无缘无故地“掉下来个林妹妹”!那么,又是谁,在背后默默无闻地维系着这些数字基础设施的运转呢?

当然是那些“意气风发”、“技高八斗”、“乐于助人”的开源项目参与者:Contributor(对开源项目提交过部分有用代码的贡献者)和Committer(对开源项目核心模块和系统架构开发有较大代码贡献的技术大咖)。

但“意气风发”、“技高八斗”、“乐于助人”等,这些都是光鲜的表象。作为社会人,这些开源项目维护者,他们和普通人,一样有七情六欲、一样有喜怒哀乐,一样有五味杂陈!


Nolan Lawson,就是这样的人!

他是微软的资深员工,空闲时维护几个开源项目(前后大致有7年光景),还打理着自己的个人网站。近日,他在自己的个人网站,吐槽了自己在维护开源项目时的“酸甜苦辣”。

一把辛酸泪,谁解其中味啊?

每次登录GitHub时,Nolan总能看到一大堆令人头大的、数以百计的维护通知(notifications),等待自己处理,此情此景,都好似有一万匹草泥马,在胸中奔腾。


善良如你,Nolan也想提供帮忙,可是白天上了一天班,已经累得像狗一样好不好,晚上回到家,心有余而力不足啊。好不容易熬到周末,本想和自己的狐朋狗友,去郊外踏踏青、吹吹牛,扯扯淡,享受一下生活,可眼下费时费力的忙,到底帮还是不帮?内心好纠结。

这,就是一个开源项目维护者,时常面临的尴尬!


在维护开源软件时,Nolan还会遇到各位形形色色的人群,具体说来如下几类:

第一类人,他们用你的项目,可能由于某些API(应用程序接口)语焉不详,他们比较困惑,于是来GitHub询问。可令人恼火的是,他们贴出来的代码,连个规整的格式都没有。有没有“同志”有这样的同感:别人写的代码,是天下最难懂的“阅读理解”!特别是没有注释的情况下!

还有就是,可能是由于语言沟通的问题,导致很多问题的描述,理解起来异常困难。

How are you(怎么是你)?How old are you(怎么老是你)?

e5bf088e7b4755fa119d3a36a86536995684e4fe

一番折腾,你可能还是不懂对方的问题是什么?无奈的你,只能甩给他某个文档或某个教程给他,或者建议他去Stack Overflow和 Slack去试一试。

第二类人,他们在提问时,已经是怒气冲冲了。他们会说,你丫咋还不回复他的问题。由于你提供的API有问题,已经浪费他生命中宝贵的两个小时了!

最最让人火大的就是TM这种人!这时的你,唯一能脱口而出的话就是:你大爷的,老子上辈子欠你钱,是伐?

然而,对这种人,你不必浪费时间,要压下怒火,然后礼貌但绝不想再次搭理的回复:“这是一个开源项目,由自愿者维护,如果代码有问题,请提交一个可验证的测试用例或提交一个PR(Pull Request)。


小编注:在这里,简单解释一下,“Pull Request”直译就是“拉回请求”,即如果你想向某个开源代码库RepoA贡献代码,首先你要请求将RepoA克隆一份,开辟(fork)一个新的分支RepoB,然后在RepoB上修正你认为有问题的代码,然后提交给GitHub平台。如果原始代码库管理者A,认为你修改的代码是有价值的,就会审核通过,然后将分支代码RepoB,重新“拉回”到主干RepoA上去(即合并你的代码,作为主干代码),在了解这个流程后,将“Pull Request”翻译成“请求代码合并”是不是更合理呢?当然,在知乎上,也有大神将其翻译为“老司机,带带我!”,是不是也很传神呢?你的翻译是啥,不妨也说说呗!


言归正传,维护开源项目时,还会遇到第三类人。他们在使用开源项目时,可能会遇到一个非常常见的错误。其实,只需翻翻文档中的常见问答(Q&A),或查看一下以往的邮件列表,或花几分钟时间谷歌一下,度娘一下,一切都能轻易搞定。可他们偏偏任性不这样,宁愿做一个廉价的“伸手党”!问你,问你,不停地问你!问你妹啊!

相比于“伸手党”,第四类人就要好很多,他们就是普通的代码贡献者(contributor)。他们呢,小有名气,犹如大侠,技艺高超,侠肝义胆,常常出没于在各种论坛之中。有时,他们会就某个只有内行才懂的议题,发起一个PR,并对其中的某个问题进行修复,然而由于这个议题过于复杂,以至于在他们的PR中,不得不用很大的篇幅来解释他们的所作所为。

当你有点“稀里糊涂”地认可这个PR之后,并回复LGTM(Look Good To Me),然后将其合并到主代码库。

b9193f423ea5dc0655181204e4ede2b5ad9a7d48

但是,问题来了!

当你没有充分评估某个PR,而将其合并到代码主库,最终会带来很多不可预见的新问题。比如说,虽然测试用例通过,但项目的整体性能却降低了10个数量级,这时你会抓狂的。再比如说,一旦合并某个PR后,也会对老用户造成无尽的困扰。因为更新版的API发生了变化,老用户依据这个开源项目解决问题的工作流程,可能也会发生变化。这种持续不断地变化,会让老用户的体验非常不好!


还有一类人,也属于代码贡献者(Contributor),他们发现了项目中一个新的缺陷(bug),并做了修复。但实际上,这个bug其实你是知道的,它存在于该项目的某个子项目之中,然后当你告知他们,希望他们能在子项目里去PR修复这个问题时,他们时常会“一骑红尘”,再也不搭理你。

现在,在GitHub中,你看出了Contributor和Committer二者的区别了吧:Contributor是对开源项目做出过贡献的人,他们有技术,有激情,但大多数Contributor的激情,常常会在一两次贡献之后,就“一泻千里”。而Committer则不同,他们是Contributor的升级版,有技术,也有激情,最重要的是,他们激情长青,会持续不断地输出贡献

……

还有一类人,他们一开始就兴致勃勃的开启一个PR,但实际上,他们修正的问题,其实早已有其它维护者完美解决了,但他们现在还一片闹腾,也是醉了!


还有一些人,他们的抱怨,的确是可以理解的。

你是知道的,由于开源项目维护者的精力,实在有限,有些问题,有可能几个月过去了,都还没有来得及去处理,所以他们的抱怨是:“3个月前,我咨询你的问题,现在我自己搞定了。其实,解决的方案其实很简单,那就是——哥不再用你的项目了。你的项目,俺用不起,还躲不起吗?”

哇,哇,哇,一腔老血,夺口喷出……

此外,还有很多形形色色的开源项目使用者,他们的问题、他们的抱怨,他们的PR,源源不断地来,解决一批,来一批,“此恨绵绵无绝期”。

这种场景常常令人非常沮丧,每次在维护一边开源项目后,Lawson感觉“整个人都被掏空”了。在诸如GitHub这样的开源平台上,存在这样一个悖论,那就是:越成功,越受罚!

这是因为,如果你的开源项目越成功,别人关注、使用并反馈的问题,也就越多,你为此就会遭受“惩罚”——付出更多的时间、更大的精力,来维护这个项目!


如果简单粗暴地不搭理这些问题吧,Lawson就会感到有很强的负罪感:可能自己的举手之劳,就对别人有很大帮助呢?可自己再怎么“举手”,也只有两只啊?数以百计的问题,扑面而来,如果都是春风细雨般的处理,等不到“夏天”,自己的人生就可能“挂掉”。

但如果总是由“负罪感”驱动来完成某件事,你觉得自己的人生,还会洒满阳光吗?


到后来,Lawson开发了两种策略,简单说来,就是:

1)自卫,展开说就是“自我防卫”。不看(或者说不敢看)GitHub上的维护通知,而是通过邮件过滤、分类处理大部分通知,做到离线(offline)维护,一切等到有空再说。这是因为,在上班时间,你还要为老板每天给你发的薪水负责。在空闲时间,你还有媳妇要陪!

然后,尽量吸引更多的贡献者(Contributor)参与其中,经过考核后,然后将部分Contributor提升为Committer。你知道吗?日理万机,其实是个贬义词,那说明你笨,不懂得管理!

2)自慰,展开来说就是“自我安慰”。天下没有白做的工。做了开源项目,自己不也受益匪浅嘛?首先来说,自己积累了不少社区声望,由此,还登上大会上作报告,并在推特(Twitter)上,有数以万计的粉丝,一呼百应。到后来,由于有了开源项目的经验,还在微软找到了工作,这一切,不都是拜开源所赐吗?

嗯,其实吧,做开源,也挺好!


黑夜中,点燃了一支烟,深深地吸了一口,然后缓缓吐出,吹烟袅袅升起……

Lawson并不知道,维护开源,自卫和自慰,到底哪一个先来?

 


本文由北邮@爱可可-爱生活 老师推荐,阿里云云栖社区组织翻译。

 

文章原标题《What it feels like to be an open-source maintainer》,作者:Rachel Thomas,译者:张玉宏(著有《品味大数据》一书),审校:我是主题曲哥哥。

 

相关文章
|
测试技术
用navigator.sendBeacon完成网页埋点异步请求记录用户行为,当网页关闭的时候,依然后完美完成接口请求,不会因为浏览器关闭了被中断请求。
用navigator.sendBeacon完成网页埋点异步请求记录用户行为,当网页关闭的时候,依然后完美完成接口请求,不会因为浏览器关闭了被中断请求。
|
存储 前端开发 UED
08.HarmonyOS Next响应式布局秘籍:掌握Flex换行与对齐技术
在当今多设备、多屏幕尺寸的应用环境中,响应式布局已成为前端开发的核心技能。HarmonyOS Next作为面向全场景的操作系统,其UI框架提供了强大的响应式布局能力,使应用能够在手机、平板、智能手表等不同设备上呈现最佳效果。
494 2
|
NoSQL 编译器 API
关于thread使用的错误:pure virtual method called terminate called without an active exception
关于thread使用的错误:pure virtual method called terminate called without an active exception
671 1
|
10月前
|
人工智能 算法 安全
王耀恒:GEO技术培训是“授人以渔”而不是“授人以鱼”
在AI技术飞速迭代的今天,GEO培训讲师王耀恒坚持“授人以渔”,通过培养认知、构建与进化三重自主性,赋能学员掌握应对变革的元能力。他拒绝快餐式技巧传授,倡导深入原理、自主设计与持续进化,捍卫人在技术洪流中的主体性与创造力,重塑技术教育的人文价值。(239字)
|
存储 JSON 自然语言处理
数据标注工具 doccano | 命名实体识别(Named Entity Recognition,简称NER)
标注数据保存在同一个文本文件中,每条样例占一行且存储为json格式,其包含以下字段 • id: 样本在数据集中的唯一标识ID。 • text: 原始文本数据。 • entities: 数据中包含的Span标签,每个Span标签包含四个字段: • id: Span在数据集中的唯一标识ID。 • start_offset: Span的起始token在文本中的下标。 • end_offset: Span的结束token在文本中下标的下一个位置。 • label: Span类型。 • relations: 数据中包含的Relation标签,每个Relation标签包含四个字段: • id: (Span
1275 0
|
人工智能 自然语言处理 JavaScript
Agent-E:基于 AutoGen 代理框架构建的 AI 浏览器自动化系统
Agent-E 是一个基于 AutoGen 代理框架构建的智能自动化系统,专注于浏览器内的自动化操作。它能够执行多种复杂任务,如填写表单、搜索和排序电商产品、定位网页内容等,从而提高在线效率,减少重复劳动。本文将详细介绍 Agent-E 的功能、技术原理以及如何运行该系统。
1660 5
Agent-E:基于 AutoGen 代理框架构建的 AI 浏览器自动化系统
|
设计模式 前端开发 JavaScript
前端必须掌握的设计模式——装饰器模式
装饰器模式是一种结构型设计模式,通过创建新类来包装原始对象,实现在不修改原有结构的前提下扩展新行为。其核心在于“组合”思想,使新功能可“即插即拔”。该模式具有解耦性、灵活性和动态性等特点,广泛应用于类的面向对象编程语言中,如JavaScript的注解和TypeScript的写法。示例中,通过装饰器模式为游戏角色动态添加装备,展示了其强大的扩展性和灵活性。
569 16
|
机器学习/深度学习 人工智能 Java
谈谈AI时代到来以及35岁危机双重压力下,作为一个普通开发者的想法
在AI快速发展的背景下,Java后端开发人员可通过系统学习转型至AI领域。建议步骤包括:1. 学习Python编程;2. 掌握数据处理与分析工具;3. 学习机器学习基础及框架;4. 深入研究深度学习;5. 结合Java与AI技术;6. 参与开源项目和社区;7. 持续更新知识并实践;8. 寻找转型机会。尽管转型需要时间和努力,但前景广阔。
829 4
|
弹性计算 开发者
【上云基础系列-01】如何把控公网带宽费,实现低成本用云(基于单体架构)
本文主要面向开发者,介绍在单体架构下如何巧妙选择服务器和公网产品方案,实现低门槛用云。针对个人开发者和企业不同需求,推荐使用阿里云的ECS、EIP和CDT组合方案,特别是CDT提供的200GB/月免费公网流量,帮助用户显著降低网络成本。该方案不仅适合个人开发者的低成本需求,也满足初创企业和大型电商平台的扩展要求。通过灵活配置服务,用户可以在保障性能的同时实现成本节约。