一個程序員的成長之路(一個程序員的成長之路pdf)
FDCon2018大會上的演講整理
主題:主會場?-?一個程序員的成長之路 時間:2018年5月19日?10:40 地點:中國?上海 演講嘉賓:張云龍-全民直播-CTO
大家好,我是云龍,從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之后我們也是亦師亦友的關系,給我很多管理上的啟蒙,在我帶人做事最迷茫的那段時間指引方向,給出答案。
最后,非常感謝大家!
開發者 web前端
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。