底層軟體工程師的一次冒險經歷

hahakaka發表於2014-08-08

Bill(不是他的真實姓名,我模糊了一些資訊來保護他的身份)是一位東海岸的軟體工程師,在這個故事發生期間(2011到2014年),已經快到30歲了,他想知道自己能否進入到更高階別的就業市場,為了能非常準確的評估這一點,他在兩個大體相當的公司(同樣的規模,同樣的聲望,同樣位於美國西海岸)分別申請了不同級別的職位,一個是作為高階軟體工程師,另一個是作為資料科學的副總。

Bill之前是一名華爾街的金融工程師而且還有一個副總的頭銜,要知道副總在投資銀行中只是一箇中級的,非管理性的職位。他現在的頭銜是資深軟體工程師,大體和主管相當。Bill教過幾次課並指導過一些實習生,但是他一直都不是一個正式的管理者,所以他來向我諮詢,如何能在VP級別的職位申請中出現更多“管理方面”的東西。

實驗

他的首要問題是如何才能在下一份工作中有一些“管理方面的經歷”。我當時有些不知所措,談到直接經歷,我的第一想法是“在你擁有它之前作假”。回顧思考一下他的簡歷,”實驗”這個詞出現在我腦海中,我能夠將Bill這個優秀但並不是很傑出的資料科學家兼軟體工程師轉變為一個管理者嗎?首先有一個好點的訊息是我們沒有必要去做太多的改變,Bill在投資銀行中副總的頭銜應該保持不變,而將資深軟體工程師變為主管也不會讓人覺得是不誠實的,因為這是一個橫向的調整,更有可能還是一個降級,在雙軌科技公司工程師的梯子比管理層的梯子更難爬一些。

Bill”管理簡歷”中的一切都足夠接近真實,很少有人會認為這是不道德的。我們提升了他的社會地位以及預計在那個社會層次所必需的管理文化的可信度,而不是技術資格。我們將技術領導轉變為“真正”有權利的領導,這是唯一改變的地方。我們花了數個小時來確保簡歷的真實性,Bill和我都不想因為開展這次實驗毀了Bill的職業生涯,只是因為實驗的完整性需要這些改變。

事實上,我們讓這份管理簡歷很有技術性。BIll的經歷大部分是做為一個實現者,所以我們希望保持這部分的真實性。稍後我會談到這次實驗的結果,他作為一個實現型經理的重塑會有兩個積極的副作用:第一,作為經理他沒必要弄髒自己的手,如果他是一位管理者的話,他做事情會得到很多表揚。第二,和第一點相關但是更強大,就是他不再為自己不體面的專案或一個時期的低技術而辯解,相反的,“我現在在一個蹩腳的專案上”,突出了低地位,他的故事演變為“沒有人能夠完成它,所以我不得不弄髒自己的手”,這是一個高地位,管理方面的藉口,對於一個花費了6個月差點成為職業殺手的專案來說,而不是必須去解釋為什麼他沒有設法得到高質量的專案分配, 當去問一個工程師時,他或許會對他所做的給出一個非常可信的解析,因為他沒有必要去做這項艱鉅的工作,這使他看起來像個英雄而不是零。

那是個什麼專案?事實上和Bill的這個故事相關。Bill維護過一塊遺留的老程式碼,那塊有4萬行的程式碼本質上在執行一個邏輯迴歸,這個自定義模組一直存在,卻沒有用當前統計軟體代替的理由是:多年來來自業務的大量需求被加進來,而且幾乎沒有一個自定義的調整是邏輯相關的,它們都得包含在原始碼中,現在這個專案因其自身複雜性的負擔處在崩潰的邊緣。這類專案對於工程師來說是職業殺手,因為在做這種專案過程中學不到其他(平臺的)可用的技術,而且這種維護的工作沒有一個明確的結束或“勝利點”。對Bill的技術簡歷來說,我們必須要讓這個蹩腳的維護工程看起來像是機器學習。對於管理簡歷,“監督關鍵業務遺留模組的維護”這個事實已經足夠了。

事實上有人可能會質疑Bill的簡歷是不是更誠實以及符合道德,因為它在紙上太不真實了。是的,我們誇大了他的社會地位並且給了他一個管理性的頭銜。然而,我們並沒有在“技能”那項下列出他沒有接觸過的技術以誇大他的技術能力。到了某個年紀,作為一個工程師出售自己往往需要:

  • a.你只從事有趣的工作,而不是去做一些可以稱為職業殺手的垃圾專案,並且玩些政治遊戲也是需要的。
  • b.引導你將來的老闆對你工作能力的信任。
  • c.或者花費大量的時間在小專案上,這又是a和b的結合。

這個實驗合乎道德嗎?我的答案是肯定的。當有人問我是否可以捏造職業經歷和簡歷時,我通常會這麼說:如果一個人當前的狀態(能力和才能)和所修改後的一致,美化之前的社會地位是沒有問題的。在某種形式上就像是講房子出售給一個迷信的買家之前把地址從13改為11,被抹去的事實是他曾經是“13”號,並不會給其他人造成任何傷害。另一方面,從長遠來看在技術上作假是不道德而且有害的(這是一個職業欺騙,其他人會被誤導別人做出一個和這個人當前狀態不一致的決定,在這種情況下是有害的),雖然我認為這麼做是一個壞主意,但是我不會對那些在簡歷中偽造時間和頭銜的人扣上一個道德問題的帽子,只要他們美化的是他們之前的社會地位而不是一些如技術能力之類的硬貨。

現在,讓我們來談談這個實驗是如何進行的。

面試A:作為一個軟體工程師

Bill面臨著5個小時的技術面,其中3個比較好,一個表現平平,因為它關注JVM的實現細節,但Bill的經驗幾乎都在C++以及一點OCaml愛好。最後一個面試聽起來非常糟糕,是和資料科學副總進行的面試,BILL未來的老闆,他遲到了差不多20分鐘,給了他一個面試問題,這個問題的正確答案需要花費數月甚至數年的內部試驗與糾錯才能被發現。這是一個”我要證明我比你聰明“的面試。

事後,我告訴Bill不要擔心最後那個面試。通常企業會給候選人一個尚未解決或者很難解決的問題,沒有期望候選人能在一小時之內解決。但是這次我想錯了。

我在A公司有認識的人,所以我能夠理解情況,Bill的反饋是3個非常好,1個平平,一個不好,結果和他自己的預期非常一致。最差的是那個副總的評論”別的角色或許很優秀,但不是在我的團隊”.顯然副總對於他花了差不多一個小時和一個沒有PHD學位的人談話非常不高興,因為Bill沒有更高的學位,副總認為一個人足夠優秀到加入他團隊的唯一方式是在40分鐘內反向編譯出公司的核心,我不認為這任何人都可以做到。

我們來總結一下,Bill出色的通過了5個面試中的3個,其中一個面試官,幾個月後想招聘Bill到他自己的創業公司。第四個面試馬馬虎虎,因為他不是一個Java專家,但結果也是一般。第5個失敗了,原因是他不知道需要多年研究才能發現的內部黃金演算法。當我直接問那個資料科學的副總他沒有僱傭Bill的原因(他並指導我認識Bill,也不知道這次實驗),得到的回答是“我們需要的是能夠旗開得勝的人”。顯然,當創業的人試圖欺騙政府改變移民政策是隻能是因為“缺少才能”,言下之意就是“我們不投資於人”。

或者,就這一點說,軟體工程師缺少必要的社會地位來讓別人投資。

面試B:作為一個資料科學經理

幾周後,Bill在一個大體相當的公司面試了一個副總級別的職位,可以直接向CTO彙報。

值得提的是我們沒有做任何事使得bill的簡歷比公司A時在技術上更令人印象深刻。如果有的話,我們在講一個“坦白正直的人”的故事時通過適度地誇大了他的 社會地位,使得他的技術故事更加誠實。我們沒有掩蓋低技術活動的時期;他是一個管理者,自己完全可以解釋這些。

BIll進行了4個面試,雖然問題是一些行為模式,並且對於很多技術人員來說答起來比較困難,但是Bill 覺得這些問題非常簡單。對於”在自己想做的工作和何時去委派之間有一個權衡”這個問題,我給了他一個比較好的答案。它指出了一個人擁有管理的地位的人(有委派別人的資格),也要對工作傾注熱情和勤奮,這個答案可以適應幾乎任何“行為模式”的面試問題。

Bill身高6尺1,相貌在白人男性中屬於中上,並且看起來像一名經理。我們做的工作似乎是得到了回報,在每個面試中,面試官在Bill之前10分鐘就到了。通過以管理者呈現他自己,並且他起來很像,他有了一個比終身軟體工程更加容易的職場。他已經是“俱樂部的一部分(管理層)”,並且平等的就他是否要加入這個俱樂部的某個特定部分參與雙向討論,而再不是作為程式設計師展示程式碼來進行面試。

Bill通過了,不同於申請一個典型的工程師職位,這裡沒有任何履歷覆核 。CEO對他說:“我們知道你是一個不錯的人,我們想盡快錄用你”,和作為工程師具有7天offer期限不同,Bill有兩個月的時間來做決定。他沒有提出要求就有4個星期的假期和實實在在的股權(每年可獲得大約薪水的75%利益)。

BILL給我打電話詢問一些搬遷的事情,說實話,我估計這次交易可能不會成功。搬遷問題使得很多工作邀請支離破碎。同時也是一個公司把某個人是否看作關鍵成員,或者只是一個填補一個崗位的測試。CEO開始說:“在深入瞭解之前,首先申明我們是個初創公司…”。

這個公司僱員人數超過100名,所以並不是一個創業公司,但是我暫不考慮這一點。我準備要罵人的時刻,因為”我們是一個創業“通常會是一個壞訊息的前兆。

“…所以我們將會提供 搬遷費,兩個月的臨時住房,1萬元的機票預算可以探望東海岸之外的任何家人,但是我們不承擔房屋的交易損失和房產經紀人的費用”。

Bill正在得到一個道歉,因為CEO不能提供一個全套搬遷費用。(“我們現在還沒有那麼全面。”)對於一個軟體工程師,“搬遷”通常是3000美元的一次性打包。因為“軟體工程師”,對於管理層來說就是“22歲具有少量財產,住在父母家的無知男性”。另一方面,如果你是一個管理者,你會被視作需要考慮搬遷到這個國家另一部分的真正的人。

這非常有趣,我一直在聽,想知道當你一旦“進入那個俱樂部”後結果會有什麼不同,CEO和BIll平等的談話,沒有那種家長式作風,給出一個“這個對你職業生涯很有好處”的權威指導。這種平等的語氣是一個軟體工程師絕對不會從一個100人公司的CEO中得到的。

分析

Bill有著超人的記憶力,每次面試結束後他都會記錄大量的筆記,所以有很多資料來分析這次社會學的實驗。它教會了我很多,在A公司,BIll申請的是高階軟體工程師,他被認為“合適”程度開始有90(只有90,是因為因為他沒有博士學位和史丹佛背景)。但是所不知道的一切都是掉分的,沒有Spring和Structs方面的經驗,減5分; 不熟悉公司的黃金演算法?不是一個真正的“資料科學家”,減8分;沒有Hadoop 經驗?減6分。Bill在他所不知道的一切以及需要多少工作才能讓他快速成長成為一個可靠的下屬上被評判。

B公司是一次完全不同的經歷。BILL從70分開始,但是他所知道的一切是都是給他添分的。他能夠說清楚邏輯迴歸和最大似然法?加5分;而且他還實際實現過他們?加6分;他懂得OCaml?加5分。他所知道的一切都對他有利,我認為他還通過不相關的“有趣的人”有所加分,比如說他的旅行經歷。

當一個程式設計師到了一定的年齡,他知道很多東西,但是同時也有很多的東西他不知道,因為沒有人能夠知道這個行業所發生的所有事情,從70分開始從你所知道的事情獲得加分,遠遠比從90分開始由於你所不知道的事情得到減分好,除非你在申請一個初級的職位。

這整個問題不僅僅是一個人對技術的掌握程度。作為程式設計師,我們習慣了學習新技術,這是我們所擅長做的事(即使一毛不拔的商人討厭投資訓練我們)。這是一個社會地位的問題,當一個人在玩工作遊戲時,為什麼地位會他媽的如此重要,遠遠比忠誠,能幹,勤奮重要。

地位的高低並不意味著被喜歡或不喜歡。有些人被人喜歡但是地位很低,有些人不被人喜歡但是地位卻高。通常來說,在工作中擁有高低位比受歡迎更有用,更重要。顯然兩者擁有最好,但是受歡迎地位低的人在垃圾專案中,永遠得不到進步。不被人喜歡地位高的人,最壞的情況下也能得到遣散費。正如Machiavelli所說,“如果你兩者不能兼備,被人敬畏遠遠比人喜愛更安全”,人們的喜好會隨著時間變化的,但一個地位高的人不大可能會讓他人對自己不利。

此外如果你地位低,人們最終會找到不喜歡你的理由,除非你不斷地犧牲自我以換取別人的喜歡,甚至用這種方式耗盡時間。地位高,人們會找喜歡你的理由。地位低,你的缺點會被首要關注,你的優點會被視作不重要的,或許還會經過“是的,但是”之類的反駁將積極的方面變成負面的(比如說“是的,他在Clojure方面很擅長,但是他只不過是那些動態型別方面的牛仔程式設計師之一”,“是的,他很擅長Haskell,但是那隻意味著他不過是那些靜態型別方面的白痴之一”,“是的,他是一個很好的程式設計師,但是她看起來不像是團隊中的成員”)。當你地位低時,你最好的策略是不被人看到,注意到的,因為即使你優秀的特質也會傷害到你。你想要保持清白,等待一種均值迴歸現象把你帶入中間階層,在那裡,受人歡迎會幫到你,然後過些時間,會把你帶到中上層或上層。

當你地位高時,那情況將是相反的。你不用努力保持自己的石板空白,實際上所有對你有益的事情會被寫在上面。人們會誇大你的優點,忽略你的缺點(除非這些缺點是極壞的並且危險的),你從70分開始,人們會尋找方法來給你增加另外的30分。

程式設計師的熱情

我一直覺得程式設計師的社會地位低,上面的實驗也支援這個觀點。顯然,這些都是一些事蹟而不是資料,但是我認為我應該著手給“軟體工程師”的低社會地位一個嚴格的定義。

在當前經濟和市場情況下,程式設計師的工資到底是低了還是高了,經常會有這樣的爭論。由於這種因素是可變的,不能夠準確的衡量,所以,這種爭論最終會以主觀感受結束而不是一些(客觀)技術上的支援。一個人的缺點被關注還是積極的優點被關注—使用這種地位的技術觀念,我們有方法不通過比較一個人的薪水和他們應得的工作條件來評估程式設計師的社會地位。如果你所處的位置人們強調你的錯誤忽視你的成就,那麼你的社會地位就低(即使你每年掙20萬美元,那隻意味著裁掉你的計劃將會很快到來)。如果你所處的位置和這個相反,那麼你擁有一個高社會低位。

從這個角度看,程式設計師社會地位低的事實,不能夠再清楚了。我們永運也不會付給一個軟體工程師“理想下正確的”“公平的價值”的薪水。可以看到的是技術人員的成就在他們所工作的企業中很少被提到,但是他們所犯的錯誤卻被著重突出。我曾經在一家公司被告知的第一件事是4年前由一個人造成的生產中斷,那個時候他還是個實習生。(為什麼一句話也沒有提那個讓一個實習生造成事故的經理?因為那位經理的地位高。)問題的很大一部分原因是程式設計師向來習慣於勝過對方(見:feigned surprise)以證明他們具有更優秀的學識,能力與智力。從外部(即,從我們所為之工作的企業經營者的角度)來看,這些無聊的比賽使得雙方都看起來愚蠢和不足。程式設計師通過穩妥地降低彼此的地位,毫無閃失地降低了整個群體的地位。

曾經有一段時間,或許離現在有20多年了,當時的矽谷是不同的,工程師掌管著局勢,技術人員互相幫助,程式設計師工作在高度自治和充滿鼓勵的研發環境中。套用一個研發車間的內部標語:壞的創意是好的,好的創意是非常棒的。矽谷是不合群的人的愛麗絲島(超人狗,是個秀),在“牧羊犬”的領導下企圖遠離主流的MBA文化(這種文化能夠摧毀行業的創造力)。那個時期結束了,舊金山加入到了由波士頓,紐約,華盛頓,和洛杉磯組成的“paper belt”(根據Balaji Srinivasan的術語,戰後工業和基建系統非常完善的區域)。風險投資轉向好萊塢那些醜陋的人,矽谷開始成為自身成功的受害者。海灣地區的房東使得這個程度更大了。從MBA文化的據點如麥肯錫和高盛出來的一些失敗者找到了競爭力更小的舞臺,在那裡他們可以(不受懲罰地)無所顧忌地管理書呆子。如果你還不夠優秀到在銀行擔任總經理,你去西海岸成為一個風險投資創始人。在這種矽谷新秩序下沒有勝出地其中一群人就是軟體工程師。房租漲得比他們地薪水還要快,他們逐漸遠離了創新的同伴,而成為MBA文化失敗者糟糕思想的實施者。這是我們現在所處地位置。

那麼發生了什麼事?難道矽谷新的財富吸引作惡者是不可避免的嗎?或者是可以避免的?事實上,我認為這應該停止,認識到我們現在的處境。有沒有可能在其他地區複製矽谷地成功,而且當資金出現並注入到其中時,我們的地位和自由不會丟失?我想是這樣地,但是我會用另一篇文章來解釋為什麼我們可以保持優勢以及用我們的方式使用實用的策略保持遊戲公平。這是一個大的話題,和我在這篇文章中試圖表達的相去甚遠。

地位的丟失是一件很讓人悲傷的事情,因為科技本來是我們的場地,我們熟悉電腦和軟體,以及演算法基礎,但是這些擁有MBA文化的侵入者卻不懂。我們應當擁有優勢和保持一個高低位,但是我們卻敗了,為什麼?這裡有兩個彼此相關的原因。

第一個原因是我們缺少“牧羊犬”。牧羊犬,在這裡指的是一個好鬥強勢有能力保護善類的人。一隻牧羊犬能夠驅走捕食者進而保護羊群。牧羊犬不會挑起戰鬥,但是卻會以它們希望的方式結束戰鬥。程式設計師不喜歡“搞政治”,即使他們自己的同類捲入到了辦公室政治中,他們也很討厭“搞政治”。結果就是我們沒有太多的牧羊犬保護我們免受擁有MBA文化的狼群的入侵。 如果有人學習一些保護善類的技巧,結果往往會不同。

第二個原因是我們允許別人用“熱情”來對我們不利。當我們喜愛我們的工作時,工作會非常努力(我們願意讓它被人知道,我們工作得非常努力)。但是這造成了兩個方面的負面影響:第一它表明,如果我們不喜愛我們的工作,我們會和其他人一樣對工作不盡全力。管理層通常會有一種政治家的城府不會隨便表現出他們是否喜愛他們的工作,除非是他們非常信任的人。程式設計師,相反地,對待自己工作的態度非常明顯。這意味著那些對工作顯得很高興的人不會得到應得的(他們工作的很努力)升職,因為管理層覺得沒有必要去獎勵他們,而那些對工作顯得不那麼高興的人就會因為潛在的“態度問題”突出在咄咄逼人的管理層面前。第二個負面影響是,對工作沒有熱情是一種犯罪,尤其在創業公司,我們是不被允許把工作當作“僅僅是個工作”,並且不應該僅僅在給予超常報酬時才付出超常的努力。我們不被允許去“搞政治”保護自己,我們應該充滿熱情地免費幹這個工作。

大部分人並沒有意識到正是這種強制性的“熱情”文化降低了我們的社會地位,因為它鼓勵我們無理由,不計條件的拼命工作。失去地位最快地方式是接受當前的低地位狀態。比如說,程式設計師經常會在人手不足時過度工作,這是一個糟糕的事情(那些高官不相信我們,所以我們通過加班證明給他們看),允許人手不足的情況存在,這樣做就證實了整個團隊的低地位。

管理層是比較機智的一群人,當不到提升或應得的酬勞時,他們會多工作失去熱情。他們的這種態度並不是可憎的,他們不討厭這種態度,但是也不會試圖去掩蓋它。他們不會給違揹他們興趣或降低了社會地位的專案或公司付諸於真正的努力,他們也不會為了成為“熱情的人”而對自己不利。他們希望自己被看作是一個極其能幹的人而不是可以無條件犧牲的人。這就是他們和我們的不同之處,管理層一心為自己著想,並且對事實相當開放。相反地,程式設計師卻因一些形式的自我犧牲自居為英雄:比如說犧牲週末來交付專案,最後被取消了;或者在沒有搬遷費的情況下搬到舊金山,因為他“真的相信”那個他甚至都不能連貫描述的產品,並且他還會擁有百分之五的股份。

管理明白互惠性,他們付出恩惠來賺取恩惠,但是不會去做犧牲自我。當“工作”不再愛他們時,他們也不會掉進“對工作的熱愛”的自我幻覺中去。他們不怕“搞政治”,因為他們認為工作主要是政治,只有那些能夠負的起對政治漠不關心的人或求同的人才是可信賴的政治贏家, 但是直到某人在哪個陣營,他不能夠再幻想。

如果程式設計師想被認真對待,我們應該被認真對待,我們當然想要這樣。我們必須對我們的妥協做出反思並且開始修補。甚至這是“政治性的”。我們應該停止吹噓無意義的自我犧牲為了最終的是別人的事情,開始為我們自己以及我們的價值發聲。

相關文章