職業(yè)規(guī)劃的過(guò)程中經(jīng)常會(huì)被問(wèn)到這樣的問(wèn)題:
我是該深入鉆研專精一門,走技術(shù)大牛路線,還是所有都要精通,做一個(gè)全棧工程師?
類似這樣的問(wèn)題還有其他變種問(wèn)題,是不是到了30歲最遲35歲就要轉(zhuǎn)管理了,是不是技術(shù)年齡大了就沒有優(yōu)勢(shì),精力跟不上了?
這些都是從業(yè)者普遍存在的問(wèn)題,反應(yīng)了技術(shù)發(fā)展的兩個(gè)方向,一種是縱向一種是橫向的,橫向的是瑞士軍刀,縱向的是削鐵如泥的干將莫邪。 到底選哪個(gè)呢?
很多人對(duì)前端、后端、全棧都是按能力排名的,排名方式如下:
前端>后端>全棧,然后人們都喜歡最牛掰的,就像沒人知道第二個(gè)登上月球的人一樣,然后全棧就火了。小編先把這三個(gè)工種該做什么不該做什么,大家就清楚怎么做了。
前端:
所有你能看到的東西都是前端做的,比如界面、交互,當(dāng)然還有數(shù)據(jù)從后臺(tái)讀取展示和向后臺(tái)發(fā)送數(shù)據(jù)。
(具體對(duì)比如圖,一圖抵萬(wàn)言。)
后端:
所有跟業(yè)務(wù)邏輯權(quán)限控制數(shù)據(jù)處理有關(guān)的都是后臺(tái)做的,比如權(quán)限控制、訂單管理、數(shù)據(jù)庫(kù)交互。
全棧:
前端后端都有一定的了解和能力,能夠前后端獨(dú)立工作。
通過(guò)以上三者的綜述,大家可以清晰的分出前端和后端的工作內(nèi)容和所需技術(shù),但是對(duì)全棧還不是很了解,至少他不是簡(jiǎn)單的前端+后端技術(shù)的疊加。那么全棧到底工作內(nèi)容是什么呢?他的價(jià)值又在哪呢?我們是否需要成為這樣的人呢?
首先全棧必須是掌握多種技能,并能利用多種技能獨(dú)立完成產(chǎn)品的人 。
他們掌握著獨(dú)立完成產(chǎn)品常用的20%技能,另外的80%需要的時(shí)候有能力獲得。而另外兩個(gè)工種是掌握著專業(yè)領(lǐng)域80%的技能,甚至是90%,另外的10%通過(guò)其他渠道獲得。
全棧工程師的工作內(nèi)容和價(jià)值是融在一起的。
全棧工程師就算是各方面都是80%(確實(shí)有這樣的人存在),但是精力有限,他一個(gè)人不能長(zhǎng)期干3-5個(gè)人的活兒。所以他們工作的大部分內(nèi)容在全局性把握和溝通,特別優(yōu)秀的全棧能做到關(guān)鍵性技術(shù)指導(dǎo)。
全局性把握
項(xiàng)目的開發(fā),很少是只用到一兩種技術(shù)的,特別是在移動(dòng)互聯(lián)網(wǎng)大潮下。隨便一個(gè)互聯(lián)網(wǎng)項(xiàng)目中用到的技術(shù),就會(huì)需要用到后端開發(fā)、前端開發(fā)、界面設(shè)計(jì)、產(chǎn)品設(shè)計(jì)、數(shù)據(jù)庫(kù)、各種移動(dòng)客戶端、三屏兼容、restFulAPI設(shè)計(jì)和OAuth等等,一些比較前衛(wèi)的項(xiàng)目,可能會(huì)用到SinglePage Application、Web Socket、HTML5/CSS3這些技術(shù),還有像第三方開發(fā)像微信公眾號(hào)微博應(yīng)用等等。
Web前端也遠(yuǎn)遠(yuǎn)不是從前的切個(gè)圖用個(gè)jQuery上個(gè)AJAX兼容各種瀏覽器那么簡(jiǎn)單了。現(xiàn)代的Web前端,你需要用到模塊化開發(fā)、多屏兼容、MVC,各種復(fù)雜的交互與優(yōu)化,甚至你需要用到Node.js來(lái)協(xié)助前端的開發(fā)。
所以說(shuō)一個(gè)現(xiàn)代化的項(xiàng)目,是一個(gè)非常復(fù)雜的構(gòu)成,我們需要一個(gè)人來(lái)掌控全局,他不需要是各種技術(shù)的資深專家,但他需要熟悉到各種技術(shù)。對(duì)于一個(gè)團(tuán)隊(duì)特別是互聯(lián)網(wǎng)企業(yè)來(lái)說(shuō),有一個(gè)全局性思維的人非常非常重要。
在恰當(dāng)?shù)臅r(shí)機(jī)用恰當(dāng)?shù)募夹g(shù)開發(fā)實(shí)現(xiàn)恰當(dāng)?shù)漠a(chǎn)品常常要遠(yuǎn)比具體某個(gè)功能實(shí)現(xiàn)要復(fù)雜和重要的多,而這是全棧工程師需要考慮的。
溝通成本
項(xiàng)目越大,溝通成本越高,做過(guò)項(xiàng)目管理的人都知道,項(xiàng)目中的人力是1+1<2的,人越多效率越低。因?yàn)闇贤ㄊ切枰杀镜模煌夹g(shù)的人各說(shuō)各話,前端和后端是一定會(huì)掐架的。每個(gè)人都會(huì)為自己的利益而戰(zhàn),毫不為已的人是不存在的。
而全棧工程師的成本幾乎為零,因?yàn)楦鞣N技術(shù)都懂,胸有成竹,一不小心自己就全做了。即使是在團(tuán)隊(duì)協(xié)作中,與不同技術(shù)人員的溝通也會(huì)容易得多,你讓一個(gè)后端和一個(gè)前端去溝通,那完全是雞同鴨講,更不用說(shuō)設(shè)計(jì)師與后端了。但如果有一個(gè)人懂產(chǎn)品懂設(shè)計(jì)懂前端懂后端,那溝通的結(jié)果顯然不一樣,因?yàn)樗麄冎v的,彼此都能聽得懂。
全棧工程師的機(jī)會(huì)
創(chuàng)業(yè)型公司和中小型公司的發(fā)展,尤其是在萬(wàn)眾創(chuàng)業(yè)的風(fēng)潮,會(huì)促進(jìn)全棧工程師的發(fā)展,也會(huì)更加凸顯他們的價(jià)值,因?yàn)殡m然單個(gè)全棧工程師的工資很高,但是遠(yuǎn)比專業(yè)性分工團(tuán)隊(duì)的成本要低得多,而且全棧工程師更能應(yīng)對(duì)多變的創(chuàng)業(yè)公司需求,降低團(tuán)隊(duì)溝通成本。
但是,很多人為了成為全棧工程師或者已經(jīng)是全棧工程師面對(duì)著巨大的困境。
1.一個(gè)工作兩年的切圖都比一個(gè)全棧工程師切圖好,一個(gè)8k的Java都比3W的全棧寫的代碼快,他們經(jīng)歷著博而不精的煎熬。
2.成為全棧很多人需要花費(fèi)大量的學(xué)習(xí)時(shí)間,到最后依然是無(wú)功而返。
最后造成了一個(gè)現(xiàn)象是,你確實(shí)什么都會(huì),問(wèn)題是我要的是一個(gè)8k的切圖,而不是一個(gè)3萬(wàn)什么都會(huì)一點(diǎn)的全棧。
造成這兩個(gè)現(xiàn)象的原因有內(nèi)因和外因兩個(gè)方面。
內(nèi)因看個(gè)人定位不清晰,在該專精的時(shí)候選擇了全棧。
不管是前端還是后臺(tái),全棧的意思是你能夠獨(dú)立工作,不是你前端會(huì)切個(gè)圖,后端你會(huì)寫個(gè)sql就行的,而一個(gè)領(lǐng)域沒有三年是達(dá)不到上述情況的,而很多人工作三年切圖或者js就想著全棧了。
全棧不是一不小心成為的,是你的工作經(jīng)驗(yàn)堆出來(lái)的,不是學(xué)出來(lái)的,全棧是經(jīng)驗(yàn)不是課本,而是一種思維。
天我來(lái)談?wù)勎覍?duì)傳統(tǒng)HTML與VUE的區(qū)別理解(不談太深的區(qū)別,查了一下網(wǎng)上那些說(shuō)的都一樣,我只談很多人最關(guān)心的不一樣的,說(shuō)不對(duì)請(qǐng)理解,對(duì)不太了解或想了解VUE的人)。
1、 什么是vue
官網(wǎng)介紹:vue是一套構(gòu)建用戶界面的漸進(jìn)式框架。它與其他重量級(jí)框架不同的是,vue采用自下而上增量開發(fā)的設(shè)計(jì)。Vue的核心庫(kù)只關(guān)注視圖層,非常容易學(xué)習(xí),非常容易與其他庫(kù)或已有項(xiàng)目整合。
Vue的目標(biāo)是通過(guò)盡可能簡(jiǎn)單的API實(shí)現(xiàn)響應(yīng)的數(shù)據(jù)綁定和組合的視圖層組件。
2、什么是HTML(HTML5)
HTML5是Web中核心語(yǔ)言HTML的規(guī)范,用戶使用任何手段進(jìn)行網(wǎng)頁(yè)瀏覽時(shí)看到的內(nèi)容原本都是HTML格式的,在瀏覽器中通過(guò)一些技術(shù)處理將其轉(zhuǎn)換成為了可識(shí)別的信息。
總結(jié):它們相同的地方就一句話:用途和結(jié)果都是一樣的,不管是VUE還是HTML,最終都是將數(shù)據(jù)使用各種UI及方式展現(xiàn)給用戶,也就是都是視圖層頁(yè)面的。
有人會(huì)說(shuō)使用HTML和VUE開發(fā)有什么區(qū)別呢?許多人覺得結(jié)果都是視圖層表達(dá),而且VUE打包發(fā)布后不還是HTML+一堆JS文件,而且還要引入導(dǎo)入編譯感覺特麻煩,感覺VUE好難,為什么要學(xué)VUE?
1、開發(fā)和部署
VUE 開發(fā)過(guò)程確實(shí)挺麻煩的,要安裝依賴,要npm一堆包(還經(jīng)常失敗)。而HTML就簡(jiǎn)單多了,直接就拿來(lái)主意,下載下來(lái),改改就用。
部署的話都差不多,都是在任何服務(wù)上都可以直接使用,而且都沒有什么依賴。
但是我覺得VUE的開發(fā)類似于開發(fā)一個(gè)APP,所以他的打包結(jié)果是比純HTML+JS更安全的,相當(dāng)于做過(guò)混淆,因而他發(fā)布后的體積更小。
2、數(shù)據(jù)通訊
HTML+JS 數(shù)據(jù)POST,GET 等基本訪問(wèn)方式,但是如果直接在HTML中使用數(shù)據(jù)判斷,或數(shù)據(jù)循環(huán)輸出必須借助js,jquery等通過(guò)前端處理然后對(duì)id進(jìn)行賦值操作,所以一般只能借助動(dòng)態(tài)語(yǔ)言如php,java,.net等語(yǔ)言環(huán)境進(jìn)行轉(zhuǎn)化,但這樣使得web對(duì)動(dòng)態(tài)語(yǔ)言環(huán)境依賴性過(guò)強(qiáng),造成后端遷移時(shí)太過(guò)于復(fù)雜,而且這樣的Web一般要求前端和后端部署在一起。
VUE則不依賴于動(dòng)態(tài)語(yǔ)言輸出環(huán)境,只要是雙方約定了數(shù)據(jù)傳輸接口,服務(wù)器放在哪里,不管使用什么后臺(tái)語(yǔ)言都沒關(guān)系,因而他的靈活性更強(qiáng)。
3、安全性
有些產(chǎn)品有些公司對(duì)語(yǔ)言是有選擇的,主要是不想讓代碼暴露太多,而HTML+JS的方式往往是達(dá)不到要求的,因而現(xiàn)在許多企業(yè)還是在使用桌面軟件的形式,又或者是要你使用對(duì)方的云服務(wù),而私有云部署則要貴的很多,而且比較貴的軟件還要安裝秘鑰軟件,加密狗等方式,無(wú)非就是防止你將軟件轉(zhuǎn)移或無(wú)限使用或獲取他的核心算法(雖然js也是有混淆方法的,但很少有人會(huì)這么做,我也沒試過(guò)但是很影響效率)。
以前我在一個(gè)公司就是加班寫了一個(gè)WEB程序里邊有一個(gè)算法是分析公司產(chǎn)品結(jié)構(gòu)的(那時(shí)VUE還不盛行),正好呢又遇到一個(gè)懂點(diǎn)的老板(居然會(huì)用F12),結(jié)果看到核心代碼了,當(dāng)時(shí)就否定了,改用了WinForm 重寫,那個(gè)辛苦你懂的。
VUE的打包的話,其實(shí)就是根據(jù)在頁(yè)面中所使用到的組件然后根據(jù)你的邏輯關(guān)系等進(jìn)行混淆打包,然后在用戶加載時(shí)按需進(jìn)行加載解析,從某種意義上來(lái)說(shuō)做WEB是一種保護(hù)。我覺得這與桌面程序及APP打包效果是一樣的(軟件和APP也是可以反編譯嘛,反編譯后的結(jié)果就是混淆),當(dāng)然不說(shuō)加密混淆了。
現(xiàn)在國(guó)內(nèi)出現(xiàn)了像DCloud、APICloud(雖然這二家經(jīng)常打架,畢竟相似度很高,我不做評(píng)論,但不可否認(rèn)對(duì)一個(gè)只會(huì)寫HTML+JS的人轉(zhuǎn)寫APP是一個(gè)不錯(cuò)的選擇)這些由HTML5開始的跨平臺(tái)軟件也開始支持VUE了。
最后附上VUE打包后的調(diào)試預(yù)覽圖,純HTML的就不多說(shuō)了,自己F12吧。
諸多的企業(yè)尤其是創(chuàng)業(yè)型公司中,HR 在招聘時(shí)往往希望可以招到一名技術(shù)全能型人才,而這種人才又被稱之為全棧開發(fā)者。
簡(jiǎn)單地說(shuō),全棧開發(fā)者就是可以構(gòu)建完整應(yīng)用程序的人。他們了解前端和后端技術(shù)、工具和服務(wù),并結(jié)合所有這些技能開發(fā)出可以在生產(chǎn)環(huán)境中運(yùn)行的東西。
那么對(duì)于全棧開發(fā)者而言,都需要具備哪些技能?
1.JS交互設(shè)計(jì)
JS即JavaScript,就是適應(yīng)動(dòng)態(tài)網(wǎng)頁(yè)制作的需要而誕生的一種新的編程語(yǔ)言,如今越來(lái)越廣泛地使用于Internet網(wǎng)頁(yè)制作上。JS 能夠使原先純展示的頁(yè)面增加動(dòng)態(tài)效果,全棧工程師需要掌握J(rèn)avaScript基礎(chǔ)語(yǔ)法、進(jìn)階以及高級(jí)編程。
2.HTML5+CSS3
HTML5是開放的Web網(wǎng)絡(luò)平臺(tái)的奠基石,CSS3原理同CSS,是在網(wǎng)頁(yè)中自定義樣式表的選擇符,然后在網(wǎng)頁(yè)中大量引用這些選擇符。對(duì)一名全棧工程師來(lái)說(shuō),HTML5+CSS3的掌握是工作的基礎(chǔ),最主要需要掌握的就是HTML5相關(guān)基礎(chǔ)知識(shí)、HTML5 語(yǔ)法及使用技巧、HTML5 常用標(biāo)簽等相關(guān)內(nèi)容以及 CSS 語(yǔ)法及使用技巧等。
3.小程序與APP開發(fā)
小程序是一種依托于微信的應(yīng)用,而APP是一種技術(shù),依托于瀏覽器存在。小程序背靠微信,流量大,受眾多,一度刷爆互聯(lián)網(wǎng),而APP是隨著智能手機(jī)的發(fā)展應(yīng)運(yùn)而生的,為廣大用戶帶來(lái)了很多便捷,這兩種技術(shù)目前來(lái)說(shuō)相對(duì)火熱,同時(shí)也是一名合格的全棧工程師必須掌握的。
4.Node開發(fā)
Node 是一個(gè)讓 Java 運(yùn)行在服務(wù)端的開發(fā)平臺(tái),用于方便地搭建響應(yīng)速度快、易于擴(kuò)展的網(wǎng)絡(luò)應(yīng)用。一名全棧工程師需要能夠使用 Node.js 進(jìn)行 Web 服務(wù)端開發(fā)以及使用 Node.js 操作 MongoDB 數(shù)據(jù)庫(kù),Node是新興的一個(gè)前端框架,有很多吸引人的地方,全棧工程師還可以使用它來(lái)開發(fā)一些快速移動(dòng)Web框架。
5.前端框架
前端框架主要是提高前端開發(fā)效率,降低開發(fā)難度。它其實(shí)是一套解決方案,就是按固定的規(guī)則來(lái)安排代碼結(jié)構(gòu),有了框架,前端開發(fā)能夠事半功倍,所以說(shuō)全棧工程師是要會(huì)使用這些前端框架的,比如最基本的Vue框架、React框架、Angular框架等。
6. Git
Git 也稱為版本控制系統(tǒng),開發(fā)人員可以跟蹤其他人對(duì) codebase 的更改。
了解有關(guān) Git 的信息將有助于你正確理解并獲取新代碼。除此之外,你還必須了解如何更新代碼的各個(gè)部分,如何進(jìn)行修復(fù),如何在不造成任何中斷的情況下修改代碼。當(dāng)然,如果你想在全棧開發(fā)人員中脫穎而出,你需要對(duì) Git 有更全面的了解。
7. Web 應(yīng)用程序架構(gòu)
掌握了語(yǔ)言、編程和其他一些基礎(chǔ)知識(shí)后,接下來(lái)就是棘手的部分。這一部分與創(chuàng)建復(fù)雜 web 應(yīng)用程序有關(guān)。你需要知道如何正確地構(gòu)造代碼、分離文件、托管大型媒體文件、在數(shù)據(jù)庫(kù)中構(gòu)造數(shù)據(jù)以及執(zhí)行特定的計(jì)算任務(wù)等等。
獲得關(guān)于這些應(yīng)用程序體系結(jié)構(gòu)知識(shí)的最佳方法就是實(shí)際項(xiàng)目操作。這將幫助你識(shí)別和解決在開發(fā)復(fù)雜 web 應(yīng)用程序時(shí)可能發(fā)生的各種問(wèn)題。
8. 數(shù)據(jù)結(jié)構(gòu)及基本算法
這個(gè)部分在開發(fā)領(lǐng)域中存在爭(zhēng)議,有些開發(fā)人員不太重視它們。但是,全棧工程師應(yīng)該了解幾乎所有開發(fā)過(guò)程和實(shí)踐的專業(yè)知識(shí),如果你不懂?dāng)?shù)據(jù)結(jié)構(gòu)和基本算法的話,可能會(huì)讓你陷入大麻煩。所以,如果你想進(jìn)入大公司并獲得成功,你必須掌握這方面的詳細(xì)知識(shí)。
9.Web 存儲(chǔ)和數(shù)據(jù)庫(kù)
在開發(fā)應(yīng)用程序時(shí),需要將數(shù)據(jù)存儲(chǔ)在某處,以便稍后可以訪問(wèn)。因此,你需要了解 Web 存儲(chǔ)和數(shù)據(jù)庫(kù),如理解相關(guān)數(shù)據(jù)的用途,學(xué)習(xí) NoSQL 數(shù)據(jù)庫(kù),尋找優(yōu)解,連接數(shù)據(jù)庫(kù)與所選的后端語(yǔ)言,了解內(nèi)存數(shù)據(jù)存儲(chǔ)的重要性,Web 存儲(chǔ),cookies,session 和緩存數(shù)據(jù)。
10. 后臺(tái)支持語(yǔ)言
后端確保能夠很好地處理用戶身份驗(yàn)證、數(shù)據(jù)庫(kù)操作和應(yīng)用程序邏輯。沒有需要學(xué)習(xí)的特定后端語(yǔ)言。SQL、Java、JavaScript、Python、c#、PHP、IOS 和c++ 都是您必須了解的語(yǔ)言。
全棧工程師雖然學(xué)術(shù)淵博,但不意味著他們能抄捷徑,要成為一名全棧工程師,至少要使用過(guò)多種編程語(yǔ)言在各種領(lǐng)域的不同平臺(tái)工作多年。
如果你未來(lái)的職業(yè)規(guī)劃是一名出色的全棧工程師,一定要記住深刻挖掘自己潛力,務(wù)必打好基礎(chǔ)體系架構(gòu),把一門學(xué)科做到深入甚至精通,自然融會(huì)貫通。
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。