【轉】程序員的職業生涯該如何過——前錘子科技研發總監池建強
http://www.jizhuomi.com/career/701.html
1、寫在前面
加入極客邦的第一天就被拉到了「大咖說」的現場,這也是我始料未及的事情。從錘子科技正式離職之後,我享受了一個短暫的假期,隨即投入了下一個戰場,極客邦科技和內容服務領域。
很多人都在問我,為什麽要離開錘子科技加入極客邦科技,其實這就是一個簡單的職業選擇。人生在世,一路向前,總會遇到各種各樣的選擇,有時候是被動選擇,有時候是主動選擇,僅此而已。
錘子科技是一家獨特的,有趣的公司,由於種種原因,它的成長之路比其他創業公司走的更為艱難,不過錘科創造的產品和秉持的價值觀我是很認可的。我在錘子科技期間認識了一大批優秀的、有趣的、才華橫溢的夥伴,他們的技能棧分布在各個領域,這對我來說是一筆巨大的財富。學無止境。
在錘子科技我更多是負責產品的研發和實現,並主導一些底層的技術架構和技術產品,在極客邦科技我可以有更大的自由度,全面負責公司的產品和研發工作。尤其內容產品,一直是我的興趣所在。這幾年我一直在尋找技術和產品平衡點,在知識經濟和內容服務層面做了很多嘗試,而極客邦聚合了人、技術和內容,對我來說,這是一個非常好的平臺。所有就有了「從錘子到極客邦:我的職業生涯巡禮」。
說是我的職業生涯,其實談的是程序員這個群體以及我對近二十年工作經歷的思考。題目起名為「巡禮」,多少有點回顧的意思。我喜愛的作家村上春樹有一本小說叫《沒有色彩的多崎作和他的巡禮之年》,其中的巡禮就有探究過去,只面未來的意味。
巡禮之年是由三組鋼琴獨奏組曲組成的一套專輯,由法蘭茲·李斯特(Franz Liszt)作曲。一般被認為是李斯特最傑出的作品,為李斯特音樂風格的集大成之作。第三組曲特別被認為代表了李斯特的晚期風格。
所以,今天我會和大家講述程序員成長的故事和一些思考,包括程序員這個職業的生命力,要不要一直編程,如何尋找自己的特質,程序員和產品的關系,專業的選擇,職業的選擇,等等。
2、程序員是一個具備長久生命力的職業
我大學剛畢業的時候,程序員還是一個年輕的職業,那個年代,我們都沒見過35歲以上的程序員。很多人告訴我,程序員是吃青春飯的,你在國內見過35歲的程序員嗎?我說,沒有。
就是嘛,所以要盡早轉行呀……
這種話聽得著實不少,事實上也真的有很多程序員早早轉行了,我沒轉不是因為內心強大,而是比較單純。35歲,聽起來像光年一樣的距離,誰會考慮那麽遙遠的事情。所以我什麽都沒想就繼續編程了。
35歲轉瞬即至,除了過了個普通的生日之外,什麽都沒有發生。那一年我依然聽著音樂編寫程序,看看周圍的朋友,他們要麽在某個技術領域成為行家裏手,要麽在做產品的同時演講布道,有的設計出了很多人使用的軟件,有的則成為了一個純粹的管理者,經營著上千人的機構。這些人從前是程序員,現在也是。
程序員是這個時代最好的職業之一,是不是最好,不敢確認,畢竟我沒離開過互聯網行業。不過程序員喜歡自嘲倒是真的,甚至以互黑作為生活的樂趣,有時我們也會被別人黑到喜馬拉雅山的高度,但不可否認的是,大部分程序員都是在空調房裏敲敲鍵盤就有可能冷不丁改變了世界,並且,大部分時候,我們都讓這個世界變得好了一點點。與很多職業相比,程序員的投入產出比都算高的,稍有智力門檻,也沒比其他行業高多少。而這個時代,給了程序員們大展宏圖的機會,給我們足夠的自由度去創造我們想要的東西。
至於傳說中的「程序員職業病」,其實和程序員這個職業並沒有多大關系,伏案工作的人群大抵如此。越來越多的互聯網公司為員工提供了各種福利,免費的健身房,舒適的桌椅,香濃的咖啡,甚至一些娛樂設施。自己不運動,其實很難怪到這個職業頭上。另外,程序員的工作也「並沒有想象的那麽辛苦」,有太多的行業比我們辛苦的多,所以,遇到頭腦清楚邏輯清晰又喜愛計算機並且沒有意向進入其他領域的年輕人,我總是對他們說,來做個程序員吧,這是個能讓你的生活變得精彩的職業。
3、程序員不一定要寫一輩子程序
以前人們總是說年齡大了就不要寫代碼了,或者說寫不動代碼了。現在多少有點矯枉過正,比如 CTO 怎麽能不寫代碼呢,寫代碼可是一輩子的事呀。在我看來,這個問題根本沒什麽可以爭論的,一個階段一種做法。如果你寫代碼是最有價值的,就去寫代碼。如果你做產品是最有價值的,就去做產品。如果你去管理公司是最有價值的,就去管理公司。前一陣子看過一篇文章「紮克伯格開發筆記:打造 Jarvis 的日子」,紮克伯格在文章裏寫到:
2016年我給自己制定了一個挑戰:打造一個像鋼鐵俠裏 Jarvis 那樣的家庭 AI 助手。
在這一年裏,我打造了一個可以通過手機和電腦進行對話的 AI 系統。它能夠控制我家裏的燈光、溫度、電器、音樂和安防系統,而且這個 AI 還能了解我的品味和習慣,可以學習新的詞匯和概念,甚至可以逗我的女兒 Max 開心。Jarvis 是由 Python、PHP 和 Objective-C 編寫的,運用了包括自然語言處理、語音識別、面部識別以及強化學習在內的人工智能技術。
紮克伯格是為了編程而編程麽,顯然不是。除了保持技術的敏感度,他主要是為了了解人工智能發展的現狀。通過挑戰熟悉 Facebook 的工程師們使用的內部技術,同時了解智能家居。而且,這些工作僅僅占用了他很少一部分時間。
實際情況也是這樣,與我一起成長起來的七零後程序員,差不多有超過一半,他們的工作重心已經不再是編碼,而是其他工作事務,另外一半則依然以編程為主要任務。這兩種狀態,都是很好的存在。
4、程序員職業生涯的關鍵點是哪些?
以我並不豐富的程序員閱歷來看,入行三到五年的經歷對程序員以後的職業生涯有非常重要的作用。互聯網時代學習環境開放,資料浩如煙海,很多大學生在走出學校大門的時候,很可能在某項專業技能上已經達到了很高的水準,但是這三到五年的探索,依然是不可或缺的。
很多人喜歡制定學習計劃,但這些計劃大都無法執行下去。不是計劃出了問題,而是人學習和提升的方式很難按部就班,很多時候我們都是在摸索前行。就像你今天按計劃要耕完一畝田,作業進行到一半的時候,你發現一塊土質的異常,於是深挖下去,用鐮刀割去雜草,用鐵鍬鏟除泥土,用鉆頭鉆出深洞,最後發現了一口油井。如果你按照計劃耕完這一畝田,可能永遠發現不了那口井。
我相信每個人身體裏都有某種特質,這種特質讓你在某個領域取得成就的可能性遠遠大於其他,這種特質也能讓你異於他人。但是,人們並不是生來就知道自己擅長幹什麽的,需要花時間去尋找,找到它,然後去做自己最擅長的事情,這對你漫長的職業生涯是一筆巨大的財富。
需要五年這麽久的時間嗎?依我個人的經歷,恐怕更長也說不定。無論程序員也好,軟件工程師也罷,叫著簡單,領域知識卻是浩如煙海。進入現代互聯網階段,程序員的領域細分到了令人發指的程度,比如 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 樹,散列表,排序算法,查找算法,最小路徑,最小生成樹等等……
這麽看來,五年的時間並不長是不是?
當然,還有一種可能,你花費了五年的時間,發現自己並不適合做程序員,雖然這聽起來有點悲哀,但也不失為一件好事,因為你還有時間轉型啊。程序員幾乎可以轉型為其他任何角色,反過來卻很難。我們聽說過很多優秀的產品經理,創業者,管理者最初都是程序員,卻很少聽說哪個頂尖的程序員是從產品經理轉過來的,有嗎?反正我不知道。
5、程序員如何做出好產品?
在很多人眼中,產品經理做需求,程序員做實現,似乎是一對冤家對頭,比如最新的段子是這樣的:產品經理失蹤了,程序員第一時間到警察局報警。警察對程序員說:你先冷靜一下,你這樣一直笑沒辦法做筆錄。
其實根本不是這樣,一個好的產品,一定是程序員和產品經理一起努力協作的結果,甚至,很多技術人員本身就是這個產品的產品經理,有的即負責技術又設計產品,有的幹脆是從程序員轉成了產品經理。
張小龍在剛並入騰訊的時候負責 QQ 郵箱,那時候他覺得自己應該做一個管理者,產品的事情讓團隊的人去做就行了。「說老實話,我個人沒有太關註它的體驗,幾乎很少參與到產品的設計中,結果出了大問題」。之後張小龍徹底改變風格,重回一線。「從極簡版開始,我真正投入去做一些我自己掌握的產品體驗,我怎麽說就怎麽做,任何一個元素要改都必須得到我的同意才行,我會全程參與到這個產品的每一個功能體驗中」。最後始有微信。
據說張小龍是那個時代南方最好的程序員。
馬化騰對技術和產品的重視程度也由來已久,他在2008年的公開演講中就說:產品和服務是需要大量技術背景支持的,我們希望的產品經理是非常資深的,最好是由做過前端、後端開發的技術研發人員晉升而來。好的產品應該交到一個有技術能力、有經驗的人員手上,這樣會讓大家更加放心。如果產品經理不合格,讓很多兄弟陪著幹,結果發現方向錯誤,這是非常浪費和挫傷團隊士氣的。
如果你是個程序員,如果你熱愛你的正在研發的產品,一定要參與到產品的方方面面中來,徹底了解產品的邏輯、體驗、交互和用戶心理,每一次版本發布後去觀察用戶的反饋,收集產品數據,與產品經理反復探討和確認每一個細節。
事實上,無論產品經理和設計師做到何等的事無巨細,最終軟件是由程序員寫出來的,這個產品必定天然攜帶了這些程序員的特質和元素,如果程序員在每一行代碼中傾註了自己的情感,這個產品就是個有情感會呼吸的產品。如果程序員只是實現產品的工具,那做出來的東西也是沒有生氣的,蒼白的。
只有程序員和產品經理同時全情投入,才有可能做出最好的產品。
6、專業性很重要,但也別太「專」了
程序員一看就是個很專業的工種,但是正如前面所述,這個領域的技術用浩如煙海來形容豪不為過,我們窮盡一生也無法掌握其萬分之一。人們常說先做專才,再做通才,也就是所謂的 T 字型人才,既有某個領域的專業知識,同時知識技能廣泛,為人處世,大開大合。古代開國皇帝大抵都是這種,雄才大略又武藝高強,上馬砍人,下馬治國,一通百通。
所以程序員必須首先具備專業技能,才能在這個殘酷的領域裏存活下來,不要沒幹兩年就想著去管理,拋棄專業知識。翻一翻互聯網招聘職位列表就知道了,一百條裏面99條是各種各樣的工程師,好容易有一條是管理性質的,一看是總經理,您能勝任嗎?
所以,專業技能是需要優先考慮的,等你真正成了技術大拿,自然知道怎麽去擴展橫向知識。
但是您也別太專了,以至於成了偏門技術。我有個朋友一直在國外生活,他的技術棧就是大型機 —— MainFrame,每天和 JCL(Job Control Language)、COBOL 等技術打交道,工作機會不多,但這個專業的人員更少。找工作倒是不難,但是看不到上升的空間,每次換工作都得換城市,為了一個更好的職位,甚至需要從美國輾轉到日本,每次被折騰的死去活來,換方向代價有太大,薪水還會降很多,進退維谷。
選技術方向,不要讓自己處於這種境地。
7、程序員的跳槽?
跳槽也是一種選擇,關鍵是要找到自己的價值。談到價值,大家就會想到財富,畢竟每次跳槽大家都希望能掙到更多的錢。憑借工資能夠完成足夠的財富積累嗎?不一定。
財富積累應該是階段性的,而不是線性的。比如你在很長的階段裏,薪水一直徘徊在兩萬左右,突然有一天,到了一個不可預知的拐點,月入十萬了(註意不是月薪),又或者,股權兌現了,又或者,家裏拆遷了,等等。總之,財富的積累不是一點點漲上去的,你可能在很短時間內積累的財富遠遠超過之前積累的總和,或者說,財富積累也符合二八原則。當然,你也可以等著薪水一點點的漲上去,那樣的話,就是說,嗯,基本上最終你也不會有什麽財富。
無論通過哪種方式,跟隨公司上市也好,自己能力大幅提升年薪百萬也好,投資也好,創業也好,總之要找到或者碰到這個拐點,堅持、勤奮、堅定,都是不可或缺的因素,當然,運氣有時候更為重要一些。無論如何,最重要的是你得一直往前走。
跳槽是往前走的方式之一,跳的過程中,也可能遇到拐點。舉個例子,前阿裏的王勇睿老師,2010 年面試外企失敗(原因未知),退而求其次進了阿裏巴巴,結果四年後阿裏哢就上市了,王老師富廢,結果還是閑不住,又去創業了。舉個反面的例子,杭州二爺邱嶽,2008 年加入阿裏,幹得風生水起,2012 年不知道什麽原因就從阿裏巴巴跳槽了,2016 年不知道什麽原因就失業了……
之所以舉了兩個好朋友的例子,意思就是,跳槽的變數也挺大的,有時候做了有價值的事,獲得了應得的財富,有時候則只取其一,或者兩手空空。
每個上過班的人都知道,在同一個公司加薪實在是太慢了。為什麽會這樣?因為你入職的那一天,公司人力部門是以當時的市場價值評估確定你的薪酬的,隨後的日子裏,如果公司正常發展,加薪升職都要遵循公司的內部通道和規則,如果這個規則趕不上市場薪酬的漲幅(就像最近幾年),那你幹了三年,薪水還不如同等水平的新員工就是很正常的情況了。
知道了這個真相後怎麽辦?去判斷短期利益和長期利益。無論個人財富還是知識積累,從長遠來看,能夠讓你獲得自由的,都是指數級別的增長,也就是那個拐點,而不是你的工資。一個人一輩子掙到手的工資其實是可以一眼看穿的。而可以看穿未來的事情,往往比較無聊。
所以決定離開一個公司或加入一個新公司,問自己幾個問題就好了:公司是不是在成長?你自己能不能獲得成長?公司的成長和自己有沒有關系?幹的開不開心?如果這幾個問題都是肯定的回答,那麽就該留下共同成長。反之就該離開。如果 2:2 呢?這就需要你去判斷了。
程序員如何實現個人價值?還是得踏踏實實的寫好每一行代碼,做好每一個產品,然後等待時間的力量,萬一是大器晚紅呢?
【轉】程序員的職業生涯該如何過——前錘子科技研發總監池建強