I Am Not a Reverse Centaur

I Am Not a Reverse Centaur / 我不是“反向半人马”

About a year ago I wrote on this blog about how coding with LLMs would not work for me, even if there were no ethical or environmental concerns preventing me to use them. I’m not going to repeat the arguments I made that time because my views on the subject haven’t changed. 大约一年前,我曾在博客上写过,即便抛开伦理或环境方面的顾虑,使用大语言模型(LLM)辅助编程对我来说也行不通。我不想重复当时的论点,因为我对这个问题的看法并没有改变。

What has changed, however, is that the number of contributions I receive on my open source projects has gone up, and nearly all are now made with LLMs. The other day I had a very depressing thought regarding this. All these people who submit drive-by pull requests to my projects are pushing me to spend more and more of my time reviewing and merging code that was extruded by machines. 然而,发生变化的是,我开源项目收到的贡献数量增加了,而且几乎所有贡献现在都是由大语言模型生成的。前几天,我对此产生了一个非常沮丧的想法:所有这些向我的项目提交“路过式”合并请求(PR)的人,都在迫使我花费越来越多的时间去审查和合并那些由机器“挤压”出来的代码。

Cory Doctorow refers to people that perform this function as reverse centaurs. He calls these “frail and vulnerable people being puppeteered by uncaring, relentless machines.” Ouch! Am I a reverse centaur now? Is my new purpose as a seasoned software engineer and open source developer to spend my days reviewing LLM code, in spite of having decided that I do not need nor want this technology myself? 科里·多克托罗(Cory Doctorow)将执行这种功能的人称为“反向半人马”。他称这些人是“被冷漠、无情的机器所操纵的脆弱个体”。哎哟!我现在也成了“反向半人马”吗?作为一名经验丰富的软件工程师和开源开发者,我的新使命难道就是每天审查大语言模型生成的代码吗?尽管我早已决定自己既不需要也不想要这项技术。

As you can guess from the title, I’m never going to become a reverse centaur. Let me tell you how I resist the forces that want me to be one. 正如你从标题中猜到的那样,我绝不会成为“反向半人马”。让我告诉你我是如何抵制那些试图让我成为其中一员的力量的。

No more unsolicited pull requests / 不再接受未经请求的合并请求

Back in pre-LLM days, receiving an unexpected pull request (PR) from a fellow coder was a source of excitement and pride. It meant that some random person decided it was worthwhile to invest their time and effort to improve a project of mine and share the result, not just with me but with all of its users. 在没有大语言模型的日子里,收到同行程序员发来的意外合并请求(PR)是一件令人兴奋和自豪的事情。这意味着某个陌生人认为投入时间和精力来改进我的项目是值得的,并且愿意与我以及所有用户分享成果。

Today, an unsolicited PR is a red flag. Too many people lazily prompt an LLM code generation tool and ask it to alter the behavior of one of my open source projects to meet their specific needs, without any care or consideration for what is being changed or how it might affect other users. 如今,未经请求的 PR 是一个危险信号。太多人懒惰地向大语言模型代码生成工具发出指令,要求它修改我的开源项目以满足其特定需求,却完全不关心或考虑所做的更改是什么,以及它可能如何影响其他用户。

Sometimes these changes make sense and improve the project, but often enough they do not. The submitters rarely care though, they just slap a long LLM generated description and send the PR over, leaving me with the task of figuring out if the change makes any sense at all or is pure slop. 有时这些更改是有意义的,能改进项目,但更多时候并非如此。提交者通常并不关心,他们只是贴上一段冗长的大语言模型生成的描述,然后发送 PR,把判断这些更改是否有意义还是纯属垃圾的任务留给了我。

I have decided that I have more important things to do with my life than to spend my days reviewing code produced by LLMs. If you want to contribute to one of my projects, I expect you to be the direct contributor, and to have a genuine interest in improving my project. 我决定,我的生命中有比每天审查大语言模型生成的代码更重要的事情要做。如果你想为我的项目做出贡献,我希望你是直接的贡献者,并且对改进我的项目有真正的兴趣。

The contribution guidelines I include in all my open source projects have these instructions for contributors: 我在所有开源项目中包含的贡献指南中,都有针对贡献者的以下说明:

If you are interested in contributing a change to this project, please first introduce the change you wish to make to the maintainer in an issue. Pull requests that are submitted without a previous discussion in an issue may be closed at the maintainer’s discretion. Once the maintainer accepts your proposed change and allows you to work on it, feel free to submit a pull request. 如果你有兴趣为本项目贡献更改,请先在 Issue 中向维护者介绍你希望进行的更改。未经事先在 Issue 中讨论而提交的合并请求,维护者有权直接关闭。一旦维护者接受了你提议的更改并允许你进行开发,请随时提交合并请求。

With this process I get to know the contributor and their proposal before there is a big time investment on either side, so it is a win-win for everyone. In spite of this I still get unsolicited PRs, so clearly some users (or more likely their LLMs) do not read contribution guidelines. 通过这个流程,我可以在双方投入大量时间之前了解贡献者及其提案,这对每个人来说都是双赢。尽管如此,我仍然会收到未经请求的 PR,显然有些用户(或者更可能是他们的大语言模型)并没有阅读贡献指南。

My initial task when a new unexpected PR arrives is to determine if there is a person behind it or not, and luckily this is easy to figure out in just a few seconds. If I don’t see proof of human involvement, then I’m not interested, so the PR gets immediately closed with no questions asked. 当收到新的意外 PR 时,我的首要任务是确定其背后是否有人,幸运的是,这在几秒钟内就能轻松判断出来。如果我没看到人类参与的证据,我就没兴趣,所以该 PR 会被立即关闭,不予置评。

You may argue that with this attitude I’m likely to miss useful improvements or bug fixes to my projects, and I guess that is possible. I really have no way to know without spending time reviewing these unsolicited PRs to separate the good from the bad. When I was sure that every contribution had the effort of a person behind it this review work was justified and I even enjoyed it. In today’s slop-filled world this is reverse centaur work and it is not for me, so I only pay attention to PRs that come from engaged contributors. 你可能会说,这种态度很可能会让我错过对项目有用的改进或错误修复,我想这确实有可能。如果不花时间审查这些未经请求的 PR 来去粗取精,我确实无法判断。当确信每一项贡献背后都有人的努力时,这种审查工作是合理的,我甚至乐在其中。但在当今这个充斥着垃圾代码的世界里,这是“反向半人马”的工作,不适合我,所以我只关注来自积极参与的贡献者的 PR。

My advice if you can only code with the help of an LLM and need fixes or improvements in a project of mine is that you don’t waste your tokens on a PR, since I will ignore it. Instead, describe the problem in an issue, and let me handle the work. I do not want an LLM-generated novel with chapters, bullet points and emojis, just a simple description of the problem in your own voice. Since you will be saving some of those expensive tokens, you could also consider a donation, which will likely motivate me to prioritize your problem! 如果你只能在大语言模型的帮助下编程,并且需要我项目中的修复或改进,我的建议是不要在 PR 上浪费你的 Token,因为我会忽略它。相反,请在 Issue 中描述问题,让我来处理。我不想要那种带有章节、要点和表情符号的大语言模型生成的小说,只需要用你自己的语言简单描述问题即可。既然你节省了一些昂贵的 Token,你也可以考虑捐赠,这很可能会激励我优先处理你的问题!

Does open source matter anymore? / 开源还有意义吗?

This is a question that I constantly ask myself, and I do not have a clear answer yet. I still do a lot of coding, both for work and for fun, but in the last few years I have been less interested in sharing the things that I make. I still have enough interest to keep my current open source projects updated, but I have a bunch of recent projects that I can’t bring myself to make public. 这是一个我不断问自己的问题,目前还没有明确的答案。我仍然进行大量的编程工作,无论是为了工作还是乐趣,但在过去几年里,我分享自己作品的兴趣有所下降。我仍然有足够的兴趣来保持现有开源项目的更新,但我手头有一堆最近的项目,我无法说服自己将它们公开。

My perception is that there is less interest in open source, and in coding in general. The main reason I love coding is that it is a challenge, and I think this is actually the same reason why a lot of people prefer to give money to an AI lab and get a machine to spit out code for them, even with the risk of the code being subpar. 我的感觉是,人们对开源以及编程本身的兴趣正在减弱。我热爱编程的主要原因是它具有挑战性,我认为这实际上也是许多人宁愿给人工智能实验室付钱,让机器为他们吐出代码的原因,即使这些代码可能质量不佳。

Will this trend continue to the point that nobody codes anymore and it is only machines doing it? I hope not, but we’ll have to wait and see. I will continue to oppose a future in which we all have to be reverse centaurs, with the machines (and their billionaire owners) calling the shots. 这种趋势会持续到没人再编程、只有机器在做这件事的地步吗?我希望不会,但我们只能拭目以待。我将继续反对那种我们都必须成为“反向半人马”、由机器(及其亿万富翁所有者)说了算的未来。