發(fā)布于:2020-12-30 16:23:15
0
203
0
這是開發(fā)人員正在進(jìn)行的系列文章中的第一篇,該系列文章 表達(dá)了他們對軟件工程和計算機(jī)科學(xué)領(lǐng)域各種主題的看法。這里表達(dá)的觀點僅是作者的觀點。如果您不同意,請發(fā)表評論,當(dāng)然要讓我們知道您的看法。
我懷疑很多人會將這篇文章解釋為“守門員”。盡管我可以理解這種觀點,但我一直努力提供一個誠實的觀點,以反映我過去幾年(主要是初創(chuàng)公司)的經(jīng)驗。我還想明確聲明我將專注于Web開發(fā)環(huán)境中的全棧。我完全支持從未編寫過HTML或CSS的全棧工程師的想法,而這根本不是本文的重點。無需再費周折:
如果開發(fā)人員生態(tài)系統(tǒng)中沒有人能達(dá)成一致的一件事,那就是全棧工程師。在自學(xué)Webdev的過去一年中,我遇到了許多神話,并且學(xué)到了有關(guān)全棧開發(fā)的許多知識。
什么是全棧?
讓我們從全棧工程師的一個通用的,絕對沒有爭議的定義開始:“個人負(fù)責(zé)設(shè)計系統(tǒng)的端到端功能。從最初的用戶體驗到分布式服務(wù)器上運(yùn)行的后端代碼。”
如果您對此定義有批評,那就好。那是因為,全棧工程并不是一件真事。沒有科學(xué)模型可以描述什么是全棧。沒有辦法衡量一個人是否比其他人更適合全棧工程師。關(guān)于全棧的唯一共識是沒有人同意它是什么。這也應(yīng)該清楚表明您在本文中閱讀的其他內(nèi)容本質(zhì)上都是觀點。
為什么全棧如此浪漫?
即使對于全棧沒有達(dá)成共識,每個人似乎都同意這是他們想要的東西。在他們的辯護(hù)中,全棧的概念非常誘人,與編程無關(guān)。Fullstack令人興奮,因為它解決了構(gòu)建復(fù)雜事物時最不可避免的問題之一:“無論您能為某件零件單獨制造多好,集成的開銷幾乎總是不為零。”
集成可能意味著很多事情,但至少要包括組件配合在一起所需的通信。從理論上講,全棧工程師將集成開銷減少到幾乎為0,因為它們控制著單獨的組件,因此只需要與自己通信即可。雖然交流不是整合的唯一方面,但以我的經(jīng)驗來看,交流往往是瓶頸。有了對全棧工程的了解,一個人可能比兩個,三個甚至四個人生產(chǎn)力更高(假設(shè)集成開銷不可忽略)。尤其是從業(yè)務(wù)角度來看,支付一個人多付一些錢來做一份以前曾從事過4個工作的潛力的潛力令人著迷。
民意
我想根據(jù)流行的(普遍的)觀點為全職工程師創(chuàng)建一個簡單的模型。在在線閱讀了許多不同的意見之后,我得出了全棧工程師的以下一般定義。全棧工程師是指能夠執(zhí)行構(gòu)建端到端Web體驗的整個過程的任何工程師。我在下面創(chuàng)建了一個模型,該模型正式化了對民意的解釋:
最低可行全棧工程師(MVFE):
使用版本控制
懂HTML
懂CSS
具有良好的編程基礎(chǔ)知識
熟悉JavaScript前端開發(fā)(其他語言優(yōu)先,JS不可協(xié)商)
了解分布式系統(tǒng)
至少知道一種主要的后端語言(可能是NodeJS,PHP或Java)
熟練掌握至少一個數(shù)據(jù)庫/數(shù)據(jù)庫
該定義立即引起一些問題,例如:
它包括測試嗎?
它包括設(shè)計嗎?
它包括操作嗎?
起初,似乎這些技能對于全職工程師來說并不是日常生活所必需的。但是請記住,全棧的價值來自預(yù)期的集成開銷減少。即使操作與開發(fā)不同,也存在共享的表面積,要求兩者彼此了解。一個全棧的工程師也許可以在開發(fā)團(tuán)隊的水平上不了解基礎(chǔ)架構(gòu)和云體系結(jié)構(gòu)來解決問題,但是如果他們不會說通用語言,那么他們的潛在價值就會開始減少。如果尚不清楚,則此概念將遠(yuǎn)遠(yuǎn)超出操作。它包括由全職工程師負(fù)責(zé)且需要集成的系統(tǒng)(或產(chǎn)品過程)的任何方面。
流行意見不足的地方
根據(jù)我的經(jīng)驗,上述MVFE很少見。該個人資料描述了一個技能,需要數(shù)千小時的掌握才能,但不參與整體決策過程。從本質(zhì)上講,全職工程師的價值源于他們做出有效的單方面決策的能力(決策無需征得任何人的許可)。我敢肯定有些人最適合MVFE,但我敢打賭,他們之間相差無幾。您可能將我對MVFE的看法總結(jié)為:
在不了解全局的情況下成為一名全職工程師是非常不切實際的。
在我看來,全棧工程師的價值主要來自他們單手設(shè)計,架構(gòu),執(zhí)行和操作整個端到端系統(tǒng)的能力。假設(shè)這是可能的,那么它幾乎完全消除了集成開銷。
全棧工程的現(xiàn)實
在許多方面,全棧工程日新月異。本質(zhì)上,全職工程師必須精通獨立但高度相關(guān)的技術(shù)清單。這些技術(shù)(例如CSS,HTML和JavaScript)以半隔離的方式開發(fā),從而產(chǎn)生了您需要學(xué)習(xí)的冗余概念和術(shù)語。導(dǎo)致全棧復(fù)雜性的另一個因素是第三方軟件包管理系統(tǒng)(例如npm)的廣泛采用。在諸如npm之類的平臺出現(xiàn)之前,最佳實踐和標(biāo)準(zhǔn)發(fā)展得比較緩慢,這意味著跟上它要容易得多?,F(xiàn)在看來,每天都在發(fā)布一個新的“最佳”框架,盡管切換的收益通常很小,但社區(qū)往往會兩極分化,并對那些不使用最新和最佳功能的人持偏見。npm軟件包還具有使依賴關(guān)系變得不太統(tǒng)一的效果。在過去,情況可能不是最新的和現(xiàn)代的,但是界面通常要統(tǒng)一得多。如今,您最終需要十個軟件包而不是一個,它們都使用自己的語法和特定于域的術(shù)語。
需要明確的是,npm使webdev生態(tài)系統(tǒng)得以蓬勃發(fā)展并以很少的技術(shù)擁有。這并不意味著我們應(yīng)該不了解它的成本,而是有成本的。
全棧工程師的實用簡介
既然我們在同一頁上討論了全棧工程的目標(biāo)和含義,那么現(xiàn)在該為更現(xiàn)實的全棧工程師提出一個簡介了。該模型的目的是解決我對“大眾意見”配置文件的關(guān)注,特別是在潛在整合領(lǐng)域。
切實可行的全棧工程師(RVFE):“最低可行(MVFE)”配置文件中列出的所有內(nèi)容。
原理:MVFE中列出的所有項目都是構(gòu)建現(xiàn)代Web應(yīng)用程序的基本要求。如果您缺乏MVFE的技能,則可能會建立網(wǎng)站,但絕對不是Web應(yīng)用程序。
了解業(yè)務(wù)和客戶需求。
基本原理:在傳統(tǒng)團(tuán)隊中,了解需求并將其轉(zhuǎn)化為可交付成果通常取決于產(chǎn)品組織。盡管有可能構(gòu)建您個人不了解的價值,但它會直接影響您就該事物做出快速判斷和決策的能力。另一方面,如果您構(gòu)建的是您真正認(rèn)同或至少理解的東西,您將有能力做出富有同情心和務(wù)實的決策。在我的全棧模型中,必須在外部進(jìn)行集成的每個位置都會降低效率。如果您不了解客戶需求和業(yè)務(wù)價值,則需要一直整合。
了解行銷的角色以及行銷與工程的共存方式。
原理:該特定項目有幾個方面。我并不是說您需要成為一名營銷專家才能全力以赴,只是您需要了解工程和營銷如何共存。具體來說,您應(yīng)該了解分析的重要性和作用,并熟悉將Google Analytics(分析)之類的服務(wù)集成到網(wǎng)站前端的過程。市場營銷和工程學(xué)在很多地方都需要發(fā)揮出色,這是其中幾個:
實施和報告A / B和Canary測試
將銷售渠道概念(例如轉(zhuǎn)化,展示次數(shù),號召性用語(CTA)等)整合到產(chǎn)品中
了解頁面設(shè)計,布局和響應(yīng)能力如何影響上述概念
具有強(qiáng)大的項目和時間管理能力。
基本原理:如果尚不清楚,自給自足是全棧工程的基本方面。盡管自給自足的潛在好處是巨大的,但它也帶來了一些不幸的現(xiàn)實。這些現(xiàn)實之一是,您負(fù)責(zé)的越多,其他人為您管理時間就越難。對于我來說,這一點尤為重要,因為我認(rèn)識到很多人都是非常聰明的全棧工程師。但是,由于他們?nèi)狈ψ月珊蜁r間管理技能,因此可能對他們沒有幫助。
項目管理至關(guān)重要,因為它是與團(tuán)隊溝通的最清晰,最簡潔的方式之一。它使您承擔(dān)責(zé)任,并使您的經(jīng)理,合作伙伴和其他有關(guān)方面可以了解您的進(jìn)度。最后但并非最不重要的一點是,它迫使您計劃和組織工作。即使您不遵循開發(fā)方法,也應(yīng)該提前計劃所有事情。
具有扎實的設(shè)計知識(至少足以與設(shè)計師合作)
原理:設(shè)計對于全棧過程是如此不可或缺,以至于我?guī)缀蹩梢哉f全棧工程師至少應(yīng)該是平庸的設(shè)計師。至少,全職工程師應(yīng)該對現(xiàn)代設(shè)計實踐和工具感到滿意。作為一個全棧開發(fā)人員,您對設(shè)計的了解越少,那么將設(shè)計要求/規(guī)格轉(zhuǎn)換成確切的指定結(jié)果就越好。這就是為什么我實際上認(rèn)為以全棧開發(fā)人員的身份學(xué)習(xí)設(shè)計會更容易的原因,因為它在開發(fā)過程中為折衷方案提供了更多的回旋余地。請記住,您無需成為藝術(shù)家即可學(xué)習(xí)設(shè)計。即使只是了解印刷技術(shù),顏色理論和間距的基本知識,也會有很長的路要走。
可以設(shè)計,架構(gòu)和實施端到端軟件系統(tǒng)。
原理:如果人們可以就全棧的任何方面達(dá)成共識,那就是全棧工程師編寫軟件。我認(rèn)為每個開發(fā)人員(無論是全棧開發(fā)人員還是其他開發(fā)人員)都應(yīng)努力理解他們正在實現(xiàn)的邏輯,而不僅是通過這些動作。
此外,許多全職工程師將在可見性方面掙扎。如果您采用適當(dāng)?shù)捏w系結(jié)構(gòu)過程,則無需閱讀源代碼,其他人就可以更輕松地看到您的意圖。它與時間/項目管理直接相關(guān),因為正確的架構(gòu)設(shè)計也是明確的計劃。
熟悉CSS最佳實踐,現(xiàn)代的增補(bǔ)程序和庫。
原理:這與設(shè)計要求緊密相關(guān)。至少,您應(yīng)該對CSS有足夠的了解,可以確定性地將任何實際的設(shè)計模型轉(zhuǎn)換為可擴(kuò)展且可運(yùn)行的表示形式。您對CSS越熟悉,您的生活就會越輕松。
在大多數(shù)情況下,學(xué)習(xí)CSS只是記住一堆關(guān)鍵字。您應(yīng)該非常熟悉一些概念,例如flexbox和grid。基本上,可以使用flex或grid來構(gòu)建世界上任何一個網(wǎng)站(當(dāng)時是一個響應(yīng)型網(wǎng)站)。我還建議您對Bootstrap和Material設(shè)計庫感到滿意。它們通??梢蕴岣甙l(fā)展速度,許多雇主為您提供了解它們的要點。
至少知道一個單頁應(yīng)用程序框架(SPA)(如果只有一個,則必須是React)
我也希望我能生活在一個公社,在那里我們自己種植所有食物并提供我們自己的資源。不幸的是,我住在海灣地區(qū),租金昂貴。盡管社區(qū)可以扔掉框架是可以的,但是如果您計劃/需要在一家從事前端/全棧的公司工作,或者在兩者之間進(jìn)行任何工作,那么您可能會使用React。即使您不打算使用React,接受采訪的人也知道React,這足以讓您找到工作。
當(dāng)前的JS生態(tài)系統(tǒng)顯然存在很多問題,尤其是在框架和依賴項方面。話雖這么說,我不會割斷鼻子來掩飾我的臉。除了生態(tài)系統(tǒng)問題之外,我什至不想回到編寫普通HTML的原因(出于同樣的原因,我不想在ASM中編寫Web應(yīng)用程序)。另外,我很想聽到有人解釋為什么服務(wù)器端模板比SPA更好?除了性能(因為現(xiàn)代設(shè)備在2019年幾乎沒有問題)之外,我覺得人們喜歡服務(wù)器端模板,因為這是他們慣用的方式。作為最近進(jìn)入這個領(lǐng)域的人,SPA路線更加友好。
熟悉特定于域的前端概念(HTTP,CORS等)
原理:對于全棧和前端工程師來說都是如此。我猜您可以在理論上編寫永遠(yuǎn)不會與服務(wù)器通信的前端,但這將是無聊的生活。除了請求/響應(yīng),您還應(yīng)該了解很多其他特定于域的內(nèi)容。老實說,現(xiàn)代實現(xiàn)并沒有將這種廢話抽象化,這在大多數(shù)情況下是不需要觸摸的。
具有較強(qiáng)的SQL和NoSQL技能。
原理:構(gòu)建合理數(shù)量的全棧應(yīng)用程序之后,您肯定會遇到僅單個數(shù)據(jù)存儲模型還遠(yuǎn)遠(yuǎn)不夠的情況。盡管看到一些工程師會濫用NoSQL數(shù)據(jù)庫以避免使用關(guān)系替代方案給我留下了深刻的印象,在幾乎所有這些情況下,與關(guān)系替代方案相比,最終導(dǎo)致工程師的工作量更多,并且復(fù)雜得多。關(guān)于SQL與NoSQL,有很多教條主義的看法,而誠實的現(xiàn)實是,它們既重要又有其地位。不要讓不理解妨礙您根據(jù)自己的情況做出正確的決定。
對devops感到舒適。
原理:在大多數(shù)現(xiàn)代應(yīng)用程序中,應(yīng)用程序的運(yùn)行位置和運(yùn)行方式會對應(yīng)用程序的構(gòu)建方式產(chǎn)生巨大影響。我已經(jīng)遇到了很多全棧工程師,他們認(rèn)為他們應(yīng)該與操作完全斷開。盡管這是一個不錯的幻想,但實際上,工程和操作本質(zhì)上是交織在一起的。不僅如此,不能將兩者結(jié)合起來會限制您可能建立的內(nèi)容或使您產(chǎn)生的內(nèi)容變得混亂。
根據(jù)所構(gòu)建的全棧應(yīng)用程序的類型,了解操作可能就像了解Firebase上運(yùn)行的代碼所帶來的影響一樣簡單。例如,在Firebase中,您可以使用firebase.config()代替process.env。我將這種理解水平歸類為“操作感知”,這基本上意味著您可能無法自己執(zhí)行操作,但是您了解所做選擇的含義。至少,全棧開發(fā)人員應(yīng)該對操作有所了解。雖然,我會說要成為一名可靠的全棧工程師并且至少不處于初級開發(fā)人員級別是非常困難的。如果您不知道將在其上運(yùn)行的服務(wù)器的擴(kuò)展策略是什么,那么正確構(gòu)建分布式應(yīng)用程序?qū)⒎浅@щy。
具備所有級別的測試經(jīng)驗(單元,集成,端到端,UI,壓力,A / B,藍(lán)綠色,Canary)
基本原理:如果期望全棧工程師擁有應(yīng)用程序軟件,則他們需要參與測試,否則就不會進(jìn)行測試。即使您擁有最出色的測試團(tuán)隊,他們也無法快速有效地測試沒有人向他們解釋的應(yīng)用程序。因此,全棧工程師至少應(yīng)樂于在與測試團(tuán)隊相關(guān)的情況下解釋系統(tǒng)的行為。實際上,如果全棧工程師至少沒有編寫單元測試,那么您可能已經(jīng)從全棧工程師那里損失了很多價值。如果他們沒有編寫代碼,則意味著其他工程師不得不花時間理解代碼,然后編寫測試(從而降低了全棧工程師的價值),或者根本沒有任何測試。顯然,這兩種選擇都是不好的。
結(jié)論
最終,每個人對全棧工程的定義都會稍有不同。即使我們可以得到全世界的同意,第二天也會有一個新的名詞。上面建議的個人資料是我個人經(jīng)驗以及我從他人中學(xué)到的東西的產(chǎn)物。我很想聽聽對人們不同意的方面的批評,以便我可以繼續(xù)加深我的理解。