我不要你们的PR了。
I don't want your PRs anymore

原始链接: https://dpc.pw/posts/i-dont-want-your-prs-anymore/

## 软件开发协作的转变 一个软件项目的维护者正在调整协作策略,原因是像LLM这样的人工智能编码助手兴起。虽然感谢提供的帮助,但他们发现直接的代码贡献效率越来越低。主要原因是需要审查来自未知贡献者的代码,以防潜在的安全风险和风格差异,而现在,在LLM的辅助下,个人处理这些问题通常更快。 核心问题不是缺乏感激之情,而是瓶颈发生了变化:设计、理解现有代码和审查现在比单纯的*编写*代码更重要。提交的代码对这些方面没有帮助。 维护者建议采用替代贡献方式,而不是以合并为目的的拉取请求:提供用户反馈、讨论想法、报告/调查错误,以及分享与LLM一起使用的提示,以说明潜在的更改。鼓励开发者为定制用例而fork项目,从而减轻维护者支持各种小众需求。本质上,重点正在转向利用人工智能辅助编码速度的更高层次的贡献。

## 黑客新闻讨论:开源项目拉取请求减少 一篇名为“我不再需要你的PRs了”的文章引发了黑客新闻的讨论,探讨了开源维护者越来越倾向于接受错误报告和功能请求,*而非*拉取请求(PRs)的趋势。 许多评论者认为,PR的来回审查非常耗时。随着AI编码助手的发展,维护者现在可以根据清晰的描述快速生成代码,确保其与项目的风格和愿景保持一致。一些人认为这比审查外部贡献更有效率。 另一些人则表示担忧,警告说拒绝贡献可能导致碎片化、信任度下降,并最终降低软件质量。一个关键点是,开源的核心原则*是*任何人都可以贡献并自行修复问题。 最终,这场讨论凸显了一种工作流程的转变,由新工具驱动,以及维护者希望在即使这意味着放弃免费劳动的情况下,也能更好地控制他们的项目。
相关文章

原文

I really appreciate that you're enjoying the software I'm maintaining and want to help. But we need to rethink this collaboration, because I feel like we're increasingly wasting each other's time.

Why I don't want to merge your PR

Since I don't really know you, I always have to assume that you might be trying to sneak in something malicious along with your changes, which makes reviewing and merging them riskier than implementing them myself.

On top of that, there are a lot of personal and subjective aspects to code. You might have certain preferences about formatting, style, structure, dependencies, and approach, and I have mine.

Then we often need to synchronize with respect to review, CI runs, merge conflicts, etc.

And then there's this common back-and-forth round-trip between the contributor and maintainer, which is just delaying things.

Even before LLMs, writing the code was not the main bottleneck for me. But writing code did take time, so a solid, working, easy-to-review PR was often worth the small extra risk and inconvenience.

With LLMs becoming quite good at implementing things, that tradeoff is almost never true anymore.

While I still need to review LLM-generated code, I generally don't have to worry about it being malicious the way an unknown contributor's code could be. I've already codified a lot of my coding preferences and style guidelines for my LLM. And I can rapidly iterate at my own pace without having to synchronize with another human who might be in a different timezone.

For these reasons, it's just easier if I make the code changes myself (with the help of an LLM).

The nature of software development has shifted

It's increasingly apparent that "the source code" is less "source" and more "code" — an intermediate formalized layer between ideas in the developer's head and instructions for the computer to execute. It's always been this way, but now, with the code itself being easier to generate automatically, it's just more visible.

There's a wide range of reactions to coding agents out there, from banning them to proclaiming that coding is dead and vibecoding is the future. Personally, as things are right now, I sit somewhere in the middle. I come up with the design, then let my agent do a lot of the actual writing, and then I review and refine the result.

I could get huge amounts of code written, but I'm bottlenecked on:

  • understanding — reading the existing code to be able to reason about it;
  • designing — coming up with the right changes and architecture;
  • reviewing — ensuring that the code is doing what I wanted.

The code in your PR doesn't help me much with any of these. So let's skip it — don't attempt to implement code changes with the goal of merging them into the codebase.

How can you help instead

As the "writing the code" part is becoming less valuable, all other ways of helping maintainers become relatively higher value.

Give feedback

As I'm busy implementing things, I often don't have much time to actually use them, or do good research on how to improve them.

Users telling me what works well and what could be improved can be very helpful.

Discuss ideas

I don't know everything, and discussing things with other people with different experiences and perspectives can help me understand what I should be building and how.

Report and investigate bugs

A good bug report is 3/4 of the bug itself being fixed.

If you spotted a problem, please describe it well, and even do the debugging to figure out how to reproduce it and where exactly the problem is.

Then discuss potential solutions.

Prototype changes

Send me a reference PR and/or the prompt you used to produce it.

Yes, I know I just said that I don't want your PRs. So let me explain. With LLMs, it's easier for me to get my own LLM to make the change and then review it myself.

BUT — using code for illustrative purposes still makes sense. A quick glance at code implementing something can be helpful, even if I don't end up merging it.

And if you share the actual "source" (prompt) to produce the "code", I can reuse and refine it, saving time.

Review code and point out problems

As I'm bottlenecked on reviews, an extra pair of eyes helps.

Fork the code and report back

Don't be afraid of forking the code and changing it however you want.

Having to come up with designs supporting multiple use cases, forming consensus, debating best outcomes, looking for compromises, etc. is very time-consuming.

LLMs enable a great deal of software customizability. You can make the changes you want by yourself faster and easier than ever, and then rebase them (or not) on top of upstream at your own pace.

Just fork. Add support for your own use case, do things your way, ask neither for permission nor forgiveness.

As a maintainer, this saves me time too. And in the end, maybe both of us can learn something from your version taking its own route.

联系我们 contact @ memedata.com