當你完全認清程式設計師這個行業,你才能越走越遠

歐陽慍斐發表於2018-09-05

程式設計師是一個具備長久生命力的職業

我大學剛畢業的時候,程式設計師還是一個年輕的職業,那個年代,我們都沒見過35歲以上的程式設計師。很多人告訴我,程式設計師是吃青春飯的,你在國內見過35歲的程式設計師嗎?我說,沒有。

就是嘛,所以要儘早轉行呀……

這種話聽得著實不少,事實上也真的有很多程式設計師早早轉行了,我沒轉不是因為內心強大,而是我喜歡程式設計,儘管我也不小了,以後會怎樣,35歲聽起來像光年一樣的距離,誰會考慮那麼遙遠的事情。所以我什麼都沒想就繼續程式設計了。

看看周圍的朋友,他們要麼在某個技術領域成為行家裡手,要麼在做產品的同時演講佈道,有的設計出了很多人使用的軟體,有的則成為了一個純粹的管理者,經營著上千人的機構。這些人從前是程式設計師,現在也是。

程式設計師是這個時代最好的職業之一,是不是最好,不敢確認,畢竟我沒離開過網際網路行業。不過程式設計師喜歡自嘲倒是真的,甚至以互黑作為生活的樂趣,有時我們也會被別人黑到喜馬拉雅山的高度,但不可否認的是,大部分程式設計師都是在空調房裡敲敲鍵盤就有可能冷不丁改變了世界,並且,大部分時候,我們都讓這個世界變得好了一點點。與很多職業相比,程式設計師的投入產出比都算高的,稍有智力門檻,也沒比其他行業高多少。而這個時代,給了程式設計師們大展巨集圖的機會,給我們足夠的自由度去創造我們想要的東西。

至於傳說中的「程式設計師職業病」,其實和程式設計師這個職業並沒有多大關係,伏案工作的人群大抵如此。越來越多的網際網路公司為員工提供了各種福利,免費的健身房,舒適的桌椅,香濃的咖啡,甚至一些娛樂設施。自己不運動,其實很難怪到這個職業頭上。另外,程式設計師的工作也「並沒有想象的那麼辛苦」,有太多的行業比我們辛苦的多,所以,遇到頭腦清楚邏輯清晰又喜愛計算機並且沒有意向進入其他領域的年輕人,我總是對他們說,來做個程式設計師吧,這是個能讓你的生活變得精彩的職業。

程式設計師不一定要寫一輩子程式

以前人們總是說年齡大了就不要寫程式碼了,或者說寫不動程式碼了。現在多少有點矯枉過正,比如CTO怎麼能不寫程式碼呢,寫程式碼可是一輩子的事呀。在我看來,這個問題根本沒什麼可以爭論的,一個階段一種做法。如果你寫程式碼是最有價值的,就去寫程式碼。如果你做產品是最有價值的,就去做產品。如果你去管理公司是最有價值的,就去管理公司。

前一陣子看過一篇文章「祖克伯開發筆記:打造Jarvis的日子」,祖克伯在文章裡寫到:

2016年我給自己制定了一個挑戰:打造一個像鋼鐵俠裡Jarvis那樣的家庭AI助手。

在這一里裡,我打造了一個可以通過手機和電腦進行對話的AI系統。它能夠控制我家裡的燈光,溫度,電器,音樂和安防系統,而且這個AI還能瞭解我的品味和習慣,可以學習新的詞彙和概念,甚至可以逗我的女兒Max開心.Jarvis是由Python,PHP和Objective-C編寫的,運用了包括自然語言處理,語音識別,面部識別以及強化學習在內的人工智慧技術。

祖克伯是為了程式設計而程式設計麼,顯然不是。除了保持技術的敏感度,他主要是為了瞭解人工智慧發展的現狀。通過挑戰熟悉Facebook的工程師們使用的內部技術,同時瞭解智慧家居。而且,這些工作僅僅佔用了他很少一部分時間。

實際情況也是這樣,與我一起成長起來的80後程式設計師,差不多有超過一半,他們的工作重心已經不再是編碼,而是其他工作事務,另外一半則依然以程式設計為主要任務。這兩種狀態,都是很好的存在。

程式設計師職業生涯的關鍵點是哪些?

以我並不豐富的程式設計師閱歷來看,入行三到五年的經歷對程式設計師以後的職業生涯有非常重要的作用。網際網路時代學習環境開放,資料浩如煙海,很多大學生在走出學校大門的時候,很可能在某項專業技能上已經達到了很高的水準,但是這三到五年的探索,依然是不可或缺的。

很多人喜歡制定學習計劃,但這些計劃大都無法執行下去。不是計劃出了問題,而是人學習和提升的方式很難按部就班,很多時候我們都是在摸索前行。就像你今天按計劃要耕完一畝田,作業進行到一半的時候,你發現一塊土質的異常,於是深挖下去,用鐮刀割去雜草,用鐵鍬剷除泥土,用鑽頭鑽出深洞,最後發現了一口油井。如果你按照計劃耕完這一畝田,可能永遠發現不了那口井。

我相信每個人身體裡都有某種特質,這種特質讓你在某個領域取得成就的可能性遠遠大於其他,這種特質也能讓你異於他人。但是,人們並不是生來就知道自己擅長幹什麼的,需要花時間去尋找,找到它,然後去做自己最擅長的事情,這對你漫長的職業生涯是一筆巨大的財富。

需要五年這麼久的時間嗎?依我個人的經歷,恐怕更長也說不定。無論程式設計師也好,軟體工程師也罷,叫著簡單,領域知識卻是浩如煙海。進入現代網際網路階段,程式設計師的領域細分到了令人髮指的程度,比如XX語言工程師,前端工程師,後端工程師,架構師,大資料工程師,安全工程師,運維工程師,移動開發工程師,DBA等等,叫法繁複,甚至職能重疊,這些角色最初都叫做程式設計師,最終他們像一棵大樹,枝條粗壯,蜿蜒生長,然後在樹冠分開,並結出了各種各樣的果實。同時,每個細分的領域又會衍生出浩瀚的領域知識。

比如程式語言,常用的程式語言就有幾十種,靜態語言,動態語言,指令碼語言,函數語言程式設計,物件導向程式設計,程式式程式設計等等,從平臺角度,Java VM上有Java,Scala,Groovy ,Clojure,Jython,Ceylon等,。Net平臺上有C#,J#,F#,VB.Net,VC#,ASP.Net,移動平臺有iOS,Android,Windows Phone ……

即便我們把目光聚焦在一門語言或技術上,Java,你也不可能僅僅掌握它的語法特性和函式庫,然後寫寫業務表單和增加改查就完了.Java的虛擬機器,效能,併發程式設計,Jit技術,垃圾收集,叢集,分散式,異常,日誌服務,還有大量的Java平臺開源專案,都需要深入瞭解。除此之外,一些資料結構和演算法也是程式設計師們應該掌握的內容,比如棧,佇列,連結串列,二叉樹,紅黑樹,B樹,雜湊表,排序演算法,查詢演算法,最小路徑,最小生成樹等等……

這麼看來,五年的時間並不長是不是?

當然,還有一種可能,你花費了五年的時間,發現自己並不適合做程式設計師,雖然這聽起來有點悲哀,但也不失為一件好事,因為你還有時間轉型啊。程式設計師幾乎可以轉型為其他任何角色,反過來卻很難。我們聽說過很多優秀的產品經理,創業者,管理者最初都是程式設計師,卻很少聽說哪個頂尖的程式設計師是從產品經理轉過來的,有嗎?反正我不知道。

程式設計師如何做出好產品?

在很多人眼中,產品經理做需求,程式設計師做實現,似乎是一對冤家對頭,比如最新的段子是這樣的:產品經理失蹤了,程式設計師第一時間到警察局報警警察對程式設計師說:你先冷靜一下,你這樣一直笑沒辦法做筆錄。

其實根本不是這樣,一個好的產品,一定是程式設計師和產品經理一起努力協作的結果,甚至,很多技術人員本身就是這個產品的產品經理,有的即負責技術又設計產品,有的乾脆是從程式設計師轉成了產品經理。

張小龍在剛併入騰訊的時候負責QQ郵箱,那時候他覺得自己應該做一個管理者,產品的事情讓團隊的人去做就行了。“說老實話,我個人沒有太關注它的體驗,幾乎很少參與到產品的設計中,結果出了大問題」。之後張小龍徹底改變風格,重回一線。「從極簡版開始,我真正投入去做一些我自己掌握的產品體驗,我怎麼說就怎麼做,任何一個元素要改都必須得到我的同意才行,我會全程參與到這個產品的每一個功能體驗中」。最後始有微信。

據說張小龍是那個時代南方最好的程式設計師。

馬化騰對技術和產品的重視程度也由來已久,他在2008年的公開演講中就說:產品和服務是需要大量技術背景支援的,我們希望的產品經理是非常資深的,最好是由做過前端,後端開發的技術研發人員晉升而來。好的產品應該交到一個有技術能力,有經驗的人員手上,這樣會讓大家更加放心。如果產品經理不合格,讓很多兄弟陪著幹,結果發現方向錯誤,這是非常浪費和挫傷團隊士氣的。

如果你是個程式設計師,如果你熱愛你的正在研發的產品,一定要參與到產品的方方面面中來,徹底瞭解產品的邏輯,體驗,互動和使用者心理,每一次版本釋出後去觀察使用者的反饋,收集產品資料,與產品經理反覆探討和確認每一個細節。

事實上,無論產品經理和設計師做到何等的事無鉅細,最終軟體是由程式設計師寫出來的,這個產品必定天然攜帶了這些程式設計師的特質和元素,如果程式設計師在每一行程式碼中傾注了自己的情感,這個產品就是個有情感會呼吸的產品。如果程式設計師只是實現產品的工具,那做出來的東西也是沒有生氣的,蒼白的。

只有程式設計師和產品經理同時全情投入,才有可能做出最好的產品。

6

專業性很重要,但也別太「專」了

程式設計師一看就是個很專業的工種,但是正如前面所述,這個領域的技術用浩如煙海來形容豪不為過,我們窮盡一生也無法掌握其萬分之一。人們常說先做專才,再做通才,也就是所謂的T字型人才,既有某個領域的專業知識,同時知識技能廣泛,為人處世,大開大合。古代開國皇帝大抵都是這種,雄才大略又武藝高強,上馬砍人,下馬治國,一通百通。

所以程式設計師必須首先具備專業技能,才能在這個殘酷的領域裡存活下來,不要沒幹兩年就想著去管理,拋棄專業知識。翻一翻網際網路招聘職位列表就知道了,一百條裡面99條是各種各樣的工程師,好容易有一條是管理性質的,一看是總經理,您能勝任嗎?

所以,專業技能是需要優先考慮的,等你真正成了技術大拿,自然知道怎麼去擴充套件橫向知識。

但是你也別太專了,以至於成了偏門技術。我有個朋友一直在國外生活,他的技術棧就是大型機 – MainFrame,每天和JCL(Job Control Language),COBOL等技術打交道,工作機會不多,但這個專業的人員更少。找工作倒是不難,但是看不到上升的空間,每次換工作都得換城市,為了一個更好的職位,甚至需要從美國輾轉到日本,每次被折騰的死去活來,換方向代價有太大,薪水還會降很多,進退維谷。

選技術方向,不要讓自己處於這種境地。

7

程式設計師的跳槽?

跳槽也是一種選擇,關鍵是要找到自己的價值。談到價值,大家就會想到財富,畢竟每次跳槽大家都希望能掙到更多的錢。憑藉工資能夠完成足夠的財富積累嗎?不一定。

財富積累應該是階段性的,而不是線性的。比如你在很長的階段裡,薪水一直徘徊在兩萬左右,突然有一天,到了一個不可預知的拐點,月入十萬了(注意不是月薪),又或者,股權兌現了,又或者,家裡拆遷了,等等。總之,財富的積累不是一點點漲上去的,你可能在很短時間內積累的財富遠遠超過之前積累的總和,或者說,財富積累也符合二八原則。當然,你也可以等著薪水一點點的漲上去,那樣的話,就是說,嗯,基本上最終你也不會有什麼財富。

無論通過哪種方式,跟隨公司上市也好,自己能力大幅提升年薪百萬也好,投資也好,創業也好,總之要找到或者碰到這個拐點,堅持,勤奮,堅定,都是不可或缺的因素,當然,運氣有時候更為重要一些。無論如何,最重要的是你得一直往前走。

跳槽是往前走的方式之一,跳的過程中,也可能遇到拐點。舉個例子,前阿里的王勇睿老師,2010年面試外企失敗(原因未知),退而求其次進了阿里巴巴,結果四年後阿里咔就上市了,王老師富廢,結果還是閒不住,又去創業了。舉個反面的例子,杭州二爺邱嶽,2008年加入阿里,幹得風生水起, 2012年不知道什麼原因就從阿里巴巴跳槽了,2016年不知道什麼原因就失業了……

之所以舉了兩個好朋友的例子,意思就是,跳槽的變數也挺大的,有時候做了有價值的事,獲得了應得的財富,有時候則只取其一,或者兩手空空。

每個上過班的人都知道,在同一個公司加薪實在是太慢了。為什麼會這樣?因為你入職的那一天,公司人力部門是以當時的市場價值評估確定你的薪酬的,隨後的日子裡,如果公司正常發展,加薪升職都要遵循公司的內部通道和規則,如果這個規則趕不上市場薪酬的漲幅(就像最近幾年),那你幹了三年,薪水還不如同等水平的新員工就是很正常的情況了。

知道了這個真相後怎麼辦?去判斷短期利益和長期利益。無論個人財富還是知識積累,從長遠來看,能夠讓你獲得自由的,都是指數級別的增長,也就是那個拐點,而不是你的工資。一個人一輩子掙到手的工資其實是可以一眼看穿的。而可以看穿未來的事情,往往比較無聊。

所以決定離開一個公司或加入一個新公司,問自己幾個問題就好了:????公司是不是在成長你自己能不能獲得成長公司的成長和自己有沒有關係乾的開不開心如果這幾個問題都是肯定的回答,那麼就該留下共同成長。反之就該離開。如果2:2呢?這就需要你去判斷了。

程式設計師如何實現個人價值?還是得踏踏實實的寫好每一行程式碼,做好每一個產品,然後等待時間的力量,萬一是大器晚紅呢?

感謝

歡迎工作一到十年的Java工程師朋友們加入Java進階架構:878249276,

點選連結加入學習:https://jq.qq.com/?_wv=1027&k=5SG5BWn

本群提供免費的學習指導 架構資料 以及免費的解答

不懂得問題都可以在本群提出來 之後還會有職業生涯規劃以及面試指導


相關文章