个人随笔
技术改变世界

寻找优秀的程序员

本文转自书籍程序员部落酋长Joel谈软件《软件随想录》,也是前几年看的书了,突然又想起,所以分享到博客中。

 

2006年9月6日,星期三

优秀的程序员都在哪里

这是你第一次公开招募雇员。如同大多数人一样,你会发布广告,可能也会浏览一些大型的网上论坛,然后你就收到了一吨的简历。

一份份看下去,你会想:“嗯嗯嗯,这人应该可以。”或者:“这人差远了。”或者:“我要知道他能不能下决心搬到布法罗 来。”但是,我保证有一件事绝对不会发生,那就是你对自己说:“哇,这家伙太聪明了!这种人,我们一定要得到!”事实上,当你看完足足几千份求职简历之后(假定你懂得如何看简历,那可并不容易),老实说,你从中没有发现一个优秀的程序员。一个也没有。

下面我就来说说为什么会这样。

很简单,就同所有行业中最好的人才一样,那些优秀的程序员是不会出现在招聘市场上的。

通常优秀的程序员在整个职业生涯中,可能会有4次求职。

那些最优秀的大学毕业生,他们会从教授那里得到实习的机会,而教授跟业界有不少联系。这样,他们会早早地就从实习公司得到机会,根本不用去找其他工作。如果他们离开那家公司,那可能是因为同朋友一起去创业,或者因为他们跟着一个了不起的老板一起跳槽到另一家公司,或者因为他们决定一定要换个工作方向。比如说Eclipse ,因为Eclipse很酷,所以他们想去BEA 或者IBM找一个Eclipse的工作,然后他们肯定会得到这份工作,因为他们是优秀人才。

如果某一天,你遇到了这样的人出现在招聘市场上,那么你很幸运,你真的非常幸运。可能的情况是,他们的配偶决定到安克雷奇 当一名实习医生,他们就会发出简历,给少数几个他们认为自己愿意效力的位于安克雷奇的公司。

但是大多数时候,优秀的程序员(我几乎是在重复了)是那么优秀(对,我就是在重复),未来的雇主通常会一眼看出他们的优秀,这意味着,这些程序员基本上想去哪里工作,就能去哪里工作。所以,老实说,他们不会发出许多份简历,到处找工作。

听起来,他们就是你想雇的那种人?当然。

这条规律(优秀的人才从不在市场上求职)有一个推论,那就是在人才市场上找工作的,大部分都是一些水平很差、完全达不到要求的人。他们一年到头都在被解雇,因为他们不能完成工作。他们所在的公司也会完蛋,因为这些人水平太糟糕,以致于整个公司都会被他们拖垮。是的,这种事真的会发生。(公司完蛋的另一个可能的原因是,既然雇用了一个不合格的程序员,就可能雇用一大堆不合格的程序员,累积起来,就导致了最终的失败。)

谢天谢地,这么糟糕的人很少能够求职成功,但是,他们总是不断地发出求职信。他们找工作的时候,就去Monster.com ,将所有的职位翻看一遍,300个或者1000个,试图中奖。

从数量上说,优秀的人才很少,而且从不出现在招聘市场上,而那些不称职的人,即使数量也同样少,却在整个职业生涯要申请几千份工作。所以,老兄,现在让我们回到你从Craigslist 上搞到的一大堆简历上来。你对他们中的大多数都看不上眼,有什么好奇怪的?

我猜想,聪明的读者读到这里,会指出我遗漏了最大的一类人:那些可靠的、称职的程序员。人才市场上这一类人在数量上多于优秀程序员,但是少于不称职的程序员。不管怎样,总的来说,在你收到的1000份简历中,他们的比例是很小的。在绝大多数情况下,几乎所有此刻桌子上堆着1000份简历的Palo Alto 人事经理们都会发现,其中970份简历是出自同样的那少数970个不称职的程序员,内容都一样,这些家伙针对每一份工作都发求职信,也许会这样干上一辈子。1000份简历中仅仅只有30份是值得考虑的,其中可能偶然会出现一份优秀程序员的简历。OK,可能一份也没有。请想一想,如何在一堆干草中找到一根针。我们下面将会看到,这是可以做到的,但是比较难。

 

我能得到他们吗

你能!
好吧,你也许能!
实际上,这要看情况而定!
请不要将招聘看作一个“收集简历,过滤简历”的过程,你必须将它看作一个“追踪优胜者,设法结识他们”的过程。

我有3个实现这个目的的基本方法。
(1) 走出去。
(2) 实习生。
(3) 建立自己的社区(community)。*

(“建立自己的社区”这一条后面有一个星号。它的意思是,这一条有难度,难得就好像数学家乔治•丹茨格 解决的那道数学难题一样。他之所以能解决是因为,他上课迟到了,以为黑板上的题是课外作业,而没有听到老师说那道题是无法解决的难题。)

在这方面,你可能有自己的想法。我只是想谈一谈这3个对我自己有效的方法。

 

走出去,伙计

设想一下那些你想雇用的人会出现在什么地方。他们会去参加哪些会议?他们住在哪个地区?他们属于什么组织?他们上什么网站?不要像撒大网一样在Monster.com上搜索求职者,你可以浏览“乔尔谈软件”网站上的求职讨论区,将搜索范围缩小到那些阅读我的网站的聪明人。你还可以去那些真正有趣的技术会议上寻找合适的人。优秀的Mac程序员会参加苹果公司的WWDC大会 。优秀的Windows程序员会参加微软的PDC大会 。此外,开源软件也有许多会议。

你要关心正流行的热门新技术。去年是Python语言,今年轮到了Ruby语言。你去参加它们的会议,在那里你会找到这些技术的早期接受者,那些人对新事物充满好奇心,而且永远对如何进一步改进有兴趣。

你要在走廊里到处走走,同遇到的每一个人都攀谈一番;去参加技术环节的小组专题讨论,将发言者邀请出来,一起喝杯啤酒。当你终于发现聪明人的时候,立刻进入全力套近乎和吹捧模式。“啊哈哈哈哈,那真是太有趣了!”你说,“哦,我真不敢相信你这么聪明。还这么帅!你刚才说你在哪里工作?真的吗?那个地方?哎呀呀呀呀。你会不会觉得,你能做出更大的成绩?我想我的公司可以雇……”

这种方法的引申含义就是,不要在大型的求职论坛发布没有针对性的招聘广告。有一年夏天,我一不小心在MonsterTRAK 上发布了一个暑期实习的招聘广告。只要出很少的钱,MonsterTRAK就能使你的招聘广告有机会被位于美国各地的所有学校的学生看到。结果就是我收到了几百份简历,但是其中没有一份能够通过第一轮筛选。我们花了钱,却得到了一堆几乎毫无机会被我们雇用的人的简历。一连好几天,MonsterTRAK 源源不断地送来简历,这样的事实使我觉得我们大概不会找到想要的人了。同样的,当Craigslist刚成立的时候,用户都是互联网产业的业内人士,我们通过在上面发招聘广告,找到了优秀人才。但是今天,会用计算机的人差不多都在上Craigslist,结果就产生了太多的简历,在其中发现人才简直比在一堆干草中发现一根针的概率还要低。

 

实习生

抢到那些永远不会在招聘市场上出现的优秀人才,有一个好办法。那就是当他们还在学校里的时候就出手,那个时候他们甚至还没有意识到世界上有人才市场这件事情。

一些人事经理非常反对雇用实习生。他们认为实习生不成熟、水平不够。一定程度上确实如此。实习生不如资深雇员有经验。(且慢,真的如此?!)你不得不在他们身上多付出一些,这需要时间,然后他们才会全速前进。对于我们这个行业来说,好消息是,一些真正优秀的程序员往往在10岁的时候就开始编程。当其他同龄的孩子正在玩足球(这是一种许多不能编程的孩子喜欢玩的游戏,就是用脚去踢一个叫作球的圆形物体——这样说听起来很怪,我知道的),他们却在爸爸的书房里试着编译Linux的内核(kernel)。他们不去操场上追求女生,而是在Usenet 上大打口水战,宣称某些编程语言糟糕透顶,没有实现Haskell 风格的类型推断(type inference)。他们不在车库里组建乐队,而是动手完成一个很酷的黑客程序,对付那些企图偷用别人Wi-Fi带宽的邻居。当那些人一打开网页,所有里面的图片都会倒过来。

所以,在软件开发这一块,同其他行业(比如法律或医学)不一样,当那些孩子进入大二或大三的时候,他们已经是好得不得了的程序员了。

天底下有一个工作,几乎所有人都会投求职信,那就是每个人的第一份工作。大多数孩子都觉得,犯不着为这种事担心,到大学最后一年再说吧。事实上,大多数孩子都不会太主动,他们要等到校园招聘开始以后,才会觉得应该要投简历了。在第一流大学读书的孩子们,单单从校园招聘中就会有足够的好工作可以挑选,他们很少会再去考虑那些懒得来学校的雇主。

你可以赶去参加校园招聘,虽然乱哄哄的,但是别误会,这是一件好事。你也可以在孩子们毕业的一二年前,就把事情搞定。

在这方面,我自己的Fog Creek软件公司有许多成功的例子。每年9月份,我就开始行动,我动用所有的资源追踪这个国家最好的计算机专业的学生。我给全国二三百所学校的计算机系写信。在离毕业还有两年的时候,我就搞来主修计算机科学的学生名单(为了搞到名单,你通常需要在系里有认识的人,老师或者学生)。然后,我就给我找到的每一个学生写一封信。不是电子邮件,是真的纸质的信,上面有Fog Creek软件公司的抬头。我还用墨水笔,醒目地签上自己的大名。很显然,如今这种事情不多见,所以我的信可以得到足够的关注。我在信里跟学生们说,我们公司有实习的机会,我以个人名义邀请他们来申请。另一种情况是,我给计算机系的教授和校友发电子邮件,请他们将我的邀请信转发到计算机系的邮件列表中去。

慢慢地,我们就会收到许多实习职位的申请信,我们就从中挑出最后的入选者。在最近几年中,我们每个实习职位都有200个人申请。我们通常从这么多申请表格中筛选出10份(每个职位),然后给这些人打电话考察。在通过电话考察的人中,我们可能会邀请2~3个飞到纽约,对他们进行面试。

到了面试这一步,面试者就很有可能被我们雇用,所以现在是时候启动全场紧逼式的招募了。豪华轿车在机场等着他们,穿制服的司机帮他们提行李,并且将他们送到酒店,那里很可能是他们迄今见过的最酷的酒店:坐落在城中最时尚、随时都能看到模特在街上走来走去的地区,卫生间里有各种复杂的设备,简直可以放进当代艺术博物馆中当作藏品(祝你好运,希望你能在这样的卫生间里弄清楚怎么刷牙)。当面试者住进酒店以后,我们给他留了一个大礼包,里面有一件T恤、一本由Fog Creek员工编写的纽约观光手册、一张包含2005年暑期实习全过程的纪录片的DVD。屋里有一个DVD播放机,所以他们当中许多人都看到了上一年的实习是多么有趣。

一天的面试结束以后,如果他们想看看纽约,我们出钱让他们再待上二天。最后,用豪华轿车接他们离开酒店,送到机场,搭上返家的航班。

即使到纽约参加面试的人中,三个里面只有一个能够通过全部的考核,但是让那些最后通过的人对我们有一个正面的印象,这是非常重要的。就算那些没有通过的人,也会认为我们是一流的雇主。当回到学校时,他们就会告诉所有的朋友,这次住在豪华酒店的纽约之行是多么好玩。他们的朋友听了,就会在明年夏天申请我们的实习生,哪怕只是为了有机会到纽约来玩一次。

就暑期实习本身来说,在这个过程中,学生们通常会想:“OK,这次暑期实习还不错,我得到了一段美好的经历。也许,只是也许,我可以获得一份全职工作。”我们在学生前面就已经想到了这个问题。在暑期中,我们会决定想要哪些人留下来作为全职雇员,学生也要利用暑期决定是否愿意加入我们。

正是因为如此,我们会把真正的实际工作交给实习生。那些都不是轻松的活。我们的实习生总是接触会在最后产品中使用的代码。有时候,他们做的是整个公司里最新潮的东西。这会让我们的正式雇员有一点点嫉妒,但是这就是生活啊。有一年夏天,我们让4名实习生组成一个开发小组,从零开始做一个全新的产品。他们用几个月的时间就做成功了。公司获得的收益完全超过了实习的开销。实习生做的即使不是新产品,也总是真实的、会投入生产阶段的代码,并且他们个人要对软件功能中的某个主要方面承担完全责任(当然,资深雇员会作为导师帮助他们)。

为确保他们的实习生活过得愉快,我们会举办晚会,邀请他们到家里做客,免费为他们提供条件很好的宿舍,在那里他们可以结识来自其他公司和学校的朋友。我们每周还有一些课外活动或者郊游,比如听百老汇的音乐剧(今年的实习生都迷上了音乐剧《可爱大道》 )、参加电影首映式、参观博物馆、围绕曼哈顿岛划船、观看扬基棒球队的比赛。不管你信不信,本年度最受欢迎的活动之一是登上落基山顶。我的意思是,爬到曼哈顿中区一幢高楼的顶楼平台。你大概不会觉得这种活动好玩,但是它真的受欢迎。除了实习生以外,Fog Creek的一些正式员工也参加了每次活动。

当夏天结束的时候,总是有一些实习生让我们确信,他们就是那类我们非雇用不可的真正的优秀程序员。不是所有的实习生都是这一类,请听好,有些实习生确实是优秀程序员,但是我们愿意让他们离开,还有一些实习生可能在其他地方会成为优秀程序员,但是不是在Fog Creek。举例来说,我们是一家很强调自治(autonomous)的公司,没有很复杂的管理层级,我们希望所有人能够主动工作。从过去来看,有些时候,如果有人督导,一些暑期实习生就表现得非常好,但是一旦来到Fog Creek这种没有很多硬性管理的环境,他们的表现就不太好。

无论如何,对于那些我们确定要雇用的人,等待是没有意义的。我们会很快就提供一个正式职位,条件是他们毕业以后过来工作。这个职位的待遇很丰厚。我们就是要他们回学校后,跟朋友们交换意见,然后他们会意识到自己的薪水比别人都要高。

这是不是意味我们给的报酬太多了?完全不是。你要这样看,第一年的薪水一般来说总是要打一点折扣的,因为必须考虑到新人没有好的表现的风险。但是我们已经考察过这些孩子了,可以毫无风险地认定他们就是优秀人才。我们很清楚他们的能力。所以,当我们雇用他们的时候,我们比其他雇主有更多的信息,后者仅仅面试过他们而已。这意味着我们能够付更高的报酬。我们有更充分的信息,所以我们愿意比那些没有这些信息的雇主付出更高的工资。

如果我们做好了份内的事情(我们通常都能做好),那么到了这个时候,我们选定的实习生就会作出决定,到底接受还是放弃我们提供的职位。不过有时,还需要一点额外的说服工作。有些实习生不愿意马上给出明确答复,他们还想等一等,看看有没有更好的机会。但是,一个来自Fog Creek公司的有效的工作机会会起到这样一种作用,那就是当他们第一次在早晨8点不得不起床、穿上套装、去参加甲骨文公司的面试的时候,当闹钟响起的那一刻,他们很可能会说:“我干嘛一定要在该死的早晨8点起床、穿上套装、去参加甲骨文公司的面试呢?不是已经有一个很好的工作机会在Fog Creek等着我吗?”我的期望是,他们会觉得太麻烦,就不去参加那个面试了。

在我继续往下讲之前,顺便说一句,我必须对计算机科学和软件开发行业的实习生问题进行一点澄清。在如今这个时代,在这个国家,对实习生支付报酬被认为是理所当然的,而且他们的报酬往往很不错。虽然不付报酬的实习生在很多其他行业依然很常见,比如出版业和音乐业,但是我们的工资标准是每星期750美元,还提供免费的住宿、免费的午餐、地铁交通费,更别说来回纽约的飞机票和其他各种福利了。如果单看钱数,我们的工资比平均水平要低一点,但是如果将免费住宿考虑在内,我们的工资就比平均水平要高一点。我想之所以我要说这个,是因为每次我在我的网站上谈到实习生的时候,总有人搞不清楚,认为我占了别人的便宜,好像我在搞奴隶制似的。那边的谁——你们这些自以为是的毛孩子!给我拿一杯冰镇橙汁,要手挤的,别磨磨蹭蹭!

实习生制度创造了输送优秀人才的管道,但是这根管道比较长,而且一路上的损耗很大。根据我们的计算,基本上每雇用一个全职雇员,我们就必须请两个实习生,以便挑选。如果你请的实习生离毕业还有一年,那么从你开始确定实习人选的时候算起,到他正式第一天上班,会有两年的时间间隔。这意味着,每年夏天我们的办公室有多少空位置,我们就要请多少实习生来。头三个夏天,我们试着将实习生限制为离毕业还有一年的学生。但是今年夏天,我们终于意识到错过了一些更年轻的优秀学生。所以,我们将实习生计划向高校中所有年级的学生开放。说出来你可能不信,我正在琢磨怎样将高中生弄进来,也许让他们课后组装电脑,为上大学攒一点钱。我们的目的就是开始着手建立与下一代优秀程序员之间的联系,即使这样一来,管道会长达6年。没关系,我有长远眼光。

 

建立社区

这里的基本思想是创造一个大型的网络社区,让观点相近的优秀软件开发者以某种形式聚集在你的公司周围。然后,每当你有职位空缺的时候,总会有天然的候选者。

告诉你实话,Fog Creek里这么多优秀的程序员,就是通过我的网站joelonsoftware.com发现的。那个网站上主要的文章的读者多达100万,其中大部分都是有能力的程序员。有了这么庞大的、自发聚集起来的读者群,无论何时,只要我在主页上提到我正在招聘,通常就会得到很多优秀人才的简历。

我用一个星号表示这种方法很“困难”,因为我感到,好像我给你的是这样一个建议:“要赢得选美比赛,第一步是要变美,第二步是参加比赛。”我有这种感觉是因为,我真不太清楚为什么我的网站变得这么流行,或者为什么浏览这个网站的人都是一流的程序员,我不知道自己做了什么。

我真心希望我能在这个地方给你更多帮助,但很抱歉我没做到。在这方面,Derek Powazek写过一本好书Design for Community: The Art of Connecting Real People in Virtual Places。许多公司尝试过不同的网志策略,但是很不幸,其中的大多数最终都不会有任何读者群。所以我只能说,对我们有效的方法,对你可能有效,也可能无效。我不确定你到底该怎么做。我在自己的网站上搭建了一个求职区(jobs.joelonsoftware.com)。你只要出350美元就可以在那里发布招聘广告,该网站的所有读者都会看到。

 

员工推荐:小心陷阱

寻找优秀程序员有一个所谓标准建议,就是询问你现在的雇员。怎么说呢,它背后的理论是,聪明的程序员一定认识其他聪明的程序员。

他们可能确实认识,但是他们的亲密朋友中也会有人不是非常优秀的程序员。这种方法会制造大概100万颗地雷。所以,真实生活中,我一般认为员工推荐是最不可靠的招聘新人的方法之一。

一个无法回避的巨大风险,就是竞业限制合同 (noncompete agreement)。如果你不以为然,请想一想Crossgain公司的遭遇,这家公司不得不开除了四分之一员工,因为那些人以前都在微软工作,微软公司威胁起诉他们。在正常理智的情况下,没有程序员会签署一份竞业限制协议,但是大多数程序员确确实实签署了,因为他们觉得这种合同不可能会实施,或者因为他们没有习惯去阅读合同里写了什么,或者因为他们已经接受了雇主提供的职位,穿过半个美国,举家搬到新的城市,在上班的第一天第一次看到了合同的全文,这时再要协商具体条款为时已晚。不管什么原因,总之他们签署了。但是实际上,这是雇主让人最讨厌的做法之一,而且这个条款可以强制执行,并且真的会被执行。

如果你不当心竞业限制合同,并且很依赖员工推荐,后果可能是,你雇了一堆人,他们的前雇主都是同一家公司(因为就是在那个地方,你的雇员第一次结识了其他明星程序员),那么你将承担非常巨大的风险。

另一个问题是,如果你不能保证应聘者百分之百被接受,那么当你要求你的雇员推荐人选时,他们甚至都不会考虑向你说出他们真正的朋友。如果自己推荐的朋友还可能被拒绝,就没有人愿意说服朋友来应聘自己的公司。这样多多少少会破坏友谊。

因为他们不告诉你谁是他们的朋友,你可能就不能雇到以前同他们一起工作的人。那么,他们推荐的其他人可能就不是很有能力了。

但是,“员工推荐”的真正问题在于,如果负责招聘的人事经理懂一点经济学,决定为每一个有效的推荐提供奖金,麻烦就来了。提供奖金的做法很常见,原因是这样的:如果通过猎头公司或者外部招聘渠道雇人,每个职位的中介费用大概是3万美元到5万美元。如果我们向“员工推荐”支付奖金,比方说,每次成功推荐一个人,他们可以拿到5000美元的奖金,或者成功推荐10个人,他们可以得到一辆昂贵的跑车,或者其他的奖励方式,那样的话,想一想可以省下来多少钱。即使对于一个工资丰厚的雇员来说,5000美元听上去也像是一笔小财,的确是笔不小的收入。总之,这样处理看上去是一种双赢的、对各方面都很周到的方案。

麻烦是,突然之间,你发现每个人的心眼都活了,雇员们开始将他们能想到的每个人都拖来面试,他们强烈希望他们找来的人能被雇用。他们教外面的人如何应付面试,在会议室中同应试者说悄悄话。转眼之间,你手下的整个劳动大军都在设法让你雇用某人的一个大学室友,而此人对你毫无用处。

这样是不行的。ArsDigita公司曾经轰动一时,因为它买了一辆法拉利跑车,将车陈列在停车场上,并宣布不论是谁,只要能成功推荐10个人进公司,就能拥有这辆跑车。无人完成这项任务,甚至连接近完成的人都没有,但是新进员工的质量却不断下降。该公司后来倒闭了,不过原因可能不是这辆法拉利,因为后来被曝光该车是租的,不过只是公开作秀而已。

如果Fog Creek的雇员提议雇用某个可能对我们很合适的人,我们愿意省去第一步的电话筛选,但是仅此而已。我们仍然要求应聘者通过剩下的所有面试,我们坚持高标准不变。

 

寻找优秀的程序员之实战指南

程序员会怎么找工作?如何使一份工作对程序员更有吸引力?你怎样才能变成他的雇主?请继续往下阅读!

转载请注明出处王旭博客 » 寻找优秀的程序员

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址