無論您是否認可,除去極少數天賦異稟、骨骼驚奇的天才程序員,咱們大部分人都是普通人,都須要遵循「一萬小時定律」,才能從平凡變成超凡。程序員
凡 人要從一個小菜鳥成長爲全棧工程師,只能從少到多、慢慢積累知識和經驗。職業生涯的本質,就是在一個專業方向上積累信息。這裏我推薦採用「先精後廣,一專 多長」的流程來學習。採用這種方式來學習,不光能夠舉一反三、觸類旁通,還讓咱們學習得更快,並且按部就班更符合通常人的職業生涯發展。面試
先精後廣,一專多長算法
「先精後廣,一專多長」是指,建議初學者學習全棧技能的時候,先在一個特定的方向上有比較深刻的鑽研,而後再將學習目標漸漸推廣開來。好比先從前端方向入手,掌握了基本的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開發的完整流程。第三個緣由是,前端開發直接面對最終用戶,也可 以鍛鍊本身對用戶體驗的感受。
固然,前端並非惟一的選擇,您也能夠從其餘職位開始,專一地學習這個職位須要的技術,到達必定的深度以後,擴展本身的知識面,往一專多長方向去發展。