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

圖片出處: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。
#mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; } /* Add your own MailChimp form style overrides in your site stylesheet or in this style block. We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */

訂閱 Winston Chen – 台灣工程師的矽谷故事

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

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s