該文試圖解釋最近在前端社區(qū)發(fā)生的現(xiàn)象:一方面,有些開發(fā)者非常精通 JavaScript;另一方面,有些開發(fā)者非常精通 HTML、CSS、可訪問性和 Web 設(shè)計(jì)。盡管他們都稱自己是“前端”開發(fā)者,但他們并不擁有相同的興趣和技能。Chris 稱:“他們之間無(wú)話可說(shuō)。”
然而,前端之外的軟件世界還潛藏著其它的分歧。其中一些分歧已經(jīng)存在了好幾十年,而另一些則從 50 年前一些 人 創(chuàng)造了“軟件工程”一詞 后就一直存在。
本文將討論 Web 開發(fā)中能夠影響團(tuán)隊(duì)、社區(qū)和組織的重要分歧。讓我們聊一聊那些比你在前端社區(qū)所看到的更久遠(yuǎn)且更根深蒂固的分歧吧。
一、前端 vs 后端
首要的分歧是 前端 vs 后端 。和“The Great Divide”類似,有許多能夠創(chuàng)建大型網(wǎng)站的 Web 開發(fā)者。一方面,有些人精通瀏覽器是如何工作的,即“前端”開發(fā)者;另一方面,有些人精通服務(wù)器是如何工作的,即“后端”開發(fā)者。
在 Web 開發(fā)中,“前端”的概念出現(xiàn)得甚至比jQuery都早。那時(shí)候,我們習(xí)慣于在表格中創(chuàng)建網(wǎng)站,并想出創(chuàng)造性的 CSS 技巧來(lái)支持 IE 6。盡管這看起來(lái)已經(jīng)是很久之前的事了,但是“前端”的實(shí)踐是相當(dāng)新的,不超過(guò) 20 年。
另一方面,“后端”則和計(jì)算機(jī)一樣古老。如果你習(xí)慣于創(chuàng)建“后端”應(yīng)用程序,你將學(xué)習(xí)用于軟件開發(fā)的大量基礎(chǔ)知識(shí),這些基礎(chǔ)知識(shí)是由聰明的編程人員幾十年前發(fā)現(xiàn)的。而對(duì)于前端技術(shù)更感興趣的開發(fā)者并不會(huì)參照這些實(shí)踐。反過(guò)來(lái)也是如此。如果你習(xí)慣于構(gòu)建“前端”應(yīng)用程序,你將學(xué)習(xí)大量關(guān)于瀏覽器是如何工作的基礎(chǔ)知識(shí),而后端開發(fā)者也對(duì)此不感興趣。
后端開發(fā)者不關(guān)心前端。
前端開發(fā)者不關(guān)心后端。
這種興趣上的分離導(dǎo)致了雙方巨大的知識(shí)隔閡。
對(duì)于技術(shù)社區(qū)來(lái)說(shuō),這阻礙了經(jīng)驗(yàn)的分享,成為發(fā)揮巨大科技創(chuàng)新潛力的障礙。
例如,你參加一個(gè)“后端”語(yǔ)言討論會(huì)。在會(huì)上,你很有可能只會(huì)遇到后端開發(fā)者。這種環(huán)境就不難創(chuàng)造出一種鄙視前端的文化。如果一些剛開始軟件職業(yè)生涯的初級(jí)開發(fā)者聽到鄙視言論并缺乏對(duì)前端的興趣,他們也會(huì)在將來(lái)鄙視任何與前端有關(guān)的事情。這種分離創(chuàng)造了一種限制初級(jí)開發(fā)者視野的環(huán)境。
對(duì)于組織來(lái)說(shuō),這成為每個(gè)團(tuán)隊(duì)在前端和后端重復(fù)邏輯的誘因。
例如,你在后端有一個(gè)對(duì)工作流狀態(tài)的切換:“PENDING“和“CANCELLED”。假如前端開發(fā)者獨(dú)自開發(fā),你很可能會(huì)在前端看到相同的代碼邏輯。稍后,如果你想為工作流創(chuàng)建一個(gè)新狀態(tài),你就需要同時(shí)修改前端和后端代碼,而不只是修改單獨(dú)一處代碼。
如果你是一名前端開發(fā)者,你將創(chuàng)建重客戶端 JavaScript 代碼并輕服務(wù)器端代碼的系統(tǒng)。如果你是一名后端開發(fā)者,你將創(chuàng)建重后端代碼并輕客戶端 JavaScript 代碼的系統(tǒng)。
前端與后端的分離導(dǎo)致開發(fā)者孤立地工作,重復(fù)邏輯,所開發(fā)的內(nèi)容要么全是瀏覽器端的,要么全是服務(wù)器端的。
二、基礎(chǔ)設(shè)施運(yùn)營(yíng) vs 產(chǎn)品開發(fā)
另一個(gè)分歧在于 基礎(chǔ)設(shè)施運(yùn)營(yíng) 和 產(chǎn)品開發(fā) 。一方面,有些人精通網(wǎng)絡(luò)協(xié)議和硬件如何工作;另一方面,有些人精通軟件架構(gòu)和設(shè)計(jì)。
如果你對(duì)于基礎(chǔ)設(shè)施運(yùn)營(yíng)更感興趣,你將降低學(xué)習(xí)與快速可持續(xù)產(chǎn)品開發(fā)有關(guān)的軟件設(shè)計(jì)原則的優(yōu)先級(jí)。你將專注于計(jì)算機(jī)和關(guān)于如何保持它們運(yùn)行的 高可用性 的技術(shù)挑戰(zhàn)。
對(duì)于保持計(jì)算機(jī)運(yùn)行的興趣將幫助你學(xué)習(xí)如何設(shè)計(jì)可靠的軟件,并為硬件構(gòu)建可監(jiān)測(cè)性。然而,這并不能幫助你學(xué)習(xí)如何設(shè)計(jì)從用戶角度能夠提供可用性的系統(tǒng)。如果用戶必須等待一個(gè)小時(shí)才能得到他們想要的,那么服務(wù)器的正常運(yùn)行是沒有意義的。從用戶角度來(lái)說(shuō),這是一個(gè)中斷。
作為一名基礎(chǔ)設(shè)施運(yùn)營(yíng)開發(fā)者,你的日常編碼準(zhǔn)則可能是編寫小型的自包含的 Bash 腳本或者基礎(chǔ)設(shè)施代碼,如 Terraform 。因此,學(xué)習(xí)自動(dòng)化測(cè)試技術(shù),例如 TDD ,也就沒有任何意義;學(xué)習(xí)如何使你的設(shè)計(jì)變得更可測(cè)試也沒有意義。
如果你對(duì)產(chǎn)品開發(fā)更感興趣,你將錯(cuò)過(guò)物理硬件相關(guān)的基礎(chǔ)知識(shí)。你很容易陷入 分布式計(jì)算的8 個(gè)誤區(qū) 。你將為能夠增加可維護(hù)性并降低編程成本而優(yōu)化設(shè)計(jì)和編程原則( SOLID 、 XP 、 Connascence 、 Cohession )。然而,你也會(huì)錯(cuò)過(guò)了解真實(shí)世界的機(jī)會(huì)。正如人們所說(shuō):“沒有所謂的云,這只是其他人的計(jì)算機(jī)”,而且這個(gè)計(jì)算機(jī)實(shí)際上就位于現(xiàn)實(shí)世界的某個(gè)地方。
基礎(chǔ)設(shè)施運(yùn)營(yíng)與產(chǎn)品開發(fā)的分歧導(dǎo)致開發(fā)者不去了解硬件的物理挑戰(zhàn),導(dǎo)致運(yùn)維人員不去理解軟件的經(jīng)濟(jì)成本。
三、用戶體驗(yàn) vs 前端開發(fā)
我們不要忘記通常發(fā)生在大公司的另一個(gè)顯著的分歧: 用戶體驗(yàn) 與 前端開發(fā) 。一方面,有些人精通創(chuàng)建用戶體驗(yàn)和系統(tǒng)的可視化設(shè)計(jì);另一方面,一些人精通如何使用 HTML、CSS 和 JavaScript 創(chuàng)建用于生產(chǎn)的在線網(wǎng)站。
從設(shè)計(jì)者的角度來(lái)看,他們構(gòu)建了一個(gè)基于用戶反饋的用戶流程以及與公司品牌匹配的視覺組件。然而,當(dāng)他們將這些轉(zhuǎn)交給前端開發(fā)者,開發(fā)者總是抱怨最終結(jié)果與他們的內(nèi)部組件庫(kù)是如何不搭。另外,他們抱怨設(shè)計(jì)人員預(yù)期流程中的元素是如何地困難,以及開發(fā)成本是如何地高。結(jié)果與設(shè)計(jì)者設(shè)想的大不相同。
從開發(fā)者的角度來(lái)看,他們收到了一個(gè)好看的流程和設(shè)計(jì)。然而,這個(gè)設(shè)計(jì)對(duì)開發(fā)成本并沒有一定的理解。一些組件是可復(fù)用的,但是設(shè)計(jì)中并沒有使用這些組件。開發(fā)團(tuán)隊(duì)可以改變 UI 中的一些部分,但是其它部分他們不能碰。例如,設(shè)計(jì)可以創(chuàng)建一個(gè)橫跨所有頁(yè)面組件的橫屏滾動(dòng)體驗(yàn)。然而,設(shè)計(jì)者不知道團(tuán)隊(duì)只擁有主網(wǎng)站下的某個(gè) iframe。技術(shù)原理上,如果不重寫整個(gè)系統(tǒng),是不可能實(shí)現(xiàn)橫跨所有組件的橫屏滾動(dòng)體驗(yàn)的。
用戶體驗(yàn)和前端的分歧造成了一種情況:開發(fā)者抱怨設(shè)計(jì)者,而設(shè)計(jì)者抱怨開發(fā)者。
這些分歧的產(chǎn)生有許多原因。主要的一點(diǎn)是公司和軟件社區(qū) 基于技術(shù) 來(lái) 劃分他們的角色 :
前端 JavaScript 開發(fā)者
前端 HTML/CSS 開發(fā)者
DevOps 工程師
后端開發(fā)者
用戶體驗(yàn)設(shè)計(jì)師
他們不是基于業(yè)務(wù)能力來(lái)劃分他們的角色:
網(wǎng)絡(luò)銷售
客戶關(guān)系部
自動(dòng)計(jì)費(fèi)
員工體驗(yàn)
網(wǎng)絡(luò)營(yíng)銷
每個(gè)人都相信一個(gè)人學(xué)習(xí)所有軟件開發(fā)技術(shù)的成本太高。因此,市場(chǎng)鼓勵(lì)人們走捷徑,通過(guò)專業(yè)化來(lái)快速獲得職位。
進(jìn)入市場(chǎng)的最佳捷徑是專業(yè)化。
總之,除了 Web 領(lǐng)域的 JavaScript 和 HTML,在軟件開發(fā)中還存在許多技術(shù)分歧:
“后端”和“前端”
“運(yùn)維”和“產(chǎn)品開發(fā)”
“用戶體驗(yàn)設(shè)計(jì)”和“前端開發(fā)”
作為一名編程人員,理解軟件開發(fā)背后的基礎(chǔ)知識(shí)是首要的,而不是僅僅關(guān)注某一個(gè)技術(shù)棧。那會(huì)讓你看到所有可能和不可能的邊界,理解一種技術(shù)方案相較于另一種技術(shù)方案在特定商業(yè)背景下的取舍。
為了 嘗試解決問題 而寫的代碼都是有目的的。這個(gè)目的是為了創(chuàng)造價(jià)值,而不僅僅是寫代碼。這就是編程。
作為一家公司,建立協(xié)作文化是至關(guān)重要的。如果一件重要的工作需要多個(gè)角色,那么試著把他們放到同一個(gè)房間,同時(shí)在同一臺(tái)計(jì)算機(jī)上工作,使他們更緊密地協(xié)作。建立代碼審查、 結(jié)對(duì)編程 和 Mob 編程 文化。
作為一名編程人員,學(xué)習(xí)基礎(chǔ)知識(shí);作為一家公司,協(xié)作。
除此之外,還有一個(gè)本不應(yīng)存在,但發(fā)生在每一個(gè)大型組織的重大分歧。那就是軟件開發(fā)者與軟件使用者之間的分歧。開發(fā)者與客戶之間分歧。
聯(lián)系客服