在 Codurance 是如何面试技术人员的
先介绍下我自己,一年多前我来到了伦敦并加入了一家小型的软件开发咨询公司,叫Codurance。公司信奉并推广敏捷、软件匠艺(Software Craftsmanship)、测试驱动开发(TDD)。提供的服务包括软件开发、培训、技术顾问咨询等。与国内的类似公司不同,这里不会特别专注于特定行业和解决方案,而是将敏捷和软件匠艺作为核心技能应用到各个客户和行业。或者说,卖得是人。
未来我会从各个角度记录在这里的所学所感。今天先从一个很小但特别重要的角度来分享:招聘。
我想特别推荐Codurance联合创始人Sandro Mancuso的一本书:The Software Craftsman (https://www.amazon.co.uk/Software-Craftsman-Professionalism-Pragmatism-Robert/dp/0134052501),我是入职后一年才读的,你知道一般人都不太愿意读身边人写的书,觉得不会太好。但这本书可以说是醍醐灌顶,解答了开发技术人员的很多职业问题,或提供了选择。其中有整一章,介绍了招聘的问题。因为招聘,是一家技术公司保证其文化的基础,也是每一个雇员确保其工作环境质量的重要因素。所以我们一直坚持是让未来会和应聘者一起工作的人参与到面试,并作出主要决策,而不是由管理人员或HR主导。同时面试的问题,也必须和工作场景相关。
下面我就说一下招聘的流程。
一切还是从简历开始,但这一关会非常的松,因为从纸面上很难看出一个人是否合适。如果一个应聘者表示出了对于TDD、敏捷的兴趣或者了解,那都会尝试去聊一下。
之后HR会试着接触,一般是十几分钟的电话聊天,这一步都不能算是面试,更多是了解应聘者是否想应聘,职业状态等等。基本就是瞎聊聊,你知道,西方人真的很擅长说正事前瞎聊聊。
如果有意,HR就会在公司招聘群里(我们用Slack)贴出消息,邀请志愿者参与第一轮电话沟通。由于公司里主要都是技术人员,所以大多时候也是技术人员参与,但有时也会是业务咨询顾问或者其他角色。这一轮主要是看面试者的职业热情。是的,热情(Passion),是很重要的特质。我们不是说加班的热情,而是说对于TDD、敏捷、DevOps、重构等等公司热衷的核心价值的热情,对于技术开发职业道路的热情,是否会不断学习和思考,是否乐于分享和交流。同时所有面试也都是双向的,我们也会介绍公司文化、办公室环境,解答任何问题。
虽然说面试很大依赖于主观判断,但参与面试的志愿者会要求在一个平台上记录下评价和反馈。这些对于面试者和所有公司员工也是可见的,因此写的人必然会尽力从客观和有建设性的角度去记录,如果应聘者有疑问当然可以要求进一步沟通。
之后就会进入技术面试。技术面试有两轮,第一轮是结对编程(Pairing Session),第二轮是白板+聊天(Whiteboard Session),各自都是两小时,但不会放在一天,目前因为疫情也是只能线上。
这两轮其实都是为了模拟实际工作中的场景,在平时开发工作中,我们也是大多数时候结对开发。虽然说面试志愿者(不知道你有否注意到,我不太愿意用面试“官”这个词)不会在过程中写下代码,但是沟通交流还有提出建议和平时是一模一样的。一般我们会从常见的Kata库(https://katalyst.codurance.com)中选择一个适合面试者能力和面试时间长度的主题,用的最多的是Mars Rover和Bank Kata,编程语言和开发环境都是由面试者决定,硬性要求是必须以测试驱动的方式开发。当然,完不完成也并不是决定性的,是否在一直有序地推进更为重要。
在这个过程中,任何卡壳或者有疑问都可以随时交流,如果有算法或者语法想不起来,或者可以Google或者可以查资料,我被面试和面试应聘者的时候都发生过一起搜索的情况,毕竟这在平时工作中不是太正常不过了么。很多时候应聘者之前都做过同样的题目,但这不影响面试甚至还更好,因为在每一步时,双方都可以提出问题,进一步交流对于TDD不同的理解,同时给出建议和反馈。如何提出问题,如何接受建议,如何友善而有益的讨论,才是结对编程面试的考察点。当然,这些考察点在面试前也会很清晰地告知面试者。
在这一轮面试结束前,志愿者也会给出反馈(Feedback),回答问题,确保这是一个双向的对于面试者也有价值的过程。
我们不会考察纯算法或者艰深的编程语言知识,更不会在纸面上做题,实际工作中用不到或者可以临时学习的东西,都不会考察。换个角度说,如果面试他人一方都不愿意亲自经历的过程,怎么能用来筛选未来一起工作的人呢。
第二轮也是最终轮面试,一般会由资深员工或主管进行,当然由于浓厚的工程师文化就算是主管也是有持续的技术背景的,再加上一个旁听学习的员工。根据不同面试职位主题会不同,有些只是继续聊天,涵盖各种常见的技术或方法论话题;有些会使用白板讨论一个系统的设计、可测试性、各种决定因素。
我当初面试的时候,面试的是“学徒”的职位,这个职位会是另外一个故事,大多应聘者都是改变职业或者对于TDD不熟悉或没有在实际工作场景中应用过的人。在电话轮后,对方(现在是和我一个项目里的业务顾问)给了我一些TDD的视频和资料方便我准备。两周后我用不流利的英文(现在多少还是)、不太适合TDD的Eclipse开始了面试,还从清单里硬选择了一个不熟悉的Kata,过程中现场想不起来enum语法一起Google。但在整个面试过程中,我能感觉到这家公司的人也是未来我想要一起工作,并可以从他们身上学习的同事,同时虽然开始的晚却也是给Offer最迅速的一家,因而直接就拒绝了其他到最终轮、职位和薪酬也预计会更高的公司。
版权声明: 本文为 InfoQ 作者【sherlockq】的原创文章。
原文链接:【http://xie.infoq.cn/article/215bed0da90558da25c21d2e7】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论 (4 条评论)