程序员的面试问题一直是个玄学。有的公司认为应该考量应聘者的技术深度与视野,有的公司则认为起码的白板手写代码是基本要求。而在面试者们看来,都是拧螺丝的 Crud Boy,你让我瞎造什么核弹。前端
前不久,华为宣布面试改革,将增长编程环节,充分考察程序员实际动手编程能力。改革中有几个要点:1. 应聘人员要先在网上进行 90 分钟的网上编程,符合要求以后才能进入到面试环节;2. 应聘人员须选择一种编程语言进行两轮面试,每轮约 45 分钟,30 分钟编程、15 分钟提问讨论。面试官独立进行面试考察,并根据岗位要求设计编程考察题目,应聘者需经过当面或视频编程的方式完成题目。程序员
对于程序员来讲,把需求转化为代码实现,并写出健壮程序是最基础也是最重要的能力。华为此举优化了软件类人才的面试流程,面试更以考察软件工程能力与编码能力为核心。web
事实上,对此作法表示赞同的不在少数:面试
做为 IT 行业的资深 HR,我表示承认;编程
做为一个面试无数次被拒的程序员,我表示承认;canvas
实际操做能力是得考察一下;app
不编程怎么招聘程序员?二十多年前我本身应聘,后来我负责招聘,都是要上机写程序的。编程语言
可是也有一些不一样的声音,认为这样的考核标准太过严厉:分布式
不说别的,就把华为最牛逼的人,最优秀的人拉出来,看看他徒手能写几行,用相同的方式去把华为程序员过一遍,估计 80% 须要淘汰,你们同一个圈子,何须为难同胞。ide
这样的抱怨,也常常发生在一些“功成名就”的优秀老程序员身上:
“我如今接近 40 岁了。去年 12 月,我离开了个人创业公司,再也不担任该公司的 CTO 职位。自那以后,我至少经历了 10 次失败的面试,这些面试都有编程测试环节。我有近 20 年的开发经验,包括早期电子工程开发和完整的分布式 Web 应用程序开发等。我建立的软件能够在全球大批量的专业生产工厂中实现完整的产品追溯。然而如今,我甚至找不到一个开发的职位,由于我通不过这些编程测试。“
一样的事情在大龄程序员不那么受“歧视"的国外也依旧存在。一位具备 10 年工做经验的计算机专业博士,不停地用网上题库进行练习,想加快编程速度。在此以前,他多次被一些 IT 巨头公司拒绝。
这样的面试要求,不只会淘汰不少不合格的软件人员,也为不少高级开发工程师敲响了警钟。若是想进大厂,面对这样的面试要求,你慌不慌?
2对于面试现场编程,BAT 们未必赞同华为作法
现场编程是最能直观体现程序员编程水平的一种方式,也是程序员证实本身的最好方式。咱们也曾在报道中看到过程序员大佬现场编程拿到高薪职位的各类版本。
好比某位程序员去京东面试前端岗位,在技术面这一轮直接用 JavaScript 写了个魔方特效,经过终面,拿到高薪;
再好比某位去腾讯面试的程序员,现场用原生 JS+canvas 开发出了一款五子棋游戏,成功拿下该岗位......
华为面试改革后增长了现场编程的环节,那么 BAT 等 IT 大厂面试是否有现场编程这个环节呢?咱们分别询问了阿里、腾讯和百度的同窗。
根据反馈:阿里有笔试手写代码的环节,但没有现场编程的环节;腾讯各个团队的面试不同,有的团队须要上机写代码和编译提交;百度没有现场编程环节,甚至有的团队连手写代码的环节都不须要。
这样来看,BAT 都不作的事儿,华为为何要作呢?
对于华为来讲,之前用大规模招聘来快速补充业务发展所需的人力压力,因此他们的面试步骤也是由于这个诉求而逐步创建起来的。在面试改革的文件里,他们提到“HR 看简历面试又不深入,致使大规模进人、大规模走人”,这样来看,编程环节能够极大简化 HR 检查和审核的过程。
看来应聘华为的程序员同窗应该是数量庞大,针对大批量申请者,这样的现场编程面试虽然会漏掉个别优秀的人,可是不会影响华为招聘的节奏。
对于华为这一面试作法,若是 BAT 都持保留意见,那么中小型公司是否是就更不必了?
咱们采访了一位 30 余人技术团队的负责人,他表示:“在咱们这样体量的团队中,让程序员在面试时现场编程是彻底不必的,经过笔试题目和现场问答,彻底能够了解到应聘程序员的实力。”
3除了动手编程,还能如何了解程序员的软硬实力?
写代码是程序员的生命力所在,不管是现场编程仍是手写代码,面试官老是试图从这些代码中看出应聘者的代码水平和习惯,例如代码的可读性、可维护性如何;界面、功能的设计能力如何;思惟、代码结构是否清晰等等。
可是有时候面试官的水平和眼光也决定着这种作法是否真的那么禁得起考验。
Facet 的 CEO 曾抱怨本身在 Netflix 时,不当心拒绝掉了亚马逊 Prime Air 的创始人。另外一位从业 30 多年的业内人士看到这个消息,也感慨本身的一位同事,一位公司内排名 Top 5 的程序员,在面试其余公司时,首轮就被刷掉了。这说明不只程序员自己拥有过硬的实力很重要,招聘者是否具有伯乐的眼光更重要。
招聘新思路——创建工做样本测试
“如何在短期内了解程序员的软硬实力”是每一个招聘者的必修课。诺贝尔奖得主 Daniel Kahneman 因其在判断和决策方面的成绩而闻名,他在早些时候接受采访时表示,面谈对于选择最佳岗位候选人来讲是很是糟糕的,但遗憾的是他并无提出替代方案。不过,著名的工程师兼评论员 Thomas Ptacek 在发表的招聘方法论的文章中提出了这样一个招聘方法——创建工做样本测试。相比于询问应聘者的工做内容,让应聘者实际操做是更好的一个方式。
工做样本测试须要具有如下特征:
尽量地反映出应聘者在将来将要完成的实际工做;
要是标准化的,每一个应聘者都要进行一样的测试;
最终生成数据和评分,而不是简单的及格或不及格。
Thomas Ptacek 曾尝试使用工做样本测试,他们在一个单文件 Sinatra 项目中构建了一个电子交易系统,接口为定制的二进制协议,同时构建了 web 接口来驱动协议。应聘者须要找出这个交易体系中的缺陷。
“这样一个小测试须要应聘者在几小时内编写出几百行代码,比其它任何面试都更有预测力”。Thomas Ptacek 表示:“相比于传统的面试方法,应聘者彷佛更喜欢这样的测试。另外,在工做样本中作的评估越多,面谈中须要谈的内容就越少。”
这样的工做样本测试也适用于纯开发任务,例如面试官能够实际构建和部署一个应用程序,并从应用程序中划分出一些功能区域,删去某些功能,让应聘者从新添加。
招聘常规思路——历史项目描述及笔试题目
如何才能快速了解到程序员的软硬实力?“交流历史项目是一个很好的方式”。某位技术团队负责人表示:“我通常的面试时间是 40 分钟到 1 个小时左右。从历史项目的描述中,我能够验证他是否曾真正参与到该项目中,也能很快地了解到他以前在团队中扮演的角色、作的事情,同时还能够就该项目发散到其它技术细节。另外,这样的描述也顺带考察了应聘者的表达能力和对技术细节的关注和处理能力。”
某公司 HR 表示:“HR 面试程序员的时间大概在 25 分钟左右,来公司之后先作一套题,简单粗暴有效。笔试题目除了考察基础的技术功底以外,也会增长一些场景题,考察应聘者的应对能力。”
4面试高级岗位,还须要进行技术细节笔试吗?
前几日,一篇题为《我是技术总监,你干吗问我技术细节?》的文章在技术圈火了,文章的起源是猎头妻子向做者抱怨,“如今的客户真难伺候,招的是 VP,问的全是与细节相关的问题,最终,候选人抱怨企业小瞧了他,企业则吐槽这哥们很水。”这一话题也引起了你们对于面试高级岗位是否还须要进行技术细节笔试的讨论。
针对这一话题,咱们也咨询了专业猎头,他表示:“若是你在沟通中已经获知了应聘者有很是好的编程底子,或者招聘的是高级技术总监这样级别的岗位,通常是不须要进行现场编程或笔试题目考察的。咱们会经过他在行业中的影响力、以前的项目经历、对于问题的解决思路和前瞻考虑等方面来考察面试者能力。”
上善伐谋,次善伐交,下善伐城。因为国内不少科技公司尚处于发展阶段,因此相似 CTO、技术 VP 等职位可能仍须要在前线“攻城略地”。可是不管是否要冲在一线,技术管理者的工做优先级,确定是要放在对前瞻技术的预判、对团队的管理、与业务线的协做上。若是这些事情占据他们绝大部分精力,他们是不会有时间去写代码的,不少大厂 CTO 也坦言”本身如今不写代码了“,固然这并不意味着他不会写代码。
此前咱们在采访蚂蚁金服 CTO 程立(鲁肃)的时候他曾经表示:”虽然我不碰代码了,但支付宝到底有多少个系统,当用户第一次点击这个系统会呈现什么样的状态,整个过程我都很是清楚。因此若是支付宝出任何故障,我会第一时间知道哪里可能会有问题,哪一个关键点会出问题。“
若是是你,工做十年以后再次求职,你还愿意和刚毕业的求职者一块儿,作一份动手编程题吗?