招人不看代码,看什么

做了这么多年技术面试,回头看,最贵的成本不是招错一个人,而是你根本不知道自己错在哪里。

早期我面试有个执念:能把算法题写出来的人,工程能力不会差。这个信念让我错过了一些人,也让我招错了一些人。直到有次被现实教育——一个面试表现非常出色的候选人,入职三个月就让我开始怀疑自己的判断力。

第一次看走眼

那个候选人来的时候,我们聊了两个小时。从系统设计到编码细节,他都能接住。我问他一个并发场景怎么处理,他几乎是脱口而出地给了三种方案,还主动比较了优劣。

面试结束我就跟团队说,这个人我要了。

入职后呢?代码确实写得不错,Review也能过。但慢慢地问题浮出来了:跟产品对需求理解有偏差时,他不会主动澄清,而是按自己的理解做完再说。跟后端联调遇到接口不一致,他倾向于等别人改而不是沟通解决。分配任务时,他永远选技术最有趣的那个,而不是业务最紧急的那个。

三个月后我开始反思:我在面试里到底看到了什么?

答案是:我看到了一个"面试能力强"的人,但没看到一个"工程能力强"的人。这两个东西,重叠度远没有我想象的高。

"流畅"的陷阱

后来我琢磨出一个概念叫"面试流畅度"。有些人在面试环境下特别自在,因为他们花了大量时间准备。算法题刷得多,系统设计有模板,行为问题有标准答案。面试的时候你看他什么都接得住,感觉特别好。

但真实工作不是面试的翻版。真实工作里,你会遇到文档不全的遗留系统,需求模糊的业务场景,以及跟不同背景的人协作的各种摩擦。这些在45分钟的面试里,很难测出来。

相反,有些候选人面试时不太流畅。被问到不会的问题会卡壳,需要想一会儿才组织好语言。但这种人在实际工作中可能更靠谱——因为他习惯在不确定的环境下思考,而不是靠预演的答案。

所以我现在面试会特别观察一件事:当他遇到不熟悉的领域时,怎么处理

不是看他答对答错,而是看他的思考过程。是坦诚说"这块我不太了解,但我觉得可以这样想",还是硬撑着用模糊的概念包装自己?前者在实际工作中遇到不会的会去学、会去问。后者呢?他可能会用一个看起来很漂亮但漏洞百出的方案,只因为这样显得自己"什么都会"。

协作这道题,比代码难

另一个教训是关于协作能力。

我以前觉得,协作能力是加分项,技术能力才是基本盘。后来发现不对。一个技术80分但协作90分的人,对团队的贡献往往大于技术95分但协作50分的人。

原因很简单:现代软件工程不是一个人的战斗。你代码写得再漂亮,如果跟上下游对接总是出问题,排期永远估不准,代码风格跟团队格格不入——那你的"技术能力"其实打了很大的折扣。

怎么在面试里看协作?我有一个习惯:问候选人"你有没有遇到过一个跟你意见不同的同事,最后怎么处理的"。

大部分候选人会准备一个政治正确的回答:我尊重了他的意见,我们找到了折中方案。但我会继续追:你觉得他为什么那么想?你理解他的出发点吗?最后的方案你真的认同吗?

多追两轮,真实态度就出来了。有些人骨子里觉得"我是对的,他只是水平不够理解不了",有些人是真的能站在对方角度思考问题。前者在团队里容易变成独狼,后者更容易成为技术Leader。

一个问题见真章

还有一个我觉得好用的方法:给一个开放性的实际问题,看他的思考维度。

比如我会问:"如果我们有一个页面加载速度需要优化,你会怎么思考这个问题?"

一般的回答:看性能指标,分析瀑布流,做代码拆分,上懒加载。

好一点的回答:先搞清楚慢在哪里——是首屏还是交互?是所有用户还是一部分?数据层面看P75还是P99?

更好的回答:除了技术手段,还会想这个页面的业务目标是什么。如果是交易类页面,用户对等待的容忍度低,优化要激进。如果是内容消费类页面,可能用户对加载时间没那么敏感,投入产出比要考虑。

区别在哪里?一般的回答在解决一个技术问题。好的回答在解决一个工程问题。更好的回答在解决一个业务问题。

这三种人在团队里的角色是不一样的。你需要有人能深入技术细节,但你更需要有人能站在业务角度判断技术投入的优先级。后者往往才是你团队里最稀缺的人。

招"合适"的人,不是招"最强"的人

说到底,招人不是选拔赛。不是你招了一群最厉害的人,团队就自然厉害了。

我见过一个团队,每个人单拎出来都很强,但凑在一起就是出不了活。原因很简单:每个人都觉得自己应该做最核心的事情,没人愿意做"脏活"。每个人都有自己的技术偏好,谁也不服谁。

也见过一个团队,没有特别耀眼的明星,但搭配合理,互相补位。有人擅长架构,有人擅长调细节,有人沟通协调能力强。这种团队反而产出稳定。

所以我现在招人,核心就看三点:

思考方式——遇到新问题时,是从第一性原理出发思考,还是套经验?前者上限高,后者下限稳。看你的团队当前需要什么。

协作意愿——是愿意为了团队目标做一些"不那么有趣"的事,还是只做自己感兴趣的部分?

成长曲线——这个人一年后能承担比现在更大的职责吗?他有没有主动学习的习惯?

代码能力当然重要,但它只是入场券,不是决定因素。

最后说点实在的

这些判断标准说起来容易,做起来难。面试官自己的认知盲区、情绪偏好、时间压力都会影响判断。我也不是每次都看得准,只是比早期少犯了一些低级错误。

有一个方法我觉得对提高判断力有帮助:每次面试后写一句预测,入职三个月后回来对照。"这个人我觉得在遇到跨团队冲突时会选择回避"——三个月后看看是不是这样。

做得多了,你会慢慢发现自己在哪些类型的判断上容易出错。比如我早期容易高估"表达能力好"的候选人,后来意识到,说得好和做得好是两回事。

招人这件事,与其追求每次都对,不如建立一个反馈循环,让自己每次都比上次准一点。

You voted 2. Total votes: 2

添加新评论