面试造核弹:细数那些有毒的开发岗位描述

免责申明:本文的所有观点都是作者个人的看法。

如果你在软件行业工作足够长时间,就会对人们用来美化事情的“套路”有所体会。

例如,“具有软件开发全生命周期经验”的潜台词就是“我们没有完备的流程,所有的事情都很急,如果有必要,我们想把你放在哪个位置上就放在哪个位置上”。

这个问题我深有体会,因为几年前我在招人的时候就用到了这种职位描述,觉得它听起来很棒。巧合的是,也就是在那个时候,我发现公司里一直很忙,需要很多“万金油”型的“救火”工程师。

人们会花很多时间写花哨的职位描述,或者在面试时跟你玩套路。我写这篇文章的目的是为了确保你不会掉到这些坑里。

一份好的职位描述应该包含以下几点:

  • 对公司业务有一个清晰简明的总结,不使用过多的流行词汇;
  • 对你将从事的工作有一个清晰简明的总结,不过多使用流行词汇;
  • 清晰合理的工作内容描述;
  • 清晰合理的岗位职责描述;
  • 不提及抽象的品质 (例如幽默感、毅力、决心……)。

接下来,我们来看看那些不符合上述标准的职位描述。

反面示例 1:对岗位职责要求过多

公司简介:

纳斯达克上市公司,为政府提供数字服务。

岗位主要职责:

  • 参与软件开发生命周期的所有方面,包括服务和 Web 组件设计、评审、开发、DevOps 和测试;
  • 与业务方确定需求和相应的解决方案;
  • 与技术团队以及外部供应商和外包合作伙伴建立良好的人际关系,为客户提供更大的价值;
  • 为现有的软件解决方案和部署在 AWS 上的基于 JavaScript (NodeJS & AngularJS) 的 Web 服务提供支持;
  • 具备深入研读现有代码库的能力,理解其中的功能、设计并找出需要重构的地方;
  • 分享过去的经验,并指导团队成员改进团队的开发纪律。

技能要求:

  • 有实际使用 Node JS 开发 Web 应用程序的经验;
  • 有并行编程、异步和 JavaScript 回调编程经验;
  • 有微服务架构和 REST API 开发经验;
  • 有消息架构经验(SQS 或 RabbitMQ);
  • AWS 经验 (SQS、Lambda、EC2、ECS、API 网关、Beanstalk);
  • 使用 AWS Cloudwatch 或 Elasticsearch 进行集中式日志和日志分析;
  • NoSQL 数据库使用经验 (MongoDB、DynamoDB);
  • 关系型数据库 (MySQL) 使用经验;
  • 安全 (OAuth 2.0)、单点登录;
  • 测试驱动开发。

首选技能:

  • 对 SPA 有很好的理解;
  • GraphQL;
  • SQL 查询和 Mongo 查询;
  • 持续集成和交付;
  • 使用 Ionic Framework/React Native 开发混合移动应用;
  • API 文档 (Swagger)。

公司福利:

  • 有竞争力的薪酬计划;
  • 医疗 / 牙科保险;
  • 股权激励计划;
  • 符合 401k 计划的 100% 分红;
  • 残疾保险;
  • 人寿保险;
  • 公司健康计划;
  • 人性化的办公环境;
  • 带薪假期;
  • 培训费用报销。

现在让我们来仔细说道说道。

参与软件开发生命周期的所有方面,包括服务和 Web 组件设计、评审、开发、DevOps 和测试。

认真的?你要我既是一名软件架构师、开发者,又是一名 DevOps 工程师和 QA 工程师,是吗?

任何一个在公司里工作过的人都知道,SDLC 的全流程是非常复杂的。初创公司可能会要求工程师个人拥有整个流程的经验,并身兼数职,但一家在纳斯达克上市的公司并不是初创公司。

与业务方确定需求和相应的解决方案;

与技术团队以及外部供应商和外包合作伙伴建立良好的人际关系,为客户提供更大的价值。

除了上面的那些,你还要求我是产品负责人、合作伙伴经理和业务拓展员?

具备深入研读现有代码库的能力,理解其中的功能、设计并找出需要重构的地方。

谁会喜欢去重构别人的坏代码?

分享过去的经验,并指导团队成员改进团队的开发纪律。

好吧,你还要求我是团队负责人。

首选技能反映了职位的荒谬程度——对于开发者来说,既要专注于 JavaScript 开发,又要处理 AWS 服务、消息队列和日志 / 日志分析机制,这似乎是一项非常艰巨的任务。

其中有一项技能是 DevOps,这些可都是全职性的工作,除非你是一个天才,几乎什么都懂,能在一个小时内搞定问题,才有可能胜任。

福利很有竞争力,但仍然不足以与这份地狱般的工作相匹配。其他一些公司也会提供同样具有竞争力的福利,但他们不会要求应聘者做太多的事情。

反面示例 2:我们需要有挑战意识的工程师来完成有挑战性的工作

工程技术、软件工程师、入门级

必须是我国公民。这个岗位的工作地点位于需要特殊权限才能进入的位置。

基本资格:

大学软件工程或相关学科学士学位。

我们将提供平等机会,所有符合条件的申请人,不论种族、肤色、宗教、性别、是否怀孕、性取向、性别认同、国籍、年龄、是否退伍军人或残疾,都将被考虑录用。

加入我们,你的使命就是我们的使命。我们的工作需要非凡的勇气、韧性和精准度,甚至具有危险性,提供了改变世界和拯救生命的机会。这些都是我们关心的。

作为领先的技术创新公司,我们与世界各地的合作伙伴合作,解决客户最艰巨的挑战性难题。我们的员工遍布美国的多个州以及世界各地,在很多国家和地区都有我们的业务。

加入我们,你的使命就是我们的使命。我们的工作需要非凡的勇气、韧性和精准度,甚至具有危险性,提供了改变世界和拯救生命的机会。这些都是我们关心的。

这听起来就像是一则电视广告,我的眼前出现了海军陆战队敬礼、行进、在大雨中训练、破坏建筑物的特写镜头……等等,你确定这是软件工作岗位描述?

这确实是一则很棒的电视广告,但如果是招聘广告,实在糟糕透了。

招聘描述里没有提到任何细节,你也不知道工作内容是什么,不知道基本要求是什么。

听说过“诱变诱饵”吗?有时候,你申请的工作并不是你真正的工作内容,对于这种情况,招聘方就会这么做。对于这样的招聘信息,你要小心。

写这个招聘描述的人似乎真的相信公司的使命 (或者他们有一个专门的营销部门),但他们脑子里想的是那些对公司有同样想法的潜在求职者或者是急需工作的人。

反面示例 3:必须具备人类所有的优秀品质

我们正在寻找一个初级工程师来完成软件 / 互联网公司的各种技术任务。应聘者应具备较强的分析能力、求知欲、愿意面对挑战、渴望进步并有幽默感。在 5 年的时间里,你可以在一家软件 / 互联网公司学到几乎所有的东西 (欢迎有抱负的初创公司创始人)。这份工作真的会让你受益匪浅,而且在这个过程中会非常有趣!企业家精神是必需的!西装和领带不是必需的。

具体任务包括:

  • 软件开发;
  • 系统管理;
  • 文档化;
  • 客户支持;
  • 质量保证;
  • 售前支持;
  • 任何可能出现的问题……

应聘者需要具备以下条件:

  • 计算机科学本科 / 硕士学位或同等学历;
  • 0 到 3 年工作经验;
  • 企业家精神;
  • 很强的分析能力;
  • 优秀的沟通技巧;
  • 高质量的性格特质;
  • 高质量的源动力;
  • 愿意在小公司努力工作;
  • 追求卓越,愿意“尽一切努力”完成工作;
  • 渴望了解一切与软件 / 互联网公司有关的东西;
  • 有 HTML 经验;
  • 有 C/C++、C# 或者 Java 经验;
  • 有 JavaScript 经验;
  • 了解关系数据库;
  • 了解 TCP/IP 网络概念;
  • 进步理想主义者;
  • 相信自己可以与众不同;
  • 谦逊,认识到理想主义 / 乐观主义可能是就是无知 / 傲慢。

这个职位描述提的要求有点多,我自己都看笑了。

应聘者应具备较强的分析能力、求知欲、愿意面对挑战、渴望进步并有幽默感。

“幽默感”?为什么要幽默感?《程序员面试金典》(Cracking the Coding Interview)这本书是教我们如何各个击破面试题,而不是要我们去讲笑话的。

幽默感是我们都想从别人身上得到的东西,比如我们的朋友、家人、同事、约会对象……但是这不应该出现在工作岗位描述中。

具体任务包括:

软件开发;

系统管理;

文档化;

客户支持;

质量保证;

售前支持;

我想请你解释一下,这是一个怎样的初级职位?

你要招的人需要是开发人员、系统管理员、技术文档团队、客户支持团队、QA 团队和销售工程师。

我已经在这个行业工作了很多年,我甚至都不知道我自己是否能胜任这些工作的一半。

任何可能出现的问题……

比如?这是一个软件工程师职位,可不是给体育酒吧招人。像这样含糊其辞、开放式的描述没有任何好处,因为应聘者总是希望确切地知道他们在申请怎样的职位。

企业家精神

这个我已经看到过几次了,它到底指的是什么?

有的人可能会认为这是指打破常规,有的人可能会认为是毅力和决心,有的人可能会认为是思想开放和创造力……

这类与特质相关的问题在于它们是开放式的、模糊的、无用的。它们没有任何意义,因为它们可能代表任何一种含义。每个人都希望自己是“企业家”——看看那些在 LinkedIn 上把自己描述为“企业家”的人就知道了。

这对于求职者来说意味着什么?这意味着公司对他们要找的人有明确的想法,但不知道如何清晰地向求职者传达。

高质量的性格特质;

高质量的源动力;

愿意在小公司努力工作;

追求卓越,愿意“尽一切努力”完成工作;

渴望了解一切与软件 / 互联网公司有关的东西;

……

进步理想主义者;

相信自己可以与众不同;

谦逊,认识到理想主义 / 乐观主义可能是就是无知 / 傲慢。

同样,这些特质应该是你在面试时从求职者身上评估出来的,不应该列在工作描述里。

当然,每个人都想招到积极、有活力、正直的人。有没有人看到这个后想:“我其实是个懒惰的混蛋,最好还是不申请这个职位了”?

“尽一切努力”究竟要多努力?需要我牺牲第一个孩子吗?还是要我献祭一只山羊?

最后两点也惊到我了。候选人必须乐观,但又不要太乐观……

对于合适的人来说,这种职位描述可能听起来很有趣,很有吸引力,但从我的经验来看,这在大多数情况下是一种危险信号。

好的职位描述

接下来,我们来看看一些好的招聘描述。

正面示例 1:面面俱到

我们是一家医疗保健技术公司,利用基因信息帮助医生和病人做出医疗决定。我们的软件工程师从事各种各样的项目,从医疗保健系统的创新到生物学。我们不断改进我们的工具和技术,为患者健康提供最高质量的可操作信息。如果你想用你的知识和技能来改善数百万人的生活,请加入我们的团队吧。

关于我们的团队:

我们需要具有不同背景的工程师来帮助我们完成使命——为数十亿人提供遗传信息。我们是一个跨职能团队,由科学领域的专家和敬业又好奇的工程师组成。我们建立了一个系统,将大量的基因组数据与科学文献结合起来,再加上多年来经过严格整理的成果,然后将它们打包,供我们的科学家使用。随着数据越来越大,我们的系统需要变得更好更快。

你要做的是:

  • 根据技术和业务需求一起定义和构建新的功能或应用程序。
  • 编写结构化、可测试、可读和可维护的代码。
  • 参与代码评审,确保代码质量。
  • 主导技术工作,满足内部或外部客户的需求。
  • 通过不断学习和成长为团队成员提供支持。

你需要具备:

  • 具备全栈架构和分布式系统的经验。
  • 多年后端或前端框架经验,如 Python/Django/JavaScript/React/Scala/Play。
  • 其他通用行业标准。
  • 有数据库经验 (MySQL、PostgreSQL、NoSQL 等)。有调优和查询优化经验更佳。
  • 良好的沟通技巧,具有分布式团队工作经验者优先。
  • 以任务为导向的心态和持续学习的愿望。

我们提倡多样性,不分种族、肤色、宗教、国籍、性别、性取向、年龄、婚姻状况、是否退伍军人或残疾,为所有员工和应聘者提供平等的就业机会。

这个非常棒。有关公司和团队的描述非常有趣,同时也提供了足够的细节。

我们建立了一个系统,将大量的基因组数据与科学文献结合起来,再加上多年来经过严格整理的成果,然后将它们打包,供我们的科学家使用。

这一句话就足以让你了解他们可能在做的几件事:

  • 大数据;
  • 数据处理与分析;
  • 软件开发 (显然);
  • 学术研究或研发;
  • 有可能通过机器学习从上述数据中获取见解。

“你要做的”和“你需要具备”非常清晰、简洁、合理。

如果我对这个领域感兴趣,我会申请这个职位的。

正面示例 2:简短明了

我们有一个测试工程师空缺职位,需要他来帮助我们改变与环境的互动方式。我们目前的工作重点是零售和商业建筑应用程序,并将继续随着市场需求的变化而变化。

我们正从概念验证过渡到第一次生产迭代,有很多应用程序需要开发。现在是加入一个快速成长的团队的最佳时机,在这里你可以发挥影响力,并与我们一起发展你的职业生涯。

我们正在构建一个独特的微服务架构,连接云平台和内部系统,提供各种服务,包括数据收集、机器运行状况监控和用户交互。

你将:

  • 负责我们的 QA、测试和发布过程;
  • 建立和维护我们 API、后端和硬件接口的自动化框架;
  • 定义和细化测试需求;
  • 实施持续集成;
  • 参与新服务和应用程序的计划和执行;
  • 与我们的软件和硬件团队紧密合作,确保交付 API 和功能。

我们的技术栈是基于可伸缩概念,包括:

  • Node.js、Go、Kubernetes、Docker;
  • Linux (Ubuntu) 命令行技能、Python。

职责描述得很清晰。虽然没有明确列出,但可以从它们的技术栈和工作内容中推断出来:

  • 微服务;
  • Node.js、Python 和 Go;
  • Kubernetes、Docker、Linux;
  • 专注于零售及商业建筑领域。

正面示例 3:通用接地气

作为一名软件工程师,你将参与创造一个直观的产品,帮助我们的客户建立、管理和发送他们的电子邮件。你将与一个充满激情、多才多艺、有协作精神的团队一起工作,在持续推动技术进步的同时,解决棘手的问题。此外,你将有机会影响和实现架构解决方案,让我们成为世界上最值得信赖的通信平台。

我们的办公室就是我们第二代产品的总部,也是我们的技术运维和客户生命周期工程团队的枢纽。

你要做什么:

  • 传播我们的文化价值观;
  • 与其他团队成员合作,包括产品团队和 API 的团队,一起影响和改进我们的产品;
  • 使用 Github、Jira 和我们的构建 / 部署系统来管理你的工作;
  • 为我们的代码测试和产品交付提供帮助。

我们的技术栈包括:Go、AWS(DynamoDB、Lambda、EC2、Kinesis、SQS、S3)、ReactJS、Snowflake、Terraform、Redis、SolrCloud、Kafka、Riak、Docker/Kubernetes 和 Linux。

关于你:

  • 一般来说,有 2 到 4 年的云应用程序软件开发经验;
  • 拥有计算机科学学士学位;
  • 2 年以上 Go 和 Python 开发经验;
  • 2 年以上 HTML、CSS 开发经验;
  • 具备大规模分布式系统开发经验;
  • 有使用现代 JavaScript 框架开发以 UI 为中心的 Web 应用的经验;
  • 积极的态度,能够在小团队中快速学习和完成任务;
  • 有 AWS 经验优先;
  • 了解微服务架构和云应用。

清晰、简明地描述了公司的业务、期望和应聘者的职责。

与前面的示例一样,列出了技术栈,并根据职位和资历级别列出了合理的要求。这是一个很好的职位描述。

不要止步于不好的工作

作为一个蓬勃发展的行业的候选人,你有很多选择。世界上有很多伟大的公司,他们不仅提供了出色的职位和丰厚的福利,还有非常好的晋升和职业发展机会。

在找工作的过程中不断磨练你的技能,看看哪些公司是垃圾公司,不要浪费了你的时间。

原文链接

How to Stop Toxic Software Jobs From Their Descriptions

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章