你常常聽(tīng)說(shuō)“全棧工程師”這個(gè)叫法吧,不過(guò)這到底表示什么意思呢,你覺(jué)得自己應(yīng)該成為一名全棧工程師么揩页?下面我們就來(lái)探討一下這個(gè)話題。
在Web與軟件開(kāi)發(fā)的世界中有3個(gè)基本的關(guān)注點(diǎn):前端烹俗、后端與全棧爆侣。我們先來(lái)看一下他們的含義。
何為全棧工程師幢妄?
前端工程師:
在打開(kāi)一個(gè)網(wǎng)站時(shí)兔仰,屏幕上的一切都屬于前端。前端工程師負(fù)責(zé)創(chuàng)建用戶界面背后的代碼蕉鸳。這些工程師不僅要熟悉HTML斋陪、JavaScript與CSS,還要掌握很多框架。這些框架有Foundation无虚、Angular JS缔赠、Ember JS、Backbone及Bootstrap等等友题。前端工程師要與設(shè)計(jì)師和其他專家協(xié)同工作嗤堰,從而將網(wǎng)站從模型轉(zhuǎn)換為可使用的模式。
后端工程師:
在你每天所訪問(wèn)的網(wǎng)站背后有服務(wù)器網(wǎng)絡(luò)度宦、數(shù)據(jù)庫(kù)以及各種應(yīng)用踢匣,他們相互協(xié)作將你所請(qǐng)求的網(wǎng)頁(yè)與數(shù)據(jù)傳遞給你。后端工程師負(fù)責(zé)構(gòu)建這些組件戈抄。
他們要擅長(zhǎng)各種編程語(yǔ)言离唬,如Python、.Net划鸽、Ruby输莺、Java及PHP等等,從而通過(guò)這些語(yǔ)言來(lái)編寫程序裸诽。他們還需要使用各種數(shù)據(jù)庫(kù)程序如MySQL嫂用、SQL Server及Oracle等來(lái)操縱信息并將其傳遞給最終用戶。后端工程師需要與組織中的各種經(jīng)理及其他成員通力配合來(lái)完成工作丈冬。
全棧工程師:
全棧工程師既要了解后端開(kāi)發(fā)嘱函,也要了解前端開(kāi)發(fā)。他們是“全方位”的工程師埂蕊,熟悉服務(wù)端的同時(shí)又懂客戶端用戶體驗(yàn)往弓。全棧工程師理解Web開(kāi)發(fā)進(jìn)程的每一個(gè)方面,同時(shí)又會(huì)就整體策略與最佳實(shí)踐對(duì)相關(guān)干系人提出建議與指導(dǎo)蓄氧。
角色演變
在早期的桌面計(jì)算時(shí)代函似,我們常常會(huì)看到一個(gè)人就完成了整個(gè)應(yīng)用的開(kāi)發(fā)工作。隨著程序變得越來(lái)越復(fù)雜匀们,以及越來(lái)越多的技術(shù)涌現(xiàn)了出來(lái)缴淋,一個(gè)人很難再完全掌控應(yīng)用開(kāi)發(fā)的各個(gè)方面。
在21世紀(jì)初期泄朴,一些擁有專業(yè)化技能的專家開(kāi)始出現(xiàn)重抖。由于復(fù)雜性的持續(xù)攀升,當(dāng)Web 2.0站點(diǎn)開(kāi)始出現(xiàn)時(shí)祖灰,很多程序員又回到了更簡(jiǎn)單的方式上來(lái)钟沛。相比于構(gòu)建復(fù)雜的數(shù)據(jù)庫(kù)和企業(yè)計(jì)算網(wǎng)絡(luò),開(kāi)發(fā)者開(kāi)始部署穩(wěn)定的LAMP棧(Linux局扶、Apache恨统、MySQL與PHP)叁扫,并創(chuàng)建出了靈活的面向?qū)ο笳Z(yǔ)言,如Django與Ruby on Rails畜埋。在這種環(huán)境下莫绣,全棧工程師的價(jià)值變得越來(lái)越大,因?yàn)樗麄兪煜ご蠖鄶?shù)現(xiàn)代框架與語(yǔ)言悠鞍。
運(yùn)維復(fù)雜性的回歸
不過(guò)对室,由于移動(dòng)計(jì)算與iOS和Android平臺(tái)的興起,我們又回到了復(fù)雜性的新時(shí)代:低成本的云服務(wù)器如Amazon Web Services和微軟的Azure咖祭、MongoDB等數(shù)據(jù)庫(kù)掩宜、Node.js與Angular.js等前端技術(shù)、Docker等容器技術(shù)么翰。這些平臺(tái)牺汤、服務(wù)與框架都擁有自身的特性。因此浩嫌,一個(gè)人幾乎無(wú)法成為能夠掌握所有技術(shù)的全棧工程師檐迟。
通才與專才
在當(dāng)前的環(huán)境下,成為全棧工程師的好處在于沒(méi)多少人擁有足夠的知識(shí)固该、經(jīng)驗(yàn)與溝通能力來(lái)整體把控使用了各種平臺(tái)與框架的項(xiàng)目锅减,如HTML5糖儡、機(jī)器學(xué)習(xí)及Scala等伐坏。因此,高水準(zhǔn)的全棧工程師總是供不應(yīng)求的握联。
不過(guò)桦沉,壞處則在于對(duì)于全棧工程師來(lái)說(shuō),他需要能夠熟練掌握這些組件金闽,但這是非常困難的事情纯露,況且未來(lái)還會(huì)有新的技術(shù)涌現(xiàn)出來(lái)。你可能很聰明代芜,但這些組件本身卻是非常復(fù)雜的埠褪,每幾個(gè)月都會(huì)出現(xiàn)新的語(yǔ)言和平臺(tái)。要想時(shí)刻保持技術(shù)上的領(lǐng)先是一件極其困難的事情挤庇。出于這個(gè)原因钞速,專才擁有自己獨(dú)特的優(yōu)勢(shì)。組織傾向于雇傭?qū)iT的角色嫡秕,因此相比于其他開(kāi)發(fā)者來(lái)說(shuō)渴语,專才在深層次的知識(shí)以及某個(gè)狹窄領(lǐng)域的經(jīng)驗(yàn)上會(huì)更勝一籌。
全棧工程師的前景
無(wú)論選擇在前端還是后端進(jìn)行深入學(xué)習(xí)昆咽,抑或是將自己定位成一個(gè)全棧的通才驾凶,從工作前景上來(lái)看都是好的牙甫。以北京為例,2017年北京全棧工程師的平均收入為20K调违,但是仍有75%的用戶覺(jué)得此數(shù)據(jù)偏低窟哺。
從簡(jiǎn)單的雛形到完美的成品,全棧工程師通常被認(rèn)為是萬(wàn)能多面手技肩,那全棧工程師到底做什么呢脏答?
全棧工程師需要哪些技能
為了在激烈的市場(chǎng)競(jìng)爭(zhēng)中占據(jù)一席之地,全棧工程師需要不斷學(xué)習(xí)各方面技能亩鬼,主要包含以下方面:
服務(wù)器管理/DevOps
程序員必須具備基本的服務(wù)器管理能力殖告,包括并不限于以下知識(shí):
1.在非GUI環(huán)境中,通過(guò)終端連接遠(yuǎn)程服務(wù)器
2.會(huì)寫Shell腳本編程
3.服務(wù)器上的用戶和群組管理
4.管理Apache和Nginx等服務(wù)器程序來(lái)提供應(yīng)用
5.管理防火墻和權(quán)限
6.安裝及更新軟件
除了這些基本功雳锋,程序員還需要懂得如何通過(guò)Docker或虛擬機(jī)來(lái)創(chuàng)建完善的黄绩、運(yùn)行良好的獨(dú)立開(kāi)發(fā)環(huán)境;以及熟練操作版本控制系統(tǒng),以便可靠地生成備份和可共享的協(xié)作代碼庫(kù)玷过,來(lái)根據(jù)時(shí)間追蹤代碼變化爽丹。?
云端/Cloud
除了物理服務(wù)器與虛擬服務(wù)器外,全棧工程師還需要了解云端辛蚊,例如Google Cloud粤蝎、Azure、AWS等袋马。?
雖然很多工具或平臺(tái)可能不會(huì)立即應(yīng)用初澎,但長(zhǎng)遠(yuǎn)看來(lái),熟悉每個(gè)人都在討論的服務(wù)可能會(huì)派上大用途虑凛,客戶可能隨時(shí)要求更換服務(wù)端碑宴,所以需要早做準(zhǔn)備。
后端/Back-end
除了需懂得選擇哪種語(yǔ)言桑谍,還應(yīng)該熟悉:?
1.與運(yùn)維緊密相關(guān)的Web服務(wù)器延柠,如Nginx和Apache
2.NodeJS會(huì)將JavaScript,CSS編譯為靜態(tài)文件锣披,用PHP可以避免NodeJS的問(wèn)題
3.依賴管理工具的使用贞间,比如PHP中的Composer
4.良好的API設(shè)計(jì),當(dāng)前大多數(shù)網(wǎng)站是基于API的雹仿,很少有獨(dú)立的前端交互
5.對(duì)性能提高非常重要的搜索引擎使用
6.用Gearman類工具增热,Crunz等庫(kù)進(jìn)行Cronjobs及后臺(tái)作業(yè)
7.緩存技術(shù)非常重要,使用Varnish盅粪,Redis或其他工具分片存儲(chǔ)數(shù)據(jù)
數(shù)據(jù)庫(kù)/Database
除了需掌握架構(gòu)穩(wěn)定的關(guān)系型數(shù)據(jù)庫(kù)钓葫,如MySQL , PostgreSQL票顾,一個(gè)全棧工程師還應(yīng)該對(duì)非關(guān)系型數(shù)據(jù)庫(kù)熟練應(yīng)用础浮,如MongoDB, Redis, Cassandra帆调,更不用說(shuō)Neo4j這樣的圖形數(shù)據(jù)庫(kù)了。
數(shù)據(jù)庫(kù)是在服務(wù)器上的豆同,需要全棧工程師的控制番刊,同時(shí)也存在遠(yuǎn)程解決方案,比如Mongo類的RestDB或Google的Firebase等影锈。
前端/Front-end
說(shuō)到前端芹务,技術(shù)棧可能比較混亂鸭廷。作為一個(gè)全棧工程師枣抱,你需要了解:
1.NodeJS和 NPM
2.Yarn
3.預(yù)處理器和編譯器(如Babel),用來(lái)編譯 Typescript, ES6, LESS, SCSS, SaSS
4.構(gòu)建和任務(wù)執(zhí)行工具辆床,如 Grunt和 Gulp
5.框架佳晶,如 VueJS、React讼载、Angular
6.模塊打包工具轿秧,如 Webpack、Browserify咨堤、Rollup
設(shè)計(jì)/Design
開(kāi)發(fā)者需要知道產(chǎn)品在轉(zhuǎn)為可用的HTML菇篡、CSS代碼前應(yīng)如何畫原型,然后用JavaScript進(jìn)行交互一喘,在后端用虛擬數(shù)據(jù)做模擬測(cè)試驱还,只有當(dāng)原型圖完成,用戶體驗(yàn)和交互界面設(shè)計(jì)完成津滞,產(chǎn)品才可以開(kāi)始真正的開(kāi)發(fā)铝侵。所以設(shè)計(jì)本身就是非常巨大的挑戰(zhàn)灼伤,需要使用一套特殊工具:
1.Photoshop 触徐,Illustrator或一些開(kāi)源工具如 Gimp , Inkscape等狐赡。
2.好用撞鹉、快速的編輯器,比如 Atom或 Sublime Text
3.背景選擇器颖侄,如Subtlepatterns和匹配顏色的顏色選擇器
4.CSS的柵格系統(tǒng)
5.用于JavaScript模擬的相關(guān)知識(shí)
6.把原型圖放到網(wǎng)上供用戶查看和反饋的方式鸟雏,比如Ngrok
日志
為了有效的監(jiān)控應(yīng)用的健康度,開(kāi)發(fā)者需要追蹤錯(cuò)誤览祖,找到這些日志并找出其中有價(jià)值的信息孝鹊,還需要預(yù)測(cè)一些趨勢(shì),比如需要注意CPU及I/O占用率的上漲展蒂,以防服務(wù)器突然崩潰又活。這些和運(yùn)維有一定聯(lián)系苔咪,也需要掌握更多專門的技能
移動(dòng)端
最后說(shuō)到移動(dòng)端,隨著 iOS和安卓的webview變得越來(lái)越高效柳骄,以及PWA(漸進(jìn)式web應(yīng)用)的到來(lái)团赏,原本的應(yīng)用逐漸不再流行,因?yàn)樗麄冮_(kāi)發(fā)起來(lái)過(guò)于復(fù)雜耐薯。所以一個(gè)全棧工程師必須了解 PWA或 React Native舔清,或NativeScript、Tabris曲初、Cordova体谒、Phonegap等好技術(shù)開(kāi)發(fā)出基于API的客戶端。
看完上述技能要求臼婆,全棧工程師是否仍然吸引著你?
需要注意的是其實(shí)大多數(shù)全棧工程師并不是精通所有技術(shù)营密,也會(huì)在某些方面有所偏重,畢竟每個(gè)人的時(shí)間與精力都是有限的目锭。全棧開(kāi)發(fā)工作可能無(wú)法使人成為某一領(lǐng)域的專家评汰,但卻能讓人很好的了解整個(gè)產(chǎn)品流程、項(xiàng)目需要的全部技術(shù)痢虹、以及對(duì)項(xiàng)目有更高層面的理解被去。?
如果想要向著全棧工程師的方向邁進(jìn),你應(yīng)該掌握很多知識(shí)與技能奖唯,并且熟悉上面提到的各種組件惨缆。此外,還要提升自己的個(gè)人溝通技能丰捷,這樣才能管理并與前端與后端開(kāi)發(fā)者實(shí)現(xiàn)較好的協(xié)作坯墨。
好消息是未來(lái)對(duì)于每一類Web開(kāi)發(fā)者來(lái)說(shuō)都是光明的,無(wú)論是前端病往、后端捣染,還是全棧。要堅(jiān)持學(xué)習(xí)一切有價(jià)值的東西停巷;掌握新的框架耍攘、語(yǔ)言與平臺(tái);并且與開(kāi)發(fā)者同事及最終用戶保持高效的溝通畔勤。在這種情況下蕾各,無(wú)論世界發(fā)生什么變化,你都會(huì)始終立于不敗之地庆揪。