寫給前端應(yīng)屆生的職業(yè)規(guī)劃建議
大家好,我是TianTian。
對(duì)于剛剛畢業(yè)的應(yīng)屆生來說,初期可能會(huì)迷茫,不知道如何快速成長,那么職業(yè)規(guī)劃就顯得很重要。
這位工作5年多的大佬,將很多建議以及想說的話,都闡述在本文,他的一些職業(yè)規(guī)劃建議或許可以給你一些啟示。

前言
近一年多的時(shí)間,筆者在公司中擔(dān)任過應(yīng)屆生導(dǎo)師、實(shí)習(xí)生導(dǎo)師、應(yīng)屆生項(xiàng)目導(dǎo)師等一系列導(dǎo)師角色。期間,筆者發(fā)現(xiàn)一些即將和準(zhǔn)備成為前端攻城獅的同學(xué)其實(shí)并沒有明確前端真正的核心和定位,也沒有給自己制定一個(gè)學(xué)習(xí)和發(fā)展的方向。當(dāng)初選擇前端這個(gè)職業(yè),也僅僅只是為了找一份工作而已。筆者很想以自己的多年工作經(jīng)驗(yàn),為前端應(yīng)屆生們分享一下我心中適合前端工程師的職業(yè)規(guī)劃,讓大家對(duì)自己有一個(gè)比較清醒的認(rèn)知,避免在以后的成長過程中產(chǎn)生迷茫情緒。當(dāng)然,筆者其實(shí)也才工作五年,能達(dá)到現(xiàn)在的技術(shù)水平和職級(jí),應(yīng)該算是發(fā)展上升比較快的,一些經(jīng)驗(yàn)具備一定的借鑒價(jià)值。
前端的興起
前端真正興起和開始頻繁出現(xiàn)在大家的視線里,大概是在十年前。彼時(shí)的 Web 開發(fā)基本是由后端主導(dǎo),前端能做的只是校驗(yàn)一下數(shù)據(jù)、操作一下 DOM。(其中數(shù)據(jù)檢驗(yàn)是 JS 產(chǎn)生的根本原因:當(dāng)時(shí)網(wǎng)絡(luò)太慢,在服務(wù)端檢驗(yàn)數(shù)據(jù)并反饋給用戶,讓用戶知曉輸入錯(cuò)誤,這個(gè)流程太長、反應(yīng)太慢,因此通過腳本在用戶端完成第一步校驗(yàn),既方便了用戶,又減輕了帶寬的壓力。)即使 06 年 jQuery 發(fā)布并風(fēng)靡全球,以及 XMLHttpRequest 被納入 W3C 標(biāo)準(zhǔn),也沒有改變這種狀況。制約它進(jìn)度的原因很簡(jiǎn)單,因?yàn)楹芏嗍虑榍岸?做不了 或者 做不好。隨著時(shí)間的推移,近幾年,Angular、Backbone、React、Vue 等框架陸續(xù)發(fā)布,讓前端越來越正規(guī)化、體系化。此時(shí)雖然仍有很多事,前端 做不了 或者 做不好,但前端這個(gè)崗位卻已變得熱辣空前。那么,是什么推動(dòng)著前端發(fā)展到如此大的規(guī)模和火熱的程度?

也許,你可以列舉出很多各種各樣的原因,但是綜其一點(diǎn),就是 『用戶體驗(yàn)』 ,是由于所有人對(duì)用戶體驗(yàn)的重視,才讓前端發(fā)展得這么迅猛,這么快地興起。這里,可能要感謝 Apple,感謝 iPhone,感謝 Jobs,07 年第一代 iPhone 發(fā)布,正式引發(fā)了幾乎所有人對(duì)用戶體驗(yàn)的重視,從『只要能用就好』,變成『要好用我才買單』的心理。而,前端的先驅(qū)者們、瀏覽器的開發(fā)者們,也順應(yīng)了這個(gè)潮流,將一系列重要的能力加入了瀏覽器,加入了前端。
其中最重要的一項(xiàng)是 XMLHttpRequest,也就是 Ajax,它是富 Web 應(yīng)用的基礎(chǔ),它讓前端可以脫離后端的掌控,不用通過跳轉(zhuǎn)的方式就能實(shí)現(xiàn)數(shù)據(jù)交互。感謝微軟,感謝 IE,雖然被 IE 6~8 虐了無數(shù)遍,但是是它引入了 XMLHttpRequest ,引入了 Ajax,開啟了富 Web 應(yīng)用的時(shí)代,讓用戶體驗(yàn)大幅提升。
而近幾年,隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展,多端多平臺(tái)的需求越來越多,產(chǎn)品形態(tài)和數(shù)據(jù)分離,是形勢(shì)所趨。而與此同時(shí),移動(dòng)時(shí)代對(duì)產(chǎn)品形態(tài)跨端、跨平臺(tái)、多元化的用戶體驗(yàn)要求,讓本身就有跨平臺(tái)特性的前端技術(shù)著實(shí)又火了一把,它讓開發(fā)者有更多的時(shí)間和精力關(guān)注用戶體驗(yàn),并很容易保持多平臺(tái)用戶體驗(yàn)的統(tǒng)一(不同平臺(tái)用不同技術(shù)實(shí)現(xiàn),雖然可以,但成本太高);除去上面的原因之外,前端技術(shù)自帶的熱發(fā)布、熱更新特性,能在及時(shí)更新業(yè)務(wù)需求的同時(shí)快速修復(fù)用戶所遇到的問題,也是大家選擇它的一種原因。雖然另外還有很多零零總總、各種各樣的原因,再促使著前端成為當(dāng)前最火爆的幾個(gè)職位之一,但是最根本的原因仍舊是大家對(duì)用戶體驗(yàn)的要求。
從上面可以看出,前端的興起源于所有人對(duì) 用戶體驗(yàn) 的重視,而火爆更是由于所有人對(duì) 多元化的用戶體驗(yàn) 的關(guān)注。當(dāng)然,用戶體驗(yàn)不只只是 UI 漂亮、好看,它是多方面的,例如視圖的加載速度和流暢程度,這些取決于你選擇技術(shù)的編碼體積、運(yùn)行效率等多種因素。說白了,前端的目的就是 讓用戶用得爽,那么 用戶體驗(yàn) 必須是重中之重。

說了這么多,其實(shí)有一個(gè)很重要的點(diǎn)沒有提到,那就是 CSS。注重用戶體驗(yàn),首先你要用界面要有 UI,HTML + CSS 作為最簡(jiǎn)單的 UI 構(gòu)建方式,讓前端的 UI 開發(fā)成本低到無與倫比,而開發(fā)成本低才會(huì)有更多的時(shí)間和精力去注重用戶體驗(yàn)。同時(shí),現(xiàn)在 CSS 也有相應(yīng)的框架,像 PostCss、Sass 等,更進(jìn)一步降低了開發(fā)成本,釋放了開發(fā)者的時(shí)間和精力。
前端興起這十年,也是用戶體驗(yàn)飛速增長的十年。不管是技術(shù)完善度還是從業(yè)人數(shù),前端這個(gè)方向受到了足夠多技術(shù)人員的關(guān)注,同時(shí)也受到了足夠多企業(yè)的重視。經(jīng)過前端人不斷的努力,現(xiàn)在的情況又如何呢?
前端的現(xiàn)狀
提到現(xiàn)狀,必須先提到一個(gè)概念 大前端。由于近幾年互聯(lián)網(wǎng)的發(fā)展,尤其是移動(dòng)互聯(lián)網(wǎng)的發(fā)展,有的大前端概念將 Native 歸入前端的范疇,有的大前端概念將 Node 甚至只渲染頁面的 PHP 歸入前端范疇,但不管怎么說,筆者認(rèn)為 大前端 是未來的一個(gè)趨勢(shì),將最終目標(biāo)(提升用戶體驗(yàn))一致的技術(shù)歸類到一起,讓開發(fā)者清楚自己的最終目標(biāo)是什么,要怎么做。當(dāng)然,也正因?yàn)檫@點(diǎn),作為一個(gè)前端工程師,如果你想更好的發(fā)展,你應(yīng)該有更廣的知識(shí)面,包括移動(dòng)端知識(shí)、服務(wù)端知識(shí)。這些知識(shí)結(jié)合你的前端技術(shù),才能更好地實(shí)現(xiàn)優(yōu)秀的用戶體驗(yàn)。
拋開大前端,單談前端,從前端架構(gòu)層面談,最近比較流行的有四個(gè):老牌勁旅 jQuery、最近火得不能再火的 React、Google 精品 Angular 以及 MVVM 框架 Vue。現(xiàn)在幾乎所有的項(xiàng)目都會(huì)在這四種架構(gòu)方案中選擇其一作為基礎(chǔ),進(jìn)行業(yè)務(wù)開發(fā)。四種框架,四種不同的思想,簡(jiǎn)單來說:jQuery Dom 驅(qū)動(dòng)的思想深入人心;React 則推崇組件化,萬物皆組件;Angular 則把 MVC 在前端領(lǐng)域發(fā)揚(yáng)光大;而 Vue 則是以數(shù)據(jù)驅(qū)動(dòng)為核心的 MVVM 架構(gòu)。作為一個(gè)前端新人,不可能很快就理解所有知識(shí)和思想,只能一步一步來,先把你在工作中所使用的框架理解透徹,再去思考和學(xué)習(xí)別的。說實(shí)話,會(huì)用和理解的差距很大。
在這里,可能會(huì)有個(gè)疑問,上述四個(gè)架構(gòu),都很火,但是哪里涉及到用戶體驗(yàn)了?是的,這些架構(gòu)都沒有直接涉及到 UI。但是就像足球,沒有勤奮的訓(xùn)練和優(yōu)秀的戰(zhàn)術(shù),再好的11人也踢不出好的比賽一樣,這些架構(gòu)從開發(fā)成本和開發(fā)體驗(yàn)上,降低了開發(fā)者編碼和維護(hù)的難度,讓其在 UI 的用戶體驗(yàn)上的付出,事半功倍。當(dāng)然,框架在編碼體積、運(yùn)行效率等多個(gè)方面影響了最終的用戶體驗(yàn)。

上面所說的是,當(dāng)前前端的一大現(xiàn)狀 —— 框架橫行,現(xiàn)在很少有公司、有工程師用純?cè)嫉姆绞綌]代碼了。而前端另一大現(xiàn)狀就是 —— 移動(dòng)為先。原因很簡(jiǎn)單,隨著移動(dòng)互聯(lián)網(wǎng)用戶的暴漲,各個(gè)公司的產(chǎn)品都是移動(dòng)為先,技術(shù)跟隨著產(chǎn)品的步伐,也必須移動(dòng)為先。這時(shí),為了解決多平臺(tái)的問題,Hybrid 方案脫穎而出,包括傳統(tǒng)的基于 WebView 的 Hybrid 方案(例如 Cordova)和 React-Native 等一系列技術(shù)方案。在這里我就不多說了,關(guān)于移動(dòng)前端的內(nèi)容最近充斥著各種技術(shù)論壇、交流群、公共號(hào),具體的,大家可以自己親身去了解。
最后,對(duì)于現(xiàn)狀,我想大家可能最關(guān)心的其實(shí)是職業(yè)形勢(shì)。由于前端的興起,前端人才市場(chǎng)相當(dāng)活躍,平均薪金水平也是名列前茅。與此同時(shí),前端的技術(shù)入門比較容易,造成另一個(gè)極端情況:人員泛濫、人才稀缺。這種情況,一方面由于前端發(fā)展太快,很難短時(shí)間掌握全部知識(shí);另一方面,高等院校并沒有開設(shè)專門的前端專業(yè),大家更多是自學(xué),野路子很多。所謂亂世出英雄,這樣的前端大環(huán)境或許對(duì)一個(gè)新入行的同學(xué)更有利。當(dāng)然,在如此『亂世』中,一個(gè)好的職業(yè)規(guī)劃,才能避免『誤入歧途』,保證自身順利地成長。
如何做一個(gè)職業(yè)規(guī)劃
上面講述了前端如何興起和前端的現(xiàn)狀,下面將基于上述兩點(diǎn),分幾個(gè)方面為大家提供一些有關(guān)職業(yè)規(guī)劃的觀點(diǎn),希望對(duì)大家有幫助。
確定方向
做職業(yè)規(guī)劃的目的是避免迷茫,而避免迷茫最有效的方式就是確定明確的方向和目標(biāo)。

對(duì)于任何一個(gè)技術(shù)崗位,都有固定的兩個(gè)方向:技術(shù)專家(架構(gòu)師)和 開發(fā)經(jīng)理。前者偏重技術(shù),需要你在當(dāng)前領(lǐng)域鉆研得很深;后者偏向管理,需要你在對(duì)技術(shù)有很深掌握的同時(shí),可以帶領(lǐng)團(tuán)隊(duì)完成項(xiàng)目的開發(fā)。當(dāng)然,兩者并不是魚與熊掌的關(guān)系,你可以同時(shí)成為技術(shù)專家和開發(fā)經(jīng)理。
對(duì)于技術(shù)專家和開發(fā)經(jīng)理兩個(gè)方向的選擇,更多取決于你自身在工作中多巴胺的分泌情況。當(dāng)你專研技術(shù)時(shí),多巴胺分泌得更多,感到更興奮,或許你會(huì)很容易成為技術(shù)專家;反之,當(dāng)你跟團(tuán)隊(duì)一起做業(yè)務(wù)時(shí),多巴胺分泌得更多,更有獲得感,那么你可以嘗試向開發(fā)經(jīng)理方向發(fā)展。當(dāng)然,你也可能做什么都沒有分泌太多的多巴胺,那么,你可以在嘗試一段時(shí)間后,轉(zhuǎn)型其他職業(yè),例如產(chǎn)品經(jīng)理。前端作為核心是用戶體驗(yàn),與用戶最近的工程師,轉(zhuǎn)型產(chǎn)品經(jīng)理,阻礙會(huì)小一些。況且,文藝型前端布道人豆瓣前端負(fù)責(zé)人張克軍認(rèn)為,前端工程師正慢慢演變?yōu)楫a(chǎn)品工程師,前端和產(chǎn)品離得確實(shí)很近。
當(dāng)你選擇好一個(gè)方向后,你就要朝著這個(gè)方向一步一步進(jìn)發(fā)。丹尼爾在《一萬小時(shí)天才理論》提出一萬小時(shí)定律,即要成為某個(gè)領(lǐng)域的專家,需要積累一萬小時(shí)。當(dāng)然這只是個(gè)概數(shù),不過每天花更多的時(shí)間去學(xué)習(xí)和實(shí)踐,肯定是最有效的。這里,成為技術(shù)專家和開發(fā)經(jīng)理過程中,關(guān)注的點(diǎn)略有差別。成長為技術(shù)專家,要更多關(guān)注技術(shù)本身的實(shí)現(xiàn),包括邏輯、架構(gòu)、設(shè)計(jì)模式、方法論等;而成長為技術(shù)經(jīng)理,則要更多關(guān)注技術(shù)開發(fā)的過程,考慮如何提高開發(fā)效率、降低開發(fā)成本、優(yōu)化開發(fā)質(zhì)量等等。不同的人,精力是有限的,選擇性關(guān)注一些必要的方面,對(duì)自身快速的成長是很有必要的。
做業(yè)務(wù)還是做架構(gòu)
做業(yè)務(wù),時(shí)間要求比較緊,代碼質(zhì)量要求高,可參考的代碼比較多,業(yè)務(wù)知識(shí)需要學(xué)習(xí)。做架構(gòu),時(shí)間稍微自由,對(duì)經(jīng)驗(yàn)要求比較高,無可參考代碼,專業(yè)基礎(chǔ)知識(shí)需要深刻理解;最主要的,做架構(gòu)的你既是開發(fā),又是用戶,還是 PM ,只有 80% - 90% 的明確目標(biāo),并在開發(fā)過程中不斷微調(diào)最終的目標(biāo)。
對(duì)于一個(gè)新人,其實(shí)不用糾結(jié),做業(yè)務(wù)才是好的選擇,而且做 技術(shù)含量高、使用流行技術(shù) 的業(yè)務(wù)才是最好的。原因很簡(jiǎn)單,架構(gòu)的最終的目的是解決業(yè)務(wù)當(dāng)中的問題,你沒做過業(yè)務(wù),哪能知道業(yè)務(wù)的問題在哪,你都不知道要解決什么問題,如何做好架構(gòu)。所以,從業(yè)務(wù)做起,是新人最好的選擇,也是唯一可行的選擇。而選擇有技術(shù)含量、使用流行技術(shù)的業(yè)務(wù)的原因更多在于成長,這樣你的成長可能會(huì)更快、成長道路可能會(huì)更直。當(dāng)然,這只是『可能』,不同的人適合不同的業(yè)務(wù),所以不要強(qiáng)求一定『技術(shù)含量高、使用流行技術(shù)』的業(yè)務(wù),更多的而是改變自己,去 適應(yīng)團(tuán)隊(duì)、適應(yīng)業(yè)務(wù),這樣才能 更快地成長。
事實(shí)上,很多時(shí)候,你會(huì)遇到很業(yè)務(wù)工作很繁重沒有額外時(shí)間學(xué)習(xí)的情況。而如何在這樣環(huán)境中更快地成長呢?說白了就是『抄』,不不,是 參考。將學(xué)習(xí)融入到工作中,是最好的方法。做新項(xiàng)目,參考老項(xiàng)目代碼;做新需求,參考老需求的代碼;沒有同類型的代碼,參考別的業(yè)務(wù)的代碼。參考前人的經(jīng)驗(yàn),在巨人的肩膀上,成長才會(huì)變得更快。同時(shí),你的導(dǎo)師和你的伙伴,也會(huì)在業(yè)務(wù)中給你指點(diǎn),幫你快速解決成長路上的問題。

在這里,總結(jié)一下,在繁重的業(yè)務(wù)環(huán)境下快速成長,你需要 很優(yōu)秀的學(xué)習(xí)能力、很持久的耐心 以及 很好的導(dǎo)師和伙伴,這樣才能在技術(shù)成長的路上事半功倍。
技術(shù)的學(xué)習(xí)
說了半天,到了最核心的問題了,對(duì)于一個(gè)新人如何學(xué)習(xí)技術(shù)?筆者給的建議是:千萬不要囫圇吞棗,先把當(dāng)前使用的技術(shù)學(xué)透用熟,才是最重要的;千萬不要在還沒把當(dāng)前使用的技術(shù)吃透之前,去學(xué)新的東西,不管新的東西有多火。就像上文所說,不同的框架,有不同的核心,有不同的思想。兩個(gè)框架代碼相似之處的思想不一定相似,例如 Angular 和 Vue 都有雙向綁定,雖然效果相似,但是實(shí)現(xiàn)思想和內(nèi)部實(shí)現(xiàn)方式是截然不同的。還在入門階段的你,會(huì)被各種思想充斥頭腦,反而會(huì)更不清楚。
一定的時(shí)間后,當(dāng)你理解透一個(gè)架構(gòu)體系后,你可以 類比地去看 更多的架構(gòu)體系。這時(shí)候,你會(huì)發(fā)現(xiàn)不同架構(gòu)很多東西都是殊途同歸,理解得很快。

當(dāng)然,理解透一個(gè)架構(gòu)體系,有人需要一年,有人需要三年,還有人可能需要更長時(shí)間。為什么有這么大的區(qū)別呢?因?yàn)橛行┤嗽陂_發(fā)中,并不認(rèn)為完成就可以了,會(huì)在開發(fā)中,追求代碼的優(yōu)美,會(huì)不斷優(yōu)化自己的代碼,讓自己的代碼性能更好、可讀性更高,并通過長時(shí)間的積累,達(dá)到 量變導(dǎo)致質(zhì)變 的程度。即使一個(gè)特別聰明的人,沒有『量』也不可能『質(zhì)變』的,只不過他的量可能比其他人少而已。
要提醒的一點(diǎn)是,學(xué)技術(shù),一定要結(jié)合你所在公司、團(tuán)隊(duì)的技術(shù)棧。例如,去哪兒前端應(yīng)屆生會(huì)在進(jìn)入業(yè)務(wù)線前,進(jìn)行3個(gè)月的脫產(chǎn)培訓(xùn),2017年的前端培訓(xùn)課程內(nèi)容中涉及的技術(shù)主要是 React 和 React Native,而去哪兒業(yè)務(wù)的技術(shù)棧也大多是 React,那么作為去哪兒的前端應(yīng)屆生,你優(yōu)先學(xué)習(xí) React 的技術(shù)體系是事半功倍的,既有前人可以問,又有項(xiàng)目可以實(shí)踐。
當(dāng)然,在學(xué)習(xí)架構(gòu)的同時(shí),不要忽略兩樣最基本的東西,一個(gè)是 技術(shù)基礎(chǔ),一個(gè)是 開發(fā)規(guī)范。
技術(shù)基礎(chǔ)是一切開發(fā)、架構(gòu)的前提,沒有一個(gè)好的基礎(chǔ),是無法讓你自身的技術(shù)水平達(dá)到足夠高的維度。例如你對(duì)于繼承理解的并不透徹,你很難理解清晰 React 的內(nèi)部實(shí)現(xiàn)。
對(duì)于開發(fā)規(guī)范,筆者在帶應(yīng)屆生時(shí)特別注意讓他們遵守。代碼規(guī)范比比皆是,但是很少有人嚴(yán)格遵守。究其原因,多是在代碼規(guī)范制定之前,已經(jīng)有自己的一套代碼習(xí)慣,很難短時(shí)間改變自己的習(xí)慣。而應(yīng)屆生,一般來說代碼并不多,還沒有形成自己的編碼習(xí)慣。這時(shí)候,開始遵守一定的規(guī)范,會(huì)促使他們養(yǎng)成一個(gè)較好的編碼習(xí)慣,為后續(xù)的成長打好基礎(chǔ)。下面,列舉一下開發(fā)規(guī)范的幾點(diǎn)好處,讓大家明白代碼規(guī)范的重要性:
規(guī)范的代碼可以促進(jìn)團(tuán)隊(duì)合作。 規(guī)范的代碼可以減少 Bug 處理。 規(guī)范的代碼可以降低維護(hù)成本。 規(guī)范的代碼有助于代碼審查。 養(yǎng)成代碼規(guī)范的習(xí)慣,有助于程序員自身的成長。

這部分最后,推薦一些學(xué)習(xí)技術(shù)的好地方,例如情封大大三年不停更的《前端早讀課》、阿里大漠(不是大漠窮秋)的 w3cplus.com、微信公眾號(hào)《前端圈》、《前端之巔》、《Node 全棧》,當(dāng)然還有公司內(nèi)的 《Qunar 技術(shù)沙龍》微信公眾號(hào),筆者所在團(tuán)隊(duì) YMFE 的博客 blog.ymfe.org 等,都是學(xué)習(xí)技術(shù)的好地方。
主戰(zhàn)場(chǎng) —— 移動(dòng)混合開發(fā)
隨著移動(dòng)浪潮的興起,業(yè)務(wù)在移動(dòng)端App 的需求量迅速擴(kuò)大,應(yīng)用迭代更新的頻率也隨之極速攀升,但與此同時(shí)純 Native 的開發(fā)和更新成本成為了業(yè)務(wù)增長難以逾越的瓶頸。因此,引入一種開發(fā)更高效、成本更低的解決方案勢(shì)在必行。

在當(dāng)前的移動(dòng)互聯(lián)網(wǎng)環(huán)境下,iOS 和 Android 上的 App 已經(jīng)成了每個(gè)互聯(lián)網(wǎng)產(chǎn)品的標(biāo)配。如果一個(gè)用戶端產(chǎn)品并不提供相應(yīng) App 版本,幾乎會(huì)直接定義成一個(gè)不完整的產(chǎn)品。而被互聯(lián)網(wǎng)人尊為鐵律的『唯快不破』—— 快速開發(fā)、高速迭代、低成本上線,同時(shí)也是移動(dòng)時(shí)代每個(gè)開發(fā)團(tuán)隊(duì)所追求的目標(biāo)。綜合以上兩點(diǎn)原因,『Native 搭臺(tái),Web 唱戲』的 Hybrid 開發(fā)模式,以『快』的特點(diǎn)贏得了大家的青睞,并紛紛投入大量開發(fā)力量,使這種開發(fā)模式迅速走紅。當(dāng)前最常見的技術(shù)架構(gòu)方案有以下三種:
基于 Web 的 Hybrid 解決方案:例如微信瀏覽器、各公司的 Hybrid 方案 非基于 Web UI 但業(yè)務(wù)邏輯基于 JavaScript 的解決方案:例如 React-Native 基于 Web UI,但是為了追求運(yùn)行效率,對(duì) UI 展現(xiàn)邏輯和業(yè)務(wù)邏輯的 JavaScript 進(jìn)行了隔離的解決方案:微信小程序
對(duì)于一個(gè)前端,筆者感覺每個(gè)人必須了解這三種常見方案的實(shí)現(xiàn)方式和優(yōu)缺點(diǎn),這樣才能在開發(fā)移動(dòng)端業(yè)務(wù)的時(shí)候,更為清楚自己所要注意、所要學(xué)習(xí)的地方。當(dāng)然,僅僅了解實(shí)現(xiàn)方式是不夠的,你要有環(huán)境去實(shí)踐你學(xué)習(xí)的東西。再拿去哪兒為例,去哪兒現(xiàn)在大多數(shù)業(yè)務(wù)都是移動(dòng)端的,Hybrid 和 RN 方案都在被使用。所以,作為一個(gè)應(yīng)屆生,你很有可能去做一些 Hybrid 或者 RN 的項(xiàng)目。做 Hybrid 項(xiàng)目時(shí),你更多要考慮的是『如何高效地操作 Dom』;反之,做 RN 項(xiàng)目,你更多要考慮的則是『如何減少和 Native 的通信』。這兩點(diǎn),最終都會(huì)反應(yīng)在項(xiàng)目的用戶體驗(yàn)上。
前端中的『另類』—— Node
對(duì)于 Node,作為一個(gè)前端,應(yīng)該并不陌生。Node 最大的賣點(diǎn)在于完全異步的 I/O 模型,相比于阻塞 I/O ,異步 I/O 模型極大提高 Web 服務(wù)的并發(fā)性。因此,前端都可以自己開發(fā)服務(wù)端了?
這樣認(rèn)為的同學(xué),筆者只能說,你想多了。Node 是可以開發(fā)服務(wù)端,但是不代表所有前端都可以使用 Node 去開發(fā)一個(gè)龐大業(yè)務(wù)的服務(wù)端。你去知乎搜索使用 Node 開發(fā)服務(wù)端的相關(guān)問題,一部分人會(huì)說 Node 不能替代之前的服務(wù)端語言,另一部分人會(huì)說什么也阻擋不了 Node 在服務(wù)端的腳步;同時(shí)有很多諸如 Paypal、阿里這樣大公司大規(guī)模使用 Node,也很多公司在落入 Node 深坑而不起。不論爭(zhēng)論如何,筆者認(rèn)為,Node 是否能寫服務(wù)端,主要在于使用 Node 的人是否有服務(wù)端的思想。開發(fā)服務(wù)端和開發(fā)前端是完全不同的思想,服務(wù)端更注重效率、更注重穩(wěn)定、更注重高并發(fā)情況下數(shù)據(jù)的處理,用前端的思想去開發(fā)服務(wù)端顯然是不行的。當(dāng)然,成功的案例中,Node 也更多運(yùn)用在頁面渲染這一層,配合前端更快的渲染頁面,提高用戶體驗(yàn);而復(fù)雜的數(shù)據(jù)邏輯,還是用傳統(tǒng)的服務(wù)端語言進(jìn)行開發(fā),畢竟技術(shù)成熟、運(yùn)維成本低。

這里,會(huì)出現(xiàn)一個(gè)問題,我只是前端,需不需要去學(xué)習(xí) Node?筆者的答案是 需要。前端興起已經(jīng)很多年,已經(jīng)從游擊隊(duì)亂槍打鳥的階段逐漸變?yōu)橐?guī)模化、工程化的時(shí)代。在這個(gè)時(shí)代中,尤其是在工具和流程方面,Node 起到了很大的作用,扮演很重要的角色。諸如 Webpack、Gulp、NPM 這些工具,他們被運(yùn)用在各個(gè)公司的各類前端項(xiàng)目中。學(xué)習(xí) Node 其實(shí)就是去學(xué)習(xí)前端的工具,去學(xué)習(xí)前端的工程化。
當(dāng)然,如果你立志是全棧,或者想做服務(wù)端的一些工作,再或者想通過 Node 學(xué)習(xí)服務(wù)端的技術(shù)和原理,都可以去學(xué)習(xí) Node。請(qǐng)相信筆者,你不會(huì)失望的。
前端一直在『造輪子』中不斷前進(jìn)
造輪子 的意義是重新實(shí)現(xiàn)已有的功能,以達(dá)到更好的效果。這個(gè)詞語,常見于技術(shù)圈,尤其是前端圈,逐漸被人貶義地用來『嘲諷』一個(gè)重新實(shí)現(xiàn)已有功能的工具、框架以及方案。那么,造輪子究竟是怎樣一種行為?
首先,筆者并不排斥造輪子,至少有一位大神造輪子造得很成功,那就是 Linus Torvalds。Minix 不好用,就造了一個(gè) Linux;Bitkeeper 停止授權(quán),就造了一個(gè) Git。并且兩個(gè)新『輪子』已經(jīng)成為世界上最好的輪子之二。這種創(chuàng)造性的造輪子,是令人贊賞的。
其次,不同的技術(shù)體系,互相學(xué)習(xí),參考對(duì)方的思想,造自己的輪子,也是一個(gè)非常好的想法。尤其是前端,它通過學(xué)習(xí)其他語言、體系的架構(gòu)方案,豐富自身,短短幾年就上升到很高的高度。可以舉得列子很多:例如 Angular 的 MVC + DI + IoC 的模式,很多人會(huì)直接想到 Java 的 Spring,甚至 Angular 也包含 AOP 的編程思想;再例如 MVVM 雙向數(shù)據(jù)流的模式,本身就是微軟的 WPF 首先提出的。輪子可以造,對(duì)開發(fā)有意義即可。

最后,大家 反感造輪子,其實(shí)更多在于反感造一個(gè)沒有任何創(chuàng)新的輪子,還天天到處宣揚(yáng)自己的產(chǎn)物。你可以自己造一個(gè)沒有任何創(chuàng)新的輪子,用來學(xué)習(xí)造輪子的過程,同時(shí)這也是深入輪子最好的方式,沒有之一。當(dāng)你了解當(dāng)前輪子的根本構(gòu)造之后,你就能在這個(gè)基礎(chǔ)上進(jìn)行更多的創(chuàng)新。
其他方面的學(xué)習(xí)
作為一個(gè)前端,最該學(xué)習(xí)的兩個(gè)方面是 產(chǎn)品 和 設(shè)計(jì) 。學(xué)習(xí)產(chǎn)品思維,會(huì)幫助你從用戶的角度審查你開發(fā)的產(chǎn)品,找出用戶體驗(yàn)不優(yōu)、交互不好的地方;而學(xué)習(xí)設(shè)計(jì),則幫助你分析不優(yōu)的地方的原因,并找出解決方案。當(dāng)然,每個(gè)人的精力有限,不可能把這兩個(gè)方面學(xué)得特別深,但最好都要有接觸,有一定深度的學(xué)習(xí)。

小總結(jié)
前文并沒有直接跟大家說明怎么做職業(yè)規(guī)劃,而是從發(fā)展方向、技術(shù)學(xué)習(xí)、主要業(yè)務(wù)場(chǎng)景、NodeJS、造輪子問題等多個(gè)方面,來給大家分析:作為前端,哪些需要做、哪些不需要做、哪些必須做、哪些可以做。大家可以根據(jù)自己的興趣、能力等特性,并且和自己在公司所做的項(xiàng)目結(jié)合,決定做哪些、不做哪些、強(qiáng)制自己做哪些、有空余時(shí)間做哪些等等類似的決定。這里可以舉個(gè)例子,例如:我的目標(biāo)是成為一個(gè)技術(shù)專家,因此,我要深植業(yè)務(wù)一到兩年,嚴(yán)格控制自己的代碼規(guī)范,深入了解 React 體系,在移動(dòng)端主攻 React Native,而且有時(shí)間看 Node 及 Babel 相關(guān)工具,目標(biāo)是徹底理解 React 的技術(shù)實(shí)現(xiàn)和 Web Component 的開發(fā)思想。當(dāng)你有這樣一個(gè)目標(biāo)時(shí),你可以清楚知道自己做事的目的,可以清晰看到自己的成長。
要注意的是,如果你已經(jīng)有工作的話,你的職業(yè)規(guī)劃絕對(duì)不能脫離你現(xiàn)在的工作。實(shí)踐出真知,工作帶給你的實(shí)踐環(huán)境,才是你成長的營養(yǎng)來源。
前端的未來
對(duì)于前端的未來,或者說是互聯(lián)網(wǎng)技術(shù)的未來,我比較認(rèn)同阮一峰老師的一個(gè)觀點(diǎn):將來程序員只分為兩類,端工程師 和 云工程師。端工程師,直面用戶,為了用戶能更好使用產(chǎn)品而殫精竭慮,包括傳統(tǒng)的前端、Native、AR/VR、TV 端開發(fā)等;而云工程師,直面數(shù)據(jù),將冰冷冷的數(shù)據(jù)轉(zhuǎn)化為與用戶息息相關(guān)的產(chǎn)品,包括分布式、大數(shù)據(jù)、機(jī)器學(xué)習(xí)等等。

前端不管演變成什么,它所關(guān)注的永遠(yuǎn)是 用戶體驗(yàn),只不過端增加了,開發(fā)的方式也增多了而已。作為一個(gè)前端工程師,要時(shí)時(shí)關(guān)注業(yè)界動(dòng)態(tài),更多地學(xué)習(xí)新技術(shù),提升自己的實(shí)力,來適應(yīng)更大的挑戰(zhàn)。
寫在最后
作為一個(gè)初入前端圈的新人,你或許對(duì)上面描述的東西并不完全理解,這沒有任何問題。做一個(gè)適合自己的職業(yè)規(guī)劃,并不急于一時(shí),其實(shí)最好是在工作一段時(shí)間后,和你的 leader 或者伙伴們一起對(duì)自己做一個(gè)評(píng)估,并根據(jù)前面所講,給自己制定一個(gè)適合自身情況、符合自身興趣的職業(yè)規(guī)劃,并按照規(guī)劃一步步不斷提高自己,向前方的成功邁進(jìn)。
真心希望這篇文章可以給正在迷茫的你些許幫助。年輕且精力旺盛的前端領(lǐng)域,還沒有形成像后端那樣多的實(shí)施標(biāo)準(zhǔn)和最佳實(shí)踐,每個(gè)人都可能有不同的思維、不同的思路。本文僅是筆者個(gè)人觀點(diǎn)和看法,有錯(cuò)誤或者疏漏之處,敬請(qǐng)諒解。同時(shí)也歡迎私下和筆者進(jìn)行更深層次的探討。

2021-07-02
2021-06-30

最后
喜歡這篇文章?點(diǎn)個(gè)“在看”吧~▼
