menu

秋梦无痕

一场秋雨无梦痕,春夜清风冻煞人。冬来冷水寒似铁,夏至京北蟑满城。

Avatar

寻找优秀的程序员

寻找优秀的程序员
作者:Joel Spolsky
译者:阮一峰
原文网址:http://www.joelonsoftware.com/articles/FindingGreatDevelopers.html

优秀的程序员都在哪里?
  这是你第一次公开招募雇员。如同大多数人一样,你会发布广告,可能也会浏览一些大型的网上论坛,然后你就得到了一吨的简历。
  当一份份看的时候,你会想,“嗯嗯嗯,这人应该可以”,或者,“这人差远了”,或者,“我要知道他能不能下决心搬到布法罗[1]来”。但是,我保证有一件事肯定不会发生,那就是你对自己说:“哇,这家伙太聪明了!这种人,我们一定要得到!” 事实上,当你看完几千份简历——假定你懂得如何看简历,那可并不容易——你都看完了,足足几千份的求职申请,老实说,你从中没有发现一个优秀的程序员。一个也没有。
  下面,我就来说说为什么会这样。
  很简单,那些优秀的程序员,就同所有行业中最好的人才一样,是不会出现在招聘市场上的。
  普通的程序员在整个职业生涯中,可能会有四次求职。
  但是,那些最优秀的人才,当大学毕业的时候,他们会从教授那里得到实习的机会,就这样进入这个行业。然后,他们会从实习公司得到正式合同,根本不用去找其他工作。如果他们离开那家公司,那可能是因为同朋友一起去创业,或者因为他们跟着一个了不起的老板,一起跳槽到另一家公司,或者因为他们决定一定要换个工作方向。比如说Eclipse[2],因为Eclipse很酷,所以他们想去BEA[3]或者IBM找一个Eclipse的工作,然后他们肯定会得到这份工作,因为他们是优秀人才。
  如果某一天,你遇到了这样的人出现在招聘市场上,那么你很幸运,你真的非常幸运。可能的情况是,他们的配偶决定到安克雷奇[4]当一个实习医生,他们就会发出简历,给少数几个他们认为自己愿意在里面工作的位于安克雷奇的公司。
  但是大多数时候,优秀的程序员(我几乎是在重复了)是那么优秀(对,我就是在重复),未来的雇主通常会一眼看出他们的优秀,这意味着,这些程序员基本上想去哪里工作,就能去那里工作。所以,老实说,他们不会发出许多份简历,到处找工作。
  听起来,他们就是你想雇的那种人?当然。
  这条规律——优秀的人才从不在市场上求职——有一个推论,那就是在人才市场上找工作的,大部分都是一些水平很差、完全达不到要求的人。他们一年到头都在被解雇,因为他们不能完成工作。他们所在的公司也会完蛋,因为这些人是如此的不合格,所以有时他们会毁掉整间公司。是的,这种事真的发生。(公司完蛋的另一个可能的原因是,既然雇佣了一个不合格的程序员,就可能雇佣一大堆不合格的程序员,累积起来,就导致了总的失败。)
  谢天谢地,这些那么糟糕的人很少能够求职成功,但是,他们总是不断地发出求职信。他们找工作的时候,就去Monster.com[5],将所有的职位翻看一遍,300个或者1000个,试图赢得彩票。
  从数字上说,优秀的人才很少,而且从不出现在招聘市场上,而那些不称职的人,即使数量也同样少,却在整个职业生涯要申请几千份工作。所以,老兄,现在让我们回到你从Craigslist[6]上搞到的一大堆简历上来。你对他们中的大多数都看不上眼,有什么好奇怪的?
  我猜想,聪明的读者读到这里,会指出我遗漏了最大的一类人:那些可靠的、称职的程序员。这一类人在数量上多于优秀程序员,但是少于不称职的程序员。不管怎样,总的来说,在你收到的1000份简历中,他们的比例是很小的。在绝大多数情况下,几乎所有此刻桌子上堆着1000份简历的Palo Alto[7]人事经理们会发现,其中970份简历都是出自同样的那少数970个不称职的程序员,内容都一样,这些家伙每一份工作都发求职信,也许会这样干上一辈子。1000份简历中仅仅只有30份是值得考虑的,其中可能偶然会出现一份优秀程序员的简历。OK,可能一份也没有。请想一想,如何在一堆干草中找到一根针,我们下面将会看到,这是可以做到的,但是比较难。

我能得到他们吗?
  你能!
  好吧,你也许能!
  实际上,这要看情况而定!
  请不要将招聘看作一个“收集简历,过滤简历”的过程,你必须将它看作是一个“追踪优胜者,设法结识他们”的过程。
  我有三个基本方法,实现这个目的:
1. 走出去。
2. 实习生。
3. 建立自己的社区(community)。*
(“建立自己的社区”这一条后面,有一个星号。它的意思是,这一条有难度,难得就好像数学家乔治·丹茨格[8]解决的那道数学难题一样。他之所以能解决,是因为上课迟到了,以为黑板上的题是课外作业,而没有听到老师说,那道题是无法解决的难题。)
  在这方面,你可能有自己的想法。我只是想谈一谈这三个对我自己有效的方法。

走出去,伙计!
  设想一下,那些你想雇用的人会出现在什么地方。他们会去参加哪些会议?他们住在哪个地区?他们属于什么组织?他们上什么网站?不要像撒一张大网一样,在Monster.com上搜索求职者,你可以浏览“Joel谈软件”网站上的求职讨论区,将搜索范围缩小到那些阅读我的网站的聪明人。你还可以去那些真正有趣的技术会议。优秀的Mac[9]程序员会参加苹果公司的WWDC大会[10]。优秀的Windows程序员会参加微软的PDC大会[11]。此外,开源软件也有许多会议。
  你要关心正流行的热门新技术。去年是Python语言,今年轮到了Ruby语言。你去参加它们的会议,在那里你会找到这些技术的早期接受者,那些人对新事物充满好奇心,而且永远对如何进一步改进有兴趣。
  你要在走廊里到处兜兜,同遇到的每一个人都攀谈一番,去参加技术环节的小组专题讨论,将发言者邀请出来,一起喝杯啤酒。当你终于发现聪明人的时候,砰!——你立刻进入全力套近乎和吹捧模式。“啊哈哈哈哈,那真是太有趣了!”你说。“哦,我真不敢相信你这么聪明。你刚才说你在哪里工作?真的吗?那个地方?哎呀呀呀呀。你会不会觉得,你能做出更大的成绩?我想我的公司可以雇……”
  这种方法的引申含义就是,不要在大型的求职论坛发布没有针对性的招聘广告。有一年夏天,我一不小心在MonsterTRAK[12]上发布了一个暑期实习的招聘广告。MonsterTRAK允许你只出很少的钱,就能使你的招聘广告有机会被美国各地所有学校的学生看到。结果就是我收到了几百份简历,但是其中没有一份能够通过第一轮筛选。我们花了钱,却得到了一堆几乎毫无机会被我们雇佣的人的简历。这样的日子,一连好几天,MonsterTRAK 源源不断地送来简历,这个事实使我觉得我们大概不会找到想要的人了。同样的,当Craigslist刚成立的时候,用户都是互联网产业的业内人士,我们通过在上面发招聘广告,找到了优秀人才。但是今天,会用计算机的人差不多都在上Craigslist,结果就产生了太多的简历,在其中发现人才,简直比在一堆干草中发现一根针的概率还要低。

实习生
  抢到人才,那些永远不会在招聘市场上出现的优秀人才,有一个好办法。那就是当他们还在学校里的时候就出手,那个时候他们甚至还没有意识到,世界上有人才市场这件事情。
  一些人事经理非常反对雇佣实习生。他们认为实习生不成熟、水平不够。一定程度上,确实如此。实习生不如资深雇员有经验(且慢,真的如此?!)。你不得不在他们身上多付出一些,这需要时间,然后他们才会全速前进。对于我们这个行业来说,好消息是,一些真正优秀的程序员往往在10岁的时候就开始编程。当其他同龄的孩子正在玩足球(这是一种许多不能编程的孩子喜欢玩的游戏,就是用脚去踢一个叫做球的圆形物体——这样说听起来很怪,我知道的),他们却在爸爸的书房里试着编译Linux的内核(kernel)。他们不去操场上盯着女生看,而是在Usenet[13]上大打口水战,宣称某些编程语言糟糕透顶,没有实现Haskell[14]风格的类型推断(type inference)。他们不在车库里组建乐队,而是动手完成一个很酷的黑客程序,对付那些企图偷用别人Wi-Fi带宽的邻居,当那些人一打开Web网页,所有里面的图片都会倒过来。哇哈哈哈哈!
  所以,在软件开发这一块,同其他行业(比如法律或医学)不一样,当那些孩子进入大二或大三的时候,他们已经是好得不得了的程序员了。
  天底下有一个工作,几乎所有人都会投求职信,那就是每个人的第一份工作。大多数孩子都觉得,犯不着为这种事担心,到大学最后一年再说吧。事实上,大多数孩子都不会太主动,他们要等到校园招聘开始以后,才会觉得应该要投简历了。在第一流大学读书的孩子们,单单从校园招聘中就会有足够的好工作可以挑选,他们很少会再去考虑那些懒得来学校的雇主。
  你可以赶去参加校园招聘,虽然乱哄哄的,但是这是一件好事,不要搞错了。但是,你也可以在孩子们毕业的一二年前,就把事情搞定。
  在这方面,我自己的Fog Creek软件公司有许多成功的例子。每年9月份,我就开始行动,我动用所有的资源追踪这个国家最好的计算机方面的学生。我给全国200所学校的计算机系写信。在离毕业还有二年的时候,我就搞来主修计算机科学的学生名单(为了搞到名单,你通常需要在系里有认识的人,老师或者学生)。然后,我就给我找到的每一个学生写一封信。不是电子邮件,是真的纸质的信,上面有Fog Creek软件公司的抬头。我还用墨水笔,醒目地签上自己的大名。很显然,如今这种事情不多见,所以我的信可以得到足够的关注。我在信里跟学生们说,我们公司有实习的机会,我以个人名义邀请他们来申请。另一种情况是,我给计算机系的教授和校友发电子邮件,请他们将我的邀请信,转发到计算机系的邮件列表中去。
  慢慢地,我们就会收到许多实习职位的申请信,我们就从中挑出最后的入选者。在最近几年中,我们每个实习职位都有200个人申请。我们通常从这么多申请表格中筛选出10份(每个职位),然后给这些人打电话面试。在通过电话面试的人中,我们可能会邀请2到3个飞到纽约,进行面对面的面试。
  到了面对面的面试这一步,面试者就很有可能被我们雇佣,所以现在是时候启动全场紧逼式的招募了。豪华轿车在机场等着他们,穿制服的司机帮他们提行李,并且将他们送到旅馆,那里很可能是他们迄今见过的最酷的旅馆,坐落在城中最时尚的地区,卫生间里有各种复杂的设备,简直可以放进当代艺术博物馆中当作藏品(不过当你想搞清楚怎么用它们刷牙的时候,祝你好运)。当面试者住进旅馆以后,我们给他留了一个大礼包,里面有一件T恤、一本由Fog Creek员工编写的纽约观光手册、一张包含2005年暑期实习全过程的纪录片的DVD。屋里有一个DVD播放机,所以他们当中许多人都看到了,上一年的实习是多么有趣。
  一天的面试结束以后,如果他们想看看纽约,我们出钱让他们再待上二天。最后,用豪华轿车接他们离开旅馆,送到机场,搭上返家的航班。
  即使到纽约参加面试的人中,三个里面只有一个能够通过全部的考核,但是让那些最后通过的人,对我们有一个正面的印象,这是非常重要的。就算那些没有通过的人,也会认为我们是一流的雇主,当他们回到学校,就会告诉所有的朋友,这次住在豪华旅馆的纽约之行是多么好玩。他们的朋友听了,就会在明年夏天申请我们的实习生,哪怕只是为了有机会到纽约来玩一次。
  就暑期实习本身来说,在这个过程中,学生们通常会想,“OK, 这次暑期实习还不错,我得到了一段美好的经历。也许,只是也许,我可以获得一份全职工作。”我们在学生前面就已经想到了这个问题。我们在暑期中,会决定我们想要哪些人留下来作为全职雇员,学生们也要利用暑期决定是否愿意加入我们。
  正是因为如此,我们会把真正的实际工作交给实习生。那些都不是轻松的活。我们的实习生总是接触会在最后产品中使用的代码。有时候,他们做的是整间公司里最新潮的东西。这会让我们的正式雇员有一点点嫉妒,但是这就是生活啊。有一年夏天,我们用四个实习生组成一个开发小组,从零开始做一个全新的产品。他们用几个月的时间,做成功了,获得的收益完全超过了实习的开销。即使实习生做的不是新产品,他们做的也总是真实的、会投入生产阶段的代码,并且他们个人要对软件功能中的某个主要方面承担完全责任(当然,资深雇员会作为导师帮助他们)。
  我们确保他们的实习生活过得愉快。我们举办晚会和邀请他们到家里做客。我们免费为他们提供条件很好的宿舍,在那里他们可以结识来自其他公司和学校的朋友。我们每周还有一些课外活动或者郊游,比如百老汇的音乐剧(今年的实习生都迷上了音乐剧《可爱大道》[15])、电影首映式、参观博物馆、围绕曼哈顿岛划船、观看杨基棒球队(Yankees)的比赛。不管你信不信,本年度最受欢迎的活动之一,是登上落基山顶。我的意思是,爬到曼哈顿中区一幢高楼的顶楼平台。你大概不会觉得这种活动好玩,但是它真的受欢迎。除了实习生以外,Fog Creek的一些正式员工也参加了每次活动。
  当夏天结束的时候,总是有一些实习生让我们确信,他们就是那类我们非雇佣不可的真正的优秀程序员。不是所有的实习生都是这一类,请听好,有些实习生确实是优秀程序员,但是我们愿意让他们离开,还有一些实习生可能在其他地方会成为优秀程序员,但是不是在Fog Creek。举例来说,我们是一家很强调自治(autonomous)的公司,没有很复杂的管理层级,我们希望所有人能够主动工作。从过去来看,有些时候,如果有人督导,一些暑期实习生就表现得非常好,但是一旦他们来到Fog Creek这种没有很多硬性管理的环境,他们的表现就不太好。
  无论如何,对于那些我们确定要雇佣的人,等待是没有意义的。我们会很快就提供一个正式职位,条件是他们毕业以后过来工作。这个职位的待遇很丰厚。我们就是要他们回学校后,跟朋友们交换意见,然后他们会意识到,他们的薪水比别人都要高。
  这是不是意味我们给的报酬太多了?完全不是。你要这样看,第一年的薪水一般来说总是要打一点折扣的,因为必须考虑到新人没有好的表现的风险。但是我们已经考察过这些孩子了,可以毫无风险地认定他们就是优秀人才。我们很清楚他们的能力。所以,当我们雇佣他们的时候,我们比其他雇主有更多的信息,后者仅仅面试过他们而已。这意味着我们能够付更高的报酬。我们有更充分的信息,所以我们愿意比那些没有这些信息的雇主,付出更高的工资。

员工推荐:小心陷阱
  寻找优秀程序员有一个所谓标准建议,就是询问你现在的雇员。怎么说呢,它背后的理论是,聪明的程序员一定认识其他聪明的程序员。
  他们可能确实认识,但是他们的亲密朋友中,也会有人不是非常优秀的程序员。这种方法会制造大概100万颗地雷。所以,真实生活中,我一般认为员工推荐是最不可靠的招聘新人的方法之一。
  一个无法回避的巨大风险,就是非竞争性合同[16](noncompete agreements)。如果你不以为然,请想一想Crossgain公司的遭遇,这家公司不得不开除了四分之一员工,因为那些人以前都在微软工作,微软公司威胁起诉他们。在正常理智的情况下,没有程序员会签署一份非竞争性协议,但是大多数程序员确确实实是签署了,因为他们觉得这种合同不可能会实施,或者因为他们没有习惯去阅读合同里写了什么,或者因为他们已经接受了雇主提供的职位,穿过半个美国,举家搬到新的城市,在上班的第一天第一次看到了合同的全文,这时再要协商具体条款为时已晚。不管什么原因,总之他们签署了,但是实际上,这是雇主让人最讨厌的做法之一,而且这个条款可以强制执行,并且真的会被执行。
  如果你不当心非竞争性合同,并且很依赖员工推荐,后果可能是,你雇了一堆人,他们的前雇主都是同一家公司,因为就是在那个地方,你的雇员第一次结识了其他明星程序员。这一切,导致你承担了非常巨大的风险。
  另一个问题是,如果你不能保证应聘者百分之百被接受,那么当你要求你的雇员推荐人选时,他们甚至都不会考虑向你说出他们真正的朋友。没有人愿意说服朋友来应聘自己的公司,如果他们可能被拒绝的话。这样多多少少会破坏友谊。
  因为他们不告诉你谁是他们的朋友,你可能就不能雇到以前同他们一起工作的人。那么,剩下来的他们推荐的人,可能就不是很有能力了。
  但是,“员工推荐”的真正问题在于,如果负责招聘的人事经理懂一点经济学,决定为每一个有效的推荐提供奖金,麻烦就来了。提供奖金的做法很常见,原因是这样的:如果通过猎头公司或者外部招聘渠道雇人,每个职位的中介费用大概是3万美元到5万美元。如果我们向“员工推荐”支付奖金,比方说,每推荐成功一个人,他们可以拿到5000美元的奖金,或者每推荐成功10个人,他们可以得到一辆昂贵的跑车,或者其他的奖励方式。那样的话,想一想有多少钱可以被省下来。即使对于一个工资丰厚的雇员,5000美元听上去也像是一笔小财,因为它真的是。总之,这样处理看上去是一种双赢的、各方面都很周到的方案。
  麻烦是,突然之间,你发现每个人的心眼都活了,雇员们开始将他们能想到的每个人都拖来面试,他们获得了强烈的动机,推动他们找来的人被雇佣。他们教外面的人如何应付面试,在会议室中同应试者说悄悄话。转眼之间,你手下的整个劳动大军,都在设法让你雇佣某人的一个大学室友,此人对你毫无用处。
  这样是不行的。ArsDigita公司曾经轰动一时,因为它买了一辆法拉利跑车,陈列在停车场上,宣布任何人只要能成功推荐10个人进公司,就能拥有这辆跑车。没有人能够接近完成这项任务,但是新进员工的质量却不断下降,公司后来变得四分五裂,不过原因可能不是这辆法拉利,因为后来被曝光,该车是租的,不过只是公开作秀而已。
  当一个Fog Creek的雇员提议雇佣某个可能对我们很合适的人,我们愿意省去第一步的电话筛选,但是仅此而已。我们仍然要求应聘者通过剩下的所有面试,我们坚持高标准不变。

注释:
[1] 布法罗(Buffalo),美国纽约州西部伊利湖东岸的港口城市,西与加拿大隔河相望,城外有世界著名的尼亚加拉大瀑布。华人常把这座城市叫做水牛城。
[2] Eclipse,一个由Java语言编写的开源集成开发环境(IDE),由IBM公司在2004年发布。
[3] BEA系统有限公司(BEA Systems, Inc.),成立于1995年的一家美国软件公司,已于2008年1月被甲骨文公司(Oracle)以大约72亿美元的价格收购。BEA是Eclipse的重要开发者和支持者,具有领导地位。
[4] 安克雷奇(Anchorage),美国阿拉斯加州最大的城市,属于美国的边远地区。
[5] Monster.com,北美最大的求职网站之一。
[6] craigslist.org,美国最大的分类广告网站,允许用户自由发布各种各样的广告。
[7] Palo Alto(帕罗奥图),美国加州的一个城市,共有人口6万2人左右,位于旧金山湾区南部。著名的施乐公司PARC研究中心和斯坦福大学就位于这里,它被认为是硅谷的中心,也是HP公司的诞生地。
[8] 乔治·丹茨格(1914.11.8 ~ 2005.5.13,George Dantzig),美国数学家,线性规划(linear programming)的创始人。
[9] Mac是苹果公司个人电脑商标Macintosh的缩写。
[10] WWDC是苹果公司全球开发者大会(Apple Worldwide Developers Conference)的缩写,每年在美国加州举行,用来发布苹果公司的新产品和新技术。最近一次的WWDC 2008于6月9日—13日,在旧金山举行。
[11] PDC是微软公司举办的专业开发者大会(Professional Developers Conference)的缩写,面向Windows程序开发者。该会议只在微软公司有新产品和新技术发布的年份举行。最新一届于2008年10月27日—30日在洛杉矶举行,此前一届则是在三年前的2005年举行。
[12] monstertrak.com是一个主要针对大学生找工作的门户网站。
[13] Usenet,一种全球性的供用户交换文件和讨论问题的大型网络。
[14] Haskell是一种纯函数的编程语言,以纪念逻辑学家Haskell Curry而得名。
[15] 《可爱大道》(Avenue Q)是一部讲述年轻人生活、事业和爱情的美国音乐剧,2003年首演,并且获得了当年美国戏剧最高奖托尼奖。Avenue Q是纽约的一条街道(现实生活中纽约从Avenue A~Z都有,唯独缺少Avenue Q),因为这里的房租便宜,所以住着各种没什么钱的年轻人。
[16] 非竞争性合同,又称非竞争性条款,指雇佣合同中规定,雇员在离职后一段时间内,不得到与原雇主有竞争性业务的公司就业。

评论已关闭