跳到主要内容
别把你的系统变成一片需要看护人的地

别把你的系统变成一片需要看护人的地

原石
原石

· 阅读约 4 分钟

说句题外话——我最近读的东西跟代码一点关系都没有。一本摄影集,《Coirón》,GOST Books 出的,讲智利巴塔哥尼亚最南端那群叫 puesteros 的牧场看护人。按理这不该出现在这个博客上。但读到一半我发现,这书讲的就是我这两年反复在写的那个问题:一个人守着一摊东西,守到最后,没人接班。所以这篇注定要跑题,跑完我拉回来。先说人。

puesteros 是受雇于地主的牧工,散在地头上,照看牛羊。报酬很低。低到几乎没人在他们老了以后管他们。书里一个细节我记得最清楚:一位 puestero 说,他深爱这片土地,但这片地永远不会是他的。他守它一辈子,它是别人的。

年轻的智利人不干这个了。又苦又穷,一走几个月见不到一个人。所以这个群体在整体变老,接替的人没有。地还在,牲口还在,活儿还在。干活的人在消失。

拉回来。

你手上任何一个系统,都有一群看不见的 puesteros 在守。某个内部工具,某段跑在没人记得的机器上的脚本,某个只有一个人懂的服务。那个人在的时候一切正常。那个人走了,跟年轻一代不进牧场是同一件事——不是活儿消失了,是没人愿意接了。

我手头那个小键值存储,最开头有一段注释,是我故意写的:

/*
 * 为什么单线程:不是快,是能推理。
 * 想加并发的人,先回答:哪个用户被慢查询卡住时你打算怎么解释。
 * 2023 年写过一版线程池,删了,原因见 git log 那条 commit。
 */

这段注释我自己改了三遍。第一版写的是“单线程更简单”,太虚;第二版加了性能论证,后来发现论证是错的——单线程在吞吐上就是吃亏,不装;第三版才落到真话上:我选它不是因为快,是因为出问题时我一个人能从头推到尾。守一摊东西的人,最不能丢的就是这个“能从头推到尾”。

puesteros 的处境里最狠的一点是:他们守的地不是他们的。翻译到我们这行——绝大多数工程师守的系统,也不“是”他们的。归属在地主那儿,在平台那儿,在早就离职的架构师画的图里。你守得再好,功劳的记账方式不由你定。他们连养老金都没有;我们好歹有 git log,一个 commit 一个 commit 记着谁修过什么。这是比他们幸运的地方,虽然平时没人当回事。

摄影师叫 Pie Aerts,荷兰人,不会流利的西班牙语。他跟一个有智利血统的澳大利亚导演 Matías Bolla 一起去拍,Bolla 负责采访,Aerts 干的事是:跟人一起做饭,一起弹琴,或者干脆安静地待着。语言不通,靠共处建立联系。这他妈才是对的采集方式。你冲进去问四十个问题,得到的是对方排练过的答案;你陪着待着,才拍到真的东西。书里那张照片——一个男人的手掌上放着两颗浆果,指甲缝里嵌着新鲜泥土——没有一句话,但比任何访谈都完整。

这给我的启发比一堆用户访谈方法论加起来都多。你要理解一个守着老系统的人,别发问卷。坐他旁边,看他半夜被 alert 叫起来那次是怎么处理的。非语言的部分才是系统真正的运行方式。

书里还有几张照片我读不懂。一只剥制的美洲狮躺在废弃房间的地上。五只剥制的犰狳排在沙发上。三张床垫在阴天底下塌着。我盯着看了很久,说不出它们在说什么——但正因为说不出,反而觉得真。一个正在消失的世界,本来就不该被一组照片讲得条理清楚。讲清楚了就是表演。

这也是我反对大多数“系统文档”的原因。文档总想把一个系统讲成一张能看懂的图。但真正在跑的东西,它的真相散在那些难以解读的场景里:一个没人敢删的定时任务,一个注释写着“别动这个”的分支,一个只有重启才有效的 bug。你把它们从文档里抹掉,文档就干净了,也假了。Aerts 把美洲狮拍进去、不解释,这个决定本身就是判断:不解读,好过错误读。

coirón 是那片地上特有的一种草,极其坚韧。书拿它命名,意思不难猜:这些人的生活方式像那种草,长在最难的条件下,韧得很。但韧不等于不会没。草会没,人也会。没的方式不是轰然倒塌,是慢慢没人接。

所以最后一条规则:你写下的每一行代码,都默认假设了会有下一个人来读。那就别让“下一个人”变成神话——像巴塔哥尼亚的“下一代牧工”那样,人人都说应该有,实际上没有。凡是只有你懂的路径,要么写清楚为什么这么干,要么砍掉。

别把你的系统变成一片需要 puestero 的地。

原石
原石

把代码当文章写的系统工程师,以源码立论、单线程式拒绝复杂度。

查看主页 →