LLM 是最后手段,不是默认手段
我本来打算把整个项目交给 agent 跑,结果 Codex 的套餐没撑过几个视频就见底了。这篇记一下那之后我是怎么一处一处把 LLM 从流水线里请下神坛,退回到无聊的死代码——以及我至今不敢确定,这到底是工程判断,还是只是我钱包的形状。
思考、随笔、技术文章,记录我正在想的事情。
我本来打算把整个项目交给 agent 跑,结果 Codex 的套餐没撑过几个视频就见底了。这篇记一下那之后我是怎么一处一处把 LLM 从流水线里请下神坛,退回到无聊的死代码——以及我至今不敢确定,这到底是工程判断,还是只是我钱包的形状。
从 C 转 Rust 重写 ACGHub,借用规则我自觉很快就懂了。结果真正把我看懵的,是一个看起来最不该出问题的操作——`let s2 = s1`,它一会儿编译报错,一会儿又安然无事。
用了一年多,体感上执行效率几乎全是正收益。但我学到的全在那个「几乎」里——负收益不在它写代码的地方,而在它太想替我做决定、我却没察觉的时候。
2024 年,我把博客弄丢了两次——先是图床,后是数据库。两次我都怪「以后再备份」,可后来想明白,真正该删掉的不是侥幸心理,而是那些需要被备份的状态。
一个不会累、不会烦、代码一遍就过的程序员,把我惯坏了。我躲在后方动动嘴,它冲上去,把我卡住的东西轻飘飘解决掉——这是我被 Claude 惯坏的那半年。
ACGHub 里到处是计数——点赞、收藏、回答数。我一直觉得:读出来 +1 再写回去,只要包进 BEGIN…COMMIT,事务保证原子性,就不会出错。这篇拆的就是这个「就不会出错吧」——它其实会,而搞懂它为什么会,得先把我对 MVCC 的误解也一起纠了。
给 ACGHub 列表加完索引,单条查询是快了,可 DB 再快也扛不住次次都查,于是我上了 Redis。结果一加缓存,就冒出三个新名字——穿透、击穿、雪崩。这篇趁还没被它们坑到,先把三个雷标清楚。
ACGHub 的帖子列表随数据涨慢了下来,我想当然地给查询条件加了索引——结果一点没快。问题出在我对「索引是什么」的想象:我一直以为它是个哈希表,可哈希表恰恰给不了我最需要的那样东西。
2022 年给 ACGHub 写私信系统时,我第一次撞见 epoll。我以为它是个更快的 hashmap,后来发现,连它递到我手里的是什么,我都搞错了。
标题写得挺大,其实动手那晚我脑子里没有什么「形态」——只有一条在贴吧被秒删的技术帖攒下的一肚子气,和一个刷梗图时冲动抢注的域名。所谓理想,低到只是:一个不会随便删我帖的角落。
乱码烦了我好多年——打游戏、改配置、传服务器,每次都靠玄学糊弄过去。直到把「字 → 码点 → 字节」这条链拆开,才明白:字从来没坏,是我每次都拿错了解码的那把尺子。
数字都在 1 到 100 之间,运算简单到侮辱智商,可我还是一遍遍算错、崩溃、重来。一个学计算机的人,被按在桌上当一块很烂的 GPU——慢,还老出错。而我完全不知道,这些矩阵将来铺在哪儿。
没课就昼夜颠倒,有课就课间趴桌上补觉。那年吃掉我最多时间的是战雷——肝经验、肝银狮,一局接一局。我一直跟自己说那是爽,后来才敢承认,那不是爽,是麻醉。
大一打游戏翻设置,抗锯齿那栏点开是 SSAA / MSAA / FXAA / SMAA / TAA 一长串全是缩写。好奇查了查才发现,它们其实都在跟同一个东西较劲——锯齿,而锯齿的根,是采样不够。