本文是 Django 的共同创建者,同时担任工程主管的 Jacob Kaplan-Moss 所写。作者通过一个魔术表演的例子,强调了成功的秘诀往往在于愿意投入大量时间和精力去完成那些看似枯燥、乏味的任务。这种“磨砺”的精神不仅适用于魔术,也适用于技术行业,甚至可以帮助解决复杂的问题。尽管自动化和效率是现代技术行业的重要追求,但有时解决问题的关键在于亲力亲为,愿意承担那些别人不愿意做的繁琐工作。

  1. 魔术的例子
    作者描述了一个魔术表演,观众选择的卡片最终出现在一个密封的茶包里。这个魔术的秘密不在于复杂的手法,而在于表演者在幕后进行了大量准备工作:打开数百个茶包,将卡片放入其中,然后重新封装。这种耗时的准备工作让观众无法想象背后的努力,从而感到惊奇。

  2. 魔术师的投入
    引用魔术师 Teller 的话,强调魔术的一个核心原则:观众会被那些需要比他们想象中更多时间、金钱和练习的表演所迷惑。比如,Teller 和 Penn 为一个节目准备了 500 只特制的蟑螂,花费了数周时间,只为完成一个看似简单的表演。

  3. 技术行业的应用
    作者将这种“磨砺”的精神引入技术行业,指出虽然自动化和效率是技术人员追求的目标,但有些问题无法通过自动化解决。例如,作者曾加入一个充满问题的团队,面对数千个未解决的错误报告。通过亲自阅读、分类和整理所有报告,作者成功扭转了局面,帮助团队恢复了效率。这一过程虽然耗时且单调,但最终的效果却如同魔术一般。

  4. 核心教训
    作者总结道,有时成功的秘诀不在于寻找捷径或依赖自动化,而在于愿意投入时间和精力去完成那些看似枯燥的任务。如果能“拥抱磨砺”,就能在看似不可能的情况下取得成功。

拥抱琐碎

我曾见过一个魔术表演,至今仍让我印象深刻。它的表演方式非常简单(为了清晰起见,我在此进行了简化):一位志愿者选了一张卡片,并将其密封在信封中。然后,魔术师请志愿者选择一种茶。桌上有几十盒茶,所有的茶都用塑料包装封好。志愿者选择一盒,撕开塑料包装,从里面挑选出一个密封的小袋。当志愿者撕开小袋时……里面竟然是他们之前选的那张卡片。

⚠️ 如果你不想知道这个魔术的原理,请立即停止阅读。

这个魔术的秘密其实很平常,但对我来说却充满了神奇感。选卡片的过程其实是“强迫选择 (force)”。不过,志愿者从几十盒茶中选择的过程确实是自由选择,从茶盒中挑选茶包也是自由选择。没有任何手法或欺骗:魔术师根本没有接触到志愿者选择的茶盒或茶包。那张卡片真的就在密封的茶包里。

这个魔术的精髓在于背后的准备工作。表演前,魔术师会买来几十盒茶,将每盒茶都拆开,取出每个茶包,再将一张梅花三的卡片放入每个茶包里,然后重新密封这些茶包。接着,再把茶包放回茶盒中,并重新封好每个茶盒。这个过程重复几百次。可能需要几个小时,甚至几天的时间。

唯一的“魔术”在于,这样的准备工作看上去既枯燥又耗时,当我们看到最终的效果时,很难想象有人会为了这个看似简单的表演而做如此繁琐的准备。

Teller 在一篇关于“魔术七大秘密”的文章中提到了这个现象:

如果一个魔术比你(或其他任何理智的旁观者)愿意付出的时间、金钱和精力更多,你就会被它愚弄。我的搭档 Penn 和我曾在 David Letterman 的脱口秀节目上,从桌子上的礼帽里变出 500 只活蟑螂。为此我们准备了数周时间。我们雇了一位昆虫学家,他为我们提供了适合镜头展示的慢速蟑螂(厨房下水道里的蟑螂可不适合拍特写),并教我们如何在不尖叫的情况下抓住这些虫子。然后我们用泡沫板(蟑螂无法附着的少数材料之一)制作了一个秘密隔层,并精心设计了将这个隔层悄悄放入礼帽的方案。这个过程比表演本身要麻烦得多?对你来说可能是的。但对魔术师来说并不是。

很多刚入行的科技新人会问我成功的秘诀。其实并没有什么特别的秘诀,但有一个道理:愿意做那些看上去极其琐碎乏味的工作,就能产生像魔术般神奇的效果——这在科技领域同样适用。

我们是一个痴迷于自动化、精简和效率的行业。我们的工程文化奠基文本之一,Larry Wall 的《程序员的美德》中提到过“懒惰”:

懒惰:这种品质让你愿意付出巨大的努力来减少整体的工作量。它促使你编写省力的程序,这些程序能帮助其他人,并且记录你写的内容,这样你就不用重复回答同样的问题。

我并不反对这一点:将重复性工作交给程序处理是编程最好的地方之一。但有些问题是无法通过自动化解决的。如果你愿意去面对那些琐碎繁重的任务,你就能展现出如魔术般的能力。

例如,我曾经加入一个维护系统的团队,这个系统因为错误太多而陷入困境。大概有两千个未解决的错误报告。所有问题都没有被标记、分类或优先排序。团队无法就哪些问题需要优先处理达成一致。结果就是不断随机地处理错误,但这常常让人不清楚某个问题是否真的重要。新问题无法被有效处理,因为找到重复问题几乎是不可能的。未解决的问题数量继续攀升,团队已经停滞了数月。我被分配的任务是:让团队重新运转起来,扭转未解决问题数量的上升趋势,并最终将其降到零。

于是我采用了和魔术师一样的方法——其实根本没有什么技巧:我做了那些枯燥的工作。我把所有的问题都打印出来——每个问题一页纸。我读了每一页。我占用了一个大房间,把纸张堆放在地板上。我在便签上写上标签,然后贴在不同的堆上。我在各个堆之间移动纸张。我在白板上画了长长的列,写上问题编号,幻想自己像 Ben Affleck 在电影《会计刺客》中那样。我在那个房间里呆了将近三周,最后所有的错误报告都被审阅、标记、分类和优先排序。

趋势立即发生了逆转:我们立刻关闭了几百个重复的错误报告,而现在新问题的分类只需要几分钟,而不是一天。我们用了大概一年多的时间,将未解决的问题数量降到零,整个过程非常顺利。人们说我完成了不可能的任务,但其实不是:我只是做了那些琐碎乏味的工作,而没人愿意去做罢了。

有时候,编程像是魔术:你念一些晦涩的咒语,然后一群机器人就会按你的指令行事。但有时候,魔法其实很平凡。如果你愿意面对那些枯燥繁重的任务,你也能实现看似不可能的效果。