开发人员完全指南

来源:互联网 发布:网络体系结构的三要素 编辑:程序博客网 时间:2024/05/01 09:15

你可以在所有对的地方打广告、提供美妙的实习计划,也能面试任何的人。但令人遗憾的是:如果优秀的程序员不想替你工作,他们就绝不会前来响应你的号召。所以,这个章节将引领你来了解开发者:他们关心甚么?他们在工作场合里,喜欢甚么和不喜欢甚么?以及,如何(让你的公司)成为顶尖开发者的头号选择。(译注:如此是谓「开发人员实务指南」)

私人办公室

去年,我在耶鲁参与一个计算器科学研讨会,讲者之一是位硅谷老兵(曾创立或领导一票声誉卓著且有创投资金挹注的新公司)拿出了Peopleware这本书。

他说:「你一定要读这本书,它可是经营软件公司的圣经。这是市面上谈软件公司经营最重要的一本书。」

我必须同意:Peopleware的确是一本划时代巨著。而这本书中最重要、也最惹人争议的议题是:如果你希望程序员变得较有生产力,必须他们许多安静的空间,也许(就是)私人办公室。作者DeMarcoLister,围绕在这个主题上不断地打转。

演说结束后,我朝着讲者走去,问道:「我认同你对Peopleware的观点,告诉我,你所有的新创公司都有为开发者准备私人办公室吗?」

「当然没有」 「创投基金的人绝不会干这种事的」他说道。

噢。

「但这也许是书中最重要的一个概念」我说道。

「没错,但你必须有所取舍(pick one's battles=有选择地战斗,指没有胜算)。对于创投者来说,私人办公室就像是在浪费钱。」

硅谷有一种强烈的文化,要你把许多程序员塞进一个开放的大空间内,毫不理会已有明显证据证明,证明私人办公室可以让生产力大幅提升(我在这儿一再重复说明过)。虽然很难让大家真的理解(我没这样想),由于程序员有点喜欢社交,即使这意味着低落的生产力。所以这实在是很难。(原译:我真的无法说服大众,我不并认为我可以,因为程序员似乎有群聚的倾向,即使这意味着低落的生产力,所以这是一个艰难的战斗。)

我甚至听过有程序员这么说:「没错,我们都在小隔间内工作,但公司里每个人都如此,连执行长也是啊!」

「公司的执行长?他真的也在小隔间里工作?」

「好吧,他是一个小隔间,但既然你提了,事实上是有一间会议室让他处理他所有重要的会议...

嗯,硅谷有种很常见的现象:执行长会作秀,假装他跟大家一样在小隔间内工作,不过通常会弄一间会议室给他自己用(他会辩称「只有在讨论非公开事务时才会用」,但当你经过那间会议室时,有一半的机会,会发现执行长独自一人在内,把穿着Cole Haan名鞋的脚搭在会议桌,跟他的高尔夫球球友讲电话。)

论如何,我不想再重谈这些议题:关于私人办公室为何能让软件开发者更有生产力、为什么戴耳机听音乐压抑环境噪音已被证明会降低程序员的工作质量,也不想谈让开发人员拥有私人办公室为什么不会贵多少之类的事。那些事早已谈过了。今天,我主要谈论招募、还有私人办公室对于招募的影响。

无论你怎么看待生产力和平等的工作空间,有两件事是无法辩驳的:

1.    私人办公室意味着较高的地位

2.    小隔间和其他共享空间都可能让人尴尬

由这两个事实,可知程序员会比较想要可以提供他们私人办公室的工作,尤其是办公室有一扇可关的门、一扇窗以及良好的视野。

不过遗憾的是,这些能让招募更容易的事有部份超出你的权限。假若公司依赖创投资金,可能连执行长跟创始人都没有自己的办公室。大部分公司要每510年才会搬迁或重新安排办公室空间,较小的新创公司可能无法负担私人办公室。因此我的经验是:除了最开明的公司之外,任一家公司都会找尽理由,几乎是不可能让开发者获得私人办公室。不过即使是那些最开明的公司,大约每十年就要大风吹一次。而搬迁地点和工作场所,却是由办公室主任的秘书跟大建设公司的新进合伙人所组成的委员会决定。这些新进合伙人(常会相信开放空间意味开明公司之类的建筑学校等童话),而整个决定几乎完全没有参考开发者或开发团队的意见。

这有一些难以启齿,而且我会持续为良好的争论而战,但同时要知道私人办公室并非空中楼阁。即使在全世界租金最高的纽约市,大体上我们想是能为全职程序员提供。毫无疑问地,它也让人们更乐意在Fog Creek工作,所以假若你们还想持续抵抗,随你吧,我会将它视为一种竞争优势。

工作现场

对于私人办公室,工作现场有更多可谈论的地方。当一个应征者来到你的公司面试时,他们会到处看看人们在哪边工作,并想象他们自己在那边工作。假如办公室空间是令人愉快的、明亮的、在一个好的地区、一切事物都是崭新明净的,他们会觉得快乐;假若办公室空间狭小、地毯破烂、有些墙壁没被油漆、且挂着划船队的图片和「团队合作」四个大字,他们会觉得自己像是呆伯特(Dilbert)

许多搞技术的人明显地对他们办公室的使用情形漠不关心,事实上,即使人们有时能额外从好的办公室尝到甜头,也有可能对他们自己的办公室特定的缺点视而不见,因为他们对此已经习以为常。

从求职者方面设身处地、坦诚地思考:

1.    他们对我们座落的地方有何看法?像是布法罗(Buffalo)听起来如何,与奥斯汀(Austin)比起来又如何?人们真的想搬到底特律吗?如果你身在布法罗或底特律,能否尽量在九月里进行大部份的面试吗(译:因为布法罗平常太冷,底特律则是太热)

2.    当他们进入办公室时,体验到何种感觉?看到了甚么?是一个干净且让人兴奋的地方吗?中庭门廊有生意盎然的棕榈树跟喷泉;或者是让人感觉像是贫民窟里的一个公立牙齿诊所,旁边还散布着枯黄盆栽与过期杂志?

3.    工作区看起来如何?所有的东西都是崭新明亮的吗?或者你依然有张泛黄的TEAM BANANA标语,是在曾经有个东西叫做报表纸和点矩阵打印机的那个年代,所打印出来的?

4.    桌面看起来如何?程序员有多个大平面屏幕或单个传统屏幕?椅子是Aerons出厂的抑或是Staples跳楼大甩卖时的特卖货?

让我暂时离题讨论一下Herman Miller制作的著名Aeron办公椅:他们售价大约为$900,比OfficeDepotStaples的便宜办公椅要贵上$800

他们比便宜的椅子更舒适,假若你得到正确的尺寸且适当的加以调整,大部分的人可以坐上一整天而不觉得不舒服。椅背跟座位编织成网状结构以便空气顺畅流通,让你不会有闷湿的疑虑,特别是搭配较新的腰部支撑模块,人体工学可说是一级棒。

他们可用的寿命比便宜的椅子长,陪我们度过这六年以来的每张Aeron椅子,都几乎跟新的一样,我怀疑有任何人可以分辨出我们在2000年跟三个月前买的椅子之间的不同。他们的使用年限可轻易的超过十年,而说便宜的椅子则在买了几个月后就会开始解体,则一点都不夸张,你将需要至少四把100美元的椅子才抵得上一把Aeron的寿命。

所以结果是以十年来计Aeron实际上只多花费$500,或者说每年多$50美元,每个程序员每周一块钱。

一卷好的厕用卫生纸大约值一美元,所以可看成你的每一个程序员每周用掉一卷。

所以将他们升级到Aeron椅子的花费,几乎等同于你在他们的卫生纸上的支出,而且如果你在预算委员会上提出任何卫生纸的事,我保证你一定会被严正的警告不要再瞎混,还有许多重要的事要讨论。

不幸的是,Aeron椅子总是和奢侈浪费划上等号,而显得声名狼籍,特别是对新成立的公司来说。他莫明奇妙成为在网络繁荣时期浪费创投基金的一种象征,这真是种耻辱,因为当你考虑到可用的年限时,其实他是不昂贵的;尤其是当你考虑你一天有八个小时要坐在上面,即使是模块系列中的顶尖货:配有腰部支撑跟那该死的尾翼,也可说是超便宜的,因为实际上你根本是买到到。

玩具(译注:指能让开发者快乐的东西)

相同的逻辑可以套用在其他的开发者设备上,用膝盖想也可推论出,没有甚么理由不让你的开发者拥有搭配至少两个大(20)液晶屏幕(或一个30吋的)的顶级计算机,并让他们可自由地从Amazon.com购买任何想要的技术性书籍。这明显的可增进产能,但我们这里所讨论更重要的是:这些是招募员工的关键,特别是这世上还有许多公司将程序员视为可替换性的齿轮或打字员,真的,他们会质疑为何你需要如此大的屏幕,难道15吋的传统屏幕不够用吗?然后再拿他们年轻时的情况来比较。

开发人员的社交生活

并非所有的软件开发者都异于常人,当然,我知道这些日子以来大众认为开发者就跟典型独行黑客(译注: 亚斯伯格症候群)一样,几乎没有和别人进行互动,但这并非事实,即使独行黑客也会关心工作区的社交活动,像是:

§  程序员在组织中是怎么被看待的?

他们是明星还是打字员?公司经理是由工程师或曾任程序员的人组成的吗?开发者能乘坐头等舱去参与研讨会吗?(我不在乎这是否像是在浪费钱,明星就该坐头等舱,要逐渐习惯这样的思维!)当他们飞抵机场准备来参与面试时,将会有辆轿车来接送呢?还是得自己想办法到达公司?基于相同的背景条件下,开发者倾向于选择将他们当成明星的组织。假若你们公司的执行长是个坏脾气的销售员,他不能理解为何这些娇贵的开发人员会持续的争取类似腕垫、大屏幕跟舒适椅子等等之类的东西,他们以为自己是谁呀?那么你的公司或许需要好好的调整态度,如果你不尊重他们,你将永远无法获得优秀的开发人员。

§  他们的同事是哪些人?

程序员在面试的那天还会密切注意他们所遇见的任何人。他们友善吗?更重要的是:他们都聪明机灵吗?我曾经在Bellcore暑期实习过(这是贝尔实验室的子公司),我遇到的每个人都一遍又一遍地告诉我相同的事:能遇到这儿的人们是他们在Bellcore工作时最美好的事。

这告诉我们,不要让无法驾驭、怪脾气的开发人员参与任何面试活动,相反的,记得找具有亲和的、社交能力强、个性温和等特质的人一起参与。随时提醒自己,当你的求职者们回到家并且要决定到哪儿上班时,若是他在你的公司遇到的每个人都是阴沈忧郁地,则他们绝不会有正面印象。

另外,原本Fog Creek公司预想的征人规则(这概念是从微软偷来的)为「聪明、可将事情做好」,但就在我们正式让公司营运之前,我们理解到还应该加上第三个规则:「不要讨人厌的怪喀(译注:jerk,粗鲁、不顾别人感受、让人厌恶的人)」。回想起来,想在微软获得一份工作,不是怪喀向来不是个必要条件;虽然我很肯定他们会客套地说:能对他人友善是件重要的事,但真实情况为:他们绝不会只因某人惹人嫌就开除掉他,事实上,当个怪喀有时还会是个进入高阶管理阶层的先备条件。从管理角度来看这似乎是无害的,但从招募的角度来看却是有害的:有人愿意在一家容忍怪喀的公司上班呢?

§  独立和自律

回顾1999年,当我离开Juno、建立Fog Creek软件公司之前,人力资源处找我进行标准离职面谈,我滔滔不绝地将公司管理所犯的错,一股脑地告诉这些萍水相逢的人力处职员。我很清楚这对我来说绝无好处,只会造成伤害,但我还是通通说了出来;抱怨的重点还是在Juno「打了就跑」(译注:可以参考这一篇)的管理风格。经理人通常都不会出现,让大家自己把工作做好,但他们偶尔会插手非常细微的细节,无来由地坚持某些事该以他们的方式来完成,随后将过度管理的注意力移到其他的工作上,每件事插手的时间都很短,看不到衍生出的滑稽后果。举例来说,我记得曾经有一段特别令人反感难熬的日子,在这两三天内,所有主管(从我的直属长官一直到执行长)都跑来告诉我该怎么填写Juno注册询问表上的日期字段。他们从未受过用户接口设计的训练,也不愿花费时间与我讨论、了解为何我刚好会遇到这种特殊情况,不过这些并不重要:主管就是不愿意降贵纡尊来面对这个问题,甚至不愿花时间倾听我的抱怨。

基本上,若你打算雇用聪明的人,你需要让他们在工作上发挥所长,经理人欢迎提出建议,但他们必须相当小心别让「建议」变成了「命令」,因为对于任何一个技术上的议题,在里头打滚过的工程师都会比经理还要清楚,特别是我刚刚提到的:假若你雇用的是高素质的人。

开发人员会希望雇主因看重他们的能力而被雇用、以专家的身份来看待、并且允许在他们的专门领域内有决策权。

不搞政治

现实世界里,有超过两人聚集的地方就会有政治,这是再自然不过的事,而这儿我所谓的「不搞政治」是指「没有恶性的政治干扰」。程序员们有个非黑即白的评价法:程序代码要嘛能动、要嘛不能。争论某个错误是否存在是没有意义的,因为你可以测试并找出问题所在。编程的世界是非常地有秩序,这也是那么多人进入编程世界的首要理由,因为他们宁愿把时间耗在一个秩序严谨的地方,在这个地方只要是的就能通行无阻。

你必须建立这样的环境以吸引程序员,当一个程序员抱怨到这是「政治干扰」,他们实际上是抱怨发生了某种「个人考虑优于技术考虑」的情况。最让人不爽的状况就是:开发人员被告知要使用某特定程序语言,理由不是它是目前能用的最佳选择,而仅因为老板喜欢它。最让人恼羞的事就是:不直接依据工作绩效,而是依据交际手腕来决定晋升。最最可恶的事就是:一个开发者被强迫去做低技术层次的工作,仅因为某个在组织内阶层较高或是关系较好的人坚持要这么做。

当你以技术上的理由赢得了本来应该会因为政治因素而输掉的争议,这比任何事都更让人觉得满足。当我开始在微软工作时,当时有个已经步入歧途的大型项目MacroMan,其主要目标在创造一种图形化宏编程语言。这种程序语言会让真正的程序员十分挫折,因为图形的特性无法让你实作循环或状况判断;此外它对于非程序员也帮不上什么忙,我觉得他们不习惯在算法层面上思考、也无法在第一时间就了解MacroMan。当我抱怨MacroMan时,我的老板告诉我:「放弃吧,别自不量力了。」但我还是努力不懈地一直争取、争取再争取,最终人们终于接受我提出驳辩的理由,而关闭了该项目,而当时我还只是个刚出社会的小毛头,在微软内毫无背景。重点是我是对的,而人们不会因为我的身份背景而有所差别待遇,这是程序员所喜爱的非政治组织。

总的来说,专注于你公司的社交型态,可让公司成为一个健康、愉快的工作场所,这是留下好员工、并吸引新员工的关键所在。

我正在做些什么事?

在某种程度上,你能吸引开发者的最佳策略是让他们做些真正有趣的事。这或许是最难改变的事:当你是替砂石场开发软件时,那可真是见鬼了。这就是你目前身所在的职场,而你不能只为了吸引开发者,就假装自己是家酷炫的网络新创公司。

开发者喜欢的另一件事,就是工作内容单纯或通俗到能在感恩节跟Irma婶婶说明(译注:Aunt IrmaIT Crowd剧场出现的人物之一),而Irma婶婶当然是位核物理学家,而且不太很了解Ruby编程在砂石工业应用。

最后,许多开发者会注意未来所属公司的社会价值,社交网络和部落格公司的工作可以协助人们连结在一起,又完全不会造成任何污染,所以他们很受到欢迎;相反的,军火工业或造假帐挑战道德规范的公司就不受欢迎。

不幸的是,我不认为我真能想到任何方法,能在这方面对一般招募经理有任何帮助。你可以试着改变你的产品阵容弄出酷的感觉,然而作用并不会太大。不过我还是看过某些公司在这方面做的一些事:

§  让顶尖的应征者选择他们想参与的项目

多年以来,Oracle公司一直执行一个MAP计划(多选择性计划),针对各个班级中被认为最顶尖的毕业生。基本作法为:他们可以花个一到两周的时间来Oracle到处看看,拜访所有有职缺的团队,然后选择一个他们想要参与的团队。

虽然大概要Oracle公司的人才知道这方法是否真的有用,但我真的认为这是一个好主意。

§  使用非必要的酷炫新技术

程序员一向认为在纽约大型投资银行工作是件苦差事,工作环境恶劣、伴随长时间的噪音、还有个暴虐无道的老板,在此环境下,程序员简直就是个三等公民;尤其是面对那个疯狂从事经济炒作、好似睪酮素作祟(译注:作者在此好像引用这本书:睪酮素作祟:大老板的疯狂故事)的大猩猩、每年有三千万美元红利的家伙,在他被捧为公司大红人的同时,程序员们只有起司汉堡可以啃(而且常常是刚好路过的程序员施舍的)。无论如何,想要留下最好的开发人员有些不成文的规定在,所以投资银行使用以下两个策略:支付一吨的钱、并且赋予程序员完全的自由,可使用任何最新最热门最想学的程序语言,不断的重写每个东西。想要用Lisp重写整个交易程序?没问题,只要给我一个他妈的起司汉堡就行了。

部分的程序员根本不在乎所使用的编程语言为何,但大部分人都乐意有机会把酷炫新技术用在工作上。今日也许是PythonRuby on Rails;三年前是C#;更早则是Java

注意,我并不是要你不用最好的工具来工作,也不是要你每两年就用新出炉的热门语言来重写。不过假若有方法让开发人员能习得新语言、新平台和新技术的经验,他们会过的更快乐。即使你不敢重写你的核心程序,我看不出有任何理由,以学习的项目的名义,用让人兴奋的新语言来重写内部用工具、或较不具重要的程序。

我能认同公司吗?

大部分的程序员工作并不仅是为了餬口,他们不要为工作而工作,他们想要一份有意义的工作,他们希望能和公司有一致的信念,特别是年轻的程序员会被有理想抱负的公司所吸引,许多的公司和源码开放或自由软件运动(这两者是不同件事)有所关连,而这会吸引一些有理想、有抱负的开发者。其他公司会与社会理想紧密结合,或者生产就某方面对社会有益的产品。

身为一位面试官,你的职责是找出你们公司的理想性面相,而且确定应征候选人都了解。

一些公司甚至积极创造他们自己的意识型态运动,芝加哥地区一家新创公司37signals已经紧紧地将自己和简易化的观念系在一起:像Backpack这样单纯、容易使用的应用程序,像Ruby on Rails这么单纯、容易使用的编程语言平台。

37signals来说,简易化是一种主义,实际上就是种国际政治化运动。简易化不只是简易化,噢不,他是夏季、他是美妙的音乐、平和、公正、快乐,以及有发上别着花朵的美女。Rails的创造者David Heinemeier Hansson说道:他们的故事是个美好、愉快而积极的故事,在你的工作和你的工具里享受着乐趣并引以为自豪,那故事并不是一时流行,相反的,这是个趋势,这故事谈到如何让一些像是热情与热忱的字语,变成开发者所认同的词汇之一,而不必替自己找借口,或为自己做的事感到窘迫。(译注:变成自发性的投入、而不是被迫)。将一个网页编程平台恭维成「美好、愉快且热血沸腾」似乎有些傲慢,但它突显出他们公司与众不同的地方。由于将Ruby on Rails描述为快乐的同义词,他们可保证外面至少会有些开发者会想找Ruby on Rails的工作。

37signals在这种认同运动上资历尚浅,还比不上Apple ComputerApple1984年一个超级杯广告中,将自己定位为反抗反传统,大鸣大放对抗一言堂、自由对抗压迫、彩色对抗黑白、穿着漂亮红短裤的美女对抗穿着西装被洗脑的男人。我恐怕这其中有很反讽的奥韦尔式(Orwellian)暗示:大型企业以没么道理的作法(比如说他们是家计算机公司,怎么会跟反独裁有关系呢?)来操纵他们的公众形象,却成功地创造出一种认同文化:让全世界买计算机的顾客觉得他们不仅是购买一台计算机,而是购买一种潮流、一种风尚。当你购买一台iPod时,当然是在支持甘地对抗英国殖民主义;购买每一台MacBook也都明确表达出反抗独裁统治与饥饿的立场。

算了吧。深呼吸冷静一下,这一节要点出的主题为思考你的公司象征些什么,这些象征是如何被察觉又能如何被察觉。好好的管理你的公司品牌,对招募来说与营销上是一样地重要。

程序员不关心的一件事

说实在话,除非你在某些地方搞砸了,否则他们不会在乎钱。假若你开始听到有人抱怨以前未曾提及的薪资问题,那通常是人们不是真的喜欢他们的工作的一种迹象。假若某些可能进入公司的新人,不愿意降低高得出奇的薪资要求,很可能你所遇到的人正在想着:「好吧,假若这工作那么痛苦,我至少应该获得优渥的酬劳。」

这不是说你可以在降低人们的薪资,因为他们在乎的是公正、公平,假若他们发现同工却不同薪,或者公司内每人的薪资都比同条街上相同性质公司要少个20%,他们将会非常的愤怒,此时钱将会成为一个大问题。你是该为了竞争力而付薪水,但对程序员来说,决定在哪儿工作时所考虑的事项当中,薪资只是一个很基本的考虑,这在考虑清单中的排名,常常是不可思议的低;另外给予高薪对下列问题的帮助也是少得让人意外:像是程序员只能用15吋传统屏幕、常常被销售员使唤来使唤去、或者工作的内容是用小海豹当原料制作核武。

将履历排序

这系列的文章接下来会谈论如何将履历排序,让你面试的第一个人成为最有可能符合工作需求的人。