尋找優秀的程序員之實戰指南2 ~1 _5 r1 U: I7 E4 J+ {
; b: p8 |$ b- U& A0 B
——選自《軟件隨想錄:程序員部落酋長Joel談軟件》
/ S5 [ [3 m( x. K- ?+ h/ w1 S1 T: k: U
0 V1 P6 H% c0 O9 F, b l& `( B程序員的社交生活程序員與普通人并不是真地有那么多不同之處。當然,我很清楚,如今很流行將程序員看作埃斯柏格綜合征[①]患者,行為刻板、呆頭呆腦,在人際交往中表現得很不協調。但是,這不是事實,哪怕有些程序員真患有埃斯柏格綜合征,他們也很關心工作場所中社交性的一面,這包括以下內容。 程序員在組織中如何被對待 他們被當作明星,還是被當作打字員?公司的管理層是不是由工程師和曾經的程序員組成?程序員外出參加會議時,坐的是不是頭等艙?(我不在乎這樣是否像在浪費錢。明星坐的就是頭等艙。請習慣這種做法。)他們飛過來面試的時候,有沒有豪華轎車在機場等著接他們?還是說,他們得自己想辦法到公司?如果其他條件都相同,程序員就會選擇去一個對待他們像對待明星一樣的公司。如果你們公司的CEO以前是干銷售的,并且什么都看不順眼,他就很不理解那些嬌滴滴的程序員,為什么一直要求發放諸如腕墊、大屏幕顯示器、舒服的座椅這一類的東西,這幫人以為他們是什么?如果你們的公司是這種樣子,那么就需要調整態度了。如果你不尊重程序員,你就不會得到優秀的程序員。: A$ j: c- L/ \# d y
& g6 D- h3 T) E 誰是他們的同事 面試的那一天,程序員會密切關注他們遇到的那些人。他們待人是否友善?以及更重要的,他們是否聰明?曾經有一年夏天,我在貝爾通信研究所當實習生,那是貝爾實驗室的一家子公司,我遇到的每一個人都不斷地、一遍又一遍地跟我說同一件事:“在貝爾通信研究所工作,最美好的事情是這里的人。” : ^ u( G! Z6 y% F9 t; S* c
+ ]+ D' j- P: ]+ q- a b( q0 \這表明,要是你手下的程序員中有人脾氣火暴愛挑剔,如果你不能擺脫他們,至少不要讓他們在面試場合出現;要是你的程序員中有人性格活躍、喜歡社交和組織集體活動,一定要讓他們在面試中現身。你要不斷提醒自己,當求職者回到家中時,他們必須做出決定去哪里工作,如果他們遇到的每個人都面色陰郁,他們對你的公司絕不會有一個好印象。
. j9 ^& O$ j5 D. E& P5 h. _+ P( ]* G- ^) G( u; s* q
順便說一句,Fog Creek軟件公司原先的招聘理念是從微軟公司抄襲來的,只有兩點:聰明,并且能夠完成工作。但是,甚至在我們開始運作公司前,我們就意識到應該再加上第三點“不收怪人”。回想起來,在微軟公司的時候,是不是怪人其實不是錄取新員工的必須要考慮的事。雖然,我相信微軟公司在口頭上一定說,與其他人融洽相處是多么多么重要,但是實際情況是他們從來不會因為某人很古怪就否決了他的錄用資格。事實上,有時候,古怪反而是進入微軟公司高級管理層的先決條件。雖然從公司運營的角度看,這不會造成太大的影響,但是從招聘的角度看,它確實會產生負面影響:誰愿意在一家需要忍受怪人的公司里工作呢?) l4 Z; y0 F9 o' j
" X. M1 x/ [+ |! o% r
獨立和自主
9 `# {3 K. ?" {$ N1 t( _2 _) |) \/ X$ U4 ~* g
回想1999年的時候,在創辦FogCreek軟件公司之前,我辭職離開Juno軟件公司,人力資源部約我進行一次很標準的離職談話。我不知怎地就落入了陷阱,將我對公司管理上的種種不滿都告訴了人事經理。雖然我很清楚這樣做對我絕無好處,實際上只有壞處,但是我最終還是做了。我對Juno公司最大的不滿是那種抽風式(hit-and-run)的管理風格。你們瞧,大多數時候,管理層對程序員完全不聞不問,將程序員扔在那里,讓他們靜悄悄地完成工作。但是,偶爾公司經理本人也會介入,追問一些極其微小的細節,堅持一定要百分之百按照他們的方式做出來,不許有任何借口。接著,他們又轉向其他方面的細節問題,每個問題關注的時間都很短,短到來不及看到按照他們要求做出來的可笑結果。舉例來說,我記得有兩三天讓人特別惱火,從我的上級經理一直到CEO,都跑來跟我說,怎么才能符合要求地填寫Juno公司員工資料登記表格的日期欄。他們沒有受過用戶界面設計師的專門訓練,又不肯花時間同我就這個問題交換意見,搞清楚為什么說在那個特殊情況下我恰好是正確的。不過這些都不重要,重要的是管理層根本不愿意屈尊同屬下討論問題,甚至不愿意花時間聽取我的論點。$ C/ D: Q3 j$ h, {# J% Y+ \
5 B/ z% Z6 T* e. K6 O
基本上,如果你要雇用聰明人,你就必須讓他們在工作中發揮技能。管理層可以提出建議,而且這樣做是受歡迎的,但是他們必須極端小心,不能讓他們的“建議”被視為命令,因為不管是什么技術問題,經理們知道的很可能不如在壕溝里干活的工人們,尤其是正如我前面說過的,你雇用的都是聰明人的話。3 _, F* b3 E0 V! `; @, w, |
7 E/ v# N$ S9 x0 S& S
程序員希望自己之所以被雇用,是因為自己的技能,希望被別人當成專家那樣對待,有權力在自己的專業領域中做出決定。 不搞政治 老實說,只要有兩個以上的人待在一起,就會有政治。這很自然。我說“不搞政治”的真正的意思是“不搞惡性的政治”。程序員早就練出了對公正有非常良好的判斷力。代碼要么能運行,要么不能。坐在那里爭論代碼是否有問題,這是毫無意義的,因為你可以運行代碼,答案自然就有了。代碼的世界是非常公正的,也是非常嚴格有序的。許許多多的人選擇編程,首要的原因就是,他們寧愿將自己的時間花在一個公平有序的地方,一個嚴格的能者上庸者下的地方,一個只要你是對的就能贏得任何爭論的地方。
n; l; r/ p# h: b9 N' O9 ?6 N9 k& W: ^! q% `6 C5 J
如果你要吸引程序員,你就必須去創造出這樣一個環境。當一個程序員抱怨“人際關系復雜”時,他們的意思明白無誤,就是指任何個人因素超過技術因素的環境。程序員在完成手頭任務時,不被允許使用最合適的編程語言,而是被命令只能使用另一種特定的語言,原因僅僅是老板喜歡這種語言——沒有什么比這更讓人氣憤的了;晉升的原因不是成果,而是人際關系——沒有什么比這更讓人抓狂的了;程序員被迫去做技術上落后的東西,僅僅因為上級或者得到上級支持的人堅持這樣——沒有什么比這更讓人發火的了。
& T' u' O9 R! L8 M, m$ y% J! v1 o1 X+ e. R
沒有什么比因為技術原因贏得一場由于政治原因本來要輸掉的爭論更讓人心滿意足了。當我在微軟公司剛開始工作的時候,有一個正在開發中的大型項目走入了歧途,項目的代號是MacroMan,目標是創造一種圖形化的宏語言。真正的程序員遇到這種語言會很有挫折感,因為圖形的特性讓你真地沒有辦法完成循環和條件判斷功能。此外,對于那些非程序員的用戶,這種語言也不會有很大作用,因為我覺得那些用戶不會習慣算法思維,沒有辦法很快地理解MacroMan。當我說出對MacroMan的負面評價時,我的老板告訴我:“火車跑起來就剎不住了。算了吧。”但是,我還是不放棄,一再地不斷地爭論。那時我剛走出學校,在微軟公司中差不多跟誰都沒有利害關系,所以,漸漸地,人們開始傾聽我的核心觀點,MacroMan后來終止開發了。我是誰并不重要,重要的是我是對的。非政治性的組織就應該這樣,這種組織才會讓程序員感到高興。
! H6 d" T# C G& J1 l& u7 r; m# [/ Q* D3 @
總的來說,關注你的組織的社交動態變化,對創造一個健康的、令人愉悅的工作環境是很關鍵的,這樣可以留住程序員和吸引程序員。
. W6 c$ i1 B+ ?. L
4 d* N; {- E, c9 Q* m2 z$ x; p) y3 I, M8 x
~ 我干的是什么活一定程度上,讓程序員干有趣的活是吸引優秀程序員的最好方法之一。但是,這可能是最難改變的事情。請試想,如果你很倒霉地在為沙土行當寫軟件,跟石頭和沙子打交道,這就是你的行業,那么你無論如何也沒法裝得像某些互聯網創業公司一樣酷,靠這個吸引程序員。0 `8 I4 ~% X4 n: T
& Q9 K1 E: G4 E H5 W
另一類程序員喜歡干的活是開發一些非常簡單或者非常流行的東西,這種東西足以讓他們在感恩節那一天向艾瑪嬸嬸[②]解釋清楚。而艾瑪嬸嬸當然對沙土行當中的Ruby編程并不怎么懂,因為她是學核物理的。 最后,許多程序員也會關注他們服務的公司的社會價值。在社會化網絡公司(socialnetworking)和網志公司工作,可以幫助人們交流溝通,看上去也不會造成污染,所以這種公司受歡迎。軍火公司和那些不道德、充斥著會計欺詐的公司就非常不受歡迎。 很不幸,在這方面,我真不確定我有辦法給那些一般的招聘經理出主意。你可以嘗試改變一下產品線,制作某些很“酷”的東西,但是這樣不會長期有效。不過,我看過一些公司在這方面采取的舉措。
% c3 ] {* l1 `- j' a ^
3 A* l# t2 v% i( | 讓一流的新員工挑選他們自己的項目 ) w% x6 }2 [, I4 w
- O9 K/ B, \, ]多年以來,甲骨文集團有一個叫做MAP的計劃,也就是“多選擇性計劃”(Multiple Alternatives Program)。這個計劃針對各個班級中甲骨文認為最好的高校畢業生。計劃中的安排是讓他們來甲骨文,花上一到兩個星期到處看看,訪問所有缺人的開發小組,然后讓他們選一個自己想進去工作的小組。 雖然也許對這個計劃的效果我沒有甲骨文的人清楚,但是我覺得這是一個好的計劃。6 P0 s/ D' _7 \# \2 K. J2 N
" M, ?8 V j* X7 I
使用非必要的熱門新技術 紐約的那些大型投資銀行被認為是相當艱苦的程序員工作環境。那里的工作條件很可怕,大量的連續加班,嘈雜的環境,咆哮的上司。程序員是千真萬確的三等公民。而與此同時,一群狂熱的類人猿在那里操盤買賣金融工具。這群類人猿是公司里的皇室,拿著高達3千萬美元的分紅,公司里所有的漢堡包他們都可以吃(經常是讓碰巧在旁邊的程序員遞給他們)。不管怎么說,這些都是陳規陋習,所以為了留住最好的程序員,投資銀行有兩個策略:一個是給程序員發一噸的鈔票,另一個是給予程序員完全的自由,允許他們使用自己想學的任何最新熱門編程語言,不斷地一遍又一遍重寫每件東西。想把整個交易程序用Lisp語言重寫?隨你的便。幫我再拿一個該死的漢堡包過來。 . N8 ]' }6 S+ r: U
* U2 x6 R: n6 V) m8 m% M一些程序員固執于他們正在使用的編程語言,但是,大多數程序員很高興有機會使用令人激動的新技術。現在的熱門大概是Python語言或者Ruby onRails,三年前是C#,再以前是Java。 2 L2 D: c* z! s6 ?- O
( ?! f! b' p" h( Q0 m
在這里,我不是讓你不要用最好的工具完成工作,我也不是讓你每兩年就用熱門語言重寫一遍程序,我只是在說,如果你能找到辦法讓程序員有接觸新的語言、框架和技術的經歷,那么他們會感到更開心一些。即使你不敢為了學習的目的用一種新語言重寫核心程序,那么有沒有可能重寫你們使用的內部工具,或者其他不關鍵的新應用程序呢?
! {* V/ s, D! B3 O+ p9 P
( f' d" w4 Y2 {9 V9 R2 f: X ~ 我能夠認同公司嗎大多數程序員工作不是為了謀生,他們要的不是一份“朝九晚五”的工作,他們要的是工作所能帶給他們的意義。他們想要認同他們的公司。年輕的程序員尤其會被有理想有抱負的公司所吸引。許多公司與開源運動或者自由軟件運動(兩者不是一回事)都有一些聯系,這使得它們能夠吸引那些具有理想主義傾向的程序員。另外一些公司與非營利性的社會事業有關系,或者制造的產品被視為和用于造福社會。 作為一個負責招聘的人,你要做的是找出你的公司中理想主義的一面,確保招聘對象了解它們。
- L, z. Z2 G" {! J+ h+ W6 b$ w" I; @" g2 Z% s% j" }3 Y
一些公司甚至努力在創造它們自己的理想主義運動。芝加哥的創業公司37signals就強烈地認同簡單的東西,所以他們開發像Backpack[③]那樣簡單、容易使用的應用程序,以及像Ruby on Rails那樣簡單、容易使用的開發框架。
* s; n4 Q! j9 ]- M& f
& {9 S* n- r- H8 c對于37signals來說,簡單已經成為了一種主義,實際上是一種國際政治運動。簡單不僅僅是字面上的含義,哦,不,它是夏日的時光,它是優美的音樂,它是和平,它是公正,它是幸福,它是頭發上插著花的漂亮姑娘。Rails開發框架的創造者DavidHeinemeier Hansson說,他們的故事是“一個關于美、幸福和激勵的故事。從你的工作和你的工具中享受樂趣,并為它們感到自豪。這個故事并不僅僅是一種時尚,而是一種趨勢。這個故事使得像激情和熱誠這樣的詞不用找借口就能成為程序員自己所認同的詞匯。你再不用為喜歡自己的工作而感到尷尬了”( www.loudthinking.com/arc/2006_ 08.html)。將一個互聯網編程框架上升到某種“美、幸福和激勵”,可能看起來有點像說大話,但是這確實非常有感染力,的確使得他們的公司與眾不同。他們把Ruby on Rails說成是一種幸福,并且向外推廣這種觀念,這實際上保證一定會有某些外部的程序員想來找Ruby on Rails方面的工作。 但是,在這種自我認同的管理方法(identity management)潮流中,37signals資歷尚淺。如果比起蘋果公司,他們連在旁邊(為明星)舉蠟燭的資格都沒有。1984年的美式橄欖球超級碗決賽時,蘋果公司播出了一支廣告。[④]從那時起一直到今天,它一直在加固自己反對傳統文化的形象:追求自由,反抗獨裁;追求自我,反抗壓迫;追求色彩,反抗單調。就像廣告里的內容一樣,蘋果公司是一個穿著明亮的紅色運動短褲的漂亮姑娘,奔跑著穿過身著制服被洗過腦的人群。但是,我不得不說這里面的含義其實是奧威爾式的反諷。巨型公司用一種不合理的方式操縱它們的公眾形象——嗯,比方說,他們是一家計算機公司,那么與反抗獨裁有什么關系呢?真是活見鬼——成功地創造出一種自我認同的文化,使得全世界各地購買計算機的用戶感覺他們買的并不僅僅是一臺計算機,覺得自己通過購買而參加到了一場運動中。當你購買一臺iPod時,你當然是在支持甘地[⑤]反抗大英帝國的殖民主義統治。每一臺被賣出的MacBook都表達了一種反抗獨裁和饑餓的立場!+ t# H$ z8 \, w5 D9 z
. ^1 z' A3 G: u& V5 w 好了,不說了,深呼吸……這一部分的真正用意是,思考你的公司代表了怎樣的追求,這種追求是怎么形成的,又是怎么才能被別人感受到。管理好你的公司的品牌不僅對營銷很重要,對招聘新人也同樣重要。
; C4 s# {/ d# `3 J) K
( C. f5 R" C, \' z, }7 t! | ~ 程序員不在乎的一件事他們實際上不在乎錢,除非你在其他事情上搞砸了。如果你開始聽到有人在抱怨薪水,而以前并沒有出現這種情況,這經常就是一種信號,表明人們并不真地喜歡他們的工作。如果你想雇的新人提出高得離奇的薪水要求,并且不愿意降低,那么你可能遇到的是這樣一種情況,那些人心里想:“好吧,如果不得不接受這份糟糕透頂的工作,那么我至少應該有一份優厚的報酬。”
+ H6 ]+ m, a. r6 Z0 v; j
# [; j0 ~0 k5 K" y我們說程序員不在乎錢,并不意味你可以向他們支付低工資。因為程序員對公正公平是在乎的,如果他們發現同工不同酬,或者他們發現自己公司每個人的薪水都比街對面同樣的公司低20%,他們會被激怒的,然后,突然之間,錢就將成為一個大問題。你必須支付有競爭力的報酬,但是讓我們這樣說,當程序員決定去哪里工作時,在他們考慮的所有因素中,報酬的位置低得讓人吃驚,前提是薪水必須基本合理。同樣讓人吃驚的是,如果你的公司里有這樣的問題,比如程序員用的是15"顯示器,整天都有銷售人員對著他們吼,他們的工作是獵殺小海豹、制造核武器等,那么向他們提供高薪水并不是一個有效的工具,并不足以克服這些問題,吸引他們加入你的公司。 % K) F0 V4 i! |
|