深入探讨揭示JavaScript候选人解决问题、适应性和协作能力的筛选流程。
译自 Hiring a Javascript Dev? Use These Interview Techniques,作者 Artem Barmin。
你决定聘请一名JavaScript 开发人员。你希望他们各方面都完美无缺——能够驾驭 JS 疯狂的生态系统,拥有你所选技术的深厚专业知识,并且精通核心计算机科学原理。是的,这是铁三角的另一种说法,我们不可能样样都兼顾。但我们不能尝试一下吗?
在本文中,我想分享我们的经验,介绍我们面试开发人员时所用的方法,以及我们如何确定候选人在上述三角形中的位置。但是,首先必须建立一些基础的理解。
有些技能是不可谈判的。非常感谢 Chirag Jain,他将这些技能提炼成一个清晰易懂的列表:
- 解决问题的能力
- 批判性思维
- 持续学习
- 团队精神
- 自我管理
因此,这些是任何领域工程师都必须具备的素质。
这取决于你的具体情况。我知道,这是一个惊人的发现。但是,你是在寻找能够解决问题的人,因此对问题的分析会勾勒出所需的技能组合。为了简洁起见,我更喜欢 UNPHAT(再次感谢 Oz Nova,他的关于技术选择的文章给了我灵感)。它代表 Understand(理解)、Numerate(列举)、Paper(论文)、Historical context(历史背景)、Advantages(优势)和 Think!(思考!)
- Understand(理解) 问题:你的项目面临哪些具体的挑战?你是正在构建高性能 Web 应用程序、维护遗留代码库,还是创建新的框架?
- Numerate(列举) 多种解决方案,并考虑解决问题的不同方法。这是否可以通过特定框架的专家或拥有广泛生态系统知识的人来解决?- 研究与你的问题相关的技术和方法的
- 研究与你问题相关的技术和方法论的 Paper(论文或文档)。这可能涉及阅读特定框架的文档或研究你的应用类型的的最佳实践。
- 考虑你项目的Historical context(历史背景)。什么样的经验会完美匹配你项目当前的状态和未来方向?例如,如果你正在现代化一个大型的jQuery代码库,那么一个有jQuery和现代框架如React或Vue经验的开发者可能是理想的。如果你正在用最新技术构建应用程序,那么一个有早期采纳和快速学习能力历史的人可能更适合。
- 权衡不同开发者档案的利弊。React专家可能非常适合您的项目,但要考虑您可能在更广泛的JavaScript知识或核心计算机科学技能方面所做出的牺牲。
- 冷静评估不同开发者档案如何满足你的需求。需要改变哪些事实,你才会优先考虑一个专业领域而不是另一个?
现在是时候将这些结合起来了(这就是我们遇到铁三角困境的地方)。理想情况下,你希望开发人员在这三个领域都表现出色,但这样的候选人很少见,而且通常价格不菲。更现实的情况是,你需要根据你的项目需求(通过你的 UNPHAT 分析确定)来确定优先级,同时确保候选人拥有我们前面讨论过的不可谈判的技能。
让我们探讨一下这在不同场景中的表现:
场景 1:初创公司正在构建新产品
UNPHAT 结果:需要快速开发和灵活性
优先领域:通用 JS 知识
原因:优先考虑能够快速适应不断变化的需求并且不会局限于单一技术的开发人员。他们广泛的知识使他们能够就使用哪些工具做出明智的决策,因为产品会不断发展。
场景 2:企业正在对遗留系统进行现代化改造
UNPHAT 结果:需要特定专业知识来处理复杂的迁移
优先领域:特定专业知识
原因:如果你正在将旧的 jQuery 代码库迁移到 React,你可能会优先考虑拥有深厚 React 专业知识的人,包括大型迁移经验。
场景 3:科技公司正在构建开发者工具 UNPHAT 结果: 需要优化、高效的解决方案
优先领域: 扎实的计算机科学基础
原因: 在构建其他开发者将使用的工具时,扎实的计算机科学原理基础至关重要。这确保您的产品架构良好、高效且能够处理复杂的用例。
在每种情况下,不可协商的技能(解决问题、批判性思维等)保持不变,但技术重点会根据通过 UNPHAT 确定的具体需求而变化。
虽然您可以优先考虑一个领域,但这并不意味着您完全忽略其他领域。以下是如何平衡它们的方法:
- 使用您的 UNPHAT 分析来根据当前需求确定优先级并确定哪个领域对您当前的项目至关重要。
- 优先领域能力强并在其他领域表现出才能的候选人可能是理想的。他们的学习和适应能力(我们不可协商的技能之一)在这里至关重要。寻找成长潜力和解决问题的方法。
- 考虑团队构成。如果您团队已经拥有深厚的特定专业知识,您可以优先考虑更广泛的知识或计算机科学基础知识,以完善团队的技能组合。
现在进入重点。您究竟如何确定您的最佳候选人?以下是一套评估方法工具包。选择并组合最符合您需求的方法。
进行方式: 一系列关于 JavaScript 及其生态系统的各个方面的快速技术问题。
示例:
- ES2024 的新特性是什么?
- 你会在什么情况下选择 Vue 而不是 React,反之亦然?
- 解释 tree-shaking 的概念。
您可以了解到: 此评估可以快速衡量候选人对 JavaScript 的广泛知识、最新发展以及简洁地表达技术概念的能力。它有利于评估一般的 JS 知识和沟通风格。
进行方式: 提出一个与您的业务相关的高级问题,并要求候选人设计一个可扩展的解决方案。
示例: 设计一个实时协同文本编辑器或一个高性能数据处理管道。
您可以了解到: 此讨论展示了候选人在系统层面思考的能力、理解可扩展性和性能考虑因素以及了解相关技术的能力。它有利于高级职位和评估核心计算机科学知识。
进行方式: 检查候选人的公共代码库和贡献。
示例: 寻找对开源项目的贡献、个人项目、代码质量、文档实践以及在 JavaScript 社区的活动。
您可以了解到: 此审查提供了对候选人编码风格、在开发者社区中的主动性和对编程热情的见解。它可以表明他们对特定技术的专业知识和对持续学习的承诺。
进行方式: 提供一个包含故意低效的代码片段,并要求候选人审查和优化它。
您可以了解到: 此练习评估候选人识别性能问题、了解最佳实践以及优化代码的能力。它特别适用于评估他们对特定框架或库的深入了解。
进行方式: 与候选人实时完成一个小而完整的任务。
示例: 共同实现一个功能,例如向表格组件添加排序功能或在 React 中创建自定义钩子。
您可以了解到: 此会话揭示了候选人的解决问题的方法、编码风格、协作能力和沟通技巧。这是评估他们如何在您的团队中工作的一种极好方法。
进行方式: 邀请候选人与您的团队一起进行一天的付费工作。让他们在您的实际代码库中处理小型、可完成的任务,并在自然环境中与团队成员互动。
您可以了解到: 这种沉浸式体验提供了对候选人在您工作环境中的表现、他们浏览您代码库的能力以及他们与您团队文化的融合程度的见解。
进行方式: 分配一个反映您项目需求的现实世界任务,并且必须在设定的时间内完成。
示例:
- 对于实时应用程序:在 JavaScript 中实现一个简单的发布-订阅系统。
- 对于数据密集型应用程序:构建一个基本 ETL 工作流编排器。 前端重点:创建一个具有特定功能的小型 React 或 Vue 应用程序。
收获: 此评估揭示了候选人的问题解决方法、代码质量、架构决策以及独立工作能力。它非常适合评估他们在特定技术方面的专业知识以及他们在现实场景中应用计算机科学原理的能力。
- 我们定义了录用的最低标准。
- 我们确定了如何制定录用要求。
- 我们审查了几个评估候选人的方案。
感谢您的耐心。本文只是众多招聘策略和经验中的一种视角,如果它能达到目的,我将非常高兴。我很乐意听到您的见解、挑战和成功案例。什么策略对您有效?在招聘 JavaScript 职位时,您都面临哪些独特的挑战?