如果我可以給每個工程教育增加一門課,它不會涉及編譯器、門電路或是時間復雜度,而是一門介紹行業現實的入門課,因為沒人教過這些,所以我們遭受了很多不必要的痛苦和折磨。
希望本文可以成為年輕工程師職業生涯的自述文檔( readme.txt)。目的是填補“現實世界”運作方式與教育之間的空白,并讓你快樂起來。我從“一個還算聰明,但是不自信、毫無商業經驗的工程師”,耗費了十年多的時間,經受了很多的苦難,才總結出這些經驗之談。我不會把這些當成金科玉律,但希望它可以告訴你一些大學職業中心沒有告訴你的事情。
90% 的編程工作來自內部軟件
經濟入門課程就說過:任何東西(包括你在內)的價值都取決于供求關系。首先讓我們來談談需求方面。大多數軟件不是裝在盒子里賣的,也不可能從互聯網上得到或者從 App Store 下載。大多數軟件都是公司內部的應用程序,它們通常令人厭倦,缺乏長遠考慮。但卻服務于全球經濟的方方面面,比如跟蹤費用、優化運費、協助會計部門做預算、幫助設計新的工具、計算保單價格和識別惡意訂單等等。軟件解決內部問題。軟件總是用來解決內部的問題,盡管這些問題往往是令人乏味和沒有什么技術含量的。比如以一個內部出差費用的申報表為例。假設一家公司有 2000 名雇員,和在紙面上處理費用相比,一年可以節省 5000 個工時(平均滿負荷下的成本是每小時 50 美元),一年一共可以節省 25 萬美元。這家公司不在乎這個申報表是不是世上最簡單的 CRUD(即為 Create、Read、Update、Delete 等四項基本數據庫操作)應用程序 ,只在乎可以節省公司的成本還是可以創造額外的收入。
當你想到軟件時,會認為公司開發的軟件都是提供給客戶使用的。但實際上你不太可能在這樣的公司工作。就算你在這樣的公司工作,也只有極少數程序員直接編寫面向外部客戶的軟件。
別人雇用你的目的,是讓你創造價值,而不是讓你編程
公司總是出于非理性和政治的原因做事情(請看下面),但他們聚在一起做事情的主要目的是為了增加收入或者降低成本。運行良好的業務往往得益于在某一方面非常擅長的人。(可以,但不一定非要這樣做。)決定再多招聘一名工程師的人,不是因為他們喜歡有一個 Geek 在房間里,只是因為增加這個 Geek 可以完成一個項目(或多個項目),增加收入和降低成本。開發優美的軟件、解決復雜的技術問題、編寫沒有 bug 的代碼、使用迷人的編程語言,這些統統不是目的。唯一的目的就是增加收入、降低成本。
彼得?德魯克提出了利潤中心和成本中心的概念。利潤中心是一個組織中用來賺錢的:律師事務所的合伙人、企業級軟件公司的銷售以及華爾街的大鱷們等等。成本中心,就是剩下的人。人人都想進入利潤中心,因為這樣會帶來更高的工資、更多的尊敬以及更多獲得好處的機會。這并不難:一個聰明的中學生,只要看過一段關于業務的描述,通常就可以確認利潤中心在哪里。如果你想在那里工作,就要為之努力。如果你不能這樣,要么在其他地方工作,要么先進入公司再轉換工作。
彼得?德魯克 Peter Drucker,現代管理學之父,你可能沒有聽說過他,但他是老板們中的先知。
通常工程師的成本都非常高,這會觸發 MBA 優化成本的本能。于是就有了類似外包這樣很棒的想法,“用一個低工資國家的成本中心,替換掉這些相當昂貴的成本中心,這些昂貴的成本中心并不能給我們帶來什么。”(提示:如果你讀到這個指導后面的部分,你完全可以忽略外包,不用把它當作職業生涯中的威脅。)沒有人會外包利潤中心。只有在 MBA 開的玩笑中才會發生這樣的事情。這就好比建議用軟盤保存一堆副本,用來代替源碼控制系統。
不要自稱為程序員
“程序員”聽上去“只會在一臺復雜的機器上干一些難懂的事情,而且成本奇高。” 如果你自稱為程序員,有些人已經在想辦法把你解雇掉。有一家公司叫 Salesforce,工程師熟知他們所提出的“軟件即服務”(SaaS,Software as a Services)。他們的口號就是“沒有軟件”,他們向實際客戶灌輸這樣的觀點,“你知道你們內部的程序員在做什么嗎 ?如果你使用 Saleforce,你可以解雇一半的程序員,并把節省下來的一部分錢作為獎金放進你自己的口袋。”(順便說一句,這樣沒有錯。你效力的公司會讓別人失業。如果你認為這不公平,回到學校愛干嘛干嘛。)
正確的做法是,你應該把自己描述成與增加收入、降低成本有關系的人。如果你還沒有機會做到這些,應該說明你有能力去增加收入或降低成本,或者有這樣的想法。
很多拿著不錯薪水的編碼專家,并不把他們自己形容成是以碼代碼謀生的。華爾街的寬客就是第一個和最著名的例子: 和那些沒有幫助的人相比,他們使用計算機和數學作為杠桿,可以更快更好地做出后果嚴重的決定,這些決定可笑的地方在于“我們公司賺了數十億美元。” (譯者注:對金融衍生品的諷刺?)年景好的時候,成功寬客一年的獎金,要比同樣才智的工程師干十年或一輩子賺的錢還要來得多。
寬客(quant):指一群靠數學模型分析金融市場的物理學家和數學家。他們相信數學的精確性是分析最復雜的人類活動的基礎,還曾用分析神經系統的數學技巧來賺錢。也被稱為金融工程師,他們將自己戲稱為“礦工”。
同樣就算你認為 Google 看上去是一家對程序員友好的公司,那里有程序員,也有一些人對 AdWords 點擊率 提升 1% 都相當關注。(提示:證明價值是數十億美元。)我最近偶然發現一個家伙的網頁,他上面的履歷是這樣寫的,“編寫了后臺計費代碼,Google公司 97% 的收入,與我的代碼有關”。他現在是一個天使投資人(“有錢人”另一個禮貌點的稱呼)。
不要受制于你的技術棧
我最近在 Twitter 上問了一個問題,對于職業生涯,年輕工程師想知道些什么。很多人都問到如何學習某某語言或者協議棧。這些不重要,請往下面看。
Java 程序員比 .Net 程序員更能賺錢嗎?任何把他們自己限定成 Java 或者 .Net 程序員的人已經是盧瑟了,因為首先他們是程序員(理由參考上面),其次這種限定使得他們自動被排除在世界上大多數編程工作之外。現實生活中,學會一種新語言只需要幾個星期,然后再過半年到一年,你就會變成老手。那時,根本沒人在乎你以前用什么語言。早在 2010 年 3 月,我還開發了Java Web 應用程序的后臺。相信我,沒有人在乎那些。如果一家 Python 公司正在尋找一位技術專家為他們賺一大筆錢,雖然事實上我沒有寫過一行 Python 代碼,但這也阻止不了我。
天才程序員是很少的 ―― 可是需要天才程序員的工作機會卻很多很多 ―― 大多數場合都是需求遠遠大于供給。Matasono 公司的人都在使用 Ruby。如果你不會,只要你是一個優 秀工程師,他們也會立刻錄用你。(重復一遍,所謂”優秀工程師”,就是你的履歷上有一連串增加收入、降低成本的記錄。)Frog Creek 中大多數人都使用 Microsoft 的協議棧。我甚至不會拼寫 ASP.NET,但他們還是會雇我。
有些公司的人事部門,會根據某個關鍵詞過濾簡歷。雖然這樣的公司根本不值得去,但是如果你真的想過這一關,也很容易:投入幾個晚上和周末,在你當前的項目中設法用到這個關鍵詞,然后再把它寫進簡歷就行了。想在一家 .NET 公司累積 Ruby 的經驗?用 Ruby 完成一個一次性的項目,你就是一個專業的 Ruby 程序員 ―― 你編寫了 Ruby 代碼還賺了錢。(你樂了吧?我在一家 Java 公司干過類似的事。有個一次性的項目給公司賺了 3 萬美元。不出所料,我老板樂壞了,甚至都沒有問過要交付什么。)
同事和老板通常不是你的朋友
你有很長時間和同事們在一起。最后你可能會和他們中的一些人成為很親密的朋友,但通常三年內你們就會分開,除了保持友好的關系外,你不會再邀請他們出去共進晚餐。他們也將同樣對待你。任何見過你的人都會認為你是個好人 ―― 這是道德層面的事情,對你的人際關系有所幫助 ―― 但是不能由此妄想所有人都是你的朋友。
比如在一個面試中,你和一個 28 歲的友善的家伙相談甚歡,讓你感覺他就是幾年后的你,但他還是處在一個交易中。你不是他的朋友,你只是一個工業流程的輸入,他會為公司用最少的錢去雇你。他用魔獸世界的話題跟你套近乎,其實是在建立一種職業關系,他會嘗試(當然是絕對符合職業道德地)做那些你真正朋友不會對你做的事情。比如試圖說服你接受幾千美元的薪水,或者讓你心懷內疚得在公司里待更長的時間,而你原本可以和真正的朋友在一起。你還有其他一些友好和有職業道德的同事 ―― 他們建議的東西會損害你的利益,從“你做的那個項目里面可有我的功勞”(措辭上可能不會有這么多單詞)到“我們應該做這件事情,它對我的職業發展有幫助,而不是你的。” 當這些事情發生時,不要感到驚訝。
徹底高估了競爭對手的平均水平
實際上,很多被雇的高級工程師不會實現 FizzBuzz 序列。讀到這里你淚流滿面了吧。這里有個關鍵點:對于那些公司而言,你已經足夠好了,但你自己卻不這么認為。他們會雇用牛人,但他們也會雇用普通人。
“閱讀招聘廣告→發送簡歷→參加面試→拿到Offer” 這個不是被錄用的常見途徑,只是個意外。
大多數職位從來都沒有對外公布過,就像在市面上很少能找到不錯的候選人一樣(看這里)。在大家一起喝啤酒時,這個職位的信息候就傳播出去了,有時候還需要通過郵件撮合一下。公司里做決定的人要找一個人。他告訴他的朋友和有業務往來的人。他們中的一個人剛好知道這么一個人 ―― 家庭成員、大學室友、會議上認識的某個人、以前的同事之類的。做了一些介紹,大家見了個面,這個工作就談得八九不離十了。接下來簡歷、人力部門、正式錄用之類的開始進場了。
這可能是你真正想得到的工作。“一個成功創業公司的首位員工”這對很多 Geek 來說有一定的吸引力,但事實上他們也找不到地方去發求職信給人力部門,部分原因是兩個人的創業公司也不太需要成立人力部門。(備注:你可能不想成為創業公司的首位員工,而是最后一位合伙人。)想在 Google 謀得一份工作?如果Google 里面有人喜歡你,他們有一個正式的流程可以助你一臂之力。(如果這個 Google 的人很喜歡你,有很多非正式的方法可以縮短這個流程。比如:買下你工作的公司。當有很多錢的時候,解決問題也就有很多有趣的選擇。)
私底下雇用有很多原因。一個原因是工作機會公開后會收到上百份簡歷(特別在這種經濟環境下),但很多人其實并不適合這個職位。另一個原因是其他公司在招聘方面的慘痛經歷,除非你對應聘者很了解,不然你很可能招進一個連 FizzBuzz 都搞不定的人。
社交網絡(人際關系)不僅僅是 TCP 數據包
社交網絡/關系網有兩個意義,一是遇到在某些方面可以為你提供幫助的人(反過來也一樣),二是給他們留下良好的影響。
有很多場合可以結交其他人。行業里舉辦的活動就是一個不錯的選擇,比如會議或者學術座談會。用戶組是另外一個選擇,用戶組里的人和行業活動上的人完全不同,而且有用得多。
盡量幫助別人,這是正確的做法,人們會很在意那些過去幫助過他們的人。如果你幫不了某人,但知道誰可以提供幫助,請介紹他們相互認識。如果你做得足夠好,雙方都會感激你并且愿意在以后的日子里為你提供幫助。
你可以在互聯網上結識其他人(天吶,你能嗎?),但是慣常思維讓我們覺得面對面的交流會更好一些。我曾經在網上結識過不少牛人,過不了多久我就會去拜訪本尊。即使通過網上的交流彼此了解頗深,甚至“因為對方的一個建議發了財”,見個面握個手也會讓關系更進一步。發博客和加入類似 HN (譯者注:HackNews)這種業界灌水區是很有必要的,但要通過它們能讓大家見面交流。
新聞熱點
疑難解答