开发人员的招聘方式,已经无可救药地失效了。

神译局是旗下编译团队,关注科技、商业、职场、生活等领域,重点介绍国外的新技术、新观点、新风向。

编者按:在技术面试中,常用的代码考量手段无非是现场写代码和留算法笔试作业,但这两种方式可以考察的因素非常有限,因此受到了一些技术人的吐槽。作者Neil Sainsbury是一位资深的软件开发行业从业者,原文标题《The software industry’s greatest sin: hiring》。

整个软件行业中最大的罪恶之一:开发人员的招聘方式,它已经无可救药地失效了,需要彻底的重建。

我从事软件开发工作已经有15年左右的时间了。在这段时间里,我做过上班的开发者,经营过自己成功的软件企业,也曾在一家VC投资的创业公司担任过联合创始人,还曾招聘和管理过开发人员。

这段经历给了我一个视角,让我可以从各个角度去看待招聘:从自己作为一个找工作的开发者的角度,到站在另一端的面试官的角度。在本文中,我试图解答是什么让一个优秀的招聘者成为优秀的招聘者,如何应对 “坏的招聘者 ”,怎么找 “有影响力的 ”开发者等等问题。要总结出开发人员招聘方式中的诸多错误,是个艰难的任务,但有一个方面我想重点大讨论,这是个大问题。

单一维度

当一个高管被聘用后,用人单位自然会从多个角度对这个人进行评价。这个人的亲和力如何?他的沟通能力如何?他对自己的想法的论证能力如何?他对这个行业的看法如何?他对这个业务领域有什么看法?他是如何处理压力的?这一系列的问题不胜枚举。最终会对这个人所有这些素质做出综合的评价。

相比之下,当一个开发者被聘用后,几乎只注重算法/技术方面的东西,而完全忽视了这个人本身。这是一种变相的智商测试,而且是蹩脚的测试。而在这个过程中,我们几乎忽略了这个人的整个背景。

这个人有没有打造过什么产品?有谁会在乎呢!这个人是否有足够的勇气和毅力?这个人是否有惊人的魄力和毅力? 谁在乎!这个人的沟通和写作能力强吗?谁在乎!这个人的亲和力怎么样?谁在乎啊!谁在乎啊,很显然,唯一重要的就是一锤定音、赢家通吃的高风险游戏:我们称之为技术面试。

现在的开发者招聘过程中,甚至会把候选人过去的技术工作和贡献忽略掉,就当做不存在。以Homebrew的创始人Max Howell的经历为例:“Google:我们90%的工程师都在用你写的软件(Homebrew),但你不能在白板上反转二叉树,所以滚蛋。”这就相当于一位知名的画家,因为答不出达芬奇出生的城市这类问题而被拒绝。

完全不可理喻。

我认为对于软件行业,关于开发人员的招聘,在这方面的问题尤其严重。据我所知,几乎没有其他的 “白领 ”职业会在会在招聘过程中,如此彻底地忽略你的实际能力、历史成绩和综合素质。那么,作为一名开发者,我们为什么要容忍甚至参与到这场闹剧中来呢?

糟糕的开发者

更为荒谬的是,根据我的经验,一个开发者能够带来的价值,很大一部分是在技术领域之外。

我所招过的那些最差的开发者,他们在技术上都是非常优秀的。

那些技术上优秀的开发人员,最常见的问题就是他们太过沉迷于自己的代码世界,不明白他们所构建的东西没有人关心,也没有人会用。在这种情况下,一个技术不那么精通的开发者,但更了解终端用户的需求,却成了“10倍(或1000倍)效率”开发者,因为他们花了5个小时和终端用户交流,而一个技术优秀但在社交上毫无头绪的开发者,却要花几个月的时间去研究一个没有人在乎的功能。

如何知道一个人是否有这种理解用户的 “肌肉”能力?其一,他们很可能自己做过产品和交付过产品,和自己的客户打过交道。而且他们的社交能力强,沟通能力好,如果你在招聘过程中了解到他们还写博客,你就会注意到这一点。换句话说,现在整个软件行业在招聘时,似乎都对这些素质不屑一顾。

我观察到的另一个常见的情况是技术上优秀的开发者与企业的目标不一致。他们会积极追求技术上的乐趣,而是追求公司的利益。

你想招一个对.Net有 “激情 ”的人?没问题! 我就是。但我的这种热情已经超越公司的利益,Net Core看起来很好,我对.Net Core也很有热情,所以让我们升级到.Net Core吧,尽管这样做对我们的产品没有好处,而且我们的大部分客户在3个月后就会开始流失。

你招的人定义了你的公司

一家公司的招聘行为通常也会影响公司及其产品本身。一家公司是由其中的员工和他们所做的选择塑造的。所以,如果你只招聘技术型的人,那么当你只能做出没有品位的产品时,也没什么可惊讶的了。比如说,Google近几年无法构建和执行有凝聚力的产品,这其实不奇怪,像Stadia(Google推出的云游戏平台)这样的产品完全是来自不惜一切代价写代码的技术部门的思维,并没有深入了解用户的需求,也不知道怎么为用户打造好产品。

程序员招聘已经出了问题

我们需要摒弃这种认为只需对一个人进行“智商测试”就能衡量一个人的想法。我们需要充分认识到,作为一名优秀的软件开发人员需要综合素质,需要具备各种能力,包括技术能力、经验、品味、勇气、毅力和独立性。

作为一名优秀的软件开发人员,应该具备跨学科的素质,我们需要摒弃这样的观念:仅仅是擅长 “修建代码 ”和反转二叉树就是一名好的开发者,这不应该成为评价团队工作和打造产品的唯一标准。

译者:蒂克伟