译:拥抱苦差事

原文:"Embrace the Grind" by Jacob 原文链接:https://jacobian.org/2021/apr/7/embrace-the-grind/

我以前见过一种纸牌魔术,至今仍念念不忘。那魔术简单来说是这样的(为了清楚起见,我在这做了进一步的简化):找一位志愿者,让他挑选一张扑克牌放进信封并封好。然后魔术师会邀请志愿者挑选茶叶。茶叶共有好几十箱,全被塑料膜密封了起来。志愿者选定一个箱子后,撕掉包装膜,从里面挑一个同样密封着的装着茶包的袋子。而当他撕开袋子时……他选的那张牌就在里面。

⚠️ 如果你不想知道魔术背后的秘密,马上停止阅读。

这魔术的秘密平淡无奇,却令我兴奋不已。首先,志愿者选牌的过程运用了迫牌技巧(force) (译注:指魔术师运用特殊手法,让选择看似随机,但最终指向同一个结果)。但从那几打箱子里选一个,则是实打实的自由选择,从箱子里挑茶包也是一样。这一步没有任何花招:魔术师不会碰到志愿者选的箱子或茶包。那张扑克牌是确确实实的躺在被密封的茶叶袋里。

技巧全在准备工作里。在表演这个魔术前,魔术师会购买好几十箱茶叶并全部打开,拆开里面的每一袋茶叶。然后,再往每个袋子里放入一张梅花 ♣️3 并重新封上,再放回箱子里。这个过程要重复好几百遍,准备工作一共得花上许多个小时——甚至许多天。

这魔术里唯一的“诡计”,在于它所需要的准备工作实在太无聊,太令人乏味了,以至于我们观看到表演效果时,根本想象不到会有人会为了这个简单的效果,完成那么无聊的工作。

魔术师 Teller 写过一篇文章 “seven secrets of magic”,专门讲了这个事情。

如果某个魔术所需的时间、金钱或练习的次数,比你(或任何一个普通人)所愿意付出的更多,那你就会被骗到。我和我的搭档 Penn,曾经从脱口秀主持人大卫莱特曼的桌子上的一顶绅士帽里,变出过 500 只活蟑螂。准备这个魔术得花上许多周。我们聘请了一位昆虫学家,他给了我们一批行动迟缓、不怕摄影镜头的蟑螂(你家橱柜下的那种在特写镜头下可待不住),还教会我们如何抓起这些虫子(不至于像小姑娘们那样尖叫)。然后我们用泡沫塑料(蟑螂无法附着的少数几种材料之一)做了一个小隔间,并想了个狡猾的办法把隔间偷偷放进了那个帽子里。为这戏法搞得这么麻烦是不是不值?对你来说,也许是,但对魔术师们来说不是。

经常有一些做技术的新人问我成功的秘诀。其实没多少秘诀,真的,但这个秘诀——愿意做一些乏味透顶的事情,以至于看起来像魔术一样——在信息技术行业一样适用。

我们身处一个痴迷于自动化、精简和效率的行业。Larry Wall (译注:Perl 编程语言的作者)写的“程序员的美德”,是一段有关我们的工程师文化的奠基性文字,它里面这么描述“懒惰(Laziness)”:

懒惰:这种品质让你费尽心思降低整体能量消耗。它驱使你写出别人觉得有用的省力程序。也驱使你为你的东西编写文档,那样你就不用回答太多有关它的问题。

我并非不同意:让程序搞定重复性的工作,是懂得编程后能做的最棒的事情之一。但是,有时候问题是没法被自动化解决的。而如果你愿意拥抱这种苦差事,那你看起来就会像一位魔术师一样。

举个例子,我以前加入过一个团队,团队负责维护一个被太多缺陷(bug)淹没了的系统。那时,一共有大约 2000 条处于开放状态的缺陷报告,它们没有标签,没有分类,也没有排任何优先级。对于应该处理哪些问题,团队成员根本无法达成共识。他们基本上被困于随机处理 bug 的过程中——而根本弄不清楚那个 bug 是否重要……新来的缺陷报告也无法被有效分流,因为查找重复报告几乎没法做。所以,开放状态的单据总数越来越高,整个团队好几个月都停滞不前。我的任务是解决这个问题:让团队恢复运作,降低开放状态的单据数量,并找到最终将其降低为零的办法。

于是,我用了和魔术师一样的技巧,也就是没有任何技巧:我就是把活干了。我把所有的缺陷报告打印了出来——一个议题一页纸。我把每张纸都读了一遍,找了个大房间开始叠放在地板上。我在便签纸写上标签,然后把它贴在纸堆上。我把那些纸在不同纸堆间移来移去,把议题编号写在白板上,变成长长一列;我把自己想象成了电影《会计刺客》里的主角本·阿弗莱克。我在那个房间了待了约三个星期,出来的时候,每个缺陷报告都被重新审阅、打了标签、分了类,以及定好了优先级。

做完这件事情后,形势马上发生了逆转:我们能够立即关闭好几百张重复了的单据,新议题只需几分钟就可以完成分流,而不是一天。我记得缺陷议题的总数降到 0 花了大约一年时间,但整个过程相当顺利。大家都说,我完成了不可能完成的任务,但那么说并不对:我仅仅只是做了一些过于乏味,其他人根本不愿意做的事。

有时,编程就像魔法一样:你念出一些神秘的咒语,一队机器人就会听命于你。但也有时候,魔法其实平凡而乏味。如果你愿意拥抱苦差事,你就可以完成不可能完成的任务。

😊 如果你喜欢这篇文章,也欢迎了解我的书: 《Python 工匠:案例、技巧与工程实践》 。它专注于编程基础素养与 Python 高级技巧的结合,是一本广受好评、适合许多人的 Python 进阶书。