在旧金山面试前端工程师

Avatar of Philip Walton
Philip Walton

DigitalOcean 为您旅程的每个阶段提供云产品。 立即开始使用 $200 的免费积分!

以下文章由 Philip Walton (@philwalton) 客座撰写。 Philip 最近经历了一系列在湾区科技公司面试前端工作的经历,结果发现面试并非他想象的那样。

几个月前,我开始漫不经心地在旧金山湾区寻找前端工作。 我喜欢我现在的工作,但我感觉我在我所在的城市已经无法满足我的技术发展需求了。 我想离开我的小池塘,看看我在一个大池塘里,与世界上一些最好的开发人员一起,会有什么样的表现。

当我开始寻找工作时,我知道我想在一个我不会是 *唯一* 专家的地方工作,所以我只申请了知名的大公司。 整个经历最终非常有价值,通过它我有机会见到了我的偶像,并参观了我最喜欢的公司的一些办公室。

但并非所有事情都很好。 事实上,当我回顾整个面试过程时,我忍不住觉得科技公司面试前端候选人的方式存在着根本性的问题。

在继续之前,我想提出以下免责声明。 本文的部分内容将是批判性的,因此我认为最好将这些公司的名称保持匿名。 毕竟,它们是谁并不与我的主要观点相关。

我将分享的唯一细节是我申请并进行了电话面试的六家公司,其中四家邀请我进行现场面试。 我总共接受了 23 次不同的面试,全部都是技术性的。

值得一提的另一点是,这些都是知名公司。 我敢肯定你们都听说过这些公司,我之所以提到这一点,不是为了吹嘘,而是为了表明,既然它们是设定标准的公司,那么我所经历的体验可能非常接近常态。

我的体验

总的来说,我的体验非常好。 其中一些公司因其令人痛苦的面试而闻名,但我经历的并没有我听到的故事那么糟糕。 每个人都很友好,每个人都很专业,如果我对某个问题不知道答案,我从未感到被轻视。 大多数时候,它只是看起来像两个讨论如何解决问题的人之间关于技术的简单对话。

但明显缺少了一点:特定于前端的问题!

现在,我不是面试专家。 我相信大多数招聘经理会对如何最好地衡量任何特定面试问题的有效性存在分歧。 但有一点我相信每个人都可以同意,那就是你所提出的问题应该是那些最合格的人能够最好地回答的问题。

换句话说,如果一个有才华的计算机科学毕业生,刚从大学毕业,几乎没有前端经验,却能够在你的面试中胜过一名优秀的前端工程师,那么你可能问错了问题。

这基本上概括了我的批评。 我绝大多数的面试问题都是逻辑谜题、通用编码挑战和算法设计问题——这些都是必要的,但远远不够充分。

缺少了什么

我知道有几个人做了很多面试,我从他们那里听到一遍又一遍的同样一句话:我宁愿聘用一个聪明的人,然后教他们 X,也不愿聘用一个对 X 了解一切,但缺乏创造力、逻辑和推理能力的人。

我理解这一点。 问题是前端开发是一种特定领域的技能。 它不仅仅是关于智力能力,还关于知识和经验。

前端工程师,从最基本的层面上讲,是编写在用户浏览器上运行的代码的开发人员。 如今这意味着一个编写 HTML、CSS 和 JavaScript 以及了解浏览器公开的各种 API 的人。 通用术语“程序员”和特定术语“前端工程师”之间的区别仅仅是知识存在的领域。 一名超级明星前端工程师可能也是一名超级明星程序员,但反过来并非一定如此(通常并非如此)。

如果你同意我刚才所说的话,那么你就会理解我对以下主题在所有 23 次面试中都缺席感到惊讶。

  • 我从未被问过任何关于新的或即将推出的 HTML API 的问题。
  • 我从未被问过任何关于各种浏览器和浏览器版本之间差异的问题,以及如何针对这些差异或处理这些差异的问题。
  • 我从未被问过任何关于桌面浏览器和移动浏览器之间差异的问题,以及关于为在两者上运行的 web 应用程序构建技术的任何问题。
  • 我只被问了一个 CSS 问题(只有一个!),那就是“告诉我行内和块级之间的区别”,即使大多数非前端人员都知道这个问题。
  • 我只被问了一个与 DOM、DOM 事件或事件绑定有关的问题。

我被问过很多类似这样的问题

  • 编写一个函数,它接受两个已排序的数字列表,并将它们合并成一个已排序的列表。
  • 给定一个整数数组(正数或负数),找到具有最大总和的子数组。
  • 确定给定字符串是否是回文。
  • 给定一个大型哈希表,其键是电影名称,其值是这些电影中演员的列表,编写一个函数来确定特定演员的 培根数

再说一次,我不想暗示问这些问题没有价值。 问题是它们与前端开发无关。 正如我之前所说,大多数拥有强大计算机科学背景的优秀开发人员都可以回答所有这些问题,即使他们从未构建过网站。

所以发生了什么?

我确信问题的一部分是,对于仅限前端的职位以及“前端工程师”本身这一术语的新颖性。 它不是一个定义明确的术语,并且根据使用它的人的不同,可能意味着非常不同的东西。 我愿意承认我的前端角色理念可能与发布招聘信息的人不同,但我怀疑这不止于此。

另一个可能的原因是,我大多数的面试官本身并不是前端工程师。 他们是高级团队成员、招聘经理、副总裁、创始人等,但他们通常不是前端工程师。 因此,他们坚持他们所知道的,并且他们问了他们一直问的同样问题。

我的建议

鉴于我最近的经验,我想向未来可能面试前端工程师的任何读者提供以下建议。

  • 前端候选人应该至少由一名前端团队成员(最好更多)面试。 如果你没有前端团队成员,请找到你认识并信任的人,并请他们来做这件事。
  • 显然,逻辑和算法之类的主题很重要,尤其是对于某些公司而言,但如果你正在面试前端职位,那么很大一部分问题应该集中在前端。
  • 如果你真的想问关于逻辑和算法的问题,想办法将你的问题与特定于前端的知识结合起来。

为了说明最后一点,与其问关于归并排序的复杂度,不如问关于这个 jQuery 表达式的复杂度

$("#nav a")
  .addClass("link")
  .attr("data-initialized", true)
  .on("click", doSomething)

对这个问题的正确答案将展示对基本计算机科学原理的理解以及对 jQuery 在幕后所做的事情的更深入的了解。

与其让某人编写一个添加两个日期的函数,不如让他们构建一个简单的日历小部件来配合它。

与其询问他们关于 CSS 的琐事,不如给他们两段文字,看看他们能想到多少种将它们并排排列成两列的方式。 然后让他们描述每种方法的优缺点。

最后,优秀的工程师往往非常自觉。 由于浏览器技术通常不在学校教授,因此大多数前端工程师都是自学成才的。 因此,与其询问他们所知道的(这价值有限),不如询问他们如何保持领先,以及如何避免落后。 他们正在做什么来确保他们在一年后比现在更出色?

结论

面试是一件棘手的事情,即使是一些最具创新性的公司有时也会做错。 而且,由于前端这一术语的模糊性和随之而来的期望范围,面试前端职位甚至更加困难。

我从许多面试官那里得到的印象是,这些公司中的大多数直到最近才开始意识到专门的前端人员的重要性。 他们的前端代码库开始变得庞大且难以管理。 问题的一部分是管理它们的人并不精通前端最佳实践。

如果你想聘用一名前端候选人,请考虑重新审视你的面试流程。 如果你正在做本文中提到的某些事情,你很可能错过了很多优秀的人才。

如果你正在寻找前端工程师的工作,现在可能是最好的时机。但根据我的经验,我建议你复习一下计算机科学的基础知识。我强烈推荐一个资源,那就是MIT 开放式课程的系列讲座,特别是算法导论

最后,我希望这篇文章不要被视为一个对面试问题不满的人的抱怨。这绝对不是我的本意。我希望我能尽我所能,为我们行业的前端工作提升标准。我相信,实现这一目标的最佳途径之一,就是帮助公司为这些职位招聘合适的人才。