为了让各位心里有个底,我先简单交代一下目前的进展吧。过去几天通过与同事老板以及他个人的沟通,我现在大概明白是怎么回事了:一定程度上他与我有个相同的病症,就是在感知他人的痛苦这件事上对一部分人有盲点。他完全不认为他做这件事带有任何恶意,甚至还认为这样做是为了帮我省事,因为我会少维护一个 R 包。当时我听到这个理由后,硬生生把心里的一次火山爆发强压下去了:在背后偷袭还说是为了帮我?但即使这样,我的理智脑还是可以相信他并没有撒谎,我相信他做这件事是出于心里的正义感——我要为用户解除 blogdown 带来的巨大痛苦、我要给益辉帮个忙好让他减轻维护 R 包的压力。人脑就是这么擅长自我合理化,只要你愿意,你可以给你想做的几乎任何事情找到合理的理由。或者用费曼的话说,自己是自己最好骗的人。
他做这个包的另一个理由,可能也是最重要的理由,是认为我是一个拒绝沟通的人。坦白讲,他并不是公司里唯一一个认为我很难打交道的人。我曾经直言拒绝过一个同事的会议邀请(因为与他前几次会议的无比低效实在让我受够了)。我在公司 Slack 里的签名档也写得很清楚:重要的事情请邮件联系。然后我的 Slack 常年显示不在线,尽管我每天都会打开看一遍。我对这种有一句没一句的即时通讯工具非常排斥,就更不必说推特了。直到现在,他仍然指责我因为拒绝使用和阅读推特而错过了 blogdown 用户之前在那里的抱怨,以至于错失了改正的机会。就这样,他得出结论,认为我根本不在乎与别人打交道,只愿意呆在自己的小屋里自己一手定夺一切。这又让我觉得无比冤屈。如果我拒绝倾听用户的意见,那几百项反馈我都是瞎着眼睛关掉的么,这里面包括他自己提的。如果用我的理智脑想这件事,一定程度上我也可以理解:这问题就出在我们俩在交流工具的选择上完全是站在两个极端,比如我极度厌恶推特(尤其是正式交流比如提问),他则极度喜爱推特,喜爱到总让我想起上一任“推特治国”的总统的程度;我极度厌恶 Slack,他则极度偏爱 Slack。所以,如果推特和 Slack 上看不到我的话,就跟不存在与我沟通的渠道一样。当时我得知 hugodown 出世后的第一件事便是自检:我到底哪封邮件和哪条 Slack 消息忘回了?并没有。所以才有后来一路的憋屈。
黄河在咆哮、用户在嚎叫、我们所有人想找你都找不到、我偷偷砍你一条腿让你轻装前行都是为你好,那还能怎么搞,当然要来这么一刀!然后便听见我一声嗷。等明白过来再补上一句我靠。
总之,我们两个人在太多方面都是两个极端,包括个性、哲学、价值观。他偏爱的恰好是我痛恨的,他投注巨大热情的恰好是我最不屑的。这一点从我们每次开会的背景就能清楚体现出来:他的背景是一面挂着 ggplot2 以及其它净土包六边形图标的墙,都是加大版的图标,加相框后像艺术品一样挂墙上,这个背景在推特上已经被他的粉丝们发出来过好几次(有时候还有他的爱犬坐在腿上,让粉丝尖叫不已,仿佛养狗也显得平易近人);而我的房间背景是一面墙,墙上空无一物,以至于有一次厂长见了问我是不是刚搬家搬进这房子(已经搬进来四年啦),督促我赶紧弄点什么挂墙上。我费这劲干嘛,本来无一物,何处惹尘埃。何况斯多葛告诫过世人,莫要把信仰挂墙上,我已经接受了这条建议。另外一个例子是穿着打扮,他就不用说了,你们都知道,个人主页有高清帅照,而我平时什么鬼样子,绝大多数人都不知道:来美帝十一年从没去过理发店,头发长了自己剃,一律一推子推到底,管它监狱同款不同款;穿衣方面别说什么蝴蝶领结了(这个梗估计不用推特的人不会懂),穿破了洞的裤子我可以照样接着穿,有时候还穿出门,毫不心虚,倒不是因为要抠门,而是对我而言,实在不觉得这算是个事儿。总之,我信奉的极简哲学与他有无法调和的冲突。极简就意味着很多东西都要舍弃,舍弃就要拒绝,拒绝就容易拉仇恨。我的问题出在哪里呢?极简哲学对个人可能是个好事,但一旦出了自己的门,与他人打交道就会四处碰壁、寸步难行,毕竟真心极简的人还是少之又少。我这几年在这个问题上碰壁碰得满头大包,与哈神的碰撞并不是个例,只不过这次撞得比较惨而已。
他无法感知和感受我的痛苦,不是因为他坏,而是他就是有这个盲点,他就是浑然不觉,解释了也不能理解,就像缺少一块生理机能一样。我深知我也有完全相同的盲点。有些人的痛苦我也无法感知,我做过与他相同的事情,伤害过别人后还暗自奇怪,这有什么好受伤的。而在多数人眼中,我们两个人可能都算是共情能力还可以的人,不然怎能精准把握到用户的痛苦、造出好用的软件?(这个因果关系尚待商榷,共情可能只是小部分原因)他是个无情无义无理取闹的人吗?通常应该不是,我应该也不是;他是不会自我反省的人吗?应该也不是(据同事讲、但我自己之前没感受到),我也一样。这次可能是我作为一个与他在太多方面完全相反的人不偏不倚正好走进了他的盲点,他的一系列行为让我感受到窒息性的碾压,而他自己却完全没意识到这是碾压,反而是觉得是在无私帮忙,所以双方都觉得冤屈。
这也算是我的第二次职业生涯危机了。按达里奥说的,痛苦是大自然在提醒我们有什么东西要学。我依旧在思量,这次到底是想叫我明白什么。上面提的感知他人痛苦的盲点算是我学到的第一点。这是我第一次站到了感觉被严重打压的一面,在这之前,通常都是我打压别人。不真正成为受害者,真的是太难体会到受害者的感受,这种体会的能力光靠自以为是的善意和共情,是难以获取的,就仿佛脑子里有一块区域永远无法被擦亮。这几天有个人一直在我脑子里盘旋,就是 data.table 的作者 Matt Dowle。过去两年我一直对他深表同情,但直到这次,我才明白,我的深表同情是多么一文不值。他数年来的冤屈(净土宗有意无意的不公),可能也只能永远埋在黑暗中了:施害者无法理解,而吃瓜群众们更是无暇理解。继而我又想到 Sweave 的原作者,如果我换位到他的角度,现在恐怕也会对我当年对 knitr 的高调宣传感到不公。在软件开发里,后出招的开发者总是比先出招的开发者占优势,因为走后手的人可以享受走先手的人费力踩平的坑,而先手有些坑在历史条件约束下难填,过了一段时期之后也许就好填了,但这时往往又遇到向后兼容的难题,而后手上来则没有这个负担,于是油门一踩,便轻松超车了。这又是我感到冤屈的地方,如果 blogdown 只要晚一年多开发,等 Hugo 再往前更新几个版本,有些难题就可以轻易解决了,而我从 Hugo 0.19 起步,则要费力得多。类似地,Sweave 虽然在代码实现上做得欠缺火候,但它也有它的制约条件,让它无法放开手与我公平竞争,比如它隶属基础 R,改动起来瞻前顾后,更新也要随 R 更新(所以更新节奏只能慢),再比如它只有七百行代码,而我用了几千行外加若干附加包的支撑,若按我如今的极简哲学来看,指不定我会从直觉上偏爱七百行代码的产品。当年我的宣传把 Sweave 描述得如同垃圾,而浑然不知我的后发优势。Sweave 的作者是否暗自感到受伤,我也完全不知。净土宗把基础 R 最臭名昭著的 options(stringsAsFactors)
选项默认值从 TRUE
改成了 FALSE
(不是真改,而是 tibble 采用了默认 FALSE
的行为),大家集体喜大普奔,却没有人愿意再多等两年,给基础 R 一个费力翻盘的机会(R 核心团队自己也痛恨这个默认值,但这种改动并不是一朝一夕能做的)。这种利用后发优势灭掉先手的例子太多了,而被灭掉的人有苦难言,言了也无人倾听。
哈神无法感知我的痛苦,就更不用说感知我的痛苦带来的次级伤害了。比如我因为这件事疯狂赶工而完全忽视了国内的家人,前几天我那打小最怜爱我的姑妈清早给我发了条消息,说美国这么乱、要是我还有点孝心就跟家里人报个平安,让我感到无地自容、抑郁了一整天,我长这么大她从未对我讲过这么重的话。这次我三岁多的二娃也因为我的糟糕心情躺着中了枪。以往我对他的顽皮淘气大吼小叫是家常便饭,他通常无视我的训斥;前几天我实在觉得憋屈,而他像往常一样淘气不听话,我便提高嗓门大吼了他一嗓子(为了制止他的一个危险行为),结果他自打出生以来,头一次被我吼哭了。这也是我头一次对我训斥他而感到内疚,以往训斥都只有生气的成分(有时候是气得真想揍他一顿)。也不知道是因为他被我真正震慑到了一次,还是我这两天对他温和了一些,感觉他这两天都比以往听话了,甚至我看着他因为疫情隔离在家一个人默默玩耍都觉得有些可怜了(我这个狠爹对他还从没产生过这种想法)。这也算是这场风暴中我收获到的一颗小果实吧。
呜呼!是非善恶谁能清,悲喜祸福孰能料;岁月本是流水长,忙者自促奈何焦。