怎样招聘程序员

2023-11-03

在招聘程序员方面,没有所谓的神奇“银弹”!但我可以分享一些建议和诀窍,它们经过我的实践证明是有效的。这些方法我多年来一直在用。我把它们总结如下:

  1. 首先,要求通过几个简单的“Hello World”在线测试。

我知道这听起来很疯狂,但有些自称是程序员的人根本没写过代码。时至今日,还有人常常过来告诉我:他们在面试过程中碰到一些应聘者连最基本的编程测试题目都不会做,真是难以置信!

那也是为什么要把简单的编程测试作为任何面试流程的第一步的原因(如果你足够理智的话)。这些测试应该是在线的,目的不是为了证明应聘者是不是编程天才,而要确认他们最起码知道编程是怎么回事。是的,这听起来有点悲哀,令人沮丧,真的有必要这么做吗?然而,如果你不做这种检查的话,相信我,你一定会后悔的!

有一些网站提供这样的在线编程测试,比如Interview Zen、codility等。(我相信还有其他更多的网站提供类似的服务,但我目前只了解这两个。)

  1. 提出要看看他们的文件夹。

任何称职的程序员都应该有一个“文件夹”,里面收藏了他曾经做过的东西。这些东西无须奇特。我只是在寻找你在互联网上留下的蛛丝马迹,以印证你有多了不起。如果你是Stack Overflow的用户,你可以给我看看你的介绍页面,让我知道你是怎样跟人沟通的,以及你是怎样去帮助别人解决问题的。如果你参与了某个开源项目,那么给我一个连接到开源代码库的地址。或者你有一个专业的博客?一个微博?在用Twitter?或者其他我从没听说过的东西?有这些就太棒了。我们可以一起来看一看。分享一下你设计过的应用程序或者你做过的网站,并指出哪些部分是你做的。

看看应聘者以前做过什么样的工作,他在网上展示了什么样的作品,这对了解这个人是极其有帮助的——通过这些,可以去理解他做过的东西,并且判断出他擅长什么(或者不擅长什么)。

  1. 只雇用认同公司文化的人。

像GitHub一样,我发现应聘者对公司文化的认同往往比他们高超的编程技能更重要,前者更能决定我们是否能够成功。

我们在招聘过程中会谈到哲学,我们对此是很认真的。我们想让任何可能进入GitHub公司的人都知道,他们将在一个怎样的环境里工作。我们要确保他们跟我们能够合得来。为了达到这个目的,我们可能跟他们一起吃午餐,并且谈论比如文化、哲学、我们犯过的错误、计划等方面的话题。

在早期,我们曾经单纯因为一些人的高超技术而雇用了他们,但忽略了他们怎样融入到我们公司文化中去的问题,或者他们是否理解我们对人处事的哲学。很自然的结果是,那些人的工作表现不如预期。因此,在我们关注应聘者技能的同时,他们是否能“变成”我们也是一个主要的考量因素。

我意识到,不是每个行业都为他们正在做的事情建有一个社区,但如果你有幸拥有一个社区的话,你应该尽可能从社区里找出人才来,并且雇用他们。这些人自然已经被扯进了你正在做的事情,他们被你公司的磁场所吸引,而且他们的行为完全是自觉自愿的。这些人能够适应公司文化的概率超乎寻常地高。他们就是你要找的人!

你发现有些用户基于你的游戏开发了令人惊异的衍生版吗?有人发现了一个暗藏的安全漏洞,并尽快通知了你吗?立即把这些人雇用进来!

  1. 做一个周详的结构化电话面试。

上面3件事情一旦做完之后,该给应聘者打个电话了。我得提醒你,电话面试不是为了聊天,重点是要筛选(或者说淘汰)。电话里谈论的应该都是技术方面的问题,而且要以结构化的形式进行。这样的话,如果你发现应聘者不合适目前的岗位要求,可以马上结束通话。我们在后面有一节“如何做好电话面试筛选”专门来探讨这个问题。这里只是简单总结如下:

1.     做一点即兴编码,比如“在一个整型数组里找出一个最大的整数值。”

2.     做一些基本的设计,比如“设计一个表示法,用于HTML的建模。”

3.     脚本编程以及正则表达式,比如“把某个目录下包含特定格式电话号码的文本文件都列出来。”

4.     数据结构,比如“在什么情况下你会使用哈希表,而不用数组?”

5.     位与字节,比如“为什么程序员开玩笑说10月31号跟12月25号是同一天?”

译者注:1031号用英语表示为Oct. 31,是万圣节(也叫“鬼节”);1225号用英语表示为Dec. 25,是圣诞节。Oct.本来是October10月)的意思,而程序员可以把它解释成Octal(八进制);Dec.本来是December12月)的意思,而程序员可以把它解释成为Decimal(十进制)。于是,八进制的31等于3 x 8 + 1,结果等于十进制的25,也就是Oct. 31 = Dec. 25

不要期望从电话的另一头得到完美的答案,也没这个必要,你需要了解的只是这个人解决问题的方式,还有他们是否真的掌握了相关的技术(上下浮动10%)。你的目标是,不要让一些不合格的人蒙混过关,否则到了下一阶段会浪费大家更多的时间。因此,你不要心慈手软,要对电话另一头保持火力,而当发现有太多疑点之后,提前结束通话。

提示:我们将在下一节对电话面试进行更为深入、详尽的分析。)

  1. 给他们一个“试镜”项目。

译者注:“试镜”是影视制作领域中的一个术语。用拍摄一段影片的方式,来决定某人是否适合当演员,或者某演员是否适合演出一部影片里的某个角色。在这里,作者把这种做法借用到了软件开发领域。

到这时候,应聘者已经通过了“Hello World”编程测试,他的“文件夹”里的东西也很光彩夺目,他融入公司文化没有丝毫的问题,他也成功通过了电话面试。是时候把他叫过来进行面对面的面试了,对吗?别这么急,兄弟!

我见过一些应聘者通过了前面4关,然后加入了公司,结果在实际项目中还是表现不佳。我没有提醒你吗?招聘程序员是很难的!

这位候选人会不会是一个成功的聘用呢?如果你还心存疑虑,想要抹去这层阴影的最好办法,就是给他一个“试镜”项目。我指的不是那种空泛的、抽象的编程问题,而是现实世界里、实际项目中你需要马上做的一块实实在在的工作。这块工作你原本是打算让正式员工做的,只是他们现在都在忙着其他的事情,因此这块工作暂时还没分配出去。

这个项目应该以常规的咨询服务的形式进行,按小时计费,并且清晰地定义好项目任务书。选择的项目一定要小,理想情况下几天就能做完,至多1~2周。候选人可以进办公室来做这个项目,或者也可以远程登录过来。我知道,不是所有的公司都能提供这种“一口大小”的工作分给公司以外的人来做。(他们拼死了也想把所有的事情都在公司内部做完。)但是,我就想了,如果你费劲脑汁还是想不出一个迷你的“试镜”项目给一位很不错的候选人做(你很有可能把这个人招进来哦),也许你在现有员工之间的工作分配方面也存在一些问题,至少不够结构化。

如果“试镜”项目做成了,那就太美妙了——你现在得到了一位高度合格的候选人,他的做事能力得到了验证,而且你还有效地给实际项目完成一些工作。迄今为止,我还没见过有谁通过了“试镜”项目的考验但后来还在实际项目中表现不佳的。我非常依赖“试镜”项目来考察一个人的能力;做这种项目实际上跟做正常的工作很接近了,就差没把人家聘用进来了。不过,如果“试镜”项目失败了,也不要紧,想想也就浪费一点点咨询服务费,跟把候选人直接叫进公司、浪费公司的其他4~5位同事的时间去面试他相比,其实还是挺划算的。况且,你还可以把这个“试镜”项目传给下一位有潜力的候选人去做。

(利用雇佣合同上的试用期也是可以的,它们在概念上非常相似。双方可以预先做好约定,先雇用6~8周作为考察期,然后再决定是否正式录用。)

  1. 找个房间面谈,并最后定夺。

最后,你应该当面见一见候选人。这是必不可少的,而前面所有的步骤都是为了确保,在应聘者走进面试房间那一刻,你已经有95%的把握:他将是一位很棒的员工。

在面谈方面,我绝对不是什么专家,因为我不够温柔。但至少有一点,我不喜欢在面试的时候要人家回答什么谜题。

关于怎样面试程序员,其实我自有妙招:我会让候选人对他们的专业领域做15分钟的演讲和展示。跟传统的面试相比,我认为我的方法要有效得多,因为你很快就能看出来:

·       这个人对他正在做的事是否有热情?

·       他能在小组里有效地沟通吗?

·       他对他的专业领域是否有很好的认识?

·       你的团队是否会喜欢跟这个人一起工作?

拿 Steve Yegge的话来说,每个程序员都应该学会做一件事,那就是推销自己、推销自己的代码和项目。我对这个观点举双手赞成!开始吧,冲我来!

  1. 上面没有哪条是保证奏效的。

前面所说的这些你也别太迷信了!虽说这些技巧常常是奏效的,但我也见过偶尔不奏效的。你必须根据你的实际情况,保留那些你认为合理的做法,然后把其他的都抛弃(尽管我强烈不建议你跳过第一步)。即使在最理想的条件下,招人仍然是不容易的!工作做不好的原因有很多,有时候完全不受任何人的控制。就跟人们常说的那样,人这个东西很复杂!

如果你也觉得“工作是在你有生之年每周都要花40小时(甚至更多)的一种重要关系”,那你就应该认真对待这次“约会”。公司和应聘者双方都应该很真诚,尽各自最大的努力去判断彼此是否合适。你的目标不应该只是为了得到一份工作,或者随便找个人来做事,而应该乐在其中,为了一种相同的爱好而彼此靠近、并且走到一起。因此,不要匆匆忙忙做决定,除非你们早已相互倾心。

(顺便补充一下,如果你想找到一些方法来吸引程序员,那你千万不要错过SamuelMullen的建议。请上网搜索“Advice on Attracting Good Developers”这篇文章。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

怎样招聘程序员 的相关文章

  • 国外程序员的BASIC情结——我的编程生涯始于BASIC

    关于BASIC Edsger Dijkstra曾经说过这么一段话 那些已经学过BASIC的学生是不可教化的 再去教他们优秀的编程风格注定徒劳无功 他们已经脑残 再生无望 成不了优秀的程序员 BASIC是Beginner sAll purpo
  • 你永远不会有足够的奶酪

    令人赏心悦目的产品和让人勉强容忍的产品之间的差别 就在于它们的细节有没有做好 在Human Factors International公司做的一篇演讲文稿里 他们提到了一个叫 哥伦比亚障碍装置 的东西 译者注 Human Factors I
  • Jeff Atwood质疑iPhone的单键设计

    我喜欢使用iPhone 但我对它的一个设计不敢苟同 苹果始终坚持 设备的正面永远只能有一个按键 我还买了一个Kindle Fire 它更离谱 一个按键都没有 我完全赞成 任何小器具的正面都应该在明显的位置上至少有一个 耶稣把手 一样的按键
  • YouTube上的版权保护

    早在2007年的时候 我曾写过一篇名为 YouTube The Big Copyright Lie YouTube 关于版权的弥天大谎 的文章 表达了我对YouTube又爱又恨的情感纠结 现在回想一下你在YouTube上看过的所有视频 它们
  • 软件定价:我们深谙其道吗?

    本文为翻译初稿 更多精彩内容 敬请关注 高效能程序员的修炼 人民邮电出版社 一段时间以来频繁光顾iPhone应用商店 以致于产生了个副作用 我开始从根本上改变了对软件定价的看法 这么多优秀的iPhone应用程序 要么是免费的 要么只卖区区几
  • 对你的屁股好一点!

    作为软件开发人员 买一把上乘的电脑椅也许是你能做的最明智的投资之一 事实上 在过去几年看过各种各样的椅子之后 我得出了一个结论 如果你想买一把上乘的椅子 你要花的钱不会少于500美元 如果你在座椅上花的钱没那么多 除非你正在经历那场跨世纪互
  • 坏苹果是团队的毒药

    最近一期的 美国生活 采访了WillFelps 他是华盛顿大学的一位教授 曾经组织过一次社会学实验来证明 坏苹果 的出奇强大的影响力 译者注 美国生活 This American Life 是一档叙事类的广播节目 每周一期 在超过500家电
  • 怎样招聘程序员

    在招聘程序员方面 没有所谓的神奇 银弹 但我可以分享一些建议和诀窍 它们经过我的实践证明是有效的 这些方法我多年来一直在用 我把它们总结如下 首先 要求通过几个简单的 Hello World 在线测试 我知道这听起来很疯狂 但有些自称是程序
  • 如何与人交流——程序员,赶紧生个孩子吧!

    原文作者 Jeff Atwood 每个家庭都应该生一个孩子吗 我不太愿意这样建议 因为当不当父母完全是个人选择 我始终尽量避免鼓吹为人父母的经验 但我越深入这个角色 我便越是相信 没什么比拥有一个小孩更能折射出成人世界里源源不断的荒唐 成为
  • 这样的会议让人很纠结

    很纠结吧 永远也不要参加这样的会议 顺便说一下 解决这个问题的方法就是 可用性测试 Usability Testing 好好想一想 我们做决定的时候 是要无休无止地争吵 最后谁吵赢了谁说了算呢 还是要基于真实的数据 这个变化是一场革命
  • Jeff Atwood倾情推荐——程序员必读之书

    英文版 Code Complete 2 中文版 代码大全 第二版 作者 Steve McConnell译者 金戈 汤凌 陈硕 张菲出版社 电子工业出版社出版日期 2007 年8月Jeff Atwood的推荐 Steve McConnell的
  • 象牙塔式的开发

    我向来不鼓励象牙塔式的开发模式 开发团队常年封闭在 高塔 之中 一门心思地做着魔法一样的软件 这些开发者根本不知道用户会怎样使用他们做出来的软件 你若问他们 最近一次面见用户是在什么时候 他们甚至可能都回答不上来 因为缺失强有力的证据 开发
  • 无我编程:你的工作不代表你

    原文作者 Jeff Atwood Johanna Rothman是这么描述 无我编程 这个概念的 25年前 Gerald M Weinberg写了 程序开发心理学 我在1977年发现了这本书 然后做了一个决定 放弃在电台做DJ的工作 打算做
  • 勿以专家自居

    对于权威 我心存芥蒂 我在 StrongOpinions Weakly Held 观点鲜明 但不固执己见 一文中曾经说过 当我了解到别人把我视为专家或者权威 而不是像伙伴一样的志趣相投者时 我就会觉得非常困扰 如果非要说我在迄今为止的职业生
  • 分页显示该休矣

    当你有很多东西要显示给用户 而且内容多得远非一个屏幕可以放得下的时候 你会怎么办 很自然 你会想到分页 在2007年 Vitaly Friedman写了一篇文章叫 Pagination Gallery ExamplesAnd Good Pr
  • 我同情那些不写单元测试的傻瓜

    J Timothy King写了一篇很棒的文章 先写单元测试的12个好处 Twelve Benefits of Writing Unit Tests First 遗憾的是 他在文章最后说的话完全是画蛇添足 然而 如果你不愿意改掉先写代码的老
  • 困惑:单元测试该在什么时候写?

    原文 http www codinghorror com blog 2005 04 good test bad test html 作者 Jeff Atwood 很多年以来 用于随机测试 ad hoc test 的工具我都是自己开发的 但在
  • 成为优秀程序员的方法就是抛开编程?

    原文 How To Become a Better Programmer by Not Programming 作者 Jeff Atwood 我在2006年写过一篇题为 Programmers as Human Beings 程序员 亦人类
  • 会议是浪费工作时间的最佳去处

    本文为翻译初稿 更多精彩内容 敬请关注 高效能程序员的修炼 人民邮电出版社 今天你开了多少个会 这个星期呢 这个月呢 现在你再自问一下 那些会议中有多少是值得参加的 如果把相同的时间用在工作上 你又能完成多少事情 这不禁让人想知道 我们究竟
  • 学海无涯苦作舟

    作者在Twitter上发的一条短讯 每一天 你一定要一起床就热情澎湃 否则 你就只是在打工 3 51 PM 2012 5 1 在我们创办Stack Overflow网站之后 有些人开始承认 我们构造了一个还过得去的 捕鼠器 把大家都吸引到那

随机推荐

  • 【esp8266】史上最详细的Arduino uno R3接入机智云教程

    原文地址 http club gizwits com thread 6728 1 1 html 本文使用arduino UNO板卡和esp8266无线WIFI模块实现了通过手机APP远程监测单片机系统采集的数据和控制一个LED的亮灭 读者将
  • Python笔记-字符串

    print hello world capitalize 让第一个单词首字母大写 print hello world upper 全大写 print hello world lower 全小写 print hello world title
  • 联想计算机BIOS启动顺序boot,联想电脑BIOS启动项如何设置U盘启动_联想电脑BIOS启动项设置U盘启动教程介绍...

    联想电脑大家应该都不陌生 台式的大家也都有使用过 笔记本也都使用过 这个品牌的电脑性能都是非常不错的 也是很多用户家庭办公必备的 那么在长时间使用以后很多电脑系统就会出现崩溃 那么这个时候就需要进行系统重新安装 那么在安装的时候可以通过设置
  • java-一次运算结束后,是否继续? Y 是,其他键结束

    请输入第一个数 4 请输入第二个数 9 请输入运算符 运算结果是13 是否继续 Y 是 其他键结束 Y 请输入第一个数 7 请输入第二个数 0 请输入运算符 除数不能为零 请重新输入 思路 一次运算结束后 是否继续 Y 是 其他键结束 用d
  • Classic AUTOSAR专题

    往期小怿向各位小伙伴介绍了Classic AUTOSAR专题之I O模块 相信看过的小伙伴对Classic AUTOSAR的I O模块已经有基本的认知了 本期为大家介绍 AUTOSAR模块之诊断模块 内容超丰富 将分两期推出哦 目录 1 概
  • Android开源框架之Afinal

    Afinal是一个android的ioc orm框架 内置了四大模块功能 FinalAcitivity FinalBitmap FinalDb FinalHttp 通过finalActivity 我们可以通过注解的方式进行绑定ui和事件 通
  • 4个mos管驱动的全桥电路原理_逆变器工作原理

    逆变器工作原理 输入接口部分 输入部分有3个信号 12V直流输入VIN 工作使能电压ENB及Panel电流控制信号DIM VIN由Adapter提供 ENB电压由主板上的MCU提供 其值为0或3V 当ENB 0时 Inverter不工作 而
  • Node 中的 Buffer 的理解及应用场景

    一 是什么 在Node应用中 需要处理网络协议 操作数据库 处理图片 接收上传文件等 在网络流和文件的操作中 要处理大量二进制数据 而Buffer就是在内存中开辟一片区域 初次初始化为8KB 用来存放二进制数据 在上述操作中都会存在数据流动
  • Linux 操作系统的基本目录

    1 Linux 的基本目录 根目录 usr 系统存放程序的目录 home 普通用户默认存放的目录 bin 系统基础命令目录 boot 包含Linux内核及系统引导所需要的文件 dev 设备文件存储目录 etc 存放系统程序或工具配置文件目录
  • spring集成shiro详解

    最近项目中要用到shiro作为权限管理 以前都是用自定义的或者spring security 所以就开始看了一些网上的文章 但是感觉都写得很零散 而且大多数都只是给了几行代码 我们得项目相对比较复杂 需要进行一些额外得改造和扩展 所以自己也
  • 配置springboot踩到的坑

    1 卸载了eclipse 结果连带卸载了java JDK 因为没有意识到所以第一次编译报错 2 run configure不会写 最后网络上查到在run 里输入 spring boot run 普通的maven 工程 run里写 clean
  • ThinkPHP 2.x/3.0 漏洞复现

    ThinkPHP框架 ThinkPHP是一款从Struts结构移植过来进行改进和完善后的web应用的开源轻量级PHP框架 ThinkPHP可在 Windows和 Linux等操作系统运行 支持 MySql Sqlite和 PostgreSQ
  • 云服务器测速脚本_Linux VPS服务器带宽测速脚本:Speedtest Linux进行网络测速方法...

    新购买VPS服务器后 当然少不了对对VPS的性能做测试了 好让自己知道新购买到的VPS性能是怎么样的 下面就来为大家介绍一个Linux系统VPS带宽测速脚本Speedtest 和Linux VPS进行网络测试的方法 一 环境准备 我们使用的
  • Fibonacci 数列

    题目描述 输入一个正整数n 求 Fibonacci 数列的第n个数 Fibonacci 数列的特点 第1 2个数为1 1 从第3个数开始 概述是前面两个数之和 即 要求输入的正整数n不超过50 输入 一个不超过50的正整数 输出 Fibon
  • IntersectionObserver与无限滚动加载

    学习链接 IntersectionObserver MDN Api IntersectionObserver API详解 Intersection observer 的概念和用法 过去 要检测一个元素是否可见或者两个元素是否相交并不容易 比
  • 长连接、短连接与WebSocket 的区别

    1 长连接与短连接 1 短连接 HTTP1 0中默认使用短连接 也就是说 客户端和服务器每进行一次HTTP操作 就建立一次连接 任务结束就中断连接 HTTP的生命周期通过Request来界定 也就是说一个Request 一个Response
  • 网络请求库requests及数据解析xpath

    requests库 requests库也是一个网络请求库 基于urllib和urllib3封装的便捷使用的网络请求库 安装环境 pip install requests i https mirrors aliyun com pypi sim
  • Odoo字段设置索引-多列联合索引

    需求 在创建模块生成数据库表结构时 一般也要设计字段是否需要添加索引 或者多个字段联合索引 单字段添加索引 设置索引只需要在字段初始化时添加index参数 index bool default False index默认是False 如果需
  • 【ESP-IDF】使用SNTP进行时间同步

    description sntp初始化 return note 参考官方博客 static void esp initialize sntp void ESP LOGI TAG Initializing SNTP sntp setopera
  • 怎样招聘程序员

    在招聘程序员方面 没有所谓的神奇 银弹 但我可以分享一些建议和诀窍 它们经过我的实践证明是有效的 这些方法我多年来一直在用 我把它们总结如下 首先 要求通过几个简单的 Hello World 在线测试 我知道这听起来很疯狂 但有些自称是程序