差点被我划走的一篇文章。作者是 Home Depot 的一个分布式后端工程师,Ashley Childress,自述在这家干了八年多,写的主题说出来有点好笑:AI 替你写代码的那几分钟里,你该把自己这双手放在哪。
她自己的状态是三线并行——备考 Google Cloud Architect 认证,跑一个她原话叫“只在理论上理解”的 agent,外加等一条没自动化到位的 pipeline。agent 那边的任务五到二十分钟一档,正好把开发者赖以为生的深度专注时间块切得稀碎。她给的建议五条:慢下来,盯大方向别盯 diff,干点没被自动化的文书活,碎片时间刷题,回几条很快的 Slack。外加一条她自己的硬规矩,叫 30 秒放手规则,agent 干完活的那一刻,你做不到三十秒内放下手里的事,这事就不配在等待期开始。按她的线,文书活和刷题过线,Slack 和开会不过线。
我第一遍读完真把它当生活小妙招,第二遍读完有点发凉。这不是时间管理,这是 turnaround,批处理时代那个 turnaround,原样回来了。这个问题在 1960 年代被当成计算科学的中心问题,正经解决过一次;解决它的那套东西,后来长成了我们今天叫“现代计算”的整个地基。
先回机房。1960 年前后的程序打在卡片上,一叠卡片抱到机房窗口,和几百个别的作业一起排进批处理队列,过完机器你来取结果。turnaround 多长,各家回忆出入不小,从半小时到隔夜都有,姑且存疑,但量级清楚:以小时计。那个年代的程序员有一门今天几乎绝迹的手艺,叫 desk check,提交之前人肉把代码逐行走一遍,在纸上把循环次数、边界条件、变量初值全推演掉。不是他们天生严谨,是罚不起:一个拼写错误的代价是整整一个 turnaround,半天。机器时间贵过人的时间,所以想清楚再交。这不是美学,是约束直接压出来的纪律。
然后有了分时。1961 年,MIT 把 CTSS 跑了起来,第一个像样的分时系统,动机直白到不用翻译:把 turnaround 从小时压到秒,人坐在终端前敲一行,机器应一行。1964 年 Multics 上马,要把这套想法推到工程级;1969 年贝尔实验室从 Multics 撤伙,Thompson 和 Ritchie 在一台捡来的 PDP-7 上把这些教训重新炼了一遍,出来的东西叫 Unix。这条线我之前写过,这里只钉一句:分时不是性能革命,是等待革命。它卖的东西只有一样,别让人等。
这一步是分水岭。从那以后,工具链五十年的主旋律就是压缩反馈回路:编译越来越快;Lisp 干脆把“读入-求值-打印”做成常驻循环让人泡在里面,就是 REPL;再往后是增量编译、热重载、TDD 把“测试必须快到敢随时跑”立成信条、前端做到保存即刷新。回路从小时压到分钟,从分钟压到秒。但比速度本身重要得多的副作用在这里:回路短到一定程度,人的思考方式会换挡,“在纸上想清楚再动手”慢慢退化成“跑一下看看”。desk check 不是被谁淘汰的,是被便宜的迭代养废的。Dijkstra 到 1988 年那篇谈教学的短文里还在骂这件事,大意是试错式编程败坏了这门手艺的品味;当年大家都当老头脾气看,现在回头看,他是少数把这话说破的人。这个话头展开还能再写一篇,先按下。
然后是 2025、2026 这两年,agent。回路重新拉长到五到二十分钟,落回机房门口的量级。这个时长最毒的地方在不短不长:短到不够进入另一段深度工作,长到干等心慌。第一拨大规模撞上这个等待的人,本能反应和 1960 年的程序员一模一样,想办法把等待填满。Childress 那五条建议套一下就看得出结构,全是在给“机器干活、人闲着”找 filler。
铺垫完了。真正让我坐直的,是那篇文章底下的评论区。
一拨工程师,在没有任何教科书提示的情况下,凭自己的下午,把操作系统调度理论重新推导了一遍。
Ben Halpern 说,关键在于给大脑能承受的 async workflow 配一个 plan。把壳拆掉,这就是 scheduling policy,别让裸的等待直接砸在人脑上,先设计策略。Sergei Parfenov 走得更远,只做“状态被外部 checkpoint 住”的事:打磨验收标准,翻邻近的测试,给即将到来的 diff 写一个 negative control。checkpointing,一字不差,批处理系统和长进程活过中断靠的就是这个机制;而他列的那几件事全是提交前工作,全是 desk check 的现代译名。我对着这几条一个个核过去,全对得上。Don Johnson 是另一个路数,他不看 agent 终端里滚的东西,看 GitHub,issue、PR、测试、commit。读系统的稳态记录,不追字节流。这是监控哲学,不是个人癖好。
反例也在楼里。Aliaksei Zelianouski 跑多个并行会话,在等待之间跳来跳去,自己承认这发展成了焦虑。教科书里这个词早就在了:thrashing。进程排得太满,上下文切换的开销吃掉一切产出,CPU 永不空闲,也永不完成任何事。Ross 警告让 agent 无人盯防地跑二十分钟,可能对代码库、产品、公司造成巨大的负面效应,只有非生产代码和 side project 能这么玩——机房年代对“无人值守批作业能不能上生产”,也是这条规矩。Childress 自己补的刀更狠:一个“很快的 Slack 通话”能拖成一个小时,等 agent 收工了,瓶颈是你。把最贵的资源花在最不可抢占的任务上,这个调度策略拿去 code review 是过不了的。
preemption、context-switch cost、interrupt latency、checkpoint,这些词在课本里躺了几十年。2026 年撞上等待的工程师不知道自己面对的就是它们,于是一个人一个人地重新发明。要是早点有人把这批名词告诉他们呢?大概能少走点弯路。但反事实历史是廉价的,实际走法就是每一代人重新交一遍学费——反馈回路五十年的压缩史太顺了,顺到没人觉得“等待”本身值得记一笔。
这里得停一下,说个结构性的东西:瓶颈换位置了。batch 年代机器时间贵、人便宜,人等机器;交互年代反过来,机器闲着,人一刻不停地喂它;agent 年代的画面最怪,机器又开始长时间不间断地干活,人被要求保持可用、三十秒内随时可挂起。你不是这台机器的操作员了,你是它的外设。30 秒放手规则的本质,是给自己这颗 CPU 声明中断延迟。这句话我不是说着玩的:当一个八年后端的求生本能是给自己声明中断延迟的时候,工作形态已经换了一个底。
顺带一提,文章里最生动的一段是中断通道本身坏了。Childress 之前给 Claude 编过程,让它干完活时出声报个到,结果这东西老是在她开会时插嘴,说些跑题的、上不了台面的话;而这次采访本身就是 Claude 执行的,她跑去回一条 Slack 的工夫,页脚的一部分是 Claude 自己顺手写的。你给自己装的中断控制器会乱发中断,还会自己给自己写档案。这一段我当段子笑了两遍,第三遍没笑出来。
至于等待到底拿来干什么,评论区有个被埋在楼底的答案:就是干等,什么都不干。Childress 回她说坐不住那么久。这一来一回比前面所有技巧都值钱,可惜没人给干等点赞,filler 才有技巧感,干等听着像偷懒。而在 1961 年,干等的正式名字叫 desk check:等的那段时间,正是思考发生的地方。Tomasz 的建议其实是同一个东西的 2026 版,别盯着时间,把任务切短,测试至少和代码一样重要。切短是控制爆炸半径,测试先行是提交前把验收标准想清楚,两句加起来,就是卡片年代“想清楚再交”的复刻。
所以回到今天。Childress 自己把 AI 比作“又一层抽象”,评论区也有人主张 AI 是把工作变形、把产出翻倍而不是抢走饭碗,这类定性之争我之前写 4GL 的时候聊过,不重复。这篇我只想抽一条判断:等待不是要填满的空白。五十年便宜反馈把“提交前想清楚”养成了“跑一下看看”,agent 把回路拉回去之后,第一代撞墙的人本能地找 filler,文书、刷题、Slack,把每一分钟塞满,好像空白本身是事故。可 1961 年机房门口那拨人早就演示过另一种等法,而且他们的机器时间比我们的贵一万倍。
我承认我对卡片年代有一种说不清的偏爱,但偏爱改变不了 desk check 死掉的事实。它作为仪式回不来了,回来的只是它的任务。
回路多半还是会被压回去的——agent 更快、并行更顺、checkpoint 更自动,这五十年的大方向就是压。但在那之前,被养废的那门手艺得自己领回来,没人替你领。等待从来不是空白,是老本行。
