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),摸清楚遊戲規則與方向後的努力才能開外掛,才能事半功倍,讓我們先從軟體工程師開始討論吧!
談到工程師,你可能以為只要是阿宅又會寫程式,就是程式設計師了,其實,筆者在這裡工作了幾年後,發現在矽谷,軟體工程師以等級來說,可以分為以下幾種:
- 會寫些code 的
- 會修別人寫出來的屍體的
- 會搞些軟體架構,又會帶人的,以及最後的
- 投入大型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 這幾個。
其實成為這種工程師最大的難處不在於技術而已,而是在第一手設計與執行這些大型系統的實戰經驗,有了一次架構這種等級服務的經驗以後,未來的業主或是團隊才會相信你有這樣的能力,把更多、更大型的專案交在你手上,你也才能以戰養戰,在業界建立起自己的品牌。
就我目前接觸到這樣的工程師中,有兩種升級過來的方式:
在大型服務的公司,待過類似部門。比如說你就在Amazon 作過類似的東西,拿這種業界龍頭的相關履歷,當然很容易在競爭者或是startup 種找到掌舵的角色。
在快速成長的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 那種,有兩個主要原因:
因為專案熱門,原來貢獻的長老工程師就眾多,幫你Review 作品的質跟量會比其他Open Source 專案好很多,灌頂機會大增,練功比較快。
一旦你成為這些熱門專案的固定貢獻者,甚至被專案中長老們遴選為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. 筆者現在身於『會修別人寫出來的屍體』的階段,努力向上攀升中
(本文僅代表作者之意見與立場,經作者授權)
出處:台灣工程師的矽谷故事