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

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

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

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

— 分隔线 —

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

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

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

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

洪水效应(Flood Effect)

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

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

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

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

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

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

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

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

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

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

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

角色转移

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

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

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

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

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

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

时间

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

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

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

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

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

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

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

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

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

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

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

恐惧

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

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

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

摩擦

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

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

徒劳无功

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

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

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

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

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

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

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

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

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

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

好文章,我 在看 :heart: