🌵

翻译

25 May 2017 - by @黄野

前两天,我翻译了一篇文章。原文链接:Technical interviews at Futurice — Futurice

它是André Staltz在Futurice工作时期代表公司写的一篇关于技术招聘的博客。Adnre是业内响应式和函数式编程、交互设计等领域专家。被人熟知的身份是ReactiveX的核心开发者和Cycle.js的作者。


译文如下, 欢迎指正!


我在 Futurice 已经开展过大量与软件开发相关的技术面试。我曾一度认为我面试程序员的方式与世界其他地方如出一辙。然而当听到我那些申请硅谷顶尖公司的朋友讲述他们的面试过程涉及到用白板回答计算机科学相关的问题以及整个过程看起来完全是一场在实时评估的考试时,我震惊了。当然也请各位谅解我的大惊小怪,因为除了自己创办的startup,Futurice是我职业生涯目前唯一服务过的公司。

虽然我很享受自己的大学时光,但却讨厌考试。测验给人很大压力,你有N个待答问题摆在眼前而时钟就在你面前滴滴答答。但相较之下,我依旧能从中争取到一些平静思考的时间并最终给出答案,因为教授只有在我交卷之后才会逐题评分。现在想象一种情形,教授就坐在你面前时刻盯着你,这个任务会立刻变得艰巨,甚至让你乱了方寸。

这就是一些面试,在我看来,完全走偏了的原因。招聘者拿着一连串具体问题逐条筛查而应聘者会被逐条评分。如果当中任何一个问题答不出来,应聘者会因此丢分,并可能最终无缘这份工作。

我们一直尝试让面试者始终保持舒适。

Futurice 技术面试的宗旨是采样候选人的技能,而非测验。“采样”和“测验”这两个词看上去意思相近,但其实它们之间有一个差异。在一场以“测验”为基调的面试中,每个问题都需要答案,并且候选人的每次失败都会被纳入考量。然而,在一场以“采样”为基调的面试中,采样越多,我们对候选人所掌握技能的了解也相应越精确。因此如果候选人对某个问题无法给予解决之道,我们会转换到另一个想采样的议题,从而尽可能让求职者保持舒适。用不用白板答题无关紧要,我们的目标只是采样候选人的技能。

人们很乐意谈论他们熟练掌握的东西。

当然,如果候选人对所有希望采样的问题都感到手足无措时,这大概也意味着我们双方的确不太般配。但我们总希望找寻那些让候选人谈论起来感到舒适的话题,因为人们总是乐意讲述自己熟练掌握的知识。这就是为什么有时候我们需要不断的切换话题直到最终发现候选人真正的核心技能。

让候选人保持舒适不仅仅是为了探索他们的核心竞争力,同时也是给予尊重。我们所有人这辈子至少得有一次成功的求职应聘经历,并且我们也深知被面试是为了得到一个有价值的工作机会。你想得到一份工,或者可能你现在迫切需要一份工,而这一切全凭招聘者在1-2个小时内对你的评定。

即使公司与求职者不匹配,我们也希望整个过程对候选人保证公平。而通常公平可以被简单归结为透明和尊重。在面试中,如果我们尊重候选者并把公司业务需要的技能公正透明的阐述清楚,那么面试者就有可能自己得出“这场面试的结果确实公平”的结论。

我们一直在寻找有出色沟通能力的技术达人。

由于我们的工作内容如此多样,因而职位需求也常常描述的比较大略,看起来不像是在物色具有特定技能的程序员。事实上,我们一贯方针就是“寻找具有出色沟通能力的技术达人”。

我们通常把这个方针翻译为:聪明、使命必达和善于合作。但是为了避免对“聪明”一词的误读,我们有一套更为详尽的标准。“比我聪明”是一个很好的经验法则,但我们也在寻找更深层的素养。比如,我们会评估程序员的手艺活,看对方是否有自驱力去主动创造更加简洁高效的代码。

为此,我提出了一个简单的框架用于评估程序开发的纯熟度。一个优秀的程序员能够对问题进行“低、中、高”三个抽象层次的思考。

”能够在最底层思考问题的程序员” 是指那些具有分析能力、能够像编译器一样阅读代码的人。他们以细节驱动,了解自己所选的编程语言中那些最原始的操作是如何工作的。当发现bug时,他们有能力暂时扑灭自己那种构建功能的热情,潜心研究底层代码直到最终找到bug发生的根本原因。一个采样程序员是否具备在最底层思考问题能力的面试题例子是:Javascript在什么情况下会为变量创建作用域?被这个问题卡住了?没关系,让我们跳过这个谈谈其他的!

“能够在中间层思考问题的程序员” 是指那些胸怀使命的实干家。他们可以想象软件完成时的情景并提前规划自己的行动方针,善于利用各类框架和软件库,知道如何基于原有系统构建新的功能。他们理解什么是在商言商而且机不可失,因而总是使命必达。一个与此相关的面试题例子是:你会如何用前端技术开发一个汇率转换器?可以现场展示一下吗?

“能够在顶层思考问题的程序员” 是那些不用看代码就能合理规划代码的构架师。他们深入了解不同的设计模式如何帮助完成软件开发任务并且保证所有代码的易维护性。他们会用近似悲悯的同情心谨慎权衡着如何设计软件才能使将来加入的开发者心怀感激!当面对中底层问题时,他们会停下脚步得以重新全盘考量解决方案。一个典型的面试例子是:在你心中,什么样的技术债能容许而什么是明令禁止的?

我们一直希望找到能在这三个阶层游刃有余的开发者。如果仅仅局限在中层,他们或许能完成任务,但当遇到技术难题或bugs时,却需要持续依赖StackOverflow或Google,并且极少会从构架层面思考问题。如果仅具备底层和顶层思考问题的能力,这样的人可能是计算机科学家,却不大能成为在真实的生产环境中软件的创造者。Futurice对这三者要求缺一不可!

开发者之所以需要具备以上三种能力的原因是,在解决技术瓶颈或改bugs时会需要运用底层技能,而中层开发力则在软件实际生产中不可或缺,对于软件除障或随着时间推移产生的易维护等需求则要顶层构架的鼎力相助。

总之,结论就是透明开放能让求职者倍感轻松并对每个人产生公平公正的积极影响。由于Futurice在方方面面一贯保持开放心态,我们想到为何不直接将整个面试流程和心得也分享给各位?

别担心,我们不喜欢制造惊喜,所有一切都放在台面摊开来说!如果你在寻找一个前瞻性的软件设计咨询公司,并且自信是我们描述的技术达人,那么你正是我们想找的人!发简历到 Careers — Futurice,让我们坐下谈谈:)

Back to top Go to bottom