寻找优秀的程序员之实战指南& d/ s3 r( Z& E8 ^
( P, H) D8 D% r; y——选自《软件随想录:程序员部落酋长Joel谈软件》0 L4 S5 x9 d) G6 u) R6 e! y5 {
( C5 ^- x! @# ]# q1 z4 D' [4 }程序员的社交生活
程序员与普通人并不是真地有那么多不同之处。当然,我很清楚,如今很流行将程序员看作埃斯柏格综合征[①]患者,行为刻板、呆头呆脑,在人际交往中表现得很不协调。但是,这不是事实,哪怕有些程序员真患有埃斯柏格综合征,他们也很关心工作场所中社交性的一面,这包括以下内容。
程序员在组织中如何被对待
他们被当作明星,还是被当作打字员?公司的管理层是不是由工程师和曾经的程序员组成?程序员外出参加会议时,坐的是不是头等舱?(我不在乎这样是否像在浪费钱。明星坐的就是头等舱。请习惯这种做法。)他们飞过来面试的时候,有没有豪华轿车在机场等着接他们?还是说,他们得自己想办法到公司?如果其他条件都相同,程序员就会选择去一个对待他们像对待明星一样的公司。如果你们公司的CEO以前是干销售的,并且什么都看不顺眼,他就很不理解那些娇滴滴的程序员,为什么一直要求发放诸如腕垫、大屏幕显示器、舒服的座椅这一类的东西,这帮人以为他们是什么?如果你们的公司是这种样子,那么就需要调整态度了。如果你不尊重程序员,你就不会得到优秀的程序员。
6 y: {' b6 U& ~ h. q
: V7 Q+ a% ] i/ n! J* D' ?3 P+ \, O
谁是他们的同事
面试的那一天,程序员会密切关注他们遇到的那些人。他们待人是否友善?以及更重要的,他们是否聪明?曾经有一年夏天,我在贝尔通信研究所当实习生,那是贝尔实验室的一家子公司,我遇到的每一个人都不断地、一遍又一遍地跟我说同一件事:“在贝尔通信研究所工作,最美好的事情是这里的人。”
3 }: ?0 o* }% L/ p& [
/ ~; k5 H! _. s( ?
这表明,要是你手下的程序员中有人脾气火暴爱挑剔,如果你不能摆脱他们,至少不要让他们在面试场合出现;要是你的程序员中有人性格活跃、喜欢社交和组织集体活动,一定要让他们在面试中现身。你要不断提醒自己,当求职者回到家中时,他们必须做出决定去哪里工作,如果他们遇到的每个人都面色阴郁,他们对你的公司绝不会有一个好印象。
( h }9 }6 |! W/ c: }8 G. \9 Q
. l" v* n4 v& `# }7 h: p3 E
顺便说一句,Fog Creek软件公司原先的招聘理念是从微软公司抄袭来的,只有两点:聪明,并且能够完成工作。但是,甚至在我们开始运作公司前,我们就意识到应该再加上第三点“不收怪人”。回想起来,在微软公司的时候,是不是怪人其实不是录取新员工的必须要考虑的事。虽然,我相信微软公司在口头上一定说,与其他人融洽相处是多么多么重要,但是实际情况是他们从来不会因为某人很古怪就否决了他的录用资格。事实上,有时候,古怪反而是进入微软公司高级管理层的先决条件。虽然从公司运营的角度看,这不会造成太大的影响,但是从招聘的角度看,它确实会产生负面影响:谁愿意在一家需要忍受怪人的公司里工作呢?
- s; N, U. k/ A G0 C/ \
% e) w; d( Q' o4 Q2 Q3 g# D$ V7 p: M
独立和自主
& [7 q' Q# P4 z7 |: L9 v; z
) ^, `6 J4 `9 }回想1999年的时候,在创办FogCreek软件公司之前,我辞职离开Juno软件公司,人力资源部约我进行一次很标准的离职谈话。我不知怎地就落入了陷阱,将我对公司管理上的种种不满都告诉了人事经理。虽然我很清楚这样做对我绝无好处,实际上只有坏处,但是我最终还是做了。我对Juno公司最大的不满是那种抽风式(hit-and-run)的管理风格。你们瞧,大多数时候,管理层对程序员完全不闻不问,将程序员扔在那里,让他们静悄悄地完成工作。但是,偶尔公司经理本人也会介入,追问一些极其微小的细节,坚持一定要百分之百按照他们的方式做出来,不许有任何借口。接着,他们又转向其他方面的细节问题,每个问题关注的时间都很短,短到来不及看到按照他们要求做出来的可笑结果。举例来说,我记得有两三天让人特别恼火,从我的上级经理一直到CEO,都跑来跟我说,怎么才能符合要求地填写Juno公司员工资料登记表格的日期栏。他们没有受过用户界面设计师的专门训练,又不肯花时间同我就这个问题交换意见,搞清楚为什么说在那个特殊情况下我恰好是正确的。不过这些都不重要,重要的是管理层根本不愿意屈尊同属下讨论问题,甚至不愿意花时间听取我的论点。
+ D% U9 b w% M. U2 T7 @' B" Z9 z
# @# @# u7 u2 K: |9 w
基本上,如果你要雇用聪明人,你就必须让他们在工作中发挥技能。管理层可以提出建议,而且这样做是受欢迎的,但是他们必须极端小心,不能让他们的“建议”被视为命令,因为不管是什么技术问题,经理们知道的很可能不如在壕沟里干活的工人们,尤其是正如我前面说过的,你雇用的都是聪明人的话。
% N% R8 Z# y7 {, p; u
8 i+ F! f$ F/ x1 s Z& D
程序员希望自己之所以被雇用,是因为自己的技能,希望被别人当成专家那样对待,有权力在自己的专业领域中做出决定。
不搞政治
老实说,只要有两个以上的人待在一起,就会有政治。这很自然。我说“不搞政治”的真正的意思是“不搞恶性的政治”。程序员早就练出了对公正有非常良好的判断力。代码要么能运行,要么不能。坐在那里争论代码是否有问题,这是毫无意义的,因为你可以运行代码,答案自然就有了。代码的世界是非常公正的,也是非常严格有序的。许许多多的人选择编程,首要的原因就是,他们宁愿将自己的时间花在一个公平有序的地方,一个严格的能者上庸者下的地方,一个只要你是对的就能赢得任何争论的地方。
7 M9 L" e' m! P U( J5 a0 u
. }& b% c7 L; w/ b# E3 [. J5 ]9 A1 k
如果你要吸引程序员,你就必须去创造出这样一个环境。当一个程序员抱怨“人际关系复杂”时,他们的意思明白无误,就是指任何个人因素超过技术因素的环境。程序员在完成手头任务时,不被允许使用最合适的编程语言,而是被命令只能使用另一种特定的语言,原因仅仅是老板喜欢这种语言——没有什么比这更让人气愤的了;晋升的原因不是成果,而是人际关系——没有什么比这更让人抓狂的了;程序员被迫去做技术上落后的东西,仅仅因为上级或者得到上级支持的人坚持这样——没有什么比这更让人发火的了。
2 G) u& {% w9 Q7 k5 J+ u( `
7 t9 |% Q" X2 Z0 l
没有什么比因为技术原因赢得一场由于政治原因本来要输掉的争论更让人心满意足了。当我在微软公司刚开始工作的时候,有一个正在开发中的大型项目走入了歧途,项目的代号是MacroMan,目标是创造一种图形化的宏语言。真正的程序员遇到这种语言会很有挫折感,因为图形的特性让你真地没有办法完成循环和条件判断功能。此外,对于那些非程序员的用户,这种语言也不会有很大作用,因为我觉得那些用户不会习惯算法思维,没有办法很快地理解MacroMan。当我说出对MacroMan的负面评价时,我的老板告诉我:“火车跑起来就刹不住了。算了吧。”但是,我还是不放弃,一再地不断地争论。那时我刚走出学校,在微软公司中差不多跟谁都没有利害关系,所以,渐渐地,人们开始倾听我的核心观点,MacroMan后来终止开发了。我是谁并不重要,重要的是我是对的。非政治性的组织就应该这样,这种组织才会让程序员感到高兴。
7 p* F# p3 I R2 v # o4 q0 x2 m# G* P. e i+ P
总的来说,关注你的组织的社交动态变化,对创造一个健康的、令人愉悦的工作环境是很关键的,这样可以留住程序员和吸引程序员。
* }- G* w- F6 j; I4 C4 v2 U1 v
$ y; O+ J) W8 m % W& T' N9 J9 P" ^* {
~
我干的是什么活
一定程度上,让程序员干有趣的活是吸引优秀程序员的最好方法之一。但是,这可能是最难改变的事情。请试想,如果你很倒霉地在为沙土行当写软件,跟石头和沙子打交道,这就是你的行业,那么你无论如何也没法装得像某些互联网创业公司一样酷,靠这个吸引程序员。
5 N) n% U" t- v! J
8 O- W0 I9 C1 ~: B4 n1 E, S* i
另一类程序员喜欢干的活是开发一些非常简单或者非常流行的东西,这种东西足以让他们在感恩节那一天向艾玛婶婶[②]解释清楚。而艾玛婶婶当然对沙土行当中的Ruby编程并不怎么懂,因为她是学核物理的。
最后,许多程序员也会关注他们服务的公司的社会价值。在社会化网络公司(socialnetworking)和网志公司工作,可以帮助人们交流沟通,看上去也不会造成污染,所以这种公司受欢迎。军火公司和那些不道德、充斥着会计欺诈的公司就非常不受欢迎。
很不幸,在这方面,我真不确定我有办法给那些一般的招聘经理出主意。你可以尝试改变一下产品线,制作某些很“酷”的东西,但是这样不会长期有效。不过,我看过一些公司在这方面采取的举措。
( U- B/ g" R' d' V/ E- C1 Y
- h. f, M( q6 f4 B" I
让一流的新员工挑选他们自己的项目
: i" z& v& p/ a" N: E
|' i) Z, _# t. j H
多年以来,甲骨文集团有一个叫做MAP的计划,也就是“多选择性计划”(Multiple Alternatives Program)。这个计划针对各个班级中甲骨文认为最好的高校毕业生。计划中的安排是让他们来甲骨文,花上一到两个星期到处看看,访问所有缺人的开发小组,然后让他们选一个自己想进去工作的小组。
虽然也许对这个计划的效果我没有甲骨文的人清楚,但是我觉得这是一个好的计划。
1 K. C5 T- v: N
8 s i$ j/ {' W& q
使用非必要的热门新技术
纽约的那些大型投资银行被认为是相当艰苦的程序员工作环境。那里的工作条件很可怕,大量的连续加班,嘈杂的环境,咆哮的上司。程序员是千真万确的三等公民。而与此同时,一群狂热的类人猿在那里操盘买卖金融工具。这群类人猿是公司里的皇室,拿着高达3千万美元的分红,公司里所有的汉堡包他们都可以吃(经常是让碰巧在旁边的程序员递给他们)。不管怎么说,这些都是陈规陋习,所以为了留住最好的程序员,投资银行有两个策略:一个是给程序员发一吨的钞票,另一个是给予程序员完全的自由,允许他们使用自己想学的任何最新热门编程语言,不断地一遍又一遍重写每件东西。想把整个交易程序用Lisp语言重写?随你的便。帮我再拿一个该死的汉堡包过来。
+ H" A. d* q! }) L4 {' g3 R, ` ; C5 L% ?. ?, w q* q' h
一些程序员固执于他们正在使用的编程语言,但是,大多数程序员很高兴有机会使用令人激动的新技术。现在的热门大概是Python语言或者Ruby onRails,三年前是C#,再以前是Java。
0 s( P$ J [# J+ W; t3 U1 C% X
; c+ W+ v% [1 d% a' V, y
在这里,我不是让你不要用最好的工具完成工作,我也不是让你每两年就用热门语言重写一遍程序,我只是在说,如果你能找到办法让程序员有接触新的语言、框架和技术的经历,那么他们会感到更开心一些。即使你不敢为了学习的目的用一种新语言重写核心程序,那么有没有可能重写你们使用的内部工具,或者其他不关键的新应用程序呢?
) X6 B. `3 f: v, V* I) F. {7 Y
. g g" C* m1 v$ [& R
~
我能够认同公司吗
大多数程序员工作不是为了谋生,他们要的不是一份“朝九晚五”的工作,他们要的是工作所能带给他们的意义。他们想要认同他们的公司。年轻的程序员尤其会被有理想有抱负的公司所吸引。许多公司与开源运动或者自由软件运动(两者不是一回事)都有一些联系,这使得它们能够吸引那些具有理想主义倾向的程序员。另外一些公司与非营利性的社会事业有关系,或者制造的产品被视为和用于造福社会。
作为一个负责招聘的人,你要做的是找出你的公司中理想主义的一面,确保招聘对象了解它们。
! w7 b" ]' m2 R
/ x5 W5 M8 j, Q( G1 H9 u6 i* o n& H
一些公司甚至努力在创造它们自己的理想主义运动。芝加哥的创业公司37signals就强烈地认同简单的东西,所以他们开发像Backpack[③]那样简单、容易使用的应用程序,以及像Ruby on Rails那样简单、容易使用的开发框架。
2 j8 I5 z/ P- l- E3 U$ w$ H
# F# c7 g8 e, Q4 I& V# v5 U
对于37signals来说,简单已经成为了一种主义,实际上是一种国际政治运动。简单不仅仅是字面上的含义,哦,不,它是夏日的时光,它是优美的音乐,它是和平,它是公正,它是幸福,它是头发上插着花的漂亮姑娘。Rails开发框架的创造者DavidHeinemeier Hansson说,他们的故事是“一个关于美、幸福和激励的故事。从你的工作和你的工具中享受乐趣,并为它们感到自豪。这个故事并不仅仅是一种时尚,而是一种趋势。这个故事使得像激情和热诚这样的词不用找借口就能成为程序员自己所认同的词汇。你再不用为喜欢自己的工作而感到尴尬了”(
www.loudthinking.com/arc/2006_08.html)。将一个互联网编程框架上升到某种“美、幸福和激励”,可能看起来有点像说大话,但是这确实非常有感染力,的确使得他们的公司与众不同。他们把Ruby on Rails说成是一种幸福,并且向外推广这种观念,这实际上保证一定会有某些外部的程序员想来找Ruby on Rails方面的工作。
但是,在这种自我认同的管理方法(identity management)潮流中,37signals资历尚浅。如果比起苹果公司,他们连在旁边(为明星)举蜡烛的资格都没有。1984年的美式橄榄球超级碗决赛时,苹果公司播出了一支广告。[④]从那时起一直到今天,它一直在加固自己反对传统文化的形象:追求自由,反抗独裁;追求自我,反抗压迫;追求色彩,反抗单调。就像广告里的内容一样,苹果公司是一个穿着明亮的红色运动短裤的漂亮姑娘,奔跑着穿过身着制服被洗过脑的人群。但是,我不得不说这里面的含义其实是奥威尔式的反讽。巨型公司用一种不合理的方式操纵它们的公众形象——嗯,比方说,他们是一家计算机公司,那么与反抗独裁有什么关系呢?真是活见鬼——成功地创造出一种自我认同的文化,使得全世界各地购买计算机的用户感觉他们买的并不仅仅是一台计算机,觉得自己通过购买而参加到了一场运动中。当你购买一台iPod时,你当然是在支持甘地[⑤]反抗大英帝国的殖民主义统治。每一台被卖出的MacBook都表达了一种反抗独裁和饥饿的立场!
! m! K z7 V& V1 ^, L: T
+ F D8 U6 v5 @2 t' |
好了,不说了,深呼吸……这一部分的真正用意是,思考你的公司代表了怎样的追求,这种追求是怎么形成的,又是怎么才能被别人感受到。管理好你的公司的品牌不仅对营销很重要,对招聘新人也同样重要。
; ?4 ^; l. _- @$ a+ {; r
8 q8 d2 ~3 t* g8 M0 c4 V
~
程序员不在乎的一件事
他们实际上不在乎钱,除非你在其他事情上搞砸了。如果你开始听到有人在抱怨薪水,而以前并没有出现这种情况,这经常就是一种信号,表明人们并不真地喜欢他们的工作。如果你想雇的新人提出高得离奇的薪水要求,并且不愿意降低,那么你可能遇到的是这样一种情况,那些人心里想:“好吧,如果不得不接受这份糟糕透顶的工作,那么我至少应该有一份优厚的报酬。”
; i9 K9 Z5 C" M: W9 \( [' q# f7 G
6 P1 F3 u/ I" |+ h3 {- k我们说程序员不在乎钱,并不意味你可以向他们支付低工资。因为程序员对公正公平是在乎的,如果他们发现同工不同酬,或者他们发现自己公司每个人的薪水都比街对面同样的公司低20%,他们会被激怒的,然后,突然之间,钱就将成为一个大问题。你必须支付有竞争力的报酬,但是让我们这样说,当程序员决定去哪里工作时,在他们考虑的所有因素中,报酬的位置低得让人吃惊,前提是薪水必须基本合理。同样让人吃惊的是,如果你的公司里有这样的问题,比如程序员用的是15"显示器,整天都有销售人员对着他们吼,他们的工作是猎杀小海豹、制造核武器等,那么向他们提供高薪水并不是一个有效的工具,并不足以克服这些问题,吸引他们加入你的公司。
[8 L1 h9 T+ I! a/ n
|