寫給前端應屆生的職業規劃建議

【前言】 近一年多的時間,筆者在公司中擔任過應屆生導師、實習生導師、應屆生項目導師等一系列導師角色。期間,筆者發現一些即將和準備成爲前端攻城獅的同窗其實並無明確前端真正的核心和定位,也沒有給本身制定一個學習和發展的方向。當初選擇前端這個職業,也僅僅只是爲了找一份工做而已。筆者很想以本身的多年工做經驗,爲前端應屆生們分享一下我心中適合前端工程師的職業規劃,讓你們對本身有一個比較清醒的認知,避免在之後的成長過程當中產生迷茫情緒。固然,筆者其實也才工做五年,能達到如今的技術水平和職級,應該算是發展上升比較快的,一些經驗具有必定的借鑑價值。前端

前端的興起

前端真正興起和開始頻繁出如今你們的視線裏,大概是在十年前。彼時的 Web 開發基本是由後端主導,前端能作的只是校驗一下數據、操做一下 DOM。(其中數據檢驗是 JS 產生的根本緣由:當時網絡太慢,在服務端檢驗數據並反饋給用戶,讓用戶知曉輸入錯誤,這個流程太長、反應太慢,所以經過腳本在用戶端完成第一步校驗,既方便了用戶,又減輕了帶寬的壓力。)即便 06 年 jQuery 發佈並風靡全球,以及 XMLHttpRequest 被歸入 W3C 標準,也沒有改變這種情況。制約它進度的緣由很簡單,由於不少事情前端 作不了 或者 作很差。隨着時間的推移,近幾年,Angular、Backbone、React、Vue 等框架陸續發佈,讓前端愈來愈正規化、體系化。此時雖然仍有不少事,前端 作不了 或者 作很差,但前端這個崗位卻已變得熱辣空前。那麼,是什麼推進着前端發展到如此大的規模和火熱的程度?程序員

也許,你能夠列舉出不少各類各樣的緣由,可是綜其一點,就是 『用戶體驗』 ,是因爲全部人對用戶體驗的重視,才讓前端發展得這麼迅猛,這麼快地興起。這裏,可能要感謝 Apple,感謝 iPhone,感謝 Jobs,07 年第一代 iPhone 發佈,正式引起了幾乎全部人對用戶體驗的重視,從『只要能用就好』,變成『要好用我纔買單』的心理。而,前端的先驅者們、瀏覽器的開發者們,也順應了這個潮流,將一系列重要的能力加入了瀏覽器,加入了前端。編程

其中最重要的一項是 XMLHttpRequest,也就是 Ajax,它是富 Web 應用的基礎,它讓前端能夠脫離後端的掌控,不用經過跳轉的方式就能實現數據交互。感謝微軟,感謝 IE,雖然被 IE 6~8 虐了無數遍,可是是它引入了 XMLHttpRequest ,引入了 Ajax,開啓了富 Web 應用的時代,讓用戶體驗大幅提高。小程序

而近幾年,隨着移動互聯網的發展,多端多平臺的需求愈來愈多,產品形態和數據分離,是形勢所趨。而與此同時,移動時代對產品形態跨端、跨平臺、多元化的用戶體驗要求,讓自己就有跨平臺特性的前端技術着實又火了一把,它讓開發者有更多的時間和精力關注用戶體驗,並很容易保持多平臺用戶體驗的統一(不一樣平臺用不一樣技術實現,雖然能夠,但成本過高);除去上面的緣由以外,前端技術自帶的熱發佈、熱更新特性,能在及時更新業務需求的同時快速修復用戶所遇到的問題,也是你們選擇它的一種緣由。雖然另外還有不少零零總總、各類各樣的緣由,再促使着前端成爲當前最火爆的幾個職位之一,可是最根本的緣由仍舊是你們對用戶體驗的要求。後端

從上面能夠看出,前端的興起源於全部人對 用戶體驗 的重視,而火爆更是因爲全部人對 多元化的用戶體驗 的關注。固然,用戶體驗不僅只是 UI 漂亮、好看,它是多方面的,例如視圖的加載速度和流暢程度,這些取決於你選擇技術的編碼體積、運行效率等多種因素。說白了,前端的目的就是 讓用戶用得爽,那麼 用戶體驗 必須是重中之重。微信小程序

說了這麼多,其實有一個很重要的點沒有提到,那就是 CSS。注重用戶體驗,首先你要用界面要有 UI,HTML + CSS 做爲最簡單的 UI 構建方式,讓前端的 UI 開發成本低到無與倫比,而開發成本低纔會有更多的時間和精力去注重用戶體驗。同時,如今 CSS 也有相應的框架,像 PostCss、Sass 等,更進一步下降了開發成本,釋放了開發者的時間和精力。設計模式

前端興起這十年,也是用戶體驗飛速增加的十年。無論是技術完善度仍是從業人數,前端這個方向受到了足夠多技術人員的關注,同時也受到了足夠多企業的重視。通過前端人不斷的努力,如今的狀況又如何呢?瀏覽器

前端的現狀

提到現狀,必須先提到一個概念 大前端。因爲近幾年互聯網的發展,尤爲是移動互聯網的發展,有的大前端概念將 Native 納入前端的範疇,有的大前端概念將 Node 甚至只渲染頁面的 PHP 納入前端範疇,但無論怎麼說,筆者認爲 大前端 是將來的一個趨勢,將最終目標(提高用戶體驗)一致的技術歸類到一塊兒,讓開發者清楚本身的最終目標是什麼,要怎麼作。固然,也正由於這點,做爲一個前端工程師,若是你想更好的發展,你應該有更廣的知識面,包括移動端知識、服務端知識。這些知識結合你的前端技術,才能更好地實現優秀的用戶體驗。微信

拋開大前端,單談前端,從前端架構層面談,最近比較流行的有四個:老牌勁旅 jQuery、最近火得不能再火的 React、Google 精品 Angular 以及 MVVM 框架 Vue。如今幾乎全部的項目都會在這四種架構方案中選擇其一做爲基礎,進行業務開發。四種框架,四種不一樣的思想,簡單來講:jQuery Dom 驅動的思想深刻人心;React 則推崇組件化,萬物皆組件;Angular 則把 MVC 在前端領域發揚光大;而 Vue 則是以數據驅動爲核心的 MVVM 架構。做爲一個前端新人,不可能很快就理解全部知識和思想,只能一步一步來,先把你在工做中所使用的框架理解透徹,再去思考和學習別的。說實話,會用和理解的差距很大。網絡

在這裏,可能會有個疑問,上述四個架構,都很火,可是哪裏涉及到用戶體驗了?是的,這些架構都沒有直接涉及到 UI。可是就像足球,沒有勤奮的訓練和優秀的戰術,再好的11人也踢不出好的比賽同樣,這些架構從開發成本和開發體驗上,下降了開發者編碼和維護的難度,讓其在 UI 的用戶體驗上的付出,事半功倍。固然,框架在編碼體積、運行效率等多個方面影響了最終的用戶體驗。

上面所說的是,當前前端的一大現狀 —— 框架橫行,如今不多有公司、有工程師用純原始的方式擼代碼了。而前端另外一大現狀就是 —— 移動爲先。緣由很簡單,隨着移動互聯網用戶的暴漲,各個公司的產品都是移動爲先,技術跟隨着產品的步伐,也必須移動爲先。這時,爲了解決多平臺的問題,Hybrid 方案脫穎而出,包括傳統的基於 WebView 的 Hybrid 方案(例如 Cordova)和 React-Native 等一系列技術方案。在這裏我就很少說了,關於移動前端的內容最近充斥着各類技術論壇、交流羣、公共號,具體的,你們能夠本身親身去了解。

最後,對於現狀,我想你們可能最關心的實際上是職業形勢。因爲前端的興起,前端人才市場至關活躍,平均薪金水平也是名列前茅。與此同時,前端的技術入門比較容易,形成另外一個極端狀況:人員氾濫、人才稀缺。這種狀況,一方面因爲前端發展太快,很難短期掌握所有知識;另外一方面,高等院校並無開設專門的前端專業,你們更可能是自學,野路子不少。所謂亂世出英雄,這樣的前端大環境或許對一個新入行的同窗更有利。固然,在如此『亂世』中,一個好的職業規劃,才能避免『誤入歧途』,保證自身順利地成長。

如何作一個職業規劃

上面講述了前端如何興起和前端的現狀,下面將基於上述兩點,分幾個方面爲你們提供一些有關職業規劃的觀點,但願對你們有幫助。

肯定方向

作職業規劃的目的是避免迷茫,而避免迷茫最有效的方式就是肯定明確的方向和目標。

對於任何一個技術崗位,都有固定的兩個方向:技術專家(架構師)和 開發經理。前者偏重技術,須要你在當前領域鑽研得很深;後者偏向管理,須要你在對技術有很深掌握的同時,能夠帶領團隊完成項目的開發。固然,二者並非魚與熊掌的關係,你能夠同時成爲技術專家和開發經理。

對於技術專家和開發經理兩個方向的選擇,更多取決於你自身在工做中多巴胺的分泌狀況。當你專研技術時,多巴胺分泌得更多,感到更興奮,或許你會很容易成爲技術專家;反之,當你跟團隊一塊兒作業務時,多巴胺分泌得更多,更有得到感,那麼你能夠嘗試向開發經理方向發展。固然,你也可能作什麼都沒有分泌太多的多巴胺,那麼,你能夠在嘗試一段時間後,轉型其餘職業,例如產品經理。前端做爲核心是用戶體驗,與用戶最近的工程師,轉型產品經理,阻礙會小一些。何況,文藝型前端佈道人豆瓣前端負責人張克軍認爲,前端工程師正慢慢演變爲產品工程師,前端和產品離得確實很近。

當你選擇好一個方向後,你就要朝着這個方向一步一步進發。丹尼爾在《一萬小時天才理論》提出一萬小時定律,即要成爲某個領域的專家,須要積累一萬小時。固然這只是個概數,不過天天花更多的時間去學習和實踐,確定是最有效的。這裏,成爲技術專家和開發經理過程當中,關注的點略有差異。成長爲技術專家,要更多關注技術自己的實現,包括邏輯、架構、設計模式、方法論等;而成長爲技術經理,則要更多關注技術開發的過程,考慮如何提升開發效率、下降開發成本、優化開發質量等等。不一樣的人,精力是有限的,選擇性關注一些必要的方面,對自身快速的成長是頗有必要的。

作業務仍是作架構

作業務,時間要求比較緊,代碼質量要求高,可參考的代碼比較多,業務知識須要學習。作架構,時間稍微自由,對經驗要求比較高,無可參考代碼,專業基礎知識須要深入理解;最主要的,作架構的你既是開發,又是用戶,仍是 PM ,只有 80% - 90% 的明確目標,並在開發過程當中不斷微調最終的目標。

對於一個新人,其實不用糾結,作業務纔是好的選擇,並且作 技術含量高使用流行技術 的業務纔是最好的。緣由很簡單,架構的最終的目的是解決業務當中的問題,你沒作過業務,哪能知道業務的問題在哪,你都不知道要解決什麼問題,如何作好架構。因此,從業務作起,是新人最好的選擇,也是惟一可行的選擇。而選擇有技術含量、使用流行技術的業務的緣由更多在於成長,這樣你的成長可能會更快、成長道路可能會更直。固然,這只是『可能』,不一樣的人適合不一樣的業務,因此不要強求必定『技術含量高、使用流行技術』的業務,更多的而是改變本身,去 適應團隊適應業務,這樣才能 更快地成長

事實上,不少時候,你會遇到很業務工做很繁重沒有額外時間學習的狀況。而如何在這樣環境中更快地成長呢?說白了就是『抄』,不不,是 參考。將學習融入到工做中,是最好的方法。作新項目,參考老項目代碼;作新需求,參考老需求的代碼;沒有同類型的代碼,參考別的業務的代碼。參考前人的經驗,在巨人的肩膀上,成長才會變得更快。同時,你的導師和你的夥伴,也會在業務中給你指點,幫你快速解決成長路上的問題。

在這裏,總結一下,在繁重的業務環境下快速成長,你須要 很優秀的學習能力很持久的耐心 以及 很好的導師和夥伴,這樣才能在技術成長的路上事半功倍。

技術的學習

說了半天,到了最核心的問題了,對於一個新人如何學習技術?筆者給的建議是:千萬不要囫圇吞棗,先把當前使用的技術學透用熟,纔是最重要的;千萬不要在還沒把當前使用的技術吃透以前,去學新的東西,無論新的東西有多火。就像上文所說,不一樣的框架,有不一樣的核心,有不一樣的思想。兩個框架代碼類似之處的思想不必定類似,例如 Angular 和 Vue 都有雙向綁定,雖然效果類似,可是實現思想和內部實現方式是大相徑庭的。還在入門階段的你,會被各類思想充斥頭腦,反而會更不清楚。

必定的時間後,當你理解透一個架構體系後,你能夠 類比地去看 更多的架構體系。這時候,你會發現不一樣架構不少東西都是異曲同工,理解得很快。

固然,理解透一個架構體系,有人須要一年,有人須要三年,還有人可能須要更長時間。爲何有這麼大的區別呢?由於有些人在開發中,並不認爲完成就能夠了,會在開發中,追求代碼的優美,會不斷優化本身的代碼,讓本身的代碼性能更好、可讀性更高,並經過長時間的積累,達到 量變致使質變 的程度。即便一個特別聰明的人,沒有『量』也不可能『質變』的,只不過他的量可能比其餘人少而已。

要提醒的一點是,學技術,必定要結合你所在公司、團隊的技術棧。例如,去哪兒前端應屆生會在進入業務線前,進行3個月的脫產培訓,2017年的前端培訓課程內容中涉及的技術主要是 React 和 React Native,而去哪兒業務的技術棧也大可能是 React,那麼做爲去哪兒的前端應屆生,你優先學習 React 的技術體系是事半功倍的,既有前人能夠問,又有項目能夠實踐。

固然,在學習架構的同時,不要忽略兩樣最基本的東西,一個是 技術基礎,一個是 開發規範

技術基礎是一切開發、架構的前提,沒有一個好的基礎,是沒法讓你自身的技術水平達到足夠高的維度。例如你對於繼承理解的並不透徹,你很難理解清晰 React 的內部實現。

對於開發規範,筆者在帶應屆生時特別注意讓他們遵照。代碼規範比比皆是,可是不多有人嚴格遵照。究其緣由,可能是在代碼規範制定以前,已經有本身的一套代碼習慣,很難短期改變本身的習慣。而應屆生,通常來講代碼並很少,尚未造成本身的編碼習慣。這時候,開始遵照必定的規範,會促使他們養成一個較好的編碼習慣,爲後續的成長打好基礎。下面,列舉一下開發規範的幾點好處,讓你們明白代碼規範的重要性:

  • 規範的代碼能夠促進團隊合做。
  • 規範的代碼能夠減小 Bug 處理。
  • 規範的代碼能夠下降維護成本。
  • 規範的代碼有助於代碼審查。
  • 養成代碼規範的習慣,有助於程序員自身的成長。

這部分最後,推薦一些學習技術的好地方,例如情封大大三年不停更的《前端早讀課》、阿里大漠(不是大漠窮秋)的 w3cplus.com、微信公衆號《前端圈》、《前端之巔》、《Node 全棧》,固然還有公司內的 《Qunar 技術沙龍》微信公衆號,筆者所在團隊 YMFE 的博客 blog.ymfe.org 等,都是學習技術的好地方。

主戰場 —— 移動混合開發

隨着移動浪潮的興起,業務在移動端App 的需求量迅速擴大,應用迭代更新的頻率也隨之極速攀升,但與此同時純 Native 的開發和更新成本成爲了業務增加難以逾越的瓶頸。所以,引入一種開發更高效、成本更低的解決方案勢在必行。

在當前的移動互聯網環境下,iOS 和 Android 上的 App 已經成了每一個互聯網產品的標配。若是一個用戶端產品並不提供相應 App 版本,幾乎會直接定義成一個不完整的產品。而被互聯網人尊爲鐵律的『惟快不破』—— 快速開發、高速迭代、低成本上線,同時也是移動時代每一個開發團隊所追求的目標。綜合以上兩點緣由,『Native 搭臺,Web 唱戲』的 Hybrid 開發模式,以『快』的特色贏得了你們的青睞,並紛紛投入大量開發力量,使這種開發模式迅速走紅。當前最多見的技術架構方案有如下三種:

  • 基於 Web 的 Hybrid 解決方案:例如微信瀏覽器、各公司的 Hybrid 方案
  • 非基於 Web UI 但業務邏輯基於 JavaScript 的解決方案:例如 React-Native
  • 基於 Web UI,可是爲了追求運行效率,對 UI 展示邏輯和業務邏輯的 JavaScript 進行了隔離的解決方案:微信小程序

對於一個前端,筆者感受每一個人必須瞭解這三種常見方案的實現方式和優缺點,這樣才能在開發移動端業務的時候,更爲清楚本身所要注意、所要學習的地方。固然,僅僅瞭解實現方式是不夠的,你要有環境去實踐你學習的東西。再拿去哪兒爲例,去哪兒如今大多數業務都是移動端的,Hybrid 和 RN 方案都在被使用。因此,做爲一個應屆生,你頗有可能去作一些 Hybrid 或者 RN 的項目。作 Hybrid 項目時,你更多要考慮的是『如何高效地操做 Dom』;反之,作 RN 項目,你更多要考慮的則是『如何減小和 Native 的通訊』。這兩點,最終都會反應在項目的用戶體驗上。

前端中的『另類』—— Node

對於 Node,做爲一個前端,應該並不陌生。Node 最大的賣點在於徹底異步的 I/O 模型,相比於阻塞 I/O ,異步 I/O 模型極大提升 Web 服務的併發性。所以,前端均可以本身開發服務端了?

這樣認爲的同窗,筆者只能說,你想多了。Node 是能夠開發服務端,可是不表明全部前端均可以使用 Node 去開發一個龐大業務的服務端。你去知乎搜索使用 Node 開發服務端的相關問題,一部分人會說 Node 不能替代以前的服務端語言,另外一部分人會說什麼也阻擋不了 Node 在服務端的腳步;同時有不少諸如 Paypal、阿里這樣大公司大規模使用 Node,也不少公司在落入 Node 深坑而不起。不論爭論如何,筆者認爲,Node 是否能寫服務端,主要在於使用 Node 的人是否有服務端的思想。開發服務端和開發前端是徹底不一樣的思想,服務端更注重效率、更注重穩定、更注重高併發狀況下數據的處理,用前端的思想去開發服務端顯然是不行的。固然,成功的案例中,Node 也更多運用在頁面渲染這一層,配合前端更快的渲染頁面,提升用戶體驗;而複雜的數據邏輯,仍是用傳統的服務端語言進行開發,畢竟技術成熟、運維成本低。

這裏,會出現一個問題,我只是前端,需不須要去學習 Node?筆者的答案是 須要。前端興起已經不少年,已經從游擊隊亂槍打鳥的階段逐漸變爲規模化、工程化的時代。在這個時代中,尤爲是在工具和流程方面,Node 起到了很大的做用,扮演很重要的角色。諸如 Webpack、Gulp、NPM 這些工具,他們被運用在各個公司的各種前端項目中。學習 Node 其實就是去學習前端的工具,去學習前端的工程化。

固然,若是你立志是全棧,或者想作服務端的一些工做,再或者想經過 Node 學習服務端的技術和原理,均可以去學習 Node。請相信筆者,你不會失望的。

前端一直在『造輪子』中不斷前進

造輪子 的意義是從新實現已有的功能,以達到更好的效果。這個詞語,常見於技術圈,尤爲是前端圈,逐漸被人貶義地用來『嘲諷』一個從新實現已有功能的工具、框架以及方案。那麼,造輪子到底是怎樣一種行爲?

首先,筆者並不排斥造輪子,至少有一位大神造輪子造得很成功,那就是 Linus Torvalds。Minix 很差用,就造了一個 Linux;Bitkeeper 中止受權,就造了一個 Git。而且兩個新『輪子』已經成爲世界上最好的輪子之二。這種創造性的造輪子,是使人讚揚的。

其次,不一樣的技術體系,互相學習,參考對方的思想,造本身的輪子,也是一個很是好的想法。尤爲是前端,它經過學習其餘語言、體系的架構方案,豐富自身,短短几年就上升到很高的高度。能夠舉得列子不少:例如 Angular 的 MVC + DI + IoC 的模式,不少人會直接想到 Java 的 Spring,甚至 Angular 也包含 AOP 的編程思想;再例如 MVVM 雙向數據流的模式,自己就是微軟的 WPF 首先提出的。輪子能夠造,對開發有意義便可。

最後,你們 反感造輪子,其實更多在於反感造一個沒有任何創新的輪子,還每天處處宣揚本身的產物。你能夠本身造一個沒有任何創新的輪子,用來學習造輪子的過程,同時這也是深刻輪子最好的方式,沒有之一。當你瞭解當前輪子的根本構造以後,你就能在這個基礎上進行更多的創新。

其餘方面的學習

做爲一個前端,最該學習的兩個方面是 產品設計 。學習產品思惟,會幫助你從用戶的角度審查你開發的產品,找出用戶體驗不優、交互很差的地方;而學習設計,則幫助你分析不優的地方的緣由,並找出解決方案。固然,每一個人的精力有限,不可能把這兩個方面學得特別深,但最好都要有接觸,有必定深度的學習。

小總結

前文並無直接跟你們說明怎麼作職業規劃,而是從發展方向、技術學習、主要業務場景、NodeJS、造輪子問題等多個方面,來給你們分析:做爲前端,哪些須要作、哪些不須要作、哪些必須作、哪些能夠作。你們能夠根據本身的興趣、能力等特性,而且和本身在公司所作的項目結合,決定作哪些、不作哪些、強制本身作哪些、有空餘時間作哪些等等相似的決定。這裏能夠舉個例子,例如:個人目標是成爲一個技術專家,所以,我要深植業務一到兩年,嚴格控制本身的代碼規範,深刻了解 React 體系,在移動端主攻 React Native,並且有時間看 Node 及 Babel 相關工具,目標是完全理解 React 的技術實現和 Web Component 的開發思想。當你有這樣一個目標時,你能夠清楚知道本身作事的目的,能夠清晰看到本身的成長。

要注意的是,若是你已經有工做的話,你的職業規劃絕對不能脫離你如今的工做。實踐出真知,工做帶給你的實踐環境,纔是你成長的養分來源。

前端的將來

對於前端的將來,或者說是互聯網技術的將來,我比較認同阮一峯老師的一個觀點:未來程序員只分爲兩類,端工程師雲工程師。端工程師,直面用戶,爲了用戶能更好使用產品而殫精竭慮,包括傳統的前端、Native、AR/VR、TV 端開發等;而云工程師,直面數據,將冰冷冷的數據轉化爲與用戶息息相關的產品,包括分佈式、大數據、機器學習等等。

前端無論演變成什麼,它所關注的永遠是 用戶體驗,只不過端增長了,開發的方式也增多了而已。做爲一個前端工程師,要時時關注業界動態,更多地學習新技術,提高本身的實力,來適應更大的挑戰。

寫在最後

做爲一個初入前端圈的新人,你或許對上面描述的東西並不徹底理解,這沒有任何問題。作一個適合本身的職業規劃,並不急於一時,其實最好是在工做一段時間後,和你的 leader 或者夥伴們一塊兒對本身作一個評估,並根據前面所講,給本身制定一個適合自身狀況、符合自身興趣的職業規劃,並按照規劃一步步不斷提升本身,向前方的成功邁進。

筆者真心但願這篇文章能夠給正在迷茫的你些許幫助。年輕且精力旺盛的前端領域,尚未造成像後端那樣多的實施標準和最佳實踐,每一個人均可能有不一樣的思惟、不一樣的思路。本文僅是筆者我的觀點和見解,有錯誤或者疏漏之處,敬請諒解。同時也歡迎私下和筆者進行更深層次的探討。

最後,送給你們 PHP核心開發者『鳥哥』惠新宸 在近日微博上更新的一句話:

相關文章
相關標籤/搜索