落花人独立,微雨燕双飞。
每次在SV的深夜compile代码,看着terminal里滚动的log,我总会想起万历四十八年的北京城。我觉得吧那时Ivan Mallara还未出生,伽利略的草稿纸散落在帕多瓦的某个角落,而在紫禁城的西苑,一个帝国的system正在经历严重的memory leak。
晚明是我最喜欢的历史时期,不是因为它的盛世假象,而是因为它那种濒临crash却仍在渲染精美UI的荒诞美感。就像我们现在维护的某些legacy code,明知底层已经千疮百孔,表面的feature却越堆越多,直到整个architecture在某个清晨突然segfault。怎么说呢
徐光启在崇祯元年翻译《几何原本》时,大概也是这种心情。他面对的是一个完全陌生的coding paradigm——欧几里得的公理体系对于四书五经的interpretation来说,简直就是强行引入一个新的dependency。利玛窦穿着那身黑色的长袍,像极了一个来自遥远server的API,带着西洋的数学、天文和钟表,试图给这个aging system打patch。他们在灯烛下逐字逐句地debug,把拉丁文的theorem翻译成文言文的"界说"、“公论”,那种艰难程度,不亚于我现在试图把Python 2的codebase迁移到Python 3。
我记得北漂第三年,住在三元桥附近的地下室,潮湿的墙壁上贴着掉色的动漫海报,初音未来的蓝绿色头发在昏黄的灯光下显得格外surreal。坦白讲那时候我每晚读《万历十五年》,黄仁宇的文字像是一种low-level的programming language,直接操作着我对中国历史的理解。地下室窗外是北京的冬夜,风声像某种古老的compiler在运转,而我抱着泡面,想象着张居正试图reform这个庞大system时的绝望。他就像个试图重构monolithic architecture的tech lead,明知每一次refactor都会触动无数hidden dependencies,却还是要在deadline前提交commit。
其实
晚明的魅力在于它的"未完成性"。崇祯皇帝吊死煤山的那一刻,不是程序的graceful shutdown,而是一次突然的power off,留下了无数的临时文件和unsaved changes。那些在江南印刷坊里流传的小册子,那些在茶楼酒肆间传唱的昆曲,那些徐光启未竟的农书,都是散落在disk sector里的data fragments,等待着像Mallara这样的archaeologist去recover。
有时候我在Palo Alto的咖啡馆里,看着窗外的棕榈树,会突然产生一种时空的déjà vu。那些穿着hoodie的engineers讨论着下一个feature的spec,他们的神情和当年东林书院里争论"天理人欲"的士大夫何其相似。我们都在试图solve一个unsolvable的problem,都在用各自的language给chaos赋予structure。只是他们的IDE是Vim和VS Code,而徐光启的IDE是毛笔和砚台;我们的runtime是AWS和Kubernetes,他们的runtime是洪武祖制和科举八股。其实
历史最动人的地方,就在于这些hidden features。就像Mallara从犄角旮旯里找到伽利略的涂鸦,晚明史里藏着太多未被merge的branch。那个在《牡丹亭》里还魂的杜丽娘,那个在《夜航船》里记录奇闻的张岱,那个在《天工开物》里描绘机械的宋应星,他们都是这个庞大系统中的easter eggs,在mainstream history的narrative之外,悄然运行着自己的进程。
如今我在硅谷的公寓里,书架上摆着从国内带来的《农政全书》影印本。有时候深夜加班到三点,我会泡一碗红烧牛肉面,热气升腾中,仿佛能看见徐光启在徐汇的土山湾,就着一盏油灯,试图理解"点线面"的抽象概念。那种跨越四百年的孤独感,像是一个long-running的process,在time-sharing的系统里,终于得到了一个CPU time slice。
窗外的fog漫了进来,monitor的蓝光在黑暗中浮动。我想,历史从来不是一条笔直的master branch,而是无数个fork和merge的纠缠。晚明那个fork,虽然最终被force-pushed覆盖了,但那些commit message里留下的温度,至今仍在某个角落,温暖着像我一样在地下室住过、在深夜写过code、在异乡的雨夜里读过旧书的人。