开发者社区> 问答> 正文

【算法】五分钟算法小知识:王垠的面试 和 P 与 NP

最近,国内 IT 界有一个大瓜。

大意是,首先,IT 界的网红王垠受邀,面试阿里的 P9 岗位,面试官是 P10 级别的赵海平。面试结束以后,王垠发文表示自己遭受了不公待遇。

结果,坊间传闻:阿里 P10 赵海平被直属上级多隆绩效判定 3.25。阿里绩效,一般被打了 3.25,近乎等于是要辞退你的意思。拿了 3.25 的绩效,无论是领导还是同事,都可能会明面上暗地里排挤你了,已经可以开始着手找下份工作了。而此次赵海平被判定 3.25,大概率是因为赵海平在面试中对求职者王垠冷嘲热讽而引起了舆论不满。


在这里,有必要先聊一聊王垠是谁。

王垠于 1997 年从四川大学本科毕业,保送到清华大学计算机系直博。在清华大学计算机系软件工程专业就读时,主要的研究方向是集成电路布线算法。期间,他因《完全用 GNU/Linux 工作》一文和对 TeX 的推广等“业余的,非研究成果性的东西”而出名。

后来,他在只剩一年就要博士毕业之时申请退学,并将 1 万 7 千余字的题为《清华梦的粉碎》的“退学申请书”公布在网上,一时引起舆论界对教育体制、理想主义等的热议。

此后,王垠求学于康奈尔大学,然后从康奈尔大学退学,并发文《 Cornell 感受》;

之后,王垠又求学印第安纳伯明顿大学,之后又退学,并发文《对博士学位说永别》。至此,王垠三进三退博士学位,决定不再读博士了。

然后,王垠去 Google 当实习生,但没能成为 Google 正式员工,实习离开的时候发文《我和 Google 的故事》;

然后,又在微软任职,离开微软时发文《一个人的罢工》。。。

由于王垠在社交媒体上十分活跃,不少网友都私下称其为“码农界的网红”。而王垠赢得这个称号的时候,其实互联网上还鲜有大 V 和网红。说王垠是 IT 界最早的网红,我觉得不为过。

看上去,王垠似乎并没有大的成就,主要以丰富的经历和四处“批判”的精神而走红。但仔细研究王垠的履历,显然是一个人才。

实际上,王垠的才华得到过多方面的肯定。比如王垠在 Google 实习期间,做的是一个 Google 内部检索所有项目代码的工具,王垠负责 Python 检索部分。他用一周左右的时间,就拿出了一个原型并顺利完成了整个项目。据说他的代码现在每天都会把 Google 所有的 Python 代码索引一遍。

负责这个项目的 Steve Yegge,最开始时对王垠的想法持有巨大怀疑态度,但最后还是承认:王垠的项目是 Steve 本人“与实习生合作 20 年间,遇到的技术最领先的项目”。

再比如王垠曾经在博客中说 Knuth 在程序语言方面不算专家。很多网友马上嘲讽说,王垠看不起 Knuth 了;王垠又出来喷了,等等。

但其实,王垠完整读过已经出版的 TAOCP,做过 TAOCP 的习题,甚至得到过 Knuth 的支票和 T 恤鼓励,并与 Knuth 有邮件往来。

这个 Knuth,就是在我的文章:《神一样的随机算法》中说的那个 Knuth。后来,关于他的中文名,我还专门写过一篇文章:《不小心,较真儿了:高德纳和特朗普》。


王垠炮轰阿里的文章是这样:

《再谈“P vs NP”问题》背后的故事。

经过了几个月,我觉得应该解密一下,不然老窝在心里。

事情是这样的。当时阿里巴巴有一个项目组想请我加入他们。由于网上到处找不到我准确的联系方式,我又不怎么看 LinkedIn 一类的,联系了我一两个月才联系上。我看他们好像很诚恳,最后终于决定跟他们谈一下。虽然我常常听说阿里的“996”现象,办公室政治很严重,但这种高级别的职位,他们又如此诚恳,心想也许可以了解一下。

经过再三邀请,我最后成行访问了杭州阿里巴巴总部。我对阿里的工作环境和技术水平感觉一般,但人还是诚恳的。回来之后他们问我要简历,说要放进系统里面走个流程,因为集团的硬性要求,得让另外一个部门的人交叉面试一下。我本来没想给简历的,因为只想随便看看,没想这么正式的加入。不过最后还是给了,他们安排了一个视频面试。当时我也不知道要见谁,以为是某位高级别的阿里“partner”,但没想到遇到了这个人。

整个面试的过程,他根本不是在发掘一个人的才能,对于公司能起到的正面作用,却一开头抓住我的简历,说:“你回国之后的一年怎么没去工作?你是富二代吗!” 然后把我的博客翻出来,一篇篇的挨个贬损我:“你写这些有什么意义,什么价值呢?我不觉得我从中能学到什么……” 接着就开始他关于“P vs NP”的说教,完全不给人回复的机会。

我的朋友们听说有人这样对我说话,都说:“要是我跟他面试,直接挂了他的电话。” 所以我还算是客气的了,不卑不亢的据理说话,直到最后都还是礼貌相待。

当然,最后的结果是由于他的负面反馈,阿里这个项目组跟我的合作没能谈成。我的阿里的朋友查了这个人,是一个阿里的 P10,对我说:“阿里这项目组好可怜。这么好的事被某人给破坏了!” 我看这些人心诚才打算去看一下,到头来却弄得如此不愉快。阿里巴巴因此给我留下了非常不好的印象,以后的合作就基本不用考虑了。

据了解,这个人传说以前是 Facebook 的第一个华人员工,他的FB工牌上写着“The Greatest Computer Scientist”(最伟大的计算机科学家)。自视如此之高,所以有如此的表现也不足为奇了吧 :)


那么王垠文章中的这个面试官是谁呢?就是这个故事的另一个主角——阿里的 P10 赵海平。

1987 年,赵海平以河北省高考状元的身份进入北京大学生物系,后来进入普林斯顿大学修得计算机科学硕士;曾就职于微软,并于 2007 年加入了当时只有不到 50 个软件工程师的 Facebook,算得上是 Facebook 第一个中国员工。

2015 年,在 Facebook 就职 8 年的赵海平决定回国加入阿里巴巴。他在 Facebook 的告别信中写道:

作为一个华裔工程师,我想让中国也成为软件技术最好的地方,我想让阿里也成为最值得工作的地方。阿里巴巴的架构非常庞大,他们面临的软件性能问题至关重要,在使用 Java 的过程中他们也有许多有趣的问题待解决,这正是我的用武之地。我想,我至少可以成为一个专业的程序员,并继续我成为最伟大的计算机科学家的梦想之路。祝福我吧!


这样一个高级别的工程师,面对王垠的炮轰,是怎么回复的呢?

赵海平的原文如下:

我是赵海平,犹豫再三,还是回复一下王垠同学的质疑。之所以犹豫是因为,在我的职业生涯中,面试过一两千人了,从来没有在事后回应过面试者。因为面试训练里告诫面试官最好的做法是不回应,而且揭露细节和具体原因是违背公司规定的。但是我理解和同情王垠的感受和面试失败的挫败感,本着爱才惜才的动机,就简单的解释一下吧,只不过依然不能违法的揭露过多的细节,只能针对有疑问的地方稍加解释,见谅了。

整个面试最关键的过程恰好是对简历上具体工作的详细了解,这个王垠在博客里完全没有提到,实际上我问了将近二十到三十分钟,我希望王垠能够意识到这部分才是面试真正考核的部分,应该尽量把自己最拿手最出彩的工作分享给面试官,详细解释为什么难,为什么有意义,为什么对公司有着深远的影响,而不是直接问面试官是做什么的,到底懂不懂。很遗憾,我恰好是做编译器的,在 Facebook 做了 PHP 编译器,在阿里巴巴领导了团队在 Java 里加入了透明的协程,所以这个面试也确实是王垠运气不太好吧,遇上了我 :-)

至于博客的讨论是在简历工作讨论之后了,如果不是出于寻求亮点发掘能力,我是不会去看博客的,当时也只讨论了一篇,其他的很多都是经验性分享,我是不可能在一个高级别的面试中询问的。这一篇 P vs NP。我本以为我们意见交换的很好,最终达成了一致意见,那就是“并没有太大的实际意义,但是有其价值和理论意义”,整个过程只有5到10 分钟吧。我没有说过“你太自以为是了”,“你成天写那些博客,有什么价值吗“,“你写这些有什么意义呢,什么价值呢?”(这句话正常语气的询问是有的,那就是面试的一部分呀),“我不觉得我从中能学到什么”,”你居然连“P vs NP”都敢批“,甚至没有说过” 知不知道“P vs NP”要是解决了,世界将有天翻地覆的变化,多少的计算难题会被解决“,我的确说了一句,如果 P = NP,那么上面多层的计算难度的大厦会塌陷成一层了,是不是这句话被理解成了“世界会有天翻地覆的变化”?

正好借此机会,我谴责一下36氪的小编“饭遥“,https://36kr.com/p/220539 这篇文章是2015年写的,当时刚刚回中国,不明所以,我只是想问他/她两个问题,(1)我什么时候表示过要来拯救阿里的代码了?(2)工牌上是口号(slogan)不是头衔 (title),工牌是2007加入Facebook时公司说可以印上自己喜欢的称呼或者口号,我写的是 “The Greatest Computer Scientist!” 是有一个感叹号的,是希望自己成为一个伟大的计算机科学家。当年的我和王垠一样踌躇满志,但是当年的我一事无成,没有任何资本骄傲和自负,即使今天我也从来不觉得自己有什么了不起的地方,结果被小编蹩脚的英文和缺乏职业道德的做法,刻画成一个自大的人,所以希望饭遥可以站出来向我道歉。

但我不希望王垠像饭遥一样想怎么写就怎么写。一个失败的面试只是说没有符合高级别的要求,并不是对一个人的全盘否定。如果不服气,可以再来,或者用其他方式证明自己的实力,而不是不遗余力的抨击面试官。

顺带提一下,整个面试的结果是公司团队性的决定。我是被邀请给反馈的,如果我的意见不靠谱,依然会被团队否决。我非常希望王垠的那个“阿里的朋友”在非法的告诉王垠我的名字的同时非法的告诉王垠详细的理由:-)或许可以帮助王垠理解这个面试结果。我也很希望这个“阿里的朋友”可以主动来找我好好聊聊这件事哦,请我去面试还出卖我:-)

好吧,我确实很爱开玩笑,当时开了一个玩笑,简历上有一年的空挡没有工作,这个是个 red flag (警惕性信息),我必须要询问原因。我很友好地开了个玩笑“不需要挣钱的呀,富二代那种?;-) ”现在想想的确不合适,希望王垠原谅!


这个事件虽然还有后续,但是到这里,已经足够了,能够说明我的观点了。

对于这件事情,通过两篇文章,大体已经可以恢复当时的很多细节了。虽然不是全貌,但显然,双方都有问题。

王垠的问题在于,没有认为要去参与一场面试。按照王垠的说法,是你们阿里对我感兴趣,邀请的我,那么更应该是我王垠来面试你们阿里。见面聊天的主要内容应该是阿里为什么对我感兴趣?需要我来参与什么工作?而不是考核我。正因为如此,王垠会认为面试官“考核”他的问题是带有敌意的。

但是,在这个事情中,我认为赵海平的问题更大。因为说实话,他不是一个合格的面试官。

为什么呢?因为面试官的任务,就是替公司评估应试者的能力,考察是否适合某个具体岗位。面试官的一切行为,都应该服务于这个目标,而不是表现自己,压倒对方。

赵海平可以认为王垠的水平不怎么样,这是他的判断,也是他做为面试官的权利。但是,面试官需要尊重面试者。赵海平的回复中,一句“所以这个面试也确实是王垠运气不太好吧,遇上了我”,已经显示出了他作为面试官的傲慢。恰巧,王垠也是一个傲慢的人,于是话不投机,最终演变成了这样一个事件。

如果我是赵海平,我会愉快地听王垠侃侃而谈,面对自己不同意的观点,稍微探讨一下,引发面试者更多地展现自己的能力。如果觉得面试者名过其实,只需要默默地给出自己的面试意见:不合格,就好了。

通过两个人的文字,可以看出来,赵海平似乎也对王垠的博客的价值表示怀疑。这更是犯了互联网行业的大忌。你可以认为某篇文章的观点不对,但是认为分享观点这个行为不对,绝对是有违互联网精神的。

伏尔泰有句名言:我不同意你的说法,但我誓死捍卫你说话的权利。


最后,我想简单聊聊两个人的文章中都在讨论的《再谈“P vs NP”问题》这篇文章。

王垠很早写过一篇关于 P 与 NP 问题的文章。但是后来似乎删掉了。在这次事件之后,王垠又写了一篇《再谈“P vs NP”问题》。

王垠的核心观点其实是,P = NP 这个问题被过誉了,这个问题没有那么重要。因为即使证明出 NP = P,但是这个多项式时间的级别可能是 n^1000000,那么这也是一个性能开销巨大,近乎无用的算法。

而即使 P != NP,我们也不需要悲观,还是要继续寻找 NP 问题的高效算法。

更何况,整个 P= NP 问题是定义在非确定性图灵机上的,这和我们现今使用的计算机模型——确定性图灵机有很大的差别,因此,解决这个问题,实际意义不大。

整体,我个人不倾向于炮轰任何知识探索的意义的。就算某一个知识真的完全没有实用价值,至少,它还能满足人类的好奇心。

而好奇心,恰恰是我们成为人,走到今天的关键。

大家加油!

来源 | 五分钟学算法

作者 | P.yh

展开
收起
游客ih62co2qqq5ww 2020-04-13 13:27:31 3085 0
1 条回答
写回答
取消 提交回答
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
阿里云技术面试红宝书 立即下载
超全算法笔试-模拟题精解合集 立即下载
程序员面试宝典 立即下载