控制思想,而非代码——AI时代编程的核心转变
控制思想,而非代码
antirez 12小时前。136641次浏览。 看看这个博客的历史。有很多关于用AI编程的文章,其中一些可以追溯到2024年1月(比如这篇:https://antirez.com/news/140)。毕竟,我是个还算受认可的开发者。我不需要作为一个寻求存在感的老头子还留在“圈子”里;我最近重新加入了Redis,现在还在开发一个本地LLM推理的新开源软件,社区反响不错。为什么我还要坚持做这件事,说人们不想听的话?为什么我还在不断宣告未来编程将是什么样子?因为我感到有必要降低那些比我更不适应变化的人——通常比我年轻,而且不像我,他们没有预见到这其中很多变化——所承受的冲击(在2022年,ChatGPT出现之前,我出版了一本书,预言了许多现在已经发生的事情,以及我认为将会发生的其他事情,所以我觉得这样说并不显得自大)。
所以这是我的一个策略。人们越来越觉得编程被AI彻底改变了,不知道该怎么办,不知道是否真的能以完全不同的方式开始编码,而不用把代码本身作为主要产出。他们觉得自己背叛了自己的领域。所以我的目的是站出来说:“看看我,我知道怎么写代码,我并没有躲在AI后面:但事情已经变了,这不是你的弱点,不是说你被AI洗脑了。只是我们的领域正在朝着一个既不可思议又痛苦(但也充满喜悦)的方向发展。”
这就是为什么昨天我在X上说,我相信许多程序员此时的影响力低于他们本可以达到的水平,因为他们老盯着代码看。我真心相信这一点。请注意,这并不意味着“氛围编码”——只是索要最终产品。关键在于:如果你控制着软件的思想,那么盯着代码本身是次优的,而且通常毫无意义。原因如下:
1. 你现在可以生成大量代码,哪怕不考虑LLM代码的冗长(这很大程度上也是因为我们没能很好地指导它们)。你打算每天审查5000行代码吗?
2. LLM非常擅长编写局部最优的代码,但在大思想方面较差(虽然正在改进)。逐个函数、逐行扫描代码有什么意义?相反,你应该提示你心中的设计,有时问“那个部分的设计到底是什么?它是怎么工作的?”,然后评估它是否是合适的模型。这样快得多。
3. 工作日只有8小时。如果你读代码,那是一种权衡。你花更少时间去做今天工作中最重要的部分,那就是问自己:我用这个软件做什么?我想要朝哪些新方向走?还有就是思考新的想法、特性、优化技巧。以及做大量的质量保证。
控制思想。你还记得《人月神话》里的这个说法吗?没错,一本70年代的书告诉我们关于当前软件时代的信息,比从2000年到2020年说的很多东西都多。为什么那些现在抗议AI的人,在过去十年里却没有对软件的状态感到震惊?我们近年达到的“垃圾”程度,在AI出现之前,令人难以置信。我再告诉你一件事。什么是“垃圾”?用DwarfStar,我完全自动地实现了两个LLM(DeepSeek v4和GLM 5.2)的推理,但:你自己试试看,你会发现你不能只是说“实现XYZ”就看着它工作。你必须理解事物如何运作,什么是最佳设计,如何达到一定的性能水平。然后我对比了正确性与其他系统,发现其他实现有时包含更多错误。我进一步研究,发现本地推理的世界充满了微妙的错误,这些错误累积起来损害模型输出;注意力实现中的问题导致上下文超过一定限制后性能下降,因为索引注意力实现有缺陷(例如,做了比应该做的更多的工作),等等。这是一个非常复杂、快速变化的领域,每天都有推理图略有不同的模型发布。对开发者来说这是一场不公平的游戏。嗯,AI在这方面很有帮助。在许多领域,严格的工程(在设计方面)和测试远远优于手动编写GPU内核(或阅读它)。所以我们确信这种抵制大部分不是意识形态上的吗?
Matteo Collina昨天问我,回复我的推文:但你之前不是说你会检查Redis的所有AI生成代码吗?这确实是个好问题。是的,我检查,但到现在,这是我需要做的,但我认为基本没什么意义——在GPT 5.5发布时部分如此,但现在有了Fable和GPT 5.6 Sol更是这样。是的:我会发现一些我不喜欢的编码方式,但如果我打开Redis其他贡献者写的Redis文件,那里的情况糟糕得多,这并非因为他们不是好程序员,而是因为品味问题。我写非常干净的代码,因为我希望它可读,所以在实现Redis Arrays时我做了改动。我现在又在为Redis有序集合节省50%内存的优化做同样的事,这是一个我很快会提交的PR。但我觉得这不再有用了。没有人应该再去看这些代码,而只看代码中包含的思想。我继续做是出于对用户的尊重。Redis现在是一种普遍有用的东西,许多程序员会打开文件并手动修改。但如果我可以自由选择,你知道我会怎么做吗?我会把审查代码所用的所有时间都用来做更多的QA,思考下一个优化思路并付诸实施,并使用LLM编写一个DESIGN.md文件,其中用人类语言描述每个数据结构,包含它蕴含的思想、实现技巧和设计。在未来,这将有用得多。你想修改有序集合?你打开文件,阅读设计,然后你就掌握了思想。你可以打开你的智能体,用正确的心理模型询问它该做什么。这比审查代码有用得多。
Fable和GPT 5.6对有序集合内存节省的审查会发现比我审查更多的错误和微妙的竞态条件。尽管如此我还是会做。但对于大多数软件项目,这一切都不再有意义。相反,专注于控制思想。专注于质量、测试,以及对你要交付的软件有一个清晰的想法。世界变了,这很痛苦,但也充满了改善一个已经彻底腐烂的软件世界的机会。
我只有一个疑虑,关于那些没有足够经验、无法构建心理模型的年轻程序员。我们还不清楚,他们是否需要非常透彻地理解一段特定代码的工作原理,但我认为他们应该学习如何编写程序。然而,我不确定检查LLM输出就是他们应该做的事。也许学习一种编程语言,实现一个小型解释器、一个小型数据库、一个哈希表等等,会更有用。审查某个客户网站的JavaScript代码?天啊,不,别浪费时间搞那些垃圾。
blog comments powered by Disqus