找回密码
 立即注册
收起左侧

真正的程序员,请你站出来

11
回复
12757
查看
[复制链接]
累计签到:1 天
连续签到:1 天
来源: 转载 2013-3-30 17:38:28 显示全部楼层 |阅读模式

马上注册,查看详细内容!注册请先查看:注册须知

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

我们积极的对外招聘已经有四个多月了,如果要问从这次经历中有哪些收获,我只能说,我终于明白,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个小时的工作。这占用了 一个懂技术的工程师大量的时间去发现一个可用的候选人。

真正的程序员,请你站出来


                     转自  IT  外刊


回复

使用道具 举报

累计签到:1568 天
连续签到:1 天
2013-3-31 20:37:36 显示全部楼层
其实工作了以后,每天都是重复的事情,代码都是copy过来改改的,太多的人已经没有时间、精力和心思去钻研一个哪怕一个很简单的基础编程问题了。所以,往往到后来,一个很难发现的bug都可以找出来,但是连冒泡算法都写不出来。{:soso_e160:}这里没有说基础知识不重要的意思!
回复 支持 反对

使用道具 举报

累计签到:29 天
连续签到:1 天
2013-5-7 21:14:44 显示全部楼层
{:soso_e117:}现在大二,软件公司到我们学校搞培训,都是java的,唉,他们只知java容易,却不知qt的强大
回复 支持 反对

使用道具 举报

累计签到:2 天
连续签到:1 天
2013-5-8 16:10:41 显示全部楼层
java在目前超级火的,工资也很高!
回复 支持 反对

使用道具 举报

尚未签到

2013-5-22 23:07:46 显示全部楼层
楼主说的应该都是事实,但结论偏颇的厉害。。。
工作多年后基本很多东西都定向了,基础知识方面基本上只留下一个基本概念了,所以除非你刚好问道了他所熟悉并正参与的内容才可能获得比较“惊喜”的反馈。。。
实际上更重要的是"能力",而不是这类"知识",对于真正的有能力的程序员来说,可能你问20个问题,每一个都只能说一些基本概念,回答不了你的需求,但只要过上1天(或者说不长的时间),他基本上都可以借助各种工具圆满地解决。。。
说实在的,招聘方面真的不是那么简单的。。。
回复 支持 反对

使用道具 举报

累计签到:4 天
连续签到:1 天
2013-8-21 23:33:00 显示全部楼层
yafeilinux 发表于 2013-3-31 20:37
其实工作了以后,每天都是重复的事情,代码都是copy过来改改的,太多的人已经没有时间、精力和心思去钻研一 ...

深有体会啊,现在就是忙着改问题,做写重复的东西,很想去研究写新东西,唉,心有余而力不足啊
回复 支持 反对

使用道具 举报

累计签到:213 天
连续签到:1 天
2013-8-28 11:19:37 显示全部楼层
yafeilinux 发表于 2013-3-31 20:37
其实工作了以后,每天都是重复的事情,代码都是copy过来改改的,太多的人已经没有时间、精力和心思去钻研一 ...

深有体会。我现在就是每天重复着一些代码。无聊之极
回复 支持 反对

使用道具 举报

累计签到:11 天
连续签到:1 天
2014-1-2 14:50:30 显示全部楼层
赞同5楼的 “招聘不是那么简单的”

招聘不是用可量化的知识就能选出人来,编程需要毅力,学习能力,负责心....

选人需要眼光,同时也要承受风险。

回复 支持 反对

使用道具 举报

累计签到:595 天
连续签到:1 天
2014-4-4 09:37:30 显示全部楼层
看了以后回过头来想想,真的上面提到的问题好像都不会。
回复 支持 反对

使用道具 举报

尚未签到

2014-9-22 12:34:54 显示全部楼层
即使上面的问题一道都不会,也不意味着不是一个好的程序员!
即使上面的问题一个都不会,也不意味着赚不了大钱!
即使上面的问题都会,也不意味着你就最赚钱!


对大多人来说,那就是个工作,啥挣钱学习啥,你所说的并不见得能比人多赚多少
再说了,每人都有精通的地方,换了行业,让别人面试你,我看你也够球受,
牛B个啥
回复 支持 反对

使用道具 举报

累计签到:1 天
连续签到:1 天
2014-12-11 23:07:39 显示全部楼层
一个问题会不会,和你从事过的事情关系很大,这句话真的很有道理。
别说什么链表反转(请问你说的是类似于 反转树,交换两个叉 那个意思的 反转么)
就是个很简单的基础链表,突然之间,让我在实际工作中(不是说没法套用标准的链表方案,而是说,有时候由于思维不够严密,做不到所谓的滴水不漏,从小上学就是属于思维上丢三落四的,并非不知道不重要,只是很难改正,所以我个人只能靠书写和文字来让思维尽可能严密没有遗漏。)
所以有时候,所谓会不会,并不是说真的就不会,只是可能忘了,或者知道那么回事却不知道是不是这个问题的答案。
面试的时候其实特别容易紧张。

但假如说你给我时间,让我有一台能上网的电脑,我觉得,多多少少我总是可以搞定的。

真的有时候,所谓简单的编程问题,除非真的是有过很系统很老道的经验,就是一个二缺的字符串忘了用0结束符,混到了具体问题里都能让你傻上一两天。
回复 支持 反对

使用道具 举报

累计签到:134 天
连续签到:1 天
2015-3-14 14:38:33 显示全部楼层
他们是不是想找到第二个比尔盖茨或者乔布斯?努力程度不同,自然就会有差别。天道酬勤。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了