8

Talk is not cheap

 3 years ago
source link: http://www.yinwang.org/blog-cn/2019/09/11/talk-is-not-cheap
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Talk is not cheap

(本文描述的是我长久的经历中形成的看法,跟我现在身边的人和事没有直接联系,请勿对号入座。)

长久以来,我发现挺多 IT 人士学会了一句口头禅,无论你表达什么观点,他们会拿出一副小学老师要检查作业的口气,说:“Talk is cheap. Show me the code!” 或者 “给我看看你做出了什么!”

这类说法包含了两种可能的含义:

  1. 说话是没用的,你要做出来我才信。
  2. 你要已经有了重要的成果,才有资格发言。

“Talk is cheap. Show me the code.” 这句话出自 Linus Torvalds 在 linux-kernel mailing list 的一个回帖。如果你看了我对微内核和线程的分析,也许会明白 Jamie Lokier 的话其实是有意义的。如果保持开放的心态,继续的探讨也许会给 Linux 内核带来突破性的改进,然而这种可能性却被 Linus 一句“Talk is cheap. Show me the code.” 给扼杀了。

talk-is-cheap.jpg

Linus 可能当时不耐烦了,你知道这家伙的性格…… 我相信他不是每次都说这样的话,但因为 Linus 形象太高大,这话就被人记下来,作为可以反复拿出来压制言论的手段。管你表达什么,他们都有一句万能的台词:“Talk is cheap. Show me the code.”

“苦干,用代码说话,忽视想法”,是很多程序员的误区。人的思想不一定需要代码来证明,甚至很多的想法无法简单的用代码表示,只有靠人的头脑才能想得清楚。思想是首要的,代码只是对思想的一种实现。我们先得要有思想(算法),才可能有代码。有些人动不动就“show me the code”,却忽视了思考和探讨的重要性。如果你没有好的想法,弄一堆代码出来又有什么用呢?只是死钻进一堆无谓的细节,掩盖了本质。

代码不能代替思想交流和讨论。代码不能清晰的表达一个人的想法,也不能显示一个人的思维深度。任何程序员都可以写出复杂冗长的代码,你有时间去看吗?就算水平很高的程序员,他的代码组织方式你不熟悉,也会看不出来本来的想法。实际的代码里面往往会充斥着因为编程语言,硬件,系统,历史遗留问题导致的各种复杂性。如果每个想法真要“show me the code”才被考虑的话,那效率实在太低了。

我跟同事讨论代码的时候,一般都会先请他们在白板上画个图,用简单的语言解释他们的算法,这比直接看代码要容易很多。很多时候几句话就能说清楚,我在脑子里就能看到它是怎么工作的,根本用不着看代码。我从来不会说“show me the code!” 想法应该在实现之前被讨论清楚,对不可行的想法应该停止于摇篮之中,对可行的想法应该看到各种可能的发展方向…… 这些都应该在实现代码之前沟通弄明白,这会节省我们大量的时间和精力。

这就是 Talk 的价值。

另外,代码和成果不应该成为一个人是否可以表达看法的条件。只要这个人的见解有它的依据,就是有价值的。他不需要有什么重大的成就也应该可以表达自己的看法。这个我在之前一篇文章说过。以代码和所谓“成果”来压制人的言论自由是不合理的,而且代码和“成果”其实很难说明一个人的看法是否有价值。

很多人面试程序员都有类似的经验,他们给你看已经写好的代码,根本无法用来鉴别他们的水平。因为代码是可以拷贝的,所以你无法知道这代码是否他自己写出来的。代码可以是冗长晦涩的,所以就算是他自己写出来的,你也不会想花时间去看懂它。

代码是死的,它是对已有问题的解决方案。而你想要知道的是这个人在面对新的问题的时候,他会怎样去解决它。所以你必须知道这个人的思维方式,看清楚他是否真的知道他声称“精通”的那些东西。

一个人说他之前的工作做出了什么样的成果,很多时候也是不可靠的。因为成果是可以虚构或者盗窃的,他可以把别人的成果说成是自己的。如果是管理岗位,“成果”就更加难以鉴定。这人也许只是瞎指挥,对很多人各种发号施令,对不同的人指出 N 种不同的方向,然后瞎蒙对了一个。其中一个方向做出了点东西,当然工作都是手下人做的,具体的想法都是手下人的。然后领导者挂个名字,就成了大家追捧的“技术大牛”。

很多博导都是用这种方法出成果的。招 N 个博士生来,分别给他们每人一个课题。管它有没有可能做出来,有没有价值,都跟你说这个课题很好。只要 N 个博士生有一两个做出东西,他就可以发 paper 升职了。被分配到那些做不出来的方向的学生,他才不管你的死活呢。

有见识的人跟他们对话,就会发现这些人一知半解,还仍然牛逼轰轰的样子。这就是我多次的经历。管他说做过什么代码项目,写了什么书,得了什么奖,一旦当面对话就能显示出真实的水平。代码和书都可以抄来,成果可以盗窃,你甚至可以因此得诺贝尔奖,可是对话没法偷来。对话可以显示出一个人是否有真知灼见。

一个小故事。我以前就职的某公司,有次招了一个 VP,他的 github 上有上百万行的代码,项目有上万的“star”,在领域里很是有点名声。这算是成果了吧?结果一进公司就各种瞎指挥,搞得大家没法工作了。还招进来很多自己圈子里的亲信,也是一群只会吹牛不做事的人,各种打压其他人,浪费大量的人力物力。我都感觉公司快要被搞垮了,最后创始人终于醒悟,费了好大功夫才把这些人赶走或者架空。

所以一个人有再多的代码,成果,都可能是没用的。我不排除它们是真实的情况,但你需要懂得如何去鉴别,而不只是依据这些表面的标准。

对于人的水平,我一般会观察他们说的话,最好是当面的对话。我不会盲目相信他们所谓的“成果”,我不看他们的代码。有真知灼见的人可以毫不犹豫地说出自己的想法和观点,而不需要时间去背诵和计算。我很容易看出一个人是否在说真话,因为说真话的人不需要时间去“计算”他们要说什么,不需要演戏。

可惜,“Talk is cheap”已经成为了很多人用来压制言论的手段。它误导了很多人,让他们无法正确鉴别技术人员的水平,犯下严重的人事错误。招进来一个错误的人,可以毁掉整个公司。

那些被“Talk is cheap”压制的人,变得不敢表达自己的观点,总想默默无闻“做”点什么给大家看。可是对方有什么资格要求这些呢?他们自己做出了什么呢?等你真做了给他们看,他们又会说你的东西不好,不如别人 xx 的。想当年我做的那什么,比你厉害多了…… 其他人也云里雾里,没有鉴别能力,只能随机倒向一边。

受到“show me the code”影响的人,可能还会让别人去看他的代码,而不解释自己的想法。大家工作中也许遇到过有人拒绝解释自己的想法,说:“你看代码就明白我做了什么。” 这其实是不大尊重人的行为。没有人应该被迫去阅读其它人的代码,写出代码的人有义务讲清楚自己代码背后的思想。

由于我对某些领域很在行,不止一次有人 email 联系我:“我做了这个东西,我想知道你对它的评价。” 连基本的想法都不说,甚至称呼和自我介绍都没有,接下来就是一个 github 的代码链接,或者粘贴一大段代码在 email 里面。这种代码我是不看的。我可能 email 都不会回,因为这显示出他们缺乏基本的礼貌和对他人时间的尊重。

代码不是有效的沟通工具,也不应该用来决定一个人是否有发言权。“Talk is cheap”只不过是封嘴的手段。说别人“Talk is cheap”的那些人,他们自己却不断地 talk。

人们应该可以平等自由的表达自己,不受这种无谓的教条压制。每当有人一针见血,指出我迷惑已久的问题的要点,豁然开朗的时候,我会很清楚的记得这个人。我会尊敬他,在合适的时候给予他回报。就算没有给我新的想法,要是他说出一些我曾经琢磨很久才想清楚的点,或者给了我另一个角度的观点,我也会记得他。这些给我指出正确方向的人,我不需要看他们的代码,我不以最终的“成果”来衡量他们的价值。想法和观点在我这里是高于代码的。

Talk 一点都不 cheap,而可以是有很大价值的。中国有句古话,“听君一席话胜读十年书”,说的就是这个道理。当然我们还是应该避免无意义的对话,但不应该笼统的说“Talk is cheap”。

可是我发现并不是每个人都像我这样。有些人,他迷惑的时候你给他指出要点或者方向,最后他却说那是他自己想出来的,甚至说你的话没有价值,我只看结果…… 遇到这种情况,你就知道遇到了错误的人。你不需要向他证明什么,不应该再给他任何有价值的信息。

很多人被“成果”或者代码所蒙蔽,而忽略了那些能够看透问题,用简单的几句话指出正确方向的人。我希望以这篇文章纠正很多业内人士的思维方式。

Talk is not cheap. Talk can be powerful.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK