[一個程序員的成長之路] 共勉

語言: CN / TW / HK

偶爾間看到了一篇文章,應該是好幾年前的了,主要説的是前端工程師的職業發展,看完感觸頗多,整理出來分享給大家,共勉

文章出處

開篇

大家好,我是雲龍,從2016年3月份開始,我參與到全民直播這個創業項目中,這兩年一直在上海。關於我自己的成長曆程,一直都很想找個時間跟前端的開發者們分享一下。通過剖析別人,也可以總結自己。我很害怕把這個主題講的跟成功學一樣,其實CTO這個職位現在多少有點“爛大街”,不算是什麼成功,僅供參考。

我是2010年畢業的,剛畢業即加入百度,當年我畢業的時候同一批入職的人後來成立一個微信羣,那個羣在8年後的今天,我們還會一起扯皮閒聊,分享彼此的際遇。我發現它可以作為參考——8年前一羣有着相同能力,相同起點的人,在8年之間因為做出不同的選擇,最後達成了不同的人生。有的創業,有的在大公司做高管,有的炒比特幣財富自由。參考他們的選擇會讓你有一些感悟: “如果當初我選擇了那樣,我現在會怎麼樣”。我現在經歷了職業生涯8年的時間,也想把自己的經歷作為一個案例,分享給大家。

在講之前,先問一下在座的同學工作3年以下的舉手。。。。emmm,剩下的都是三年以上的咯?我看了一下,比例差不多一半一半。

我面試過許多前端工程師,發現大家在工作了3-4年的時候會遇到一個迷茫期,我問他們你們接下來想做什麼,大多數人回答説想做一個開源項目,並且推廣開來,成為前端“網紅”,更長遠的職業發展規劃往往考慮的很少。

今天,我希望把自己的工作經歷完全拆解開呈現在大家面前,作為一個案例解答有關職業發展的困擾。

程序員的中年危機。

我今年33歲,雖然有技術傍身,但是難免會有一些焦慮,這種焦慮來自對自己的能力質疑。在大公司的那些年,背靠大平台,做出的成績80%是平台賦予我的,它有健全的體系,有優秀的同事,有完善的職級制度,還有優厚的薪資待遇。你在這樣舒適的環境下做那麼一小塊事情,如果有一天你發現你這20%可以被替代的時候,這家公司會怎麼思考?你有很多股票,開很高的工資,對於公司來説,你的成本很高,在新人的推動下,你會產生一種可被替代的壓力,我大概在28歲,29歲技術水平還在上升期的時候就有這種焦慮。

在大公司那些年,我感覺自己還像一個沒畢業的學生,始終沒有脱離“學生氣”,無論説話做事都有這種感覺。其次技術的更新迭代速度特別快,尤其是前端領域,你會發現很少有能真正沉澱下來的東西。第三個焦慮點就是關於企業如何對待35歲以上員工,我當時在百度的時候團隊有一個非常厲害的工程師,他在2010年技術職級很高,但技術思維還停留在上一個時代,隨着技術的發展,漸漸不能指引團隊進步,那個過程比較艱難,對我觸動很大。最後一點,就是隨着年齡的增長,選擇的成本會越來越高,你會有家庭,即便公司覺得你沒有價值,你也不能走了,走不動了。這些觸動了我,開始要去思考。

我們做技術,尤其是前端,很多時候我們做出的產品,看到的都是UI設計,交互設計 ,產品設計,即便我們做的產品非常成功,成功點在哪兒?可能是UI設計得漂亮,也可能是推薦算法精確,而前端的產出給產品帶來了什麼?還有前端技術深要深到什麼程度?做久了技術就必須要轉型管理嗎?這些問題我當年沒有答案,我可以堅持不懈得寫頁面,但是這個事情做5年,6年,10年不還是一樣嗎?現在我能做什麼?未來我想做什麼?

帶着這些疑問,用8年時間我走了3個城市,從北京、到廣州,在到上海,在職業道路上尋求答案。

最開始的3年我在北京,那個時候剛畢業,還不能決定自己的未來,加入百度算是比較運氣。當時花了些精力準備一份漂亮的簡歷,這件事對我找工作幫助很大。在學校的時候,基本上對前端這塊已經非常熟悉了,我的簡歷非常漂亮。最開始剛畢業的時候選擇工作,簡歷會成為一個好門面。我把當時自己在前端的方向、學習深入的點,都花精力體現在簡歷上,當時在大公司招聘的時候已經佔了一些優勢,很榮幸的是被百度接收了。

在百度三年時間裏面,主要深入的在做技術。當時百度有一個很大的前端團隊,一百多人,包括百度新聞,百度視頻,百度知道,百度百科等等,整個團隊為了解決開發效率問題,決定成立一個橫向支撐的小組,做一款構建工具,就是fis,我當時還在CMS部門(一個內部的內容管理系統),主動提出參與到fis項目中。做fis的過程讓我學到了很多服務端技術,包括運維知識。在百度工作3年後,開始想着開始去脱離這個平台80%的支撐,我當時認為UC是一箇中型的創業公司,我過去待了兩年多,那個時候開始關注前端團隊建設。把我在百度學習到的技術理念在UC結合nodejs重新實踐一遍,其次是指導前端團隊提高他們整體的技術水平。

在廣州UC工作2年後,來到了上海,參與全民直播這個項目。做全民直播的整個過程經歷了比較多的坎坷,我最開始接手全民的時候,僅有兩個全民自己招聘的研發同學,經過2年多的時間,組建了將近一百人的團隊,包括服務端,前端,客户端,測試,運維,編解碼,大數據等部門,感覺在上海這兩年的成長,比前面在大公司所有5年的加起來還多。

過去走過了一個這樣的路線: 大型公司→中型公司→創業公司。專注的事情從技術到團隊再到業務。今天我重點跟大家分享我總結的成長曆程,當你後面工作到一定年限,碰到困惑的時候,可以拿這個模型參考一下,也算是一個方向。當然,這不是唯一的成長路線。

我把整個職業生涯分三個階段:

  • 第一階段,一技之長。就是深耕你的專業技能,你的專業技術。
  • 第二階段,獨立做事。當你的一技之長達到一定深度的時候,需要開始思考如何獨立做事。
  • 第三階段,擁有事業。選擇一份使命,帶領團隊實現它。

大致是這樣的三個階段,接下來我逐一拆解一下:

第一階段:一技之長。

我把它分成五個層次:棧內技術、棧外技術、工程經驗、帶人做事、業界發聲。

所謂棧內技術,是指你的專業領域技術,對於前端工程師來説,就是那些我們熟悉的JS、CSS、HTML等基礎,深入瞭解我們的程序所運行的宿主環境——瀏覽器,能掌握並靈活操縱在瀏覽器內發生的一切。前端沒有祕密,所有可訪問的頁面都近似於開源,所以檢驗棧內技術的標準就是看你是否能最終形成技術上的“寫輪眼”——那種看到任何前端產品都有能獨立復刻和洞察它的自信。

棧內技術是安身立命的根本,不要輕易“換方向”。

雖然我現在在做技術管理,但始終不會放棄我作為前端這個一技之長的根本。遇到一些前端同學工作幾年以後前端做得比較熟了,考慮轉行到其他崗位。但是我想説,當你轉行那一刻起,就把要轉的領域變成了你新的“棧內技術”,然後又要重新走一遍技術沉澱的過程,匆匆幾年,又過去了,所以不要輕易"換方向",前端絕對是可以長時間堅持的領域,現在新型的軟件生態,無論是小程序,快應用,甚至區塊鏈,都會首先瞄準JS開發者,因為有龐大的開發者羣體,工具鏈也比較完善,所以長期堅持從事前端工作,在可預見的未來都不會“過時”。

棧外技術,是指棧內技術的上下游,領域外的相關專業知識,包括但不限於服務端技術、運維、CDN、測試,甚至UI設計、產品設計等等,擴展你棧內技術的周圍領域,充分理解你的工作在整個技術研發體系中處於怎樣的環節。工作之餘多投入一份精力,把其他棧外技術不斷納入到你的知識體系中來,建立棧外能力。前端想要做的深入,往往會涉及到緩存、模板渲染、用户體驗等知識,沒有相當的棧外技術積累,你很難為自己的團隊爭取到足夠的話語權。

我個人非常推崇”大前端“的概念,有點類似”全棧工程師“,但不是要求一個人全面專家,而是以前端為根,展開上下游的棧外技術學習,一專多能。我能在全民做到CTO的角色,也得益於早年在百度和UC積累的棧外技術經驗,瞭解兩家公司大部分產品線的運維和架構體系。

第三,工程經驗。是指建設專業技術體系的“解決方案”,通俗的説,就是做事的“套路”,掌握從0到1,1到60,甚至60到100分階段建設專業技術體系的過程。工程經驗涉及到技術選型、架構設計、性能優化,CI/CD,日誌監控、系統測試等,這些是跟工程相關的方法論。

很多的工程師沒有總結自己工程經驗的能力,我面試經常會問,你們覺得自己工作了兩年、三年、四年和剛畢業的學生有什麼差別?面試者説掌握了某某技術,但其實往往説的只是一些知識點。那些“今晚查完明天就會了的”不叫技術。決定你比別人更有專業價值的,其實是領域工程經驗。你看過再多的文章也沒有用,沒真正實操過都不能稱之為“掌握”。所以我建議要想掌握足夠豐富的工程經驗,需要在業務中多爭取實踐的機會。

工程經驗才是技術水平的分水嶺。

第四,帶人做事。之前三項都是個人專業技能方面的深度要求,帶人做事是對團隊協作能力的要求。我以前非常不理解一件事情,就是我自己明明做的很好,來了一個新人不能get到我的要求,怎麼辦?非常着急的時候,我説你別做了,我來吧。更有甚者,早年間在百度工作的時候,有同事白天辛辛苦苦寫好的代碼,晚上我codereview之後直接給重構掉了,沒過幾天那位同學就提了離職。帶人做事,是把自己擅長的事情,良好的習慣傳遞給他人,實現1+1>2的生產力提升,讓整個團隊的產出高於自己。另外,這個階段大家要特別注意『管』與『帶』的區別。所謂『管』是"我不懂某個領域,但我知道你懂,你必須給我做好",而『帶』則是"我特別懂這個領域,我知道你不懂,我要教你做得更好"。有點授之以漁,甘當人梯,成就他人的意味。帶好一個人或者帶起一支有戰鬥力的團隊,是做人做事成熟的表現。

對技術有潔癖的人,往往缺乏耐心,帶人容易走極端,如何引導新人成長,激發他人的能力,也是我在職業發展過程中要尋求的問題。管理上有一個特別好的方法,就是善於啟發式的提問。提問的深度特別能體現一個人的能力水平,任何用於提要求的陳述句,都能轉換成疑問句,在啟發萌新的過程中植入對結果的約束。舉一個例子,我想要老闆給我加薪,如果直接説:『老闆,我要加薪』,估計十之八九會被搪塞過去,但是轉換一下,先問問『老闆,我最近工作怎麼樣?』啟發上司思考你的工作成果,引導他得出你應該被嘉獎的結論,或許是個不錯的話術。當你讓一個人做A的時候,他提出了方案B。你不要強行扭轉對方的思路提出A,因為對於新人來講,或許確實不能一步到位理解A方案,在他的能力約束下,只能想到B。你帶人呢,要儘量嘗試把A和B之間有差異的地方轉換成提問,你問他遇到這個問題怎麼解決,遇到那個問題怎麼解決,一直問到形成A,他會帶着思考去做事情。如果沒有這個過程,沒有讓他思維演化的過程,雖然他收到了A的指令,但是他不理解,他會用別的方式做出來,最後得出來一個C,然後你又重構一遍,陷入一個怪圈不能自拔,這就是我以前的誤區,所以我現在特別注重提問的藝術。

第五,業界發聲。如果你前面做的非常好,基本上到了可以對外發聲的程度。把自己的工作經驗總結對外發布,與他人交流,碰撞思想,看到更高的山峯,然後修正自己的想法,日臻完善,是能走得更遠的一種方式。有的時候真的要把自己的思想放到業界的層面驗證它,自嗨有毒,大家好才是真的好。如果別人不認可你的這套思路,你的想法,基本上你也可以判定為自己沒有達到一個更高的水平。不過通過業界發聲獲得認可,往往需要機會,可遇不可求,得之我幸,失之我命,這也和你所在的公司平台有關。在我技術聲譽成長最快的地方就是在百度那幾年,剛好一個大平台,做出一點成績,但是小型創業公司出來分享,基本上沒有人理你。

永遠不要放棄一技之長,沒有所謂的轉行或者轉型,永遠堅持你最初的領域,擴充你的外延,最終達成比較全面的能力,所以一技之長是值得你長期信仰的。

第二階段:獨立做事。

獨立做事也有幾個層次:

  • 獨立Coding:給你一個目標自己做完,不讓別人給你擦屁股就可以了。
  • 獨立帶人:要注重提問的水平,幫助他演進他的想法。
  • 獨立帶團隊:進入到這個階段,要關注的更多,整個團隊的氛圍、工作效率,運用你一技之長的工程經驗帶領團隊高效優質的產出成果,實現1+1>2。
  • 獨立做業務:團隊穩定之後,開始關注所做的業務,行業的發展,理解你的用户,他們是誰,他們在哪,他們為什麼使用你的產品,為團隊指引下一步的產研方向。
  • 獨立生存:獨立做事的最高水平,就是能帶領一羣人養活自己,獨立生存下來。互聯網的商業模型只有有限的那麼幾種,深諳其中的玩法,尋找擅長的合適的模型養活一羣小夥伴,意味着一次更大的蜕變。
  • 獨立做事每個階段,都是一次比較大的跨越,需要思想和多種軟素質發生較大的變化,拋開技術人的身份不講,獨立做事的幾個階段,也是一個人逐漸成熟的過程,這是我過去2年多以來一直探求的結果。

前面講到中年危機,在我看來,獨立做事的最後一個階段,獨立生存,就是解決中年危機的終極答案。

審視我自己,基本上一技之長已經達成,在業內也有一定的影響力。獨立生存還在學習中。職業生涯最後一段,是擁有事業,這部分對我來説也是雲裏霧裏,只能隱約看到,在這個階段,你已經有團隊,能獨立生存了,接下來需要尋找到一份團隊使命,如果今天我説,我想去做一個最賺錢的直播,估計台下很多人覺得沒有人願意跟我去做的,但是如果我説我想做年輕人最愛看的直播,也許很多人心動,這就是使命感的力量。使命可以凝聚人才,使命背後還需要有完善的商業模式。阿里巴巴的企業使命是『讓天下沒有難做的生意』,他們始終堅守這個企業使命,一開始做了阿里巴巴,又做了淘寶,發現跟用户溝通又做了旺旺,後來發現交易需要解決付錢的問題,又做了支付寶,後來又有了物流,所有大的戰略方向無不圍繞着自己的企業使命。

以上就是我的個人成長模型,用五年的時間做一技之長,三年的時間獨立做事,最後具體什麼時候擁有事業,目前看來還是未知。

以上模型分享給大家做一個參考,但是走什麼樣的路,取決於你想成為什麼樣的人。

後面還有一些問題,我猜今天來,可能會很多人關心這些,我自己這幾年帶着問題走過很多城市,做過很多事情,那些曾經困擾我的問題也都慢慢得到解答。

前端入門應該學些什麼?現在前端領域知識很龐雜,各種框架林林總總,對於前端來説,是最好的時代,但是對於新人來説,也是最差的時代,不知道入門該從哪裏入手。我特別推薦的就是谷歌的devtools 文檔(需要翻牆),,它囊括了很多前端基礎知識,通過學習開發者工具,同時觸達前端基礎知識,瀏覽器運行原理,以及提升開發、調試效率,是一個比較好的入門捷徑,有可以夯實基礎。

第二個事情是CTO平時都做些什麼?一個是招聘,招聘面試是我平時要做的事情,我們有專門的HR團隊,我會把我的帳號給人事的同學去登錄,勾搭別人,有一些專業的高端人才,我會一直保持聯繫,寸志老師就是這樣被我勾搭過來的(:逃。其次就是考慮技術團隊的組織架構,我要參照曾經的經驗設計一家公司的架構,一家公司的發展你要在不同的階段做不同的調整,比如大數據,運維這樣的團隊,早期我會統一管理,隨着公司發展,會考慮獨立出來做特色的東西,不要受業務的干擾,這是組織架構。還有就是經常跟CEO聊天,遊湖散步,把他的戰略目標拆解成技術目標落地實現。另外就是跟合作廠商的溝通協作,創業公司需要藉助各方力量,我可以通過置換商業資源的方式尋求行業其他公司的技術幫助,加快產研速度。

怎麼決定一個人的薪資、獎金、期權?薪資是一個人的未來能帶來的收益的考量,它是一個市場價值,一個人不管來這家公司做出多少業績,他達到這個水平,就要給他薪資;獎金是做出業績的回報,是一個人過去做過的事情的價值衡量;最後一個是期權,如果這個人這家公司充滿希望,你可以用一部分的薪資獎金兑換成期權,降低公司的成本。這是三者的關係。充分理解薪資、獎金、期權的關係,是一個CTO要關注的事,有助於建設良好團隊氛圍。

如何建設好團隊工作氛圍?除了前面説到的待遇問題,還有很多舉措可以用於建設良好的團隊氛圍。我是偏理性的管理者,我基本上不太會用個人關係,比如天天吃飯來去維護這個,我比較認可通過完善的機制,完善的規範來建設公平的環境,帶領好的氛圍。另外,好的氛圍的根本,取決於業務,業務不向上,基本上你怎麼做都是不好的氛圍。

再就是是不是技術做不下去的就要轉管理?我覺得沒有所謂的轉管理,這個過程對我來説,只是在尋找獨立做事的能力,最後懷揣着使命感,要達成夢想,是這樣的過程。

技術型人才是不是都不適合做管理?我曾經也有這樣的懷疑,後來自己帶團隊,經歷了一些事情,慢慢了解到,每個人都會形成自己的管理風格,沒有適不適合的問題。管理上不是有個『五型管理風格』嗎?老虎型、考拉型、孔雀型、貓頭鷹型、變色龍型,這五種,沒有誰好誰壞,只是不同的風格會帶來不同的團隊氛圍。我估計很多技術同學剛開始帶團隊的時候都是老虎型。

再就是剛畢業的人應該去大公司還是去創業公司。我覺得經歷大公司很有必要,因為去到大公司,你會了解到『好是什麼好』,我現在能做到這個位置,一定程度上得益於曾經在B和A的工作經歷,大概知道一個團隊如何從1發展到60,再從60到100。經歷過大公司,知道了好是什麼好,才有足夠的視野和高度指引團隊走下去。

這一點我發現創業的時候一定要先做後學。2年多前,我一個朋友有一天問我,『雲龍,我要做個易企秀那樣的平台需要多少成本?』,我説認識一個朋友,他們大概需要二三十人的團隊做兩三個月,可能需要兩三百萬的資金吧,他説這麼高的成本,就不理我了。過了兩天來找我,説搞定了,我很詫異,問他怎麼解決的,他説在淘寶上買的,一套代碼,100多人民幣,還帶大量模板。這件事給我很大沖擊,當你做技術決策的時候,尤其是創業公司,千萬要先想到行業裏面有什麼可以直接用的,用公司的資源置換也好,商務採購也好,拿過來先用,用完以後再組團隊去學,學完以後形成自己的一套東西,是這樣的過程。

最後一個問題就是如何體現技術團隊的價值。如果一個公司都是產品設計運營做的好,我們怎麼知道是技術做的好,這是一個技術管理者要非常清楚的要點,才能讓團隊有方向可以遵循。

這裏我大概總結了3個要點:技術產品質量、開發效率和體驗性能。

這裏有一張漫畫,當線上服務一切正常時,老闆回想『一切風平浪靜,真不知道我要僱這羣研發幹什麼』,而當線上出現事故,老闆又會想『成天出問題,真不知道僱你們這羣研發幹什麼』,這種現象其實很普遍,技術產品質量是基礎,穩定壓倒一切。其次能體現技術價值的就是在穩定的基礎上,提升開發效率,快速迭代,快速上線,小步快跑。但做到以上兩點,只是基本滿足業務要求而已,不被詬病,但要進一步體現技術的價值,就要在性能上做文章了。

右圖是亞馬遜提出的一個概念,網站打開速度每降低0.1秒,網站就能多增加1%的收益,優秀的團隊需要在業務核心性能指標上下功夫,突破秒級的打開速度。

最後

最後特別要感謝兩個職業生涯中遇到的貴人。第一位是我剛入行時的第一位導師,在百度任職的朱旭,為人很淡泊,在百度工作十年如一日,非常低調踏實,培養新人也真正做到了甘當人梯,給我很多啟蒙指導。第二位是我在UC的老大,離開UC之後我們也是亦師亦友的關係,給我很多管理上的啟蒙,在我帶人做事最迷茫的那段時間指引方向,給出答案。

最後,非常感謝大家!