专栏名称: 程序员的那些事
最有影响力的程序员自媒体,关注程序员相关话题:IT技术、IT职场、在线课程、学习资源等。
目录
相关文章推荐
码农翻身  ·  漫画 | 为什么程序员总是无法升职加薪? ·  昨天  
程序员的那些事  ·  娱乐圈大佬甩百度网盘链接,几十G资料首度曝光… ·  3 天前  
51好读  ›  专栏  ›  程序员的那些事

哎!创业公司操蛋的面试过程

程序员的那些事  · 公众号  · 程序员  · 2017-06-30 18:16

正文

(点击上方公众号,可快速关注)


编译:伯乐在线/飞哥的咖啡 

如有好文章投稿,请点击 → 这里了解详情


硅谷充满了这样的创业公司,疯狂崇拜在面试中能够答对几道编程难题的候选人,并认为雇佣这些人最终会带来双赢的局面:能够解决算法难题宣告着伴随着他们的加入,背后的 VC 公司一定能获得高利益回报。

创业公司:我们正在招募能够革新和改变世界的人!

面试官:请把这个字符移动到此数组上。


大多数创业公司的用户基础为零,但它们仍有可能成功。尽管技术很少是创业公司成功的原因,但我们依然不切实际地将编程难题作为招聘的最佳标准。

公司/HR 该了解自家的需求

面试中遇到的问题,与工作中遇到的问题,两者存在相当广泛的差距。因此人们总是好奇,创业公司是如何脱离初期的孵化阶段。

我是一名产品工程师。我没有正式的 CS 背景,但我会做 Web 相关的东西,并且还很擅长。在过去的 10 个月中,我一直在不断地进行面试,从未如此近距离的面对视图、控制器、甚至模型。并不是每个公司都坚持使用编程谜题作为招聘的技术指标,但使用这种方法的公司,基本上都完全聚焦在解决现实世界中不存在的奇特算法问题。

面试官: 怎样写一个完成此操作的方法?


我:在 Ruby 中写一行代码。


面试官:OK,那如果现在你不能使用标准库呢?想象一下这是一个 200GB 的文件,你必须在 Ruby 的内存中完成所有操作。


我:我 TM 为什么要这样做?


诚然,对于一些工作而言,面试要求“完全正确的”算法,这并没错。但看看周围,有多少小型、不到 50 人的创业公司在做着这样的工作?业内有个不为人知的秘密,就是大部分创业公司在头几年,做的都是“响当当的”CRUD(增删改查)应用程序,并且认为能够产生最大影响的全面、多样化的人才,往往能够身兼数职

你更需要担心的是,你是否招错人了!

现状

现在的趋势是,公司普遍采用编程谜题来招人,这往往让那些不擅长技术面试但其他方面优秀的人才,在面试中失利。

基于算法的难题通常是这么来的:面试官陶醉在自我欣赏、自命不凡的氛围中,想出了一些他们认为能够体现聪明才智的东西。 (解决前面那种算法题的)可靠方法是,从一开始就采用递归思路来解决问题。(这对于面试官而言,是一种诱惑。)如果这行不通,请再次尝试一次通过,而不是在 O(n) 操作中尝试。此时,即使只节约了额外的 1 ms,也一定能向公司证明你的价值。

从这个角度来看,你马上给未来的同事(应征者)传达了一个信息,“正确答案只有我知道,而我希望你能得到它”。这样会让他们更有压力,因为你向他暗示了存在着一个正确答案。

在我的职业生涯中,我完成的每一个产品都没有所谓的正确答案。它更像是雕刻大理石雕像:你对想要呈现的东西有模糊的概念和理解,而你必须通过不断地削减、雕琢它,来最终获得一个可能的结果。你和你的队友在此过程中一起获得最终答案,而不是以一个先入为主的答案,来指导你的同事独自获得它。

合作面试(作者的观点,后面还有例子)

这就是为什么有时我在面试过程中,强烈地主张结对编程。拿出一个小时,用来讨论 Bug 或一起想要获得的功能。今天没有发生什么有趣的事吗?这个 Bug 太“无聊”了吗?

好吧,那你为什么要这样做呢?如果这是候选人在工作中会实际碰到的典型问题,那么你值得在面试中一试。此外,即使只是最简单的错误修复,你也可以从别人那里学到很多东西。

一起做一些真正的东西。这样做完全能够改变你的动力,我一直是这样强调的。从前你独自努力地寻找一个只有你知道的秘密,但现在你们团队合作,钻研一个答案未知的难题。以前你们是独立对抗,而现在则是团队合作。这会让你的候选人放心,更容易施展技能。

没有人知道他们在做什么

技术面试中还有很多疯狂的事,我听说过,并且也曾经历过。

Max Howell 曾为开发过热门的一个工具  (Homebrew),你可能听说过他在 2015 年在谷歌面试时被拒。谷歌面试官认为他不是一个合格的开发人员,因为他没能在白板上写出(二叉树翻转)算法。

去年,我参加了一场巨头创业公司的面试,争取工程主管的职位,而当时公司的高速发展导致了一些基本问题,使得数百名开发商的产品无法顺利出货。我和公司的 CEO 和 CTO 进行了一次很好的讨论,关于对整个流程、CI、部署和管理架构进行全面的改革。然而,当我进入非编程领导岗位的最后一轮面试时,内容则几乎完全是由初级开发者问我初级的 JavaScript 问题。我在这样的情况下退缩了。

你看,我现在明白了,面试需要花费时间和精力,而大多数人只想回到做事的阶段。提出一个标准化问题,可以让你以更少的精力做更多的事,并让你比较不同候选人的能力。

但是,选上的候选人是否合适,这需要花费长时间来验证。大多数处于初期阶段的创业公司,对候选人(特别针对早期员工)所需要的技能集,太过炫目和繁杂了。它们期望候选人懂得:产品、代码、营销、设计(全能选手),会沟通,并且饱含热情。你不能像微软或苹果那样过滤掉其他人。它们是大公司,让我第一个提醒你:你并不是它们,你有不同的优先事项。

哎,反正我也没通过那些操蛋的面试!


推荐阅读:


《DHH:我小有成就,但我过不了白板面试



看完本文有收获?请转发分享给更多人

关注「程序员的那些事」,提升编程技能