IT见解

我们都生活在一个这样的噩梦中:一个新手开发人员前来工作,你欢迎他的参与,却发现他达不到你对进度的要求,而且他的提问也显示出他对基础知识的无知。即使他最终把工作完成了,编写的程序也很笨拙,需要更能干的人从头重写。然而录取他的面试官们或人力资源部门(如果你的公司中也有这种官僚体制的寄生虫的话)却信誓旦旦地表示,他们只聘用精英人才。

这是一个大问题,尤其是现在,有愈演愈烈的趋势。每天我都从招聘人员那儿收到骚扰邮件,每个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”,直接让应聘者展示他们的代码,并解释他们的设计决策,如果让他们现在重新做的话,又会有什么不同。你在一旁观看时,让他们实现一个或者两个功能,这样你就能知道他们实际上是怎样工作的以及他们在工作中的想法。这才是你想从一场技术面试中得到的,而不是通过一些过时的算法和数据结构来对此进行估量。这个世界总在不断前进。