偉大航道的遊戲規則 - 軟體工程師篇

7/14/2014 05:42:00 PM 0 Comments

圖片出處:geektyrant
SnapChat CEO 斯皮格爾(Evan Spiegel)前陣子說的那句話到現在還到處被全球鄉民瘋轉,如果你還沒有看過,可以參考一下:

我是一個年輕、受過教育的白人。我非常非常的幸運。而人生是不公平的。因此,如果人生是不公平的——努力工作根本不是重點,重點是知道這個世界運作的法則。
(And life isn’t fair. So if life isn’t fair – it’s not about working harder, it’s about working the system.)


這個 23 歲以前就(算是)白手起家的大富豪說的沒有錯,就像這篇原出於中國網民的長文(文長,但是真的很好看,大力推薦)寒門再難出貴子所說的:

『努力是需要有方向的,需要有指導的,如果在一個錯誤的思維指導下,也許累死你的努力換來的就是一個只能餬口微薄收入。』

是的!努力是需要有方向的(本篇重點真的不是叫你去找個富二代或是有錢人嫁了/娶了 XD),摸清楚遊戲規則與方向後的努力才能開外掛,才能事半功倍,讓我們先從軟體工程師開始討論吧!

談到工程師,你可能以為只要是阿宅又會寫程式,就是程式設計師了,其實,筆者在這裡工作了幾年後,發現在矽谷,軟體工程師以等級來說,可以分為以下幾種:

  1. 會寫些 code 的
  2. 會修別人寫出來的屍體的
  3. 會搞些軟體架構,又會帶人的,以及最後的
  4. 投入大型 Apache Project 開發的。

在矽谷,這幾個等級的工程師能力跟待遇相差很大,但是差距最大的部分,其實是機會。很多搞不清楚這幾個等級的程序猿們,會花上一輩子的時間在第一種與第二種工程師間徘徊,儘管工作非常努力,也很努力學習新的技術,很多時候卻感到時不我予,等到年紀大一點了,拼不過年輕小伙子,自然慢慢就被淘汰掉了,給外人造成工程師作不老的錯誤印象。

所以一旦你踏進軟體工程師的領域,你只能咬著牙,一關關打上去,這就是你必須面對的偉大航道。

會寫些 code 的

儘管很多人會說念資工系沒有用,或是非資工系也會寫程式等等… ,在矽谷這裡,念資工系還是比較吃香,不然你自己去 Facebook 找人的網頁,Software Engineering 部分,看看有幾個職缺不需要 BS or MS degree in Computer Science
(好玩的是,這裡 99% 的一流公司不會只想要徵碩士,跟台灣那種很假掰的大公司感覺很不一樣)

或者說你之前也有聽過可以半路出家寫程式,比如說去參加 General Assembly 課程出來直接拿高薪等等的這種說法。我自己沒有遇過半路出家拿高薪的那些人,但是就我所知,如果你不是資工背景出來的,之前也沒有寫程式的相關經歷,通常需要幫公司作『無償實習』來累積你在市場的經驗與人家對你的信任,然後才能正式當上全職的軟體工程師。

矽谷公司雖然相對比較不重視學歷,但是你還沒有經驗或是作品集證明自己之前,他們也是很在意出身的。相反地,在你工作三五年後,你沒有累積經驗而只提出身,就慢慢會讓大家看不起了。

還有一個很直接的方法確認你是不是真正的軟體工程師,你去找一個當地的獵人頭,問他是不是願意幫你推薦你的履歷,如果他肯的話,你就 100% 是了。

不管你是怎麼做成軟體工程師的,總之,你工作是在寫些 Code 的,就算是了。

會修別人寫出來的屍體的(Debug 別人的 Code)

一般而言,能夠做到修改別人的屍體(寫壞的程式,但是不包含回家作業 XD),大概就有資格叫做資深(Senoir)工程師了。

寫 code 簡單,改自己的 code 簡單,但是修改/修正別人的 code 其實就不容易了,尤其是那種一點都不寫註解的 XD 。你不僅要熟稔他使用的語言與技術,還要參透他思考邏輯與盲點,比自己自幹要困難很多。

以現在軟體專案的規模,你一定要跟人合作,你當然可以請寫那段 code 的人自己去維護自己寫出來的那段程式碼,但是萬一這個人生病/請假/擺爛/離職了怎麼辦呢?產品與專案還是要繼續走,於是『會修別人寫出來的屍體的』能力就顯得非常重要了。

基本上,到了這個等級,你 Linkedin 的信箱漸漸的就會有很多獵人頭的留言,留職缺,希望找你去面試,只要你學校學的那些資料結構與演算法還算熟稔,面試的氛圍也掌握得很好,年薪談到大於十萬美金應該不是問題。

會搞些軟體架構,又會帶人的

稍微有點 sense 的軟體工程師就知道『作 Amazon』與『做出 Amazon 網站』的差別,而這差別,正是定義這等級軟體工程師的最大因素。
(這裡說的Amazon,指的是 Amazon 購物網站,不是 AWS)

『作 Amazon』與『做出 Amazon 網站』最大的差別在於服務的規模(scale),200 個用戶跟 2,000 萬個用戶所需要的科技與演算法完全不一樣。

拿商品推薦系統這個簡單的功能來說吧,我們假設你有專屬的推薦演算法,當顧客登入網站的時候,你必須要用推薦演算法算過你所有的庫存商品,來推薦顧客可能會喜歡的產品,推高購物網站的營收。

假設你目前有 1 萬個商品,在你有 200 個用戶時,你只要算 200 萬次,一台好一點的機器可能就可以處理了,但在你有 2 千萬客戶時,你至少需要算 2 千萬 x 1 萬 = 200,000,000,000 次,這還不包括接下來排序所需要的運算,你要怎麼設計這個系統?

假設你使用 100 台機器來處理,其中有幾台運算時錯賽了,你要怎麼辦?你的結果會不會受到影響?還有,你當然不能在顧客登入時才當場算,因為這樣絕對來不及,那麼你要怎麼儲存這些每晚重新運算過的結果?如果 Amazon 想要把網頁的產生時間壓在幾毫秒下,你只能把這些結果存在記憶體,而不是硬碟中,那你要怎麼設計與設定這個大型的記憶體系統(假設我們用 memcached)?

到目前為至,都還只是『商品推薦系統』而已,更別說其他功能,資料庫的設計,分散式運算的規劃 … 等,更何況 Amazon 的資料量與客戶量都遠大於此呢!

除了設計與實作這些軟體架構以外,這類的軟體工程師還要能夠舌戰群雄,通過眾多工程師的質疑與考驗與建議後,帶領團隊做出最終版本的產品,並進行維護與改良。

這類工程師常見的抬頭有軟體架構師(Software Architect)工程總監(Director of Engineering),技術副總(V.P. of Engineering),與 CTO 這幾個。

其實成為這種工程師最大的難處不在於技術而已,而是在第一手設計與執行這些大型系統的實戰經驗,有了一次架構這種等級服務的經驗以後,未來的業主或是團隊才會相信你有這樣的能力,把更多,更大型的專案交在你手上,你也才能以戰養戰,在業界建立起自己的品牌。

就我目前接觸到這樣的工程師中,有兩種升級過來的方式:

  • 1. 在大型服務的公司,待過類似部門。比如說你就在 Amazon 作過類似的東西,拿這種業界龍頭的相關履歷,當然很容易在競爭者或是 startup 種找到掌舵的角色。
  • 2. 在快速成長的 startup 中待過,期間協助建立或是維護過這種等級的服務與產品。

投入大型 Apache Project 開發的

我知道你很嚮往設計出 python 的 Guido van Rossum ,或是哪天閒閒沒事也能像 Linus Torvalds 一樣在家裡孵出 Linux,但是我並不想討論他們這種神級的語言創造者,因為他們的經歷與能力有點難複製。我想討論的反而是他們的追隨者,那群數目龐大,但是卻默默把像是 Linux 與 python 推向未來的 Open Source 社群工程師。

不知道你有沒有聽過矽谷的秘密工會?作者寫的沒錯,我這個類別就是在聊他們。
(沒看過文章先去看看)

很多對技術熱愛的工程師,會把這些技術的原始碼下載下來研究,也會跟貢獻該科技的 Open Source 工程師互動,切磋技術,久了,不管是手癢了,還是想要哪些功能遲遲等不到,就會把袖子捲起來,自己跳下去寫了起來。

儘管理論上 Open Source 的專案大家都可以做,但是要讓大家都同意把你的程式碼正式地放進專案中,卻需要好大的一番功夫。

首先,我們假設你幫該專案加了某些功能,你會上 Github 去建立一個 Pull Request ,接下來,這些元老級的工程師們就會開始對你的程式碼品頭論足的。

『這裡為什麼要這樣寫?你這樣跟我們原來程式碼的架構不搭』
(老大,我新來的耶 XD 我哪知道你原來的架構啊?)

『為什麼不用這個元件,要自幹?』
(因為之前沒有人跟我說啊 XD)

『你的測試單元這樣寫跑太慢了,你換個方式作吧!』
(那等於是要我拆開來重新作是嗎? XD)

… 雖然你會覺得很機車,但是轉念想想,你到哪裡去找這麼多軟體工程的長老花時間幫你 review 你的 code 啊?這種千金難買的灌頂機會,現在讓你完全免費得到,你老早就該請吃飯了 XD

經過上面的寒徹骨,你的程式碼終於被接受,成為 Open Source 專案的一部分,你也升級成為 Open Source 的貢獻者(Contributor/Developer)。

如果要作 Open Source ,建議一開始從 Apache 熱門專案下手,比如說 Spark 或 Hadoop 那種,有兩個主要原因:

  1. 因為專案熱門,原來貢獻的長老工程師就眾多,幫你 Review 作品的質跟量會比其他 Open Source 專案好很多,灌頂機會大增,練功比較快。
  2. 一旦你成為這些熱門專案的固定貢獻者,甚至被專案中長老們遴選為 Commiter (有關分級請看這裡),你在業界的名聲自然水漲船高。根據強者我朋友的不責任報導,很多超級公司找人的時候,都是把相關 Apache 專案 Developer/Commiter 的名單調出來,從第一個打到最後一個。而一般而言,一個熱門 Apache 專案的 Commiter 年薪至少 20 萬美金。
當然,如果這整個 Apache 專案根本就是由你發起的,你的價值會跟這篇同工不同酬的文章所說的一樣,沒有辦法以常理來衡量。

最可怕的是如果這群絕地武士同時又兼有創業家精神,他們創造出來的公司會讓你有種天空才是你的極限(Sky is the limit.)的那種 fu,如果你覺得 Cloudera(Hadoop) 太老了,雖然市值規模真的很驚人,你可以看看 Databricks(spark) ,這個才成立 1 年 (2013) 的 8 人公司,讓矽谷最有名的創投爭先恐後,馬上注資4千7百萬美金(來算算每個員工可以分到多少 XD),這兩間公司都是由這類工程師所創立的。

對了,這類工程師很多都喜歡饅頭(mentor)後進,只要你不浪費他們的時間,他們都很願意拉你一把,如果你遇到了,好好把握機會吧。

目前為止所討論到的這條航道,是我這幾年在矽谷當工程師所見所聞的體驗,歡迎大家跟我討論。如果你認識其他產業或是職業的佼佼者,可以提供更多的偉大航道,也請來信跟我說,我非常願意跟他聊聊,看能不能把他的經驗與洞見(insight)寫出來跟大家分享。

ps. 筆者現在身於『會修別人寫出來的屍體』的階段,努力向上攀升中


--------------------------------------------------------------------------------------------------------
如果喜歡我的文章,非常歡迎你填入您的 Email 信箱,訂閱 Winston Chen。


也非常歡迎你來信跟我討論,謝謝。

Winston

陳昭穎 Winston Chen - 『砍掉重練:30歲開始也不遲的工作術 』的作者

中央大學資工系,從小到大從沒念過第一志願,沒念過研究所,出社會前想拿個國外的 MBA 回台灣爽爽過,但是沒錢出國,只好出賣靈魂當工程師存錢,怎知當上工程師後就愛上寫程式,回不去了!心想在未來墓碑上一定要刻上身為工程師的事實。

因為嚮往科技勝地矽谷的陽光與空氣,出社會五年後花光所有積蓄,跟老婆一起遠渡重洋,到矽谷尋找突破的機會。