硅谷工程師的4個等級 - 全文

2014年12月24日 10:23 來源:CocoaChina 作者:佚名 我要評論(0)

標(biāo)簽:工程師(68469)程序員(29779)

  SnapChat CEO斯皮格爾(EvanSpiegel)前陣子說的那句話到現(xiàn)在還到處被全球鄉(xiāng)民瘋轉(zhuǎn),如果你還沒有看過,可以參考一下:“我是一個年輕、受過教育的白人。我非常非常的幸運(yùn)。而人生是不公平的。因此,如果人生是不公平的——努力工作根本不是重點,重點是知道這個世界運(yùn)作的法則。”(And life isn’t fair.So if life isn’t fair–it’s not about working harder,it’s about working the system.)

  這個23歲以前就(算是)白手起家的大富豪說的沒有錯,就像一篇塬出于中國網(wǎng)民的長文《寒門再難出貴子》所說的:

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

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

  談到工程師,你可能以為只要是阿宅又會寫程序,就是程序設(shè)計師了,其實,筆者在這裡工作了幾年后,發(fā)現(xiàn)在硅谷,軟件工程師以等級來說,可以分為以下幾種:

  會寫些code的

  會修別人寫出來的尸體的

  會搞些軟體架構(gòu),又會帶人的,以及最后的

  投入大型ApacheProject開發(fā)的。

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

  所以一旦你踏進(jìn)軟件工程師的領(lǐng)域,你只能咬著牙,一關(guān)關(guān)打上去,這就是你必須面對的偉大航道。

  會寫些code的

  盡管很多人會說念資工系沒有用,或是非資工系也會寫程序等等…,在硅谷這裡,念資工系還是比較吃香,不然你自己去Facebook找人的網(wǎng)頁,SoftwareEngineering部分,看看有幾個職缺不需要BSorMSdegreeinComputerScience?

  (好玩的是,這裡99%的一流公司不會只想要征碩士,跟***那種很假的大公司感覺很不一樣)

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

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

  還有一個很直接的方法確認(rèn)你是不是真正的軟件工程師,你去找一個當(dāng)?shù)氐墨C頭,問他是不是愿意幫你推薦你的履歷,如果他肯的話,你就100%是了。

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

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

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

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

  以現(xiàn)在軟體專案的規(guī)模,你一定要跟人合作,你當(dāng)然可以請寫那段code的人自己去維護(hù)自己寫出來的那段程序碼,但是萬一這個人生病/請假/擺爛/離職了怎麼辦呢?產(chǎn)品與專案還是要繼續(xù)走,于是“會修別人寫出來的尸體的”能力就顯得非常重要了。

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

  會搞些軟體架構(gòu),又會帶人的

  稍微有點sense的軟件工程師就知道“作Amazon”與“做出Amazon網(wǎng)站”的差別,而這差別,正是定義這等級軟件工程師的最大因素。

  (這裡說的Amazon,指的是Amazon購物網(wǎng)站,不是AWS)

  “作Amazon”與“做出Amazon網(wǎng)站”最大的差別在于服務(wù)的規(guī)模(scale),200個用戶跟2,000萬個用戶所需要的科技與演算法完全不一樣。

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

  假設(shè)你目前有1萬個商品,在你有200個用戶時,你只要算200萬次,一臺好一點的機(jī)器可能就可以處理了,但在你有2千萬客戶時,你至少需要算2千萬x1萬=200,000,000,000次,這還不包括接下來排序所需要的運(yùn)算,你要怎麼設(shè)計這個系統(tǒng)?

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


  到目前為至,都還只是“商品推薦系統(tǒng)”而已,更別說其他功能,資料庫的設(shè)計,分散式運(yùn)算的規(guī)劃…等,更何況Amazon的資料量與客戶量都遠(yuǎn)大于此呢!

  除了設(shè)計與實作這些軟體架構(gòu)以外,這類的軟件工程師還要能夠舌戰(zhàn)群雄,通過眾多工程師的質(zhì)疑與考驗與建議后,帶領(lǐng)團(tuán)隊做出最終版本的產(chǎn)品,并進(jìn)行維護(hù)與改良。

  這類工程師常見的抬頭有軟體架構(gòu)師(SoftwareArchitect)工程總監(jiān)(DirectorofEngineering),技術(shù)副總(V.P.ofEngineering),與CTO這幾個。

  其實成為這種工程師最大的難處不在于技術(shù)而已,而是在第一手設(shè)計與執(zhí)行這些大型系統(tǒng)的實戰(zhàn)經(jīng)驗,有了一次架構(gòu)這種等級服務(wù)的經(jīng)驗以后,未來的業(yè)主或是團(tuán)隊才會相信你有這樣的能力,把更多,更大型的專案交在你手上,你也才能以戰(zhàn)養(yǎng)戰(zhàn),在業(yè)界建立起自己的品牌

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

  在大型服務(wù)的公司,待過類似部門。比如說你就在Amazon作過類似的東西,拿這種業(yè)界龍頭的相關(guān)履歷,當(dāng)然很容易在競爭者或是startup種找到掌舵的角色。

  在快速成長的startup中待過,期間協(xié)助建立或是維護(hù)過這種等級的服務(wù)與產(chǎn)品。

  投入大型ApacheProject開發(fā)的

  我知道你很嚮往設(shè)計出python的GuidovanRossum,或是哪天閒閒沒事也能像LinusTorvalds一樣在家裡孵出Linux,但是我并不想討論他們這種神級的語言創(chuàng)造者,因為他們的經(jīng)歷與能力有點難復(fù)製。我想討論的反而是他們的追隨者,那群數(shù)目龐大,但是卻默默把像是Linux與python推向未來的OpenSource社群工程師。

  不知道你有沒有聽過硅谷的秘密工會?作者寫的沒錯,我這個類別就是在聊他們。

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

  盡管理論上OpenSource的專案大家都可以做,但是要讓大家都同意把你的程序碼正式地放進(jìn)專案中,卻需要好大的一番功夫。

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

  “這裡為什麼要這樣寫?你這樣跟我們塬來程序碼的架構(gòu)不搭”

  (老大,我新來的耶XD我哪知道你塬來的架構(gòu)啊?)

  “為什麼不用這個元件,要自干?”

  (因為之前沒有人跟我說啊XD)

  “你的測試單元這樣寫跑太慢了,你換個方式作吧!”

  (那等于是要我拆開來重新作是嗎?XD)

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

  經(jīng)過上面的寒徹骨,你的程序碼終于被接受,成為OpenSource專案的一部分,你也升級成為OpenSource的貢獻(xiàn)者(Contributor/Developer)。

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

  因為專案熱門,塬來貢獻(xiàn)的長老工程師就眾多,幫你Review作品的質(zhì)跟量會比其他OpenSource專案好很多,灌頂機(jī)會大增,練功比較快。

  一旦你成為這些熱門專案的固定貢獻(xiàn)者,甚至被專案中長老們遴選為Commiter(有關(guān)分級請看這裡),你在業(yè)界的名聲自然水漲船高。根據(jù)強(qiáng)者我朋友的不責(zé)任報導(dǎo),很多超級公司找人的時候,都是把相關(guān)Apache專案Developer/Commiter的名單調(diào)出來,從第一個打到最后一個。而一般而言,一個熱門Apache專案的Commiter年薪至少20萬美金。

  當(dāng)然,如果這整個Apache專案根本就是由你發(fā)起的,你的價值會跟這篇同工不同酬的文章所說的一樣,沒有辦法以常理來衡量。

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

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

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

上一頁12全文