程序员花七年优化一段数据处理逻辑,最后发现AI让一切变得简单——这不是技术演进的故事,而是关于人类如何与"足够好"和解的困境。

嵌套地狱:一个经典的数据处理困境

打开网易新闻 查看精彩图片

这段代码的起点很普通:从嵌套数据结构中提取一个类名。原始版本用了五层嵌套回调,每层都在做同样的事——尝试获取属性、过滤列表、取首个元素。

作者称之为"重复模式"。确实,这三行结构在代码里出现了两次:

->tryProp('page_config')

->bind(function (Lst $x) { return $x->filter(...)->tryHead(); })

函数式编程的信徒会立刻识别出这里的monad链条。但在真实项目中,这种写法意味着阅读者必须逐层拆解括号,在脑海里维护一个栈。作者显然也意识到了,于是开始寻找"正确的方式"——这一找就是七年。

抽象的诱惑:propEquals与箭头函数的进化

第一次优化引入了propEquals辅助函数。原本需要匿名函数包裹的过滤条件,现在变成了一行:

->bind(fn (Lst $x) => $x->filter(propEquals('_type', 'header'))->tryHead())

箭头函数(fn短语法)让代码密度提升,但核心问题没变:每次bind都在重复"过滤-取首"的动作。作者继续压缩,最终版本把五层嵌套压成了四行链式调用,类型标注(Lst/Kvm)成了理解数据形状的唯一线索。

这里有个微妙的权衡。最终版本牺牲了显式变量名,用$x统一指代中间结果。熟悉管道操作的开发者会觉得流畅,新人则需要额外认知负担去追踪类型变化。

作者自己说:"我会暂时接受上面这样的写法",然后点出了关键——"tryHead让你触及核心"。

AI介入:七年探索的意外终点

原文最短的句子藏着最大的转折:"然后AI来了,一切都不一样了"。

没有展开,但暗示足够清晰。过去需要人工设计的抽象层——propEquals、类型约束、链式API——在AI辅助编程的环境下,价值坐标发生了偏移。当工具能即时生成、解释、重构代码,"找到正确方式"这件事本身的成本结构被颠覆。

这不是说七年探索白费。恰恰相反,这段经历揭示了技术决策的深层困境:我们优化代码不仅为了运行效率,更是为了心智模型的优雅。但优雅的标准随工具进化——当AI能处理复杂性,人类是否还需要维持对每一层抽象的掌控?

产品视角:开发者工具的范式迁移

从这段代码的演变,能看到三类开发者产品的博弈:

语言层面的渐进改良。PHP引入箭头函数、类型系统,让旧代码能写得更紧凑。这是基础设施的慢变量,七年刚好覆盖一个语言特性的完整采纳周期。

库与框架的抽象竞赛。propEquals这类工具函数是中间层的典型产物——它们不解决新问题,只是把旧问题的解法包装得更顺手。每个团队都有自己的工具箱,重复造轮子的成本被个体效率感掩盖。

AI工具的降维介入。当代码生成成为交互方式,"如何写"的重要性让位于"描述清楚要什么"。作者没有说AI具体做了什么,但"全新局面"的措辞暗示:之前的优化维度可能不再是瓶颈。

这对工具设计者有直接启示。传统IDE(集成开发环境)的功能清单——自动补全、重构、跳转定义——建立在"人类逐字符编写"的前提上。AI编码助手正在把这个前提连根拔起,但界面范式还没跟上。

遗留的追问

作者最后停在"暂时接受"的状态。这种不满足感很熟悉:技术人总相信存在更优雅的解法,却在交付压力下反复妥协。

AI的出现没有消除这种张力,只是转移了战场。当机器能生成"足够好"的代码,人类的角色往哪里迁移?是更高层的需求定义,还是更深层的系统架构?又或者,我们会重新发现某些只有人类能处理的复杂性,让七年探索在新的维度上重演?

这段代码的终点是开放的。作者没有给出答案,只是记录了一个时代的切片——在AI重塑编程的前夜,一个开发者仍在手工打磨他的抽象层。