卡马克论想法更迭


这篇文章是 Facebook JavaScript 团队的 Amjad Masad 实践 John Carmack 的 Idea Generation System 后所写下的总结 “John Carmack on Idea Generation”。感谢海伦老师的倾情翻译和解读:“卡马克论想法更迭,游戏之神是这样练成的”,这里仅转载原文部分。


去年在 Facebook 的一场内部访谈中,我有幸听到 John Carmack 谈论他自己的想法更迭系统。刚听的时候我是有些失望,因为我所期待的是一场经典的 Carmack 式技术访谈,听他滔滔不绝地谈论几小时编程语言、游戏开发、大规模的软件项目,以及其他有趣的技术话题。

相反,这次他开场的话题却是关于想法如何被过誉以及执行力就是一切——典型的当前硅谷的陈词滥调。当然,陈词滥调有时候之所以能成为陈词滥调,是因为它们是对的。然而,当他说到“反脆弱(Antifragile)”这一概念的时候,整个话题开始变得有意思了。

反脆弱

这是纳西姆·尼古拉斯·塔勒布(Nassim Nicholas Taleb)所发现的一个现象,用以描述的是“脆弱的反面”——目前我们还没有一个合适的英文词汇来描述它。你可能在想诸如“强健(Robust)”、“柔韧(Resilient)”这样的词语会比较接近,但它们其实是在形容在压力之下不会崩溃的系统。那么问题就来了,那些能够从压力中获益的事物该如何描述呢?

对于我来说,这就是那种典型的惊奇时刻:一个很简单的问题,你却直到此刻才意识到它的存在。

这里是《反脆弱》一书所描述的:

正如人类骨骼在面对压力和张力时会变得更加强壮一样,谣言或骚乱在面临某些人的弹压时反而能加剧。同理,生活中的许多事情也能够从压力、失控、动荡中获益。塔勒布所定义的“反脆弱 (antifragile)”就是这样,它不仅能够从混乱中获益,而且还要依赖于混乱而存活和滋长。

在读完该书后,我不仅将其与卡马克的“想法系统”关联起来,还开始以稍微不一样的视角来看待这个世界。举例来说,我会把大型开源软件看作是“反脆弱的”。人们对其施加的压力越大,它就能变得越好。越多的人以无法预期的方式来使用软件,越多代码路径组合就能被测试到,越多的 bug 就能被发现并修复。相反,(有专利的)专有软件通常在受控的环境下使用,反而滋长了脆弱性,使其难以应付可能到来的大灾难 (参考塔勒布的另一本书《黑天鹅效应》)。

反脆弱的想法更替

在编程和许多其他的创造性工作中,你每天能获取很多灵感,但是你只有精力实现其中的一部分而已。而你未能实现的部分,可能令你倍感困扰。每个人都会有能跟他人讨论的“宝贵想法”。这个想法在你的脑海中停留的时间越长,你看待它时的批判性就越低。当你实践该想法的时机真正来临后,一旦尝试失败,你将更加沮丧、尴尬,甚至会直接退出你正在进行中的项目。

这显然是一个脆弱的系统。你从中性的情绪开始,当第一次获得这个想法时你会感到小小的兴奋,然后任由其停留在你脑海内累积脆弱性。一旦当其失败,其结果对于你的积极性来说将是毁灭性的。

那么,一个针对想法更替的反脆弱系统将会是什么样子呢?首先,我们来摆出一些标准:

  1. 反脆弱的系统,根据定义,将能够在不受负面因素影响的同时累积有利因素。这就意味着,我们要有能力得到一个高起点的初始想法,以及随之而来的积极性。
  2. 失败事件最终必须能使得我们的系统更加强大。其意味着当一个想法失败时,其结果却可以令整个系统变得更好。

下面是 Carmack 所认为的一个反脆弱系统应有的样子:

  1. 在你解决一个问题的过程中,你能从中获得一个高起点的初始想法。
  2. 你应该马上尝试打败这个想法——想想它所有无法成功的可能,测试出结果,将这一想法置于压力之下。
  3. 如果该想法能在如此严酷的考验下存活下来,那么它就具备了进行进一步的调查或实践的基础。
  4. 如果该想法得以实践并取得成功,这当然很棒。
  5. 即便该想法在审查或实践中失败了也不要紧,你可以迅速转换到下一个想法而无须感到低落,因为你并没有花很长时间纠结或谈论它,亦即,它原本就不是你的宝贝想法。

Carmack 形容这个过程就跟游戏一样——一旦你有了一个想法,你就要试着打败它。这一过程中你将产生出更多的想法来取代先前失败的主意,因为你为更多的想法的诞生空出了思维上的空间。而且,你已有的想法将会变得更为强大,因为它们通过了重重考验。

个人实践

我在过去的几个月里,一直在工作和私人生活中使用反脆弱大法。现在,我也把它推荐给每个人。反脆弱大法让我进行了更多样机尝试,经历了很多次想法的迭代,并使我仿佛回到我早期的编程生涯。因为我不了解什么是可能的,什么是不可能的,因此不得不通过编程来检验所有想法。当时,我可以在一天之内就能完成数个 VB 项目。

在工作中,我们目前侧重于 JavaScript 和 Web 性能,并且发现反脆弱大法对这类工作来说是个不可或缺的工具。最优化工作(当你搞定最容易实现的目标后)通常是反直觉的,并且很多在理论上听起来很可行的想法最后在实践中遭遇重挫。因此,为了获得进步,我们需要有很多想法并且勇于尝试。而反脆弱系统刚好给了我很棒的思维框架来实现它。