服务粉丝

我们一直在努力
当前位置:首页 > 情感 > 故事 >

判断程序员是否优秀的标准:能力、判断力和性格

日期: 来源:36氪收集编辑:36氪

编者按:今天提出一个话题:如何在面试中判断一个程序员是否足够优秀?关于面试和接受面试的教程太多了,但是有很多都是装腔作势、形式主义,并不能帮助你找到真正出色的人才。如果你想找到真正出色的工程师,就得听听真正有经验的人的经验之谈。Slava Akhmechet总结认为:要想找到真正出色的工程师,你需要确定三件事:能力、判断力以及性格。原文发表在Substack上,标题是:How to interview engineers


划重点:

大公司的面试流程充斥着装腔作势和“政治正确”

出色的工程师要从三方面考察:才能,判断力以及性格

最有才的工程师敲代码的速度跟不上思考的节奏

与其让应聘者解决编程问题,不如让他们把API整合到一起

才能是速度、工作记忆、品味、工具链知识,对计算机工作机制的了解,以及编程能力的综合体

你要的人是既非常喜欢建造鲁布·戈德堡机器,又知道如何让机器不要偏离目标的人

人才是综合能力和编程策略的结合。

表示战术性工程才能的媒介是代码。表示战略判断的媒介是备忘录(或备忘录的公开对等物,论文)

性格方面主要关注责任心、亲和性以及神经质。

这篇是我关于如何面试工程师的超级秘密指南。是的,因为面试充斥着装腔作势、政治正确以及出于社交的方便而讲的谎言,这些东西主要是因为受到大公司招聘的约束,其实跟你没什么关系。这股风气是微软发动的,然后被FAANG克隆了,再然后其他所有人又克隆了FAANG。如果要根据行业标准惯例来进行面试的话,那你的货物崇拜已经达到了三级的造诣。

这份指南是用来面试非常有才华的人的。如果你要在硬技术初创企业组建一支杰出的团队的话,那这份指南正好合适适用。如果你的创业公司是技术使能的,或者你是给一家大型公司设计面试流程,或者要聘请经验丰富的角色来执行专门任务的话,那本指南不合适你。在这里没有“初级vs高级”或“前端vs后端”之分。从我们要完成的工作的角度来看,昆虫才要专业化分工。

关于应聘者,你需要确定三件事:才能,判断力以及性格。可以把招工程师看作买赛车一样。买赛车的第一要务是看马力,马力不够,赛车就毫无用武之地。工程师的马力就是才能。没有才能,工程师对开发产品就没有用,所以这是你要从应聘者身上找的第一件东西。那个人有多好或者工作又多努力都没有关系。没有马力,就没法比赛。

但光有才能是不够的。这个世界到处都是因为种种原因成就不了事业的人才。懒惰、焦虑、脆弱、冲动、自私、牺牲品等等,原因无法一一列举。所以,在发现了才智之后,接下来就必须确定形状和质量。这个人都把自己的才华用到了什么地方?他们能不能很好地适应外部世界的需求?

才能

才能是速度、工作记忆、品味、工具链知识,对计算机工作机制的了解,以及编程能力的综合体。这属于IQ,但这是专门针对工程师的IQ。智商50-80%是遗传的,没法提高,呈正态分布,并且跟科学和工程等领域的成功密切相关。

这对应聘者的选择很重要,因为虽说人是可以改进的,但这种改进只能在其才能范围内,但改进没法超出那个范围。智商145(σ= 3)的人比智商115(σ= 1)的人要好太多。如果你同时看着两个人工作,感觉就仿佛是来自来自不同的星系一样。因此,作为面试官,你的工作是找出应聘者的能力范围。

怎么找呢?提前告诉应聘者准备一台适合自己喜欢的开发环境的笔记本电脑。他们可以用任何操作系统,任何编辑器,任何编程语言——自己觉得怎么合适就用什么。

面试开始时,让他们共享自己的屏幕。你会看着对方敲键盘。然后,给他们一个问题让对方解决。这么多年来我都是让他们编个井字棋的程序,让程序穷尽所有的走法,再打印出有效游戏的数量。当然,你应该自己设计问题,但要争取问题的难度大致就是这样。应聘者的目标是写出程序、编译、运行程序,然后得到正确答案。

记一下时间,让他们自己做。回答他们可能遇到的任何问题。程序输出正确答案的那一刻,再次记录一下时间。评估应聘者的才华的全部工作就是这些。面试技术方面的工作已经结束。(是的,你没有看错!)

以下是接下来会发生的事情。最有才的应聘者会考虑几秒钟,然后用自己最快地速度敲程序(他们会敲得很快)。快到你几乎可以感觉到他们的沮丧,他们跟计算机的接口跟不上他们的思考节奏。敲键盘的速度是他们的瓶颈。敲完程序之后,他们可能会遇到一些编译错误和运行时错误,然后会立马修复。让他们把自己的结果跟Google到的答案进行比较。如果答案不匹配,他们会检查自己的程序,几秒钟之后他们会大叫一声“我知道了!”,然后修复错误,重新运行程序并得到正确的答案。从开始到结束,整个过程大概需要10分钟

没那么有才的应聘者会做同样的事情,但速度会稍慢一些。你会感觉到他们的思维速度跟打字速度是均衡的——谁都不是瓶颈。如果程序第一次运行的时候没有给出正确的答案的话,可能要多花些时间找出错误并排除掉。他们会在15分钟内搞定。如果他们运气不好的话,也许要20分钟。

剩下的应聘者打字速度会比平时慢得多。其实他们的打字速度可以更快,但是思考速度是瓶颈。就我们的目的而言,我们是不会雇用这些人的。你觉得是这种情况时,可以让他们再干15分钟,给他们留点面子,然后礼貌地打断他们,感谢他们接受面试,然后就此结束。如果说这次疫情给我们带来了一线光明的话,那就是你不再需要面试了五分钟之后才发现应聘者不行,然后再浪费大家几个小时的时间了,因为马上把对方打发走的话会让对方太尴尬,在网上面试就省事多了。

请注意,这个面试问题涵盖了我们对人才定义的所有要素——速度、工作记忆、工具链知识、了解计算机的工作机制以及编程能力。要想评估他们的品味,得在他们编写程序的时候注意他们的代码,选择的工具以及思考的过程。但是你可能会忽略所有这一切。我是从来都没见过能在不到15分钟的时间内解决这个问题但却没有品味的应聘者的。就像智商一样,才能的各个方面往往是紧密相关的。当他们具备若干你所期望的品质时,剩下的品质往往也会具备

旁白

我们暂停片刻,让我先来回答一些常见问题。

首先,我自己没法通过这次面试。上一次试的时候,我大概花了四十分钟才得到正确答案。通过练习我可以把时间稍微缩短一些,但这已经没有关系了——我认为仍然会比我的输入速度要慢。也就是说我属于那种没法用的。我们面试的目的是找非常有才华的工程师,而不是像我这种才能的工程师。

其次,现在已经不流行问算法问题了,浪费应聘者的时间是彻头彻尾的亵渎神灵,而且不计时的工作相关问题一般都很含糊。与其让应聘者解决前面的编程问题,不如让他们把API整合到一起,而且随便他们用多少时间都行。为什么要这么做?我们可以摆出各种各样非常好的理由,所有这些让我想起了Deirdre McCloskey在《The Natural》这篇论文(顺便说一句,非常棒的一篇文章,你应该看看)里面的这段引文:

Richard Bower是一位彻头彻尾的经济学家。他很了解索福克勒斯和莎士比亚,但是他相信经济学。[…] 从内幕交易到十几岁的捣蛋鬼,只要你为他提供任何的社会情况,他都希望借助经济学来寻找答案,或者至少用来破局。

经济学的答案是,当科技繁荣时期,软件工程师供不应求时,大家就会改变面试的方式,然后编造新的面试方式要比旧的好的一大堆理由。FAANG公司每年都要雇用一整支的工程师队伍。不降低门槛招聘团队就没法找到那么多的人。但是,跟FAANG的那些招聘经理不一样,你的报酬并不是取决于团队的规模,你也不是为了填补职位空缺而去招人的。当你需要非常有才华的人加盟时,就必须进行艰巨且没法规模化的工作才能找到这样的人并招募进来

第三,系统设计和架构问题对那些思考速度比不上敲字速度的应聘者比较有用。对于异常出色的人来说,这种类型的问题纯属浪费时间。能用最快的速度编写复杂程序,但却搞不清楚自己需不需要负载均衡器或者怎么在AWS上设置负载均衡器的人我是从来都没见过的。

判断力

判断力跟才能之间的关系往往很弱,这可以归结为:修补匠跟工程师之间有差别。这两种人很接近,但是不是一回事。修补匠造的是鲁布·戈德堡(Rube Goldberg,比喻小题大做、简单事情复杂化)机器,那纯粹是为了乐趣。工程师是要发现(往往是不直观的)约束并满足那些约束。修补匠替机器工作。工程师让机器替自己工作

大多数工程师都不是修补匠,他们做事是为了钱。不要雇这些人,因为他们没有灵魂,围着这帮人转,你会被潜移默化,灵魂会受到毒害。反过来,很多的修补匠都不是工程师。这样的人也不要雇,因为他们会建造出精美而复杂的结构,但那些结构除了自身的存在外没有任何其他用途。你要的人是既非常喜欢建造鲁布·戈德堡机器,又知道如何让机器不要偏离目标的人

或者我们还可以这么看,人才是综合能力和编程策略的结合。判断属于编程策略。

不是非得团队的每一位工程师都必须是孙子,但是你的确需要他们具有以下两种特质之一。应聘者要么应该具有良好的策略直觉,要么至少必须意识到策略的存在,并且愿意听从具有更好判断力的人的意见。最糟糕的情况是有着可怕的策略直觉但又自我感觉良好的应聘者。这种最终会浪费大家的时间,进行毫无意义的讨论,最后还会因为不满而退出。

如何去测试判断力呢?一种思路是向应聘者提出一系列揭示性问题。这是“你的弱点是什么”这个问题的2.0版。你应该问应聘者类似这样的问题,比方说“你觉得自己有多幸运?” 或者“说说看,你有没有哪一次是出乎意料地采取主动的?”他们的回答可以揭示出藏在内心深处的心理结构的重要信息。

有一个很好的经验法则,如果一个问题HR的实习生也可以提出来的话,那就是一个无特异性的信号问题。好的信号问题是有特异性的。比方说,聪明人发出智慧的信号要愚蠢的容易得多。但是,任何人编造个自己采取主动的例子也同样容易。他们的回答传递出来的唯一一个信息是看对方是否愿意遵守这种面试仪式。这个问题的字面解释是“你会不会成为公司一架很好的无人机?”应聘者的回答可以浓缩成 “是”或者“否”。即便如此,对自己的意图撒谎是很简单的事。需要一份工作的人一直都这么干。

就像面试的才能部分一样,判断部分也必须有所区别。表示战术性工程人才的媒介是代码。表示战略判断的媒介是备忘录(或备忘录的公开对等物,论文)。就像对于有才华的程序员来说写代码要容易得多那样,对有着良好的策略直觉的人来说,写技术论文也要容易得多。

战略性技术写作的经典作品有很多例子:1 2 3 4 5 6 7 8。每一个有生命力的项目和公司都至少会有那么一个经典,但这是颠倒了因果关系。要想提高开发出有生命力的软件的可能性,你得有具备出色判断力的人,并且用书面的形式把它表达出来。你想让这样的人加入你的团队。

你得这么面试。选出一个具有战略意义的技术决策。作为提示交给应聘者。他们现在要替公司做决定,并以书面的形式向工程组织传达自己的决定。你得回答他们所有的问题。对于很多人来说,往往在洗澡的时候才会灵光闪现想明白事情,但是鉴于面试的时候让对方去洗澡显然不合适,所以这部分请给他们足够的时间。一个小时,或90分钟左右的时间,你自己确定多长合适。对方在写的时候,你必须随时都在,通过私信回答问题。

看过他们写的东西之后,你会发现应聘者之间的作品质量差别很大。你要找的是清晰明了、引人入胜能打动人的作品。如果备忘录能说服你遵循应聘者概述的行动方针的话,他们就算合格了。如果你强烈不认同,但很难反驳对方的论点,也算通过。如果你认为他们的判断比你的判断更好,通过。如果他们写的东西让你看了想扔进垃圾桶,但是应聘者发出信号说这超出了自己的能力圈,也过。

否则的话,别招进来。

性格

现在,你知道应聘者是出色的程序员,并且还有着良好的判断力。接下来你得验证最后一件事,那就是跟他们合作不会带来太大的麻烦。

怎么评估呢?最简单方法是从五型人格入手。着有点像MBTI测试(迈尔斯-布里格斯性格分类法MBTI)。你特别关心的三种特质是责任心、亲和性以及神经质。心理学家对这些术语有精确的技术定义,但是用通俗易懂的话来说,你要找出(a)应聘者喜欢偷懒还是努力工作?(b)他们是令人讨厌的人吗?(c)他们会被分析瘫痪和生活的紧急情况所困扰吗?这里说的不仅仅是工作

好消息是,就面试而言,人格的心理框架很简单。坏消息是,只用在聘用了那个人之后,你才能找到所有这些信息。不过你可以设置一个低通滤波器来捕捉到一些坏苹果,但是在面试的时候几乎每个人都会拿出最佳表现。很少会表现出个人缺陷,除非工作量很长一段时间才会露出马脚。

如果应聘者在面试过程表现得很好斗的话,显然不能雇用他们。如果你找推荐人了解发现这个人几乎没干过什么,或者如果推荐人根本就不认识这个人的话,也不能雇用他们。如果对方的反应很怪异或者多少让人感觉不舒服,请不要雇用他们。但是除此之外,面试过程你能做的事情寥寥。

我面试过好几百人,也招过好几十人。我识别才能和判断力的第六感非常好。但是性格嘛,就只能比随机好一点了。因此,除非你这这方面有魔力,否则请设置一个低通滤波器,然后在应聘者暴露出不好的个性时再炒掉对方。

最后的考验

如果你决定要雇用这名应聘者了,面试必须至少持续六个小时(中间留有一个小时午餐时间)。让你的工程师每个人都面试一下这个人,每人的面试时间大概45分钟到一个小时。不管体什么问题,每个人都应该逐步升级所提出的技术问题的难度。你的目标是针对每一位应聘者调整流程,直到对方最终无法解决提出的问题。这个问题应该让他们觉得是在自己的能力范围之内,但是又要足够难,难到对方用光耗时。然后在剩下的时间里,再将难度降低一个档次,给出一个应聘者花点功夫就能解决的问题——到头来,你不希望将那个家伙的精力和锐气都耗光。

既然你已经确定要雇对方了,为什么还要花六个小时折腾应聘者呢?有两个原因。

首先,应聘者需要觉得自己已经获得了在贵公司工作的特权。如果你仅仅面试三个小时就给offer对方的话,他们反而会花1、2个星期再慎重考虑一下,最后选择去Facebook工作,因为你的公司可能有一堆的笨蛋。毕竟,你只用了三个小时来面试。这也是为什么你要给他们一个及时他们觉得自己应该能够解决但其实无法解决的问题的原因。这一点我已经进行过广泛的测试。事实证明,如果候选人在面试过程中未能解决问题,并且到最后感到精疲力尽的话,反而更有可能接受offer。经历过痛苦之后才会对能加入到一家公司感到高兴。不要夺走他们的这点乐趣。

其次,你的工程师需要知道跟自己共事的是个什么样的人。大公司最糟糕的事情之一是某个人可能突然就出现在你的团队里,而现在你必须跟对方合作。工程师需要跟潜在的未来同事解决问题,打打招呼,找出他们的不足之处。他们需要彼此之间讨论一下应聘者,并对有新成员加入团队建立期望。

面试结束后,要感谢应聘者的宝贵时间,愿意回答对方的任何问题,告诉他们你会保持联系,并祝对方晚安。第二天下午给出offer。候选人需要花点时间消化一下对自己的表现的忐忑,然后让他们心里的一块石头落地。

译者:boxi。


相关阅读

  • 观察行业 20 年,他总结出了科技的 10 条定律

  • 编者按:科技对人类起到了巨大的促进作用,这给科技业与大众的关系带来了一段美好的蜜月期。但是,随着科技巨头的垄断以及社交平台对假消息和有毒政治的推波助澜,科技业现在正面临
  • 高效率者的 7 个好习惯:他们不需要额外动力

  • 编者按:我们每个人都对成功有不同的定义,但定义你的成功是一回事,而付诸行动则是另一回事。太多的人接受平庸,安于现状,而要想成功,你需要想尽办法提高自己的绩效。作者在文中提供
  • 薛晓萍: “妈妈对你的爱从未减少”

  • □ 本报记者 罗丽薛晓萍和女儿亲爱的宝贝,要对你说什么好呢?时光如梭,感觉你还在嗷嗷待哺,一眨眼,已经长成一个亭亭玉立的大姑娘了,再过几天,你就满12岁了。在你成长过程中,带给了妈
  • 软色情,真卖肉,福利姬滚出二次元!

  • 大家好,我是乌鸦。五一假期,估计有不少旅游的人不仅没有欣赏到风景,反被淹没在了无边无际的出行人潮中。根据文化和旅游部数据中心测算,五一假期全国国内旅游出游合计2.74亿人次
  • 一个家庭最大的悲哀:凡事从家人身上找原因

  • 《处世悬镜》有言:“未有和气萃焉,而家不吉昌者;未有戾气结焉,而家不衰败者。”家有和气,则畅;家有戾气,必衰。然而生活中,我们总是对外人和气,对家人苛责。过多的苛责,不但徒劳无用,
  • 元故事 │ 叛逆母亲的人生下半场

  • 屈虹是一个母亲,同时也是女儿,过去以女儿的身份活着时,她的天性被压抑,活在母亲的精神压力下。后来自己成为母亲,她又变成了有读写障碍的女儿的精神压力。好在她的觉醒不算太晚,从
  • “考王”梁实正备战第27次高考:今年重本没问题

  • 5月13日,距2023年高考不足一个月。“考王”梁实独家回应看度新闻 ,目前正在备战第27次高考,今年继续选文科。同时,梁实表示从今年的准备情况来看,不出意外的话重本没问题 。从青

热门文章

  • 甘肃漳县:干部情撒麦田 助力夏粮归仓

  • 炎炎夏日,农事繁忙;麦穗飘香,颗粒归仓。近日,漳县马泉乡工会组织开展“干部情撒麦田,助力夏粮归仓”志愿服务行动,切实发挥广大干部职工的示范带动作用,扎实细

最新文章

  • 判断程序员是否优秀的标准:能力、判断力和性格

  • 编者按:今天提出一个话题:如何在面试中判断一个程序员是否足够优秀?关于面试和接受面试的教程太多了,但是有很多都是装腔作势、形式主义,并不能帮助你找到真正出色的人才。如果你
  • “在青岛看到家乡的乐团,好亲切!”

  • 今晚(5月14日),“文都之约·滨海交响”宁波交响乐团走进青岛音乐会第二场《青春与命运》在青岛大剧院音乐厅举行。本场音乐会,在宁波籍指挥俞潞执棒下,宁波交响乐团给青岛市民倾
  • 重回巅峰!宁波00后斩获冠军

  • 冯思璇(左二)在比赛中。北京时间5月14日凌晨,射击世界杯阿塞拜疆巴库站比赛中,宁波运动员冯思璇在女子25米运动手枪决赛中,以38中的成绩获得冠军。值得一提的是,本次夺金,是冯思璇
  • 掐时间!宁波128家文旅企业集体“放价”

  • 随着第十三个“中国旅游日”临近,5月19日,热爱旅行的“徐霞客们”将迎来集体狂欢。记者从宁波市文化广电旅游局获悉,届时,宁波将有128家文旅企业推出优惠活动,宁波市民可畅游“家
  • 歌舞、鲜花...这个节日属于她!

  • - 护士节快乐 -她们被称作“白衣天使”平日里,她们以双手托起健康紧急时,她们用生命护佑生命5月12日国际护士节来看看她们如何度过这个节日吧嵩明县人民医院嵩明县人民医院开