咱们都生活在一个这样的噩梦中:一个新手开发人员前来工做,你欢迎他的参与,却发现他达不到你对进度的要求,并且他的提问也显示出他对基础知识的无 知。即便他最终把工做完成了,编写的程序也很笨拙,须要更能干的人从头重写。然而录取他的面试官们或人力资源部门(若是你的公司中也有这种官僚体制的寄生 虫的话)却信誓旦旦地表示,他们只聘用精英人才。
这是一个大问题,尤为是如今,有愈演愈烈的趋势。天天我都从招聘人员那儿收到骚扰邮件,每一个IT公司都极度渴望聘请程序开发者,可是优秀的程序员是不可替代的。一个优秀的程序员能够轻易完成至关于一个平庸的程序员五十倍的工做,而拙劣的程序员最终只会产生消极的生产力(参见《一些不为人知的编程真相》)。所以,对任何公司来讲雇佣这样的人都 是一个可怕的错误;对新创公司来讲,这简直就是具备毁灭性的公司杀手。既然这样,为何这种状况出现得如此频繁呢?
就如同有不少残留问题困扰着现代软件工程同样,这都是微软的错。当微软仍是一我的人都暗自想去工做的邪恶帝国时,就以用使人绞尽脑汁的问题面试而著名。例如:为何井盖是圆的?固然,他们也问刚毕业的大学生一些关于计算机科学理论的问题,如:请写一个二分查找程序。
每一个IT公司都但愿能像微软同样,甚至Google也这么但愿过,直到目前你们都想成为Google歌这样的公司。所以这种相互模仿的面试传统就延续 了下来。看看这两个关于面试问题的最新信息,一个来自准员工,一个来自谷歌面试官。这里引用了两句谷歌面试官说的话,颇有启发性。“我甚至没必要说这是一个 很好的标准。”和“若是 有任何值得欣慰的地方,至少咱们不再问复杂的谜语问题了,那个实在是至关使人反感。”
使人高兴的是,Google彷佛有点意识到他们的招聘方法存在问题,惋惜的是他们没有设法解决。Jean Hsu也撰文代表她对技术面试效用的疑问。根本问题是,目前经过行业标准化的软件面试所须要的技能并非一个优秀的软件开发人员所须要的技能,或许这其中有某些相关性,但这个相关性就跟奥克兰突袭者队挑选出跑得最快的人,却无尽沮丧地发现国家橄榄球联盟并非一个跑步比赛是同样的。
事实上更糟糕。由于至少接球员是须要跑的,而我却能够无所畏惧的向你保证,没有哪一个被聘用的软件工程师必须写一个二分查找程序。这就如你选择承包商一 样, 由于他们知道怎样用煤、铁、炉子和风箱来锻造和浇铸钢材。事实上他们只须要知道最近的一家家得宝(全球最大的家居建材零售商,美国第二大零售商)的地址, 以及用在那里买的钢材来作什么用。
你一般试图在雇员身上找寻的东西,Joel Spolsky曾给出了准确的解释,即:就是聪明(Smart)而且能作事(Get things done)的人。(大学院校中处处都是具有前者而不具有后者的人。)不过,首先你必须构建一些其它的能力,也就是说不能彻底不具有任何能力。你会惊奇的发 现,如此多的彻底不胜任的应聘者出如今技术面试中。谷歌的二分搜索大概是打算做为他们的“FizzBuzz”(分支切换)——一个你进入谷歌大门必须越过 的障碍。这个“FizzBuzz”在真正的面试开始前占据了足足五分钟。
那么,一场真正的面试包括什么呢?请容许我提出一个愚见:不聘用没有任何成就的人。证书和学位历来都不是成就,我是指有实际用户的真实项目。如今 Google App Engine和Amazon Web Services提供免费的第三方服务,并且要注册成为一名Android开发人员,并在Android Market发布程序也总共只需25美圆。在这样一个世界里,任何软件开发人员没有借口说他没有本身制做的网站、应用程序或服务。(编注:所以,新人在参 加全职工做前,去承接网站开发项目或者软件开发项目,从中学到的知识和积累的经验,对新人而言是一项很是宝贵的财富。)
旧的面试体系以有限的信息为基础,你只能经过应聘者的简历了解他们。可是,若是你只面试有成就的人,你将会有一个更宽广的平台来开展工做。避开 “FizzBuzz”,直接让应聘者展现他们的代码,并解释他们的设计决策,若是让他们如今从新作的话,又会有什么不一样。你在一旁观看时,让他们实现一个 或者两个功能,这样你就能知道他们其实是怎样工做的以及他们在工做中的想法。这才是你想从一场技术面试中获得的,而不是经过一些过期的算法和数据结构来 对此进行估量。这个世界总在不断前进。
译文连接:http://www.jobbole.com/entry.php/932