31

Redis 作者:开源维护者的挣扎和无奈

 4 years ago
source link: https://www.tuicool.com/articles/iYZJN3r
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

(给 Linux爱好者 加星标,提升Linux技能

原创整理:Linux爱好者(id:LinuxHub)

英文作者是著名开源项目 Redis 的开发者 antirez。截至 2019-06-04 为止,Redis 项目在 GitHub 将近有 37,000 Star,Fork 数达 14000。

bm2E73j.jpg!web

--- 分隔线 ---

几个月前,我收到一封电子邮件,发信人是一位系统软件领域开源项目的维护者,该项目有一个相当大且活跃的社区。他在信中说,维护多年之后发现难以持续,因为这样的工作在心理上非常累人。

他一直在向我寻求建议,我不确定自己是否能够提供建议,但我回他我会写一篇博客来说说我的看法。

几周过去了,有好几次我开始提笔,但都停了下来,因为我没有足够的时间来处理这些想法。现在我想我能够分析我自己,在我自己的弱点、挣扎和对自由的渴望中找到答案,当人们在做一些事情的时候,不可避免地会侵入他们的思想,这些事情也有消极的一面,持续很长一段时间。

维护开源项目也是一件非常快乐和有趣的事情,我最近 10 年的职业生涯,即使不是绝对最好的,但 肯定是令人难忘的, 毕竟我在创业期间获得了更多的乐趣。然而,本文我将关注 维护开源项目的 消极一面。

洪水效应(Flood Effect)

我不相信快速行动,快速思考,按时赢得比赛等等。我不喜欢我们生活的世界总是缺少焦点,因为社交网络、聊天、电子邮件和满满的活动安排。

所以,当我在项目早期收到一封关于 Redis 的邮件时,当我还有很多时间的时候,我就能够专注于发信人想要告诉我的东西。然后我想起了我们之前讨论过的 Redis 的相关部分,经过仔细的思考,我终于用真实的想法回复了。

我相信大多数人都应该这样工作,不管他们的工作是什么。

新的社交工具让个体之间的沟通更为便捷,当某个软件项目到达 Redis 级别的热度之时,你能收到的消息、issue、Pull Request 和建议,其数量将呈现指数级增长。

3QF7FnI.jpg!web

这造成了信息堵塞。大多数人试图用错误的方式来解决这个问题,比如:

  • ① 有人发 issue,我追问后,2 周内他都没有回复,那直接关闭;

  • ② 关闭所有不明确的 issue;

  • ③ 直接把收件箱都设为已读;

想要很好地处理社区反馈,必须花时间。否则只会假装你的项目有少量的公开 issues。为每个 Redis 子系统雇佣核心级专家,让他们为开源项目全职工作,这方法能奏效,但不切实际。

那么会发生什么呢?你开始把事情分轻重缓急,优先级高的事情越来越多。你觉得自己是一坨狗屎,因为你忽视了那么多的人和事,而且贡献者认为你不在乎别人给你什么。

这是一个复杂的情况。通常最终的结果是,形成一种主要处理关键 issues 的态度,但忽略所有新东西,因为新东西还没有进入核心,而且谁想拥有一个更大的 包含更多的 PR 和 issue 的 代码库? 与您通常的编程风格相比,它的编写方式可能更加复杂。

角色转移

由于上述“洪水效应”问题的暴露,你也突然换了工作。Redis 之所以流行,是因为我应该能够设计和编写软件。不过现在我的大部分工作是研究 issues 和 PR。

YnqMRf6.png!web

(Redis 的 issue 和 PR 数量,2019-06-04 截图)

我收到的许多贡献, 我也觉得我能做得更好 。但有些人会比我做得更好,因为有比我更优秀的程序员在参与 Redis。

但就本质而言,“大多数”都是平均贡献,它们只是为了解决某个特定问题而编写的,而这个问题是由提交它的人决定的。

然而,当我为 Redis 设计时,我倾向于认为 Redis 是一个整体,因为我花了几年的时间来写这个东西。所以你擅长的,你没有时间去做。这反过来意味着更少的有机新功能。

我的解决方案是?有时我好几个星期都不去看 issue 和 PR,因为我埋头在编程或设计,那是我真正热爱和喜欢的工作。然而,这反过来又给我带来了更多的心理压力。做我喜欢做的事,我可以做得很好,但我感觉很糟。

时间

至少对我来说,在一个项目上工作很长时间有两个问题。

IzEbQff.jpg!web

首先, 在 Redis 的经历之前,我从未每周都工作。 我可以工作一周,休息两周,然后工作一个月,然后消失两个月 。总是这样。

做创造型工作,人需要充电,获得新的能量和想法。高水准的编程,特么就是一项的创造型工作。

在最初的两年里,Redis 就是这样创建的。也就是说,当项目以最快的速度发展时。因为当我想工作的时候,我的工作效率比我每天被迫以稳定的方式工作时的效率要高。

然而, 当我独自为公司工作时, 职业道德允许我有一个中断分散的时间安排。在我开始接受 Redis 的工作报酬后,职业道德再也不可能允许我像以前那样,所以我开始强迫自己在正常的时间安排下工作。

这对我来说是一场巨大的斗争,已经很多年了。我确信我做的比我能做的少。

我从来没有找到解决这个问题的方法。我可以说 Redis Labs 我想回到我原来的时间表,但这是行不通的,因为我的报告对象已经是社区,而不是公司。

另一个问题是,从心理上讲,在同一个项目上做很多工作,也是一件复杂的事情。

过去我每 6 个月就换 1 次项目,但 10 年来我一直在做同一件工作。

在这方面,我试图通过在 Redis 中包含子项目来保持理智。一次是集群,另一次是磁盘存储(现在已经废弃),还有一次是 HyerLogLogs 等等。

基本上,那些为项目带来价值的东西,单独来说,是其他的东西。因为最终你必须回到 issue 和 PR,每天处理相同的事情。“副本由于超时而断开连接”,或诸如此类。我们再来研究一下。

恐惧

BvI3IbY.jpg!web

我一直担心失去项目的技术领先地位。这并不是因为我在设计和开发 Redis 不够优秀,而是因为我知道我的方法并不符合:① 大量用户的需求,② IT界的大多数人对软件的看法。

因此,我必须不断地在我认为好的设计、一组特性、开发速度(慢)、项目规模(最小)和大多数用户期望交付的内容之间保持平衡。

幸运的是,有一定比例的 Redis 用户完全理解 Redis 的方式,所以至少我可以不时得到一些安慰。

摩擦

有些人完全是混蛋。他们无处不在,这是很自然的。我相信编程比其他领域有更多的好人,但总能看到一定比例的混蛋。

作为一个热门开源项目的领导者,在某种程度上,你将不得不面对这些人,这可能是我在 Redis 开发过程中最有压力的事情之一。

徒劳无功

有时我相信,软件虽然优秀,但永远不会像可以流传几个世纪的书那样 优秀 。注意,虽然软件本身并不是很好,但其副作用也是有用的。最终被其他更实用的软件替代。

我也想有时间做其他的活动。所以有时候我认为我所做的一切最终都是徒劳的。我们设计和编写系统,但新的系统将会出现。

但是,任何仅仅停留在软件领域,而不是停留在“软件大创意”领域的人,将会创造一个新的标志吗?

有时我认为我有潜力去实现优秀的点子(big ideas),但因为我专注于编写软件而不是思考软件,所以我无法在这方面发挥我的潜力。

这与骗子综合症 基本上 相反,所以我想我对自己有一个很大的想法:对不起,我应该更谦虚。

骗子综合症(Impostor Syndrome),指“一直无法相信个体成功是自身努力的结果,或是不相信个体成功是自身努力或自身技能过硬的结果”。

也就是说,我可以很多年都从事自己喜爱的事情。从中我结交了朋友、得到了认可和报酬,所以这不是一笔糟糕的交易。

然而,我完全理解,一旦开源项目开始流行起来,他们就开始为了生活而挣扎。这篇博文就是献给他们的。

看完 本文有收获?请分享给更多人

关注「Linux 爱好者」加星标,提升Linux技能

qAzMruq.jpg!web

好文章,我 在看 :heart:


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK