作者王爭,前 Google 工程師,《資料結構與演算法之美》《設計模式之美》專欄作者

大學就像一個籠子,跑得快的人拖著籠子跑,跑得慢的人被籠子拖著跑,他們之間最大的差距,頂多只有籠子的長度那麼大。但等到一畢業,籠門一開啟 ,跑得快的人很快就把跑得慢的遠遠甩在後面。有人不到30歲就升到了阿里P8,有人35歲了還為拿個P7 Offer在拼命。

為什麼幾乎同樣的起點、差不多的資質,有些人在職場發展得這麼好,一路順風順水,而有些人卻總是覺得懷才不遇,領導不行?今天,我們就來聊一聊,程式設計師怎麼才能讓自己走得更高、更遠?

話不多說,讓我們正式開始今天的內容吧!

技術、業務、能力是立命之本

我覺得,不管哪個行業,混得好的人都要有兩把刷子。對於程式設計師來說,我覺得這兩把刷子包括技術、業務和能力這三方面。很多人擔心出現35歲中年危機,覺得自己能幹的事,剛畢業一兩年的人也能幹得了。我覺得這主要還是因為沒有在這三個方面積累出競爭壁壘。

我覺得,技術方面的競爭壁壘主要來自,

在一個細分技術領域長期、深入的積累。

如果要想在技術上形成壁壘,我們就要從事一些有技術難度、技術挑戰的崗位,比如基礎架構、中介軟體、資料庫等偏底層的開發,又或者是人工智慧演算法等入行門檻比較高的細分領域。在這些領域,你需要較長時間的經驗積累,才能成為這一領域的專家,別人無法在短期內超過你,這就是技術競爭壁壘。

對於大部分業務開發工程師來說,很多人平時都是使用框架、工具,翻譯業務程式碼,工作沒有太多技術含量,技術上可能很難形成競爭壁壘。這個時候,你也不用苦惱,我們在業務上也同樣可以形成競爭壁壘。

實際上,技術驅動的公司很少,即便像Google這樣公認的技術驅動的公司,裡面90%的專案都是業務、產品驅動的。真正高精尖的技術也只集中在某一小撮專案中。你可能會說,Google的很多產品的使用者、訪問量都很高,這些高效能、高併發的要求不是很考驗程式設計師的技術嗎?實際上,這些有挑戰的技術問題,都是比較有共性的,大部分都透過底層系統解決了,比如MapReduce、BigTable、GFS等。業務研發工程師只需要恰當地使用這些高精尖的系統來實現業務就可以了。

在業務驅動的專案中,特別是一些業務比較複雜的下專案,比如,金融系統、銀行系統、財務系統、清結算系統、物流系統等,我們還可以積累一些業務壁壘。如果你之前的工作都是從事偏向業務系統的開發,靠技術只能面到阿里P7這個層級。如果想面到阿里的P8、P9,靠的就不僅僅只是技術了,還需要對某個業務的深入積累。實際上,很多領導之所以能做領導,不是技術牛逼,而是對業務熟悉。

不過,並不是所有的業務系統開發,業務都有足夠的複雜度,可以讓你積累競爭壁壘。對於技術沒有太大挑戰,業務也不復雜的專案開發,我們可以多積累自己的能力。

這裡所說的能力,指的是成事能力、解決問題的能力。實際上,很多問題的解決,即便是技術問題的解決,靠的都不是技術,而是一個人最基本的解決問題的能力。這其中就包括分析總結能力、邏輯思維能力、溝通協調能力、自我驅動能力等等。

比起固定的技術和業務知識,這種成事能力、解決問題的能力,我覺得對於混職場來說可能更加重要。在職場中,職位越高,這種成事能力就越重要,畢竟企業最終還是看結果的,而不是看你技術有多好。

程式設計師怎麼才能讓自己走得更高、更遠?

學歷、專案、履歷是入場門票

經常聽人吐槽,面試造火箭,入職擰螺絲。也經常聽人抱怨,有些公司太看重學歷,因為學歷拒掉了我,卻招了一個技術比我差的前同事,僅僅因為他是985名校畢業。

現在,學IT的人越來越多,招聘市場也逐漸從賣家市場變成了買家市場。很多公司開始提高招人要求,不僅加大面試難度,為了提高招聘效率,還會在學歷、過往是否有大公司經歷等方面,先過濾掉一批候選人。

你可能會說,學歷高的不一定技術好,學歷低的也有技術很好的。你說得沒錯。但一般來講,雖然都說做技術學歷不重要,但好學校的學生對計算機基礎知識掌握得更好,學習能力、邏輯思維更強,相對要聰明一些,而且在工作中,我們也發現,成績好的同學往往在工作中表現出很強的執行力和快速交付能力,在工作中的表現普遍也更優秀。站在公司整體招聘的角度來說,透過學歷來過濾候選人是一個比較高效的手段,畢竟公司也不在乎因此漏掉一兩個優秀的候選人,或者錯招一兩個不優秀的候選人。

實際上,比起短短的1個小時的面試,我個人也更傾向於透過學歷、專案(專案經歷是否有技術難度)、履歷(是否有知名公司的工作經歷、以及職位高低),這些過去的能夠證明能力的經歷來判斷一個候選人。特別是對於一些中高階的崗位,好的學歷、專案、履歷基本上有碾壓性的優勢。我自己做面試官多年,基本上在看完候選人的簡歷之後,對符不符合我們招聘要求,心裡就有個八九不離十的判斷了。在面試開始的前10分鐘,我基本上已經決定要不要錄用他了。後面的面試只是為了進一步證實自己剛剛的決定而已。

如果說技術、業務、能力是程式設計師的立命之本,它們決定了你能不能在職場這場比賽中勝出,那學歷、專案、履歷就是入場門票,決定了你可以選擇哪個比賽賽道,是Google、Facebook,還是BAT,又或者是完全不知名的小公司。

所以,在夯實技術、業務、能力的同時,你也要學會“面向簡歷打工”“面向跳槽打工”,提前做一些職業規劃,把自己的履歷弄好看點,比如,學歷太低的就去考個好點的學歷,在公司內部努力去選擇做一些有技術含量的專案,跳槽去一些知名點的網際網路公司等等。

不要讓職場軟技能成為短板

在職場中,我常常聽到有人抱怨說,旁邊的同事明明技術一般,卻升到很高的職位,而自己技術很好,卻發展一般。實際上,懷才不遇大多數都是因為忽視了職場軟技能。這些人的特點大多是性格耿直、脾氣暴躁、眼裡容不了沙子、鬥天鬥地鬥空氣。而且,大部分情況下,他們都會覺得自己做得很好,領導不識貨,同事都沒他強。

職場不是學校,影響你向上發展的因素很多,肯定不是單靠技術,所以,學生思維要不得。在上學的時候,學得好壞,一份試卷見分曉。要想成績好,悶頭學就行了,你也不需要什麼團隊合作。但是,畢業之後,技術的好壞、程式碼寫得好壞、活幹得好壞,就沒有那麼容易客觀評價、量化評價了。所以,這就會出現你自己覺得工作做得很好,而領導卻不這麼認為的情況。

而且,技術好其實並不代表貢獻多。我也見過很多技術好的人,比較愛自嗨,成天鼓搗些高精尖的技術。實際上,不管是從短期還是長期看,這些技術都沒有給團隊、公司帶來收益。當然,我也並不是完全摒棄個人成長,讓你完全奉獻給公司。我只是覺得,作為員工,要學會跟公司共同成長。只有你的成長為公司的成長貢獻了力量,為公司、為領導解決了問題,公司才願意為你的付出買單,你才有升職加薪的機會。

總的來講,要想職場混得好,一些必須的溝通、協作、總結匯報等軟技能還是不能忽視的,當然,我也不是推崇,純靠“耍手段”上位。我只是覺得,這方面起碼不能成為你的短板,不要讓這些非技術、非能力的因素,阻礙了你職場的發展。

作為“前浪”的你,還有哪些經驗、教訓,可以分享給“後浪”,讓“後浪”在職場發展上少走些彎路呢?又或者作為“後浪”的你,有哪些職場的疑惑、迷茫,想向“前浪”請教呢?

可以在評論區說一說。如果有收穫,也歡迎你把本篇內容分享給你的朋友。

本文摘自專欄《設計模式之美》

程式設計師怎麼才能讓自己走得更高、更遠?