全棧時(shí)代是一個(gè)怎樣的時(shí)代
全棧的起源
在新千年來(lái)臨之際,Web工具已發(fā)展得極為成熟,創(chuàng)建網(wǎng)站所需的一切都可以通過(guò)開源軟件組建。我們可以仿照OSI網(wǎng)絡(luò)模型,簡(jiǎn)單地將應(yīng)用程序開發(fā)的各種技術(shù)分層,而整個(gè)開發(fā)所需的技術(shù)集合稱為棧。
LAMP棧就是第一個(gè)棧,它包含四層:L表示Linux操作系統(tǒng),A表示Apache HTTP服務(wù)器,M表示MySQL數(shù)據(jù)庫(kù)服務(wù)器,而P表示PHP腳本語(yǔ)言。隨著時(shí)間的推移,我們看到了分層概念的優(yōu)勢(shì),因此衍生出了許多其他棧:WAMP、MAMP、XAMPP、LEMP、LEPP、MEAN、JAMStack等等。
有了這些技術(shù)棧,我們就相當(dāng)于免費(fèi)獲得了軟件開發(fā)復(fù)興的鑰匙,對(duì)于有興趣創(chuàng)建網(wǎng)站的人來(lái)說(shuō),如今的門檻更低了。只要你有毅力和學(xué)習(xí)新工具、語(yǔ)言和協(xié)議的欲望就夠了。你不需要使用微軟、Oracle、IBM或其他商業(yè)軟件。這是一個(gè)公平的領(lǐng)域,吸引了很多人的目光,以至于90年代后期出現(xiàn)了互聯(lián)網(wǎng)的泡沫時(shí)代。
不久后,瀏覽器(XMLHttpRequest)引入了 AJAX,從而引領(lǐng)了Web 2.0時(shí)代和Web應(yīng)用程序。但是,開發(fā)這些應(yīng)用程序需要大量的工作,因此開發(fā)人員無(wú)法僅憑一己之力滿足業(yè)務(wù)的需求。
后來(lái),開發(fā)人員開始分工專業(yè)化。由前端開發(fā)人員處理HTML、CSS和JavaScript。后端開發(fā)人員處理主機(jī)操作系統(tǒng)、HTTP服務(wù)器和數(shù)據(jù)庫(kù)。而同時(shí)精通前后端的開發(fā)人員則稱之為全棧開發(fā)人員。
全棧時(shí)代
專業(yè)化是一件好事。但并不會(huì)永久。一方面,這意味著團(tuán)隊(duì)可以并行工作以縮短開發(fā)周期。另一方面,這也意味著我們必須付出更多的努力來(lái)傳達(dá)最初的要求和變更的規(guī)范,否則我們就會(huì)失去并行工作所帶來(lái)的優(yōu)勢(shì)。
因此,整個(gè)團(tuán)隊(duì)全是全棧開發(fā)人員,不區(qū)分前端和后端,似乎是一個(gè)不錯(cuò)的主意。
最重要的好處是,團(tuán)隊(duì)中的每個(gè)開發(fā)人員都充分了解每一處代碼變更帶來(lái)的后果。他們每個(gè)人都可以正確地評(píng)估影響和風(fēng)險(xiǎn),讓管理層清楚地了解成本和延誤狀況。此外,每當(dāng)有工作人員離職時(shí),團(tuán)隊(duì)可以立即換人,而且新人也可以很快地熟悉工作。然而,隨著基礎(chǔ)技術(shù)的提升,這種美好的景象也失去了原有的魅力。技術(shù)棧不再局限于最初的四層:操作系統(tǒng)、HTTP服務(wù)器、數(shù)據(jù)庫(kù)和腳本語(yǔ)言。
隨著應(yīng)用程序開始處理越來(lái)越多的并發(fā)用戶,復(fù)雜度也開始加劇。于是,我們添加了負(fù)載平衡器。
我們需要更快地配置新服務(wù)器,同時(shí)降低災(zāi)難性故障的風(fēng)險(xiǎn)。于是,我們開始使用云計(jì)算。
我們開始構(gòu)建面向全球用戶的產(chǎn)品。于是,我們開始將部署復(fù)制到各個(gè)區(qū)域的數(shù)據(jù)中心。
我們發(fā)現(xiàn),擁有大量模式的數(shù)據(jù)庫(kù)和復(fù)雜的聯(lián)結(jié)不太好用了。于是,我們開始使用鍵值存儲(chǔ)。
我們需要更好的質(zhì)量控制。因此,我們聘請(qǐng)了專門的測(cè)試工程師來(lái)編寫回歸測(cè)試套件。
我們想讓瀏覽器控制渲染和合成。于是,服務(wù)器端的腳本換成了REST API。
我們了解到良好的代碼管理對(duì)團(tuán)隊(duì)的效率至關(guān)重要。于是,我們開始利用 Github 創(chuàng)建工作流程。
隨著開發(fā)能力的增強(qiáng),我們開始更加密切地傾聽用戶的意見:
我們的用戶希望應(yīng)用程序減少提交表單,更為流暢、更加一致、更易于使用。于是,我們聘請(qǐng)了注重藝術(shù)技巧和人性的用戶界面專家。
我們的用戶要求降低完成工作的困難。于是,我們聘請(qǐng)了用戶體驗(yàn)專家來(lái)研究我們的缺點(diǎn)并設(shè)計(jì)更好的交互方式。
我們的用戶覺得手機(jī)更加方便,于是我們?yōu)樗麄兲峁┮苿?dòng)版的大型SaaS應(yīng)用。
此外,貫穿所有這些需求的基本技術(shù)也在不斷發(fā)展:
HTML5逐漸成熟,開始支持有語(yǔ)義的Web頁(yè)面、可訪問(wèn)性、service worker以及Web組件。
CSS也在發(fā)展,已遠(yuǎn)遠(yuǎn)超出了選擇器和級(jí)聯(lián),開始支持動(dòng)畫過(guò)度、變量、新的布局模型和分頁(yè)媒體。
JavaScript呈現(xiàn)了爆炸式的增長(zhǎng),如今發(fā)展出了模塊化、面向?qū)ο箢?、異步函?shù),還可以在任何地方執(zhí)行——可以在瀏覽器的DOM中、在服務(wù)器上,在桌面上也可以。
HTTP發(fā)展出了更好的緩存、安全策略、持久會(huì)話、多路復(fù)用流,頭部壓縮以及優(yōu)先級(jí)等功能。
全棧時(shí)代并沒有完全死亡。技術(shù)棧的各層迅速發(fā)展,沒有人可以成為掌握一切的專家。職責(zé)多樣化和專業(yè)化是很自然的結(jié)果。
全棧工程師的榮耀已成為傳說(shuō)。在這個(gè)新時(shí)代,沒有人能夠掌握開發(fā)的所有技術(shù)。
2020棧
我們不得不思考:擁有跨層知識(shí)和技術(shù)力且才華橫溢的個(gè)人仍有優(yōu)勢(shì)嗎?我們應(yīng)該如何對(duì)待全棧開發(fā)人員帶來(lái)的項(xiàng)目經(jīng)驗(yàn)多樣化?管理如何才能滿足這些需求?招聘人員應(yīng)如何篩選應(yīng)聘人員?求職者又當(dāng)如何凸顯自己的技術(shù)力?
我們應(yīng)當(dāng)重新考慮“全棧”這個(gè)術(shù)語(yǔ)了。
我之所以這樣說(shuō),是因?yàn)槲規(guī)椭茝V了這個(gè)概念。早在2009年,我就曾介紹過(guò)這個(gè)術(shù)語(yǔ)。但可悲的是,時(shí)至2019年,這個(gè)術(shù)語(yǔ)已經(jīng)成了計(jì)算機(jī)歷史博物館的紀(jì)念物。

奇怪的是,人們對(duì)“全?!边@個(gè)詞的好奇心在不斷增加。2009-2019年期間,Google 搜索詞語(yǔ)趨勢(shì)快照顯示,在過(guò)去五年中,“全?!边@個(gè)詞的搜索次數(shù)急劇增加,而且年年創(chuàng)新高。
但是,如果人們都在尋找下一個(gè)趨勢(shì)是什么,那么我們就來(lái)談一談吧。為了方便討論期間,讓我們先來(lái)給它起一個(gè)名字。
我將其稱為2020棧。新一代的新名稱。
我認(rèn)為:
首先,我很欣賞那些掌握了各種技術(shù)力的人。他們不會(huì)陷入“專業(yè)化”的陷阱。我們應(yīng)該避免構(gòu)建過(guò)于龐大的應(yīng)用程序,那些帶有秘密咒語(yǔ)的大師,以及那些隨著專業(yè)化悄悄滲透的信息孤島。
其次,我們需要了解到職業(yè)發(fā)展意味著人員變動(dòng)。各個(gè)組織必須把人員變動(dòng)當(dāng)成正常的運(yùn)營(yíng)。即便高級(jí)職員離職,也不會(huì)影響到業(yè)務(wù)?!皼]有什么人是必不可少的”。
第三,領(lǐng)域術(shù)語(yǔ)削弱了專家之間的溝通。如果專家使用領(lǐng)域特定的術(shù)語(yǔ)、首字母縮寫詞和慣用語(yǔ),那么他們自身和隊(duì)友都將面臨危險(xiǎn)(出自電影《歡喜俏冤家》)??珙I(lǐng)域是保持溝通渠道暢通的關(guān)鍵。
2020棧專家的特征可以總結(jié)如下:?
沒有人可以掌握所有技術(shù),因此2020棧必須由一個(gè)團(tuán)隊(duì)來(lái)分擔(dān)。不是一群人,而是一個(gè)真正的團(tuán)隊(duì)。這意味著,當(dāng)一個(gè)人落后時(shí),另一個(gè)人就會(huì)挺身而出。當(dāng)一個(gè)人擁有出色的技術(shù)力時(shí),就可以通過(guò)一種機(jī)制來(lái)指導(dǎo)其他人。當(dāng)團(tuán)隊(duì)的知識(shí)庫(kù)不足時(shí),他們就會(huì)尋找一名更聰明的團(tuán)隊(duì)成員。
每個(gè)2020棧團(tuán)隊(duì)成員都必須是跨領(lǐng)域?qū)<摇H掌握了一兩層技術(shù)棧的人都算不上合格的2020棧團(tuán)隊(duì)成員,這類的個(gè)人有望成為未來(lái)2020棧團(tuán)隊(duì)成員,但也有可能不行。但是在他們掌握各層技術(shù)棧上的深入知識(shí)之前,他們只能作為2020棧團(tuán)隊(duì)的候選人。
2020棧團(tuán)隊(duì)成員為項(xiàng)目帶來(lái)的各項(xiàng)技術(shù)并未嚴(yán)格分類。與我們到目前為止采用的前端/后端分類不同,2020棧的分類是多種多樣的。2020棧團(tuán)隊(duì)中的某位成員可能熟悉NoSQL、云配置和持續(xù)集成等技術(shù)。同時(shí),另一個(gè)2020棧團(tuán)隊(duì)中可能有一位類似的成員,而他熟悉SQL數(shù)據(jù)庫(kù)、Node.js服務(wù)器、容器和容器編排。如果我們把他們統(tǒng)稱為2020棧團(tuán)隊(duì)的后端開發(fā),就低估了他們的技術(shù)力。
最后,這個(gè)團(tuán)隊(duì)最關(guān)鍵的組成部分:每次交流都應(yīng)該以針對(duì)當(dāng)前問(wèn)題做出最佳決策為共同的目標(biāo)。這意味著擁有相同技術(shù)的成員之間應(yīng)該以開放的心態(tài)進(jìn)行交流。成員之間不僅應(yīng)該互相傳達(dá)最新的進(jìn)展,還應(yīng)該展開討論。這可以讓每個(gè)人都變得更聰明,而且還可以防止重新步入專業(yè)化的漩渦。團(tuán)隊(duì)成員一起成長(zhǎng)。
你好,“2020棧!”
下面我們來(lái)想想看,如何利用2020棧更好地匹配職位要求與求職者的技術(shù)力。項(xiàng)目經(jīng)理發(fā)布的招聘廣告可能包含以下內(nèi)容,他們希望找到適合公司文化的人才:
Rock?City?Brewing?is?seeking?a?“2020?stack”?team?player?with?a?strong?background?in?testing,?documentation,?and?code?management.?Applicants?should?also?have?cross?domain?skills?in?at?least?two?of?the?following?areas:?cloud?configuration,?containers,?orchestration,?CI/CD,?and?server-side?scripting. Shape?our?future?by?helping?us?choose?the?best?tools?for?the?job.?At?RCB,?career?advancement?is?part?of?your?job.?Share?your?knowledge?with?the?rest?of?the?RCB?2020?stack?each?week?at?Tech?Tuesday.
我公司希望招募在測(cè)試、文檔和代碼管理方面具有深厚背景的“2020?!眻F(tuán)隊(duì)成員。該職位要求在以下領(lǐng)域中,至少擁有跨兩個(gè)領(lǐng)域的技術(shù)力:云配置、容器、容器編排、CI/CD以及服務(wù)器端腳本。
通過(guò)幫助我們選擇最佳的工具來(lái)塑造我們的未來(lái)。職業(yè)發(fā)展是每位公司員工工作的一部分。每周二我們都會(huì)舉行內(nèi)部2020棧學(xué)習(xí)大會(huì)。
同一個(gè)職位的另一則招聘廣告則要求應(yīng)聘者具備不同的技術(shù)力:
我們希望尋找一名“2020棧”團(tuán)隊(duì)成員,擔(dān)任回歸測(cè)試、API文檔、Github工作流管理以及開發(fā)運(yùn)維的工作。
如果你掌握了上述技術(shù),請(qǐng)聯(lián)系我們。
而求職者可以按照如下方式完善LinkedIn信息:
我擁有多年的“2020?!眻F(tuán)隊(duì)工作經(jīng)驗(yàn),擁有豐富的后端開發(fā)經(jīng)驗(yàn)以及最新的2020開發(fā)運(yùn)維知識(shí),包括Gitlab、Kubernetes 和 Digital Ocean。
我是開源和DRY的忠實(shí)擁護(hù)者,我認(rèn)為成功重用的關(guān)鍵在于出色的文檔。
通過(guò)上述描述,我們看到了一名同時(shí)掌握了代碼管理域和開發(fā)運(yùn)維域技術(shù)的開發(fā)人員?!?020?!眻F(tuán)隊(duì)成員比敏捷團(tuán)隊(duì)更加成熟。
2020棧的分層
那么,2020棧應(yīng)該如何分層呢?前端和后端等術(shù)語(yǔ)是否足以描述各層的特性?服務(wù)器和Web、設(shè)計(jì)和運(yùn)維呢?當(dāng)然,這些類別足夠廣泛。
同時(shí),我們也不能忽視測(cè)試人員,因?yàn)槲覀冎廊绻麤]有他們,我們就無(wú)法交付質(zhì)量勝過(guò)競(jìng)爭(zhēng)對(duì)手的產(chǎn)品。此外,如果沒有營(yíng)銷人員,我們甚至連客戶都找不到。