这世上,所有看起来不合理的东西,其实都是对现实的妥协。
昨晚下楼丢垃圾回来的时候,脑子里突然冒出这么一句,当时没当回事,结果今早起来还记得,就越想越觉得有道理。
其实干技术开发的,尤其是前端开发,天天都在跟"不合理"打交道。
你说那坨祖传代码,明明一行 if 就能搞定,非要绕三个弯;你说那审批流程,明明两个人说一声的事,非要走五道系统;你说产品那个决策,明明有更优解,最后偏偏选了最傻的那个。第一反应都是:这谁写的?脑子有坑吧?办公室里时不时就飘出一句:这写的啥玩意儿啊。
但你要是真顺着 git blame 往回翻,多半能翻出一个"当时也没办法"的故事。
要么是历史包袱——写那段代码的人,面对的是今天早没了的限制;要么是资源和排期——不是不想做对,是没人、没时间、没预算,先跑起来再说;再要么就是多方拉扯之后的最小公约数,谁都不满意,但谁都能凑合接受。
说白了,"不合理"往往只是"代价被转移到了你看得见的地方"。
后来我一看,这想法其实早有人说过,而且说得比我狠。
有个叫切斯特顿的英国人,讲过一个"栅栏"的比喻,现在圈子里叫 Chesterton's Fence:路上立了道栅栏,急着改革的人走过去,"我看不出这玩意儿有啥用,拆了算了"。聪明点的会拦住他:"你看不出用处,我就不让你拆。你先回去想明白它当初为啥立这,想明白了再来。"
这事儿在代码里太常见了。新来的兄弟看到一段"永远走不到"的判断,手一抖删了,过两周,几个 2019 年前注册的账户在月底结算时算出一串错数——原来那段"死代码"守着一套早没人记得的旧数据格式。栅栏没立错地方,是我们忘了它挡过啥。
所以很多时候,"看起来不合理"只是"我看不懂它的来由"。程序猿撞上离谱的代码,第一反应不应该是骂娘,先好好看看这块当初为啥这么写,实在不行把当时的开发者抓来问问,总比干瞪眼强。
再往前,黑格尔在《法哲学原理》里写过一句更出名的:凡是现实的都是合理的。后来被人缩成"存在即合理",再被用歪成"存在的一切都天然正确、别动它"——这其实是两百年来的最大误读。黑格尔说的"现实"不是"存在":一个烂透的体制可以"存在",但配不上"现实"。我的那句更像它的平民版:不扯什么理性,就说妥协——很多东西不是因为对才留下,是因为在一堆限制里,它是那个还能活下来的样子。
当然,光这么想容易滑向认命。
但你不能真就认了。理解跟接受是两码事。看懂那段祖传代码为啥写成那样,是为了更好地改掉它,不是把它供起来。萧伯纳 说得更冲:一切进步,都来自那个"不讲道理"的人。要是所有人都向"现实的妥协"低头,就没人去拆该拆的栅栏了。
恩格斯还把黑格尔那句直接翻了过来:凡是现存的,都一定要灭亡。
所以我觉得我那句话得补半句才完整——所有看似不合理的,都是对现实的妥协;但有些妥协,注定要被打破。 理解它,是为了改掉它,不是为了给它找借口。
现在再撞上那些让我皱眉的东西,我会先停三秒,问一句:它当初是在向什么妥协?
问得出来,我就多了点耐心,也多了个能下手改的点。问不出来,我一般也不急着骂——八成是我还没看明白那道栅栏挡过的洪水。
理解世界为啥是现在这个样,是改变它的第一步。这大概就是那句话,留给我的全部意义。