標籤:

如何成為全棧工程師

不管您是否承認,除去極少數天賦異稟、骨骼驚奇的天才程序員,我們大部分人都是普通人,都需要遵循「一萬小時定律」,才能從平凡變成超凡。

凡人要從一個小菜鳥成長為全棧工程師,只能從少到多、慢慢積累知識和經驗。職業生涯的本質,就是在一個專業方向上積累信息。這裡我推薦採用「先精後廣,一專多長」的流程來學習。採用這種方式來學習,不光可以觸類旁通、舉一反三,還讓我們學習得更快,而且循序漸進更符合一般人的職業生涯發展。

先精後廣,一專多長

「先精後廣,一專多長」是指,建議初學者學習全棧技能的時候,先在一個特定的方向上有比較深入的鑽研,然後再將學習目標漸漸推廣開來。比如先從前端方向入手,掌握了基本的HTML、CSS、JavaScript之後,不要轉頭向伺服器端語言或者App方向發展,而是深入到性能優化、SEO、多種框架、響應式頁面等前端細節中去。經過一到兩年的深入研究之後,再去學習其他方向。

如果在創業公司做全棧的工作,一般也不會要求一個人處理所有的技術工作,至少會有兩三個人組成團隊來做項目。大家在分配工作的時候,可以按照每個人的偏好和技術特點,進行前後端的分工,不用完全按照每個人做一個模塊的方式來分工。這種分工的界限不一定要很絕對,在不同職位的工作範疇中,可以有一些重合的區域。

如果是畢業生或者初學者,我不建議在剛開始的一到兩年接觸太多技術,雜而不精,結果可能會對後面的職業道路產生副作用。

為什麼我強調在開始的時候有一個專精方向的重要性呢?因為這樣您才能在求職的時候有一個「亮點」。

平心而論,程序員在市場上的供求關係比很多其他職業都更有利於求職者,在微博、Twitter、V2EX上都會有很多引人注目的招聘啟示,大家對優秀程序員的需求從來就沒有減少過。

雖然優秀的程序員總是能找到工作並且工資不低,但是很多程序員投出的簡歷都石沉大海,一個主要原因是由於求職者的簡歷沒有亮點,或者說從工作經歷中提取不出來一個亮點。

讓我們做一個情景假設,作為一個有兩年工作經驗的全棧工程師,您看到騰訊有一個職位空缺。

騰訊社交用戶體驗設計部招聘前端開發,要求如下。

  • 本科以上學歷。
  • 兩年以上工作經驗。
  • 精通HTML、CSS、JavaScript等前端相關技術,熟悉W3C網頁標準。
  • 熟悉至少一種後台語言的開發機制(如Java、C++等)。
  • 有一定架構能力和演算法能力,有良好編碼規範。
  • 良好的學習能力、溝通能力,追求完美,有工作激情,能在較大強度下工作。
  • 熱愛互聯網,喜歡研究各種互聯網技術者更好。

您想,自己完全滿足要求啊,於是一封簡歷就投遞到面試官的郵箱,裡面用大段文字表達自己全面的能力完全符合這個要求,而且自己還有亢奮的激情和濃厚的興趣。

但是您從面試官的角度來想想,他收到了多少份簡歷呢?對於一個大公司的HR,可能100個都算少。

根據中國招聘平台拉勾網「2015年互聯網人才流動報告」,前端相關崗位的簡歷投遞數只有崗位數的一半。與此同時,伺服器開發方向(比如Java、PHP、C++等)的簡歷投遞數都大大高於崗位數。從圖表可以看出,前端開發仍然處於人才緊缺階段。

HR要從100個符合要求的人中選擇10個來面試,您的簡歷中的哪一點能吸引他呢?有的競爭者有豐富的移動端作品,有的競爭者提到他很擅長頁面性能優化、響應式、頁面渲染效率,有的寫過JavaScript框架……而您只是一個普通的滿足要求的人。

不同職位的供求關係是不一樣的。

您可能會說,我愛好廣泛,學習能力強,我會一點PHP,做過Wordpress主題,會一點Java,畢業設計做過一個小客戶端應用,什麼都會一點……但最終您仍然會得到一個「無亮點」的評價,被無情地淘汰掉。因為雖然您會的技能很多,但大多只能算是「及格」的東西。

所以,作為一個求職者,無論是畢業生還是社會招聘,僅僅滿足招聘要求是不夠的。您需要在招聘要求的方向上以200%的能力來得到這個職位。

一個求職者在整個流程中會受到多方考核:HR考核您的成本和價值,專業面試官(不是全棧工程師)考核您的專業能力,經理考核您的溝通能力。在所有這些考核中,其實每一環都是漏斗型篩選,會過濾掉一些人。

好消息是,由於程序員的供求關係,只要您的專業能力夠強,您就有很大的概率通過整個面試錄用流程。我一次又一次提到「供求關係」這個詞,是因為在商業社會,所有的商品(包括人才)的價值來自於供求關係,而不是生產成本。生產成本是准入門檻,但絕不是核心競爭力。

讓我再次重複這一點,作為求職者,一定要在某個特定方向上有非常深入的理解。僅僅會做還不夠,還要理解背後的原因,還有背後的背後的原因。有些面試官的習慣是,在一個問題上深入地問下去,從經驗問到操作過程,再問到技術原理,一直深入到面試官問不下去了,或者求職者答不上來了。所以,理解得越深刻,您就越有優勢。

有了一個專長,得到一個能讓您成長的工作,進入強大的團隊,您就能有自己的陣地,以此為生,然後再逐步學習更加廣博的知識,朝自己的個人目標去努力。如果您連陣地都不穩固,就不存在開枝散葉、落地生根的可能性了。

假設您已經在一個中等規模以上的公司找到了工作,那就會有一個專門的崗業。經過幾年的工作和練習,您會在專業知識上達到很熟練的程度,日常需求都已經在您的「舒適區」,現在您終於準備好了。既然您的目標是做一個全棧工程師,那麼從哪些技術開始入手呢?

圍繞商業目標

我的第一條建議是,在考慮做什麼項目的時候,圍繞商業利益作為目標。歸根結底,技術是服務於商業目標的。

在計算機科學誕生的短短几十年中,熱門的技術和平台一直在發生巨大的變化。

伺服器端的平台和語言從C到C++、Java、Python,再到如今的Node.js,變化從來沒有停止過。

客戶端則分瀏覽器和原生開發兩個分支。瀏覽器方面,Web標準是一個活的標準,意思是說,有一些新的提案不停地加入到標準之中,這是一個動態滾動的標準,而不是印刷出來的定案。

各種瀏覽器的市場份額每隔兩年就會發生天翻地覆的變化,從moz到Webkit,我們見證了Webkit的發展壯大。

移動端設備的市場份額之爭更是激烈,曾經的諾基亞和摩托羅拉被新起之秀收購,iOS和Android之爭還在繼續……

僅僅據我所知,2014年到2015年騰訊就有很多團隊進行了從PC端到移動端、從HTML5到原生App開發的各種轉型。沒有人能說得准下個季度我們團隊的目標是什麼,每半年就有一次大的調整,而小的調整從來就沒有停止過。「變化」是唯一保持不變的東西,每個人都在不停地學習新的技術。

相對來說,商業目標是穩定的。把關注點放在商業目標而不是技術上,就能選擇出更適合完成商業目標的技術,這樣就能做出更為客觀的決定。更重要的是,在這個過程中您學習到的不僅僅是技術,更是一種潛在的思維方式,這種思維方式可以幫助您提升綜合競爭力,是一種「硬通貨」的能力。

老闆僱用一個員工,不是因為他能寫程序,而是因為他能幫助自己賺錢。賺錢有兩種方法:減少成本,或者增加收入。程序員如果能加快內部系統的運行效率,讓產品製作流程更加順暢,就是減少成本。如果能讓用戶更容易地購買產品,或者提高服務質量吸引更多用戶,就能增加收入。在老闆看來,程序員只是一個昂貴的勞動力,他會不會寫程序都沒那麼重要,重要的是能賺錢。

所以如果您想成為一個高級開發者(或者高級設計師),就一定要學會這種思維方式。

所謂「商業目標」要廣義地去解讀。對於直接製作產品,給用戶使用的團隊,就需要對外關注如何提高產品質量、降低產品成本;對內應該關注如何優化流程、減少錯誤率。如果團隊輸出的成果是公司內其他部門需要的原材料,就要關注下游的需求,研究如何更好地輸出成果,如何在流程上使得輸出產品的過程更順暢。

關注商業目標需要持久的練習。等到自己成為全棧工程師,或者成為團隊管理者,更加需要在多個目標任務之中做出選擇。全棧工程師需要做和能夠做的事情是很多的,他會很多技能,也負責處理很多工作,所以他更需要能力從諸多事情中找到最有商業價值的一個:可能是製作一款工具提升團隊效率,也可能是成本上的優化。

全棧工程師可以做得事情越多,就越需要具備判斷做什麼的能力。如果增加一個用戶需要的功能是加分項的話,拒絕一個用戶不需要的需求更加值得推崇。

一切都要圍繞商業目標來進行,包括您做的項目、您的彙報方式,以及您在學習新技能時進行的取捨。

我在公司的技術通道{![騰訊員工可以根據自己的特長和興趣,選擇走管理的發展通道,也可以選擇技術、設計、產品、市場等專業發展通道。在不同的發展等級上,都設計有配套的能力要素。]}中會發現有這樣一些開發者,他們做項目的驅動力是「技術」本身,而不是「商業」目標。比如說,他們針對微信平台做了一個活動推廣頁,使用了很多華麗的3D旋轉和SVG動畫。好的方面如下。

  • 用的技術很新潮,滿足了自己的炫技虛榮心。
  • 朋友圈(其實都是前端同事)傳播很廣。
  • 在高端機器和大屏幕機器上效果很好。

壞的方面如下。

  • 在低端機和慢速網路下效果不好。
  • 沉浸在技術的實現中,而忽略用戶體驗。
  • 打開頁面就自動播放音樂,讓用戶感覺很突然。

我老婆是一位財務人員,她每次看到朋友圈這種很炫酷但需要載入的頁面就會馬上關掉,有時候耐心等待打開之後也是眼花繚亂,不知所以。所以有時候我會思考,一個技術的圈子,在熱烈討論某個推廣頁又用了某某炫酷新技術的時候,有沒有想到普通用戶根本不買單呢?

再來說說一個好的案例。

我在面試求職者時遇到一個綜合能力不錯的候選人,他是一個全棧工程師。我問他,您現在掌握的技術比較多,那您未來的職業規劃是怎樣的?他說,他覺得用什麼語言並不重要,但是最近一年開始把重心放在Android開發上,因為移動端App開發是現在的潮流,有很大的需求,在這裡可以有所成就。但在未來,不排除改變方向去做別的事情的可能,到時候可能是iOS或者其他新的系統。基本上來說,自己掌握的知識體系是可以復用的,但也期待學習新的語言。

我喜歡他這樣的態度,對未來有自己的方向,但也知道自己沒法看得太清晰。對商業和市場有想法,而且自己也有足夠的技術能力和自信向未來前進。相比而言,有些候選者的項目經驗和學習技能很雜,東一鎚子西一榔頭,有些時候純粹是為了折騰而折騰。

記住,當您只有一把鎚子,您看什麼都是釘子。而如果您痴迷於工具,反而看不到問題所在。因此,要先看看有哪些問題需要解決,然後再補充您的工具箱。永遠從商業目標的角度來決定學習哪些東西,而不是純粹為了鍛煉技術能力而去學習。

全棧工程師希望豐富自己的工具箱,而不是用一把鎚子處理所有工作。

關注用戶體驗

我的第二條建議是,從用戶體驗的角度考慮問題。

用戶體驗是用戶使用產品時的心理、感受、印象、評價。生活中處處涉及用戶的體驗,鬧鐘、牙刷、馬桶、書包、公交、紅綠燈、手機、電腦、鍵盤、滑鼠……每天,我們都在和產品打交道,每天都在使用和體驗產品。

每一個糟糕的體驗背後都蘊含著商機

全棧工程師應該關注用戶體驗,並且掌握用戶體驗相關的知識。即使一個技術達人能夠以一己之力搭建一個站點,但他如果不關注用戶和客戶的體驗,那麼他做的產品可能會很糟糕。這樣的產品除了「能用」之外什麼優點都沒有。

所有優秀的工程師所做的一切都是在優化用戶體驗:優化性能的開發者是在積極地提升用戶體驗和交互;設計師有意用顏色、空間、大小和表單的排列方式讓用戶體驗更順暢好用;而內容運營者認為某些內容重要,某些內容不重要,也是在考慮如何提升用戶的體驗。

我在2010年加入騰訊的時候,公司只有一萬多人。那時候,我需要辦一些行政手續,需要公司開具薪酬證明,整個操作流程是這樣的。

打開公司論壇,搜索「薪酬證明」,搜索到一篇文章,裡面講到找一位人力資源的員工來辦理。

我打開RTX(騰訊內部使用的工作通訊軟體,類似QQ),找到這位人力資源的員工,問他座位在哪裡;跑到他座位上,此時已經有幾個人在排隊了,我排在後面;到我了,我告訴他我要辦薪酬證明,並告訴他我的RTX ID;等待10分鐘後,他列印出一張薪酬證明,簽字蓋章後給我。整個過程耗費了我一個小時的時間。

2015年,我要申請美國旅遊簽證,需要開具薪酬證明。我從平時的宣傳渠道得知,現在人力資源的很多服務都可以在線上辦理了,於是我嘗試了一下,現在開薪酬證明的流程是這樣的。

  • 關注「HR助手」的微信公共賬號,它自動識別出我是騰訊員工,也得到了我的ID。

  • 選擇「我要辦證明」→「收入證明」,在證明用途一欄,選擇「簽證類」→「旅遊簽證」,並提交一些個人信息。

  • 輸入我的辦公座位號,提交給系統。

第二天,一個漂亮的紅色大信封放在我座位上。打開一看,裡面包括中英文兩份收入證明,還有我的旅遊目的地以及時間,整個收入證明既漂亮又專業,是為簽證量身打造。從提交系統到拿到最終的證明,我只花了幾分鐘,過程順暢快速,體驗非常好。

從2010年到2015年,經過這幾年的發展,騰訊的員工規模已經達到了三萬多人,翻了三倍。HR流程如果還以舊的方式運作,可能得加派好幾倍的人手,浪費所有員工不知道多少時間。但是現在通過自動化的系統,用戶滿意度大大提高。一個內部員工使用的系統,尚且有如此的優化空間和投入力度,何況是對外直接出售服務的公司呢?

我這樣被公司服務「慣壞」的人,往往對社會上其他服務更加挑剔。此外,在深圳這樣一個服務業水平居全國前三的城市居住慣了,去其他城市也經常會有被「怠慢」的感覺。我想這就是所謂「由儉入奢易,由奢入儉難」。

所以,用戶現在都被手機中那些提供優質體驗的App「慣壞」了,想讓他們再接受陳舊的設計和體驗,就更加難上加難了。

用戶是誰

「站在用戶的角度想問題」這樣一句樸實的話,可以指導我們做很多事情,但是很多時候我們忽略了這一步。

就像「體驗」泛指所有生活中所有的體驗。這裡的「用戶」仍然是一個廣義的定義:所有您為之服務的人。

比如做一次演講或者彙報,第一件要緊的事不應該是做PPT,而應該是調查聽眾,站在聽眾的角度去思考:聽眾知道什麼信息,聽眾想知道什麼。如果給您的老闆彙報,您不能期望他了解您所做項目的技術細節,而且他想知道的也不是技術細節,而是項目進度和風險。但是如果在一個技術論壇上分享,您就不能期望聽眾都知道您的項目背景和目標,需要花一點時間去介紹,聽眾也不想知道太多細節的東西,只需要介紹一些決策和架構的大方向。

寫郵件的時候,收件人(還有可能這封郵件被轉發之後的收件人)就是用戶,那麼寫郵件的一些技巧就包括:盡量簡短,不要給收件人太大壓力;把結論放在郵件的開始,方便對方快速了解情況;如果需要老闆拍板,給出選擇題,而不是問答題。總而言之,以對方能理解、會關注的方式來表達自己做了什麼。

作為前端工程師,上游的設計師、下游的後台工程師,都可以認為是前端團隊的用戶。如果細心觀察,就可以發現這裡面有一些痛點。因為領導沒有自己敲代碼,所以他可能不會發現這些痛點,也就不會安排您去做優化工作。所以這裡需要您自己去觀察和優化流程。

很多程序員的第一個想法是做工具,但是想想我剛才說的話,老闆僱用您不是因為您能寫代碼(或者做工具),而是因為您能幫他賺錢。所以您要用一切辦法,去優化流程解決痛點,做工具是一個可選的方法,但不應該是您的第一個想法,更不是唯一的辦法。假使真的是做了一個工具,最終彙報郵件的時候,不要以「我做了一個工具……」開頭,而應該以「我發現了一個問題……」開始。

大巧若拙

老子(兩個字都請以三聲閱讀)說,大巧若拙。

意思是,指真正聰明的人,不會顯露自己,反面從表面看好像還很笨拙。用戶體驗不只是界面和交互這樣可以直觀感受的東西,還包括一些隱藏在用戶界面背後的細節和規範。

就像冰山,露出水面的部分只佔整個冰山的1/9,用戶看到的只是顯露出來的部分。背後的部分一般用戶是看不到的:比如用戶研究,用研團隊會通過調查,輸出一些用戶畫像,影響整個產品的功能方向、設計風格;還有設計規範,設計團隊在設計產品的一開始制定了規範之後,新增加的功能和頁面都必須遵循已有的設計規範,這樣整個產品是統一的,能夠給用戶專業的感覺。

為什麼現在很多商業公司花了大把的錢和精力開發出獨立運行的App,體驗卻很糟糕,甚至很多用戶反饋稱App還不如微信公共號好用?

用戶體驗只是冰山上露出的一小部分。

一個很大的原因就是公司不重視用戶體驗,覺得用戶研究和交互這種東西,不用專業人員去做,讓設計師搞定就好了;或者老闆拍腦袋定方案,做出的東西花里胡哨、炫酷狂拽,但就是讓用戶摸不著頭腦。相反,微信花了很大的精力去做深入的研究,最後設計出了一套看似簡單,但是可用性非常好的框架。然後微信開放後台系統給第三方,第三方公共號可以定製的地方有限,只能把功能往裡面套,不太容易出錯,用戶體驗自然就上來了。

反觀某些銀行的App,幾乎每個標籤頁的設計風格都不一樣,而且喜歡自己設計鍵盤,每次在輸入密碼的時候都非常不方便,其實這是沒有必要的。

做自己會用的產品

創業公司做產品,CEO一定要是自己的目標用戶。因為如果自己都不體驗自己的產品,就很難發現用戶在使用產品過程中遇到的糟糕體驗。我們經常在網上看見網民抱怨辦理公共事務時手續很麻煩,很多流程設置得讓人抓狂。我想,這裡面有一個很大的原因就是,設計公共事務流程的人,自己本身不是目標用戶。

網上有個段子,說一般的產品經理沒辦法把自己代入成「小白」用戶,做出的東西只有他自己會用;高級產品經理經過半小時的冥想可以進入小白狀態;張小龍和馬化騰這樣的大師級產品經理需要兩分鐘;而喬布斯可以隨時切換大師級產品經理和小白的狀態。這就是為什麼他會說「stay hungry, stay foolish」。

我如果開創一個公司需要招聘「全棧工程師」,我要求的三個能力就是一專多長、關注商業目標、關注用戶體驗。

有志往全棧工程師方向發展的學生,我推薦從入門簡單的前端開發開始學,而且從拉勾網「2015互聯網人才流動報告」來看,職位多、簡歷少排名第一的職位是前端開發。而且因為前端開發處於互聯網開發的中間環節,可以從上下游入手,漸漸地接觸Web開發的完整流程。第三個原因是,前端開發直接面對最終用戶,也可以鍛煉自己對用戶體驗的感覺。

當然,前端並不是唯一的選擇,您也可以從其他職位開始,專註地學習這個職位需要的技術,到達一定的深度之後,擴展自己的知識面,往一專多長方向去發展。下一章專門介紹如何從學生轉型為全棧工程師。

這本書摘自《全棧工程師的自我修養》

購買方法:Web全棧工程師的自我修養

關注我們 :長按二維碼或搜索人郵IT書坊(ptpressitbooks)


推薦閱讀:

用Ubuntu做日常開發電腦的系統是一種怎樣的體驗?
Angular4正式版發布了,如何正確認識?
全棧設計師的前景如何?
怎麼看待李笑來的全棧工程師課程?
你們覺得前端需要什麼樣的平台支持開發起來會很爽?

TAG:全栈工程师 |