
我们积极的对外招聘已经有四个多月了,如果要问从这次经历中有哪些收获,我只能说,我终于明白,Jeff Atwood在FizzBuzz这篇文章里说的并不是玩笑话。(译者:这篇文章里说程序员不会编程)。
在新成立的公司中,我们RethinkDB公司因面试过程最为苛刻而出名。这是事实——我们对面试过程不会有半点妥协。我们期望通过最大范围的筛选来建立一个高质量的开发团队。对于这个初衷,我在之前的一些文章里提到过多次。在过去的几个月里,我们遇到不少人认为我们的要求高的有些离谱,以为我们是在招聘同时具有量子力学和计算科学双学位的火箭专家。这是误解。我们只希望招的能编程的程序员。
为了满足大众的好奇,我们公布了一些冒烟测试过程(smoke test),这写过程只是半个小时内的一次电话交流,大概20个候选人中有19人通不过这个测试。(这些候选人都是经过简历审查筛选出来的)。我们并没有 要求他们对一个复杂的算法提出解决方案。我们并没有让他们去做脑筋急转弯问题。我们并没有让他们做复杂的指针算法和操作。就像下面的这个问题,绝大多数的 应聘者都不能正确的解答,甚至做满半个小时,甚至给了大量的提示的情况下:
请写出一个C函数,实现反转一个单向链接表的功能。
就这样的一道题。我们选了一些简历写的让人不可抗拒的应聘者(包括做内核开发的,编译器设计的,还有一个哲学博士学位的),没有人能正确的编写出来,不管给他们多少时间。
我们当然也问了些其它问题。把N个元素插入到一个Vector里(或者ArrayList,或其它的你所选择的语言里被称作动态数组的东西),最坏的最复杂的一种运算情况是怎样的?我们并不是考察应聘者对这个数据结构的了解程度,我们只是希望他们用自己的见解阐述一下。我们会告诉他们vector的内部工作原理。你们知道吗,我们甚至接受O(N log N)次这样的答案。
如何实现一个读-写锁?我们并不要你通过电话编写出这样一个程序。只是说说方案,如果你的方案里能提到饥饿矛盾问题(starvation issues),那我们就算你中了头彩了。我们真的希望老天能不拘一格降人才,可是我们真的没有找到这样的人。
我们试探着询问多任务运行的合作模式和抢先模式的区别。我们试探着询问条件变量的工作原理。20个人中有19个人从头至尾一句话都没说出来。
为什么我们会询问这些很特别的问题?因为这些知识对一个大学毕业生来说是他们所学的全部课程中最核心的部分,因为这些知识在我们的日常工作中会以这 样或那样的形式被使用。而且,在这四个月的招聘中,我们发现,如果你能理解线程和协调进程的区别,你就能知道如何反转一个链接表,如果你对条件变量有了基 本的了解,你就能获得更多的机会在众多的应聘者中证明你是个更好的程序员。很多的人都做不到这些。
我们希望所雇佣的程序员拥有比我们上面所说的技能更多的能力,而且我们不认为这些要求很过分。只是希望你们对基础知识有扎实的掌 握,有潜力去完成艰巨的任务,对你们所开发的程序有虔诚的热爱。引用我的同事第一次听到FizzBuzz里的言论时的反应:“如果他们不能编程,他们能干 什么?”挑选简历需要好几个小时,每个应聘者需要20多分钟进行冒烟测试。然后面试过程每个人需要45分钟。整个过程差不多要15个小时的工作。这占用了 一个懂技术的工程师大量的时间去发现一个可用的候选人。
真正的程序员,请你站出来。
[本文英文原文链接:LINK ]

鉴于目前中国高等教育的情况, 您的要求显然太高. 我断言, 就算是高校教授来回答这些问题, 没有参考答案他们也做不出来.
但在职的程序员, 特别是从事程序设计三到四年的, 你的这些要求完全能够满足.
我看也未必,在职三四年也未必就能得到锻炼
国内计算机教育,落后得不是一般。。。
刚看到这篇文章,起初感觉像其他隐形招聘文章一样,想一掠而过~后又想了想,还是发表一下自己的看法吧。
现在这种形式的招聘广告层出不穷,都一方面声称自己对人才的饥渴,另一方面又表示职场中的应聘者如何如何的不符合要求。我想问一下,这个市场是否是双方的呢?招聘者是否在发布如此信息之前已经考虑过自己是否有足够的能力以及吸引力来招募到很多慕名前来的应聘者呢?或者这个帖子只是一个招聘广告+牢骚贴?个人没有看过Jeff Atwood的文章,但我以为“程序员不会编程”这句话本身就是一个笑话而已…
最后,还是要祝愿LZ的公司能够找到称心如意的“程序员”
呵呵,你有很多的思想呀
请不要以你自身的能力去评估别人,如果你觉得很牛B,为啥没能力一个人把项目做下呢.如果我以这样的眼光去看你们那些面试官,请问,是否你们的面试官也不算真正的程序员?
当然从公司的角度来说,希望一进来就能做事情的,但有些时候真的是双向的, 给予程序员一些培训, 最后会得到回报的。 现在的都是很急功近利, 希望一进来就能做的非常好
我甚至连评论的资格都没有,因为他提出的问题是确实不会做。
当我会做的时候我想问,你们有什么资格聘用我?
不上网,不查手册,能编写出一个完整的程序,实现一点小复杂的算法,就算一个合格的程序员咯
@Peter
@花非花
是的,那要看程序员工作的环境和态度,中国的一部分职业程序员都是 Copy-Paste 型程序员,应付任务后后就在偷偷摸摸的 QQ 中度过。这样的人,你给他十年也不顶 P 用。
还好。。。知道一两个。。。上学时候导师深刻的提醒过
@十分
非常赞同十分的观点,招聘者老喜欢把要求抬高,生怕找来个低于基准要求的人来做事一样,这个就像去买家电时,销售者老喜欢说高价格来给你砍价一样
我进公司的时候,有三个上机题,我只会做前两个,第三个所用的知识见都没见过。第一个题是“给你一个字符串,然后将它反转。”第二个题是“给你一个数字,算出从1+到它的和。”这两个题应该很简单吧,我几分钟就做好了,可是对于和我一起来面试的人来说,他们之中大部分都不会做。
这件事让我很感慨,我不知道我们上班时,编程时都做了些什么?
不会吧,这两道题还有人不会做?另外,我想知道第三题是什么
我没有接触过一些公司,不过同样感到不可思议。我怀疑他们把你们的简章内容看错了!
国内的公司通常问你会不会XXX框架,会不会用XXX服务器,最搞笑的是某些大型央企问你对他们的系统规格熟悉不熟悉,我没进你们公司前最多只是你们的客户(而且可能是根本不用你们IT系统的用户,你知道,很多国企的IT系统烂得要死),我熟悉你们的系统规格干吗?
PS:我不明白,哲学博士也就算了,做内核开发和编译器设计的人都不会反转链表?
单链表逆置,竟然说通过率才5%,我不信,我才一年工作经验,我肯定能做出来的
全不会啊。啊啊啊
记得是大三才学的算法导论和操作系统里的介绍,现在也记不得了