2024年,我第一次给开源项目提PR。
被maintainer骂了整整两个月,评论区的讨论串加起来超过两千条。
现在回想起来,那是我职业生涯里最重要的一段经历。
起因:一个"小"功能
我是阿May,一个后端开发,平时写Java,偶尔摸Python。
那时候我在做一个数据同步工具,用的是GitHub上一个叫DataX的开源框架。用了三个月,我发现有个痛点——它的配置只能写JSON,但我的团队都是YAML选手,每次都要手动转换,太麻烦了。
我想,那就提个PR呗,加个YAML解析支持。
我以为这是个"小"功能。
第一轮:你不懂,别乱改
我花了一周写代码,提交了PR。
第二天,maintainer回复了,洋洋洒洒写了一千多字,总结下来就是:"你不懂DataX的架构设计,别乱改。"
我不服。我仔仔细细读了他的评论,发现他说得有道理——我确实没考虑到某些边界情况。
于是我改,改完再提。
他又回了一千字,这次指出了更多问题。
我再改。
他又回。
那段时间我每天下班回家就是改代码、改文档、写测试。整整两周,我提交了12个commit。
第二轮:更大的冲突
改到第12个commit的时候,我遇到了一个问题——我引入了一个新的依赖库,但这个库的License和DataX不兼容。
maintainer直接在评论区说:"你这个PR不能合并,原因很清楚。你要么换依赖,要么自己维护一个fork。"
我开始觉得委屈了。
我花了两周帮他写功能,结果他说不能合并?我的第一反应是愤怒:"你为什么不在一开始就告诉我不能引入这个依赖?"
我在评论区回了一句:"如果一开始就这么说,我根本不会做这个功能。"
maintainer的回复更直接:"如果你在提PR之前仔细读过 CONTRIBUTING.md,你会知道我们不推荐引入新依赖。"
我去翻了 CONTRIBUTING.md,发现他说的没错。
对了。顺嘴提一句,技术大厂,前后端-测试机会,全国一线及双线城市均有 坑位,待遇和稳定性还不错,感兴趣看看。
第三轮:最狠的一刀
改到第18个commit的时候,maintainer说了一句让我破防的话:
"你的代码质量不错,但你的沟通方式需要改进。"
他说:"在开源社区,我们不只看你提交了什么代码,还看你怎么和别人讨论问题。你之前的每一条评论,语气都很防御——'我不是这个意思''你误会我了''我查过了'。"
"开源社区的协作,不是'证明我是对的',而是'一起找到最好的方案'。"
我后来的转变
这句话让我沉默了三天。
我开始反思自己为什么这么防御。
我发现,我从小受到的教育就是"正确答案只有一个",考试要拿满分,错了就要改。这种思维迁移到工作里,就变成了:被指出问题 = 被否定 = 我不行。
但开源社区不是这样的。
开源社区的逻辑是:被指出问题 = 有人在帮你改进 = 这是合作,不是竞争。
我调整了我的沟通方式。我开始说"我没想到这个角度,谢谢你的建议""你这个思路很好,我来试试看""这个地方我确实没想清楚,能展开讲讲吗"。
maintainer的态度也变了。他开始叫我"contributor"而不是"你",开始主动帮我review代码,开始在我遇到问题时主动给建议。
转折:一个意外的收获
PR合并后的第二个月,maintainer给我发了一封邮件:
"阿May,我们团队正在招聘,需要一个对中国市场熟悉的贡献者。你有兴趣吗?"
我做梦都没想到,一个被骂了两个月的PR,最后变成了一个工作机会。
现在我在做什么
我现在是DataX项目的核心贡献者之一,主要负责社区运营和新用户引导。
我做过最有成就感的一件事,是帮一个新提PR的开发者翻译了一份"如何正确提PR"的指南——因为我也被骂过,我知道新手最需要什么。
有时候我会翻回那条两千多条评论的讨论串看看。
那两千多条骂我的话,我现在想起来,都是恩情。
给想参与开源的程序员一句话
如果你也想给开源项目贡献代码,记住三件事:
先读文档,再提问题。maintainer的时间很宝贵,别用"我没有仔细看过文档"来浪费别人的时间。
被批评是成长的开始。开源社区的批评是最直接、最有用的技术反馈,珍惜它。
沟通方式和技术能力同等重要。代码写得好不好决定你能不能进来,沟通方式好不好决定你能走多远。
开源社区不是"证明自己厉害"的地方,是"和一群人一起做一件有意义的事"的地方。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。