譯者:zhangolve
鏈接:http://www.zcfy.cc/article/1878
原文:https://medium.freecodecamp.com/full-stack-between-reality-and-wishful-thinking-43110005f2a2#.vmvlzet2z
最近幾年,我們開始給開發(fā)者劃分兩種不同的職業(yè)路徑:前端和后端。但是我們總是忘記了第三種選擇:全棧
全棧開發(fā)已經(jīng)被提出有一段時間了,它曾經(jīng)被直接叫做“開發(fā)”。
但是由于開發(fā)工作的復(fù)雜性持續(xù)增長,我們的UI(用戶界面)需要從其背后的邏輯中解耦出來。于是,現(xiàn)在,我們也就有了兩個不同的領(lǐng)域,前端和后端。
讓我們探索全棧開發(fā),看看當(dāng)考慮到各方面與之關(guān)聯(lián)的挑戰(zhàn)時,沿著這樣一條路徑走下去,是不是行得通。
我在一家名叫Fortech 的公司擔(dān)任全棧開發(fā)工程師,我工作的一大部分是來領(lǐng)導(dǎo)一支全棧開發(fā)工程師團(tuán)隊。
在我們的團(tuán)隊里,如果需要的話,每個人都能夠在前端和后端之間切換,我們團(tuán)隊的文化也基于此。
但是什么是全棧呢?
全棧不特指網(wǎng)頁開發(fā),或者任何其他形式的開發(fā)工作。
全棧意味著你能夠獻(xiàn)身于一個系統(tǒng)的每一個層面。無論這個子系統(tǒng)被分割地怎樣支離破碎,你都能夠看到更廣闊的圖景。
今天,你可能在做一個酷炸天的下拉菜單組件。到了明天,你可能要做一個適應(yīng)這個下拉菜單的接口出來,可是到了后天,你可能又要不得不潛入到數(shù)據(jù)庫中,來提高你的接口獲取數(shù)據(jù)的能力。
在技術(shù)分享會上,我和很多人都探討過全棧開發(fā),我注意到越來越多的開發(fā)者對全棧開發(fā)持懷疑態(tài)度。
反對全棧開發(fā)的人說,為了能夠在各方面都有所涉獵,你首先需要在一個特定的子領(lǐng)域成為專家。
我不同意他們的觀點(diǎn)。
我認(rèn)為技術(shù)是以一種讓我們更加易于開發(fā)的方式來進(jìn)化的,只要我們首先能夠掌握一整套正確的技術(shù)棧。
對懷疑者的一些回答
前面,我已經(jīng)解釋了為什么我認(rèn)為全棧開發(fā)是一條可選擇的道路,至少還是一條很不錯的道路。
問題 #1: 一支全棧開發(fā)的團(tuán)隊有哪些優(yōu)勢?
作為一個全棧開發(fā)者,你可以很容易地從你的應(yīng)用程序的一部分跳到另外一部分,當(dāng)設(shè)計新的功能時,這會是巨大的優(yōu)勢。
當(dāng)你能夠明白一個功能背后的業(yè)務(wù)需求然后據(jù)此著手工作時,全棧開發(fā)真正的價值才得以提升。
有一支多面手的團(tuán)隊也意味著,當(dāng)新的機(jī)遇出現(xiàn)的時候,你能夠快速地分配任務(wù)。
有一支多面手的團(tuán)隊也意味著,開發(fā)者們在一起工作的時間越長,在你的團(tuán)隊內(nèi)部產(chǎn)生的化學(xué)反應(yīng)越良好。即使一個項目是從構(gòu)建一個API接口開始的,然后逐漸拓展到移動端和網(wǎng)頁端,這群人也能夠一起完成整個過程。
問題 #2 :我怎么抽時間來一直跟上這么多技術(shù)和框架的腳步?
我認(rèn)為即便只是跟上前端或者后端開發(fā)潮流都是不可能的。所以讓我們暫時放下追逐潮流,專注于當(dāng)前你能夠做到的。
任何一個好的全棧開發(fā)工程師都從掌握一整套的開發(fā)技術(shù)做起。你應(yīng)該能夠完成這些基本的任務(wù):寫一個cookie,連接到一個REST接口(REST endpoint),完成一個數(shù)據(jù)庫序列,等等。
隨著時間的推移,你能夠在這些技術(shù)之上,通過添加一些新的工具和邏輯,來構(gòu)建起一個完整的項目。
追逐技術(shù)潮流并不是你表現(xiàn)出色的標(biāo)志,真正地能看出你水平的是:你有能力在需要一項技術(shù)的時候快速跟進(jìn),學(xué)習(xí)它,應(yīng)用它。
問題 #3:是否一個全棧開發(fā)工程師需要將他們的工作平均分到前端和后端
不。你需要根據(jù)你的項目需求來進(jìn)行劃分。這都是要有語境的,要具體問題,具體分析。
你需要能夠在一個項目的任何時間點(diǎn)接入到這個項目的任何一個部分,這在今天這個敏捷開發(fā)時代尤為重要。
問題 #4: 有選擇地偏好一種類型的開發(fā)工作可以嗎?
當(dāng)然沒問題。大多數(shù)人都會有所側(cè)重。
有些時候,你會專注于系統(tǒng)中的某一部分,并且需要掌握它的生態(tài),但是不要對該系統(tǒng)的其他部分完全視而不見。
我認(rèn)為這關(guān)乎個人的選擇,并不是其他人強(qiáng)加的。有些人就很享受前端開發(fā)的工作,那么他就做得越來越好,與此相應(yīng)的,有些人就熱愛后端開發(fā)。
就像是學(xué)習(xí)怎樣使用「原力」(the Force),你首先要學(xué)會怎樣光劍(lightsaber)的啟動和停止。當(dāng)你已經(jīng)熟練了這些操作之后,你再決定是學(xué)習(xí) 意念控制還是 迫使別人窒息.

作為一個軟件工程師,這正是與星球大戰(zhàn)的相似之處。
但是不要停在代碼上
我們往往將我們的技術(shù)實體化,就是我們工作中用到的編程語言或者我們用過的編程工具。
但是一個更好的方式來思考技術(shù),是從全棧的角度來看待,是將你能夠承擔(dān)的責(zé)任進(jìn)行評估,是把這種評估作為你工作的一部分。
你能夠完成基本的UI(用戶界面)開發(fā)任務(wù),架構(gòu)設(shè)置,數(shù)據(jù)分析嗎?你能夠參與到產(chǎn)品本身的開發(fā)流程當(dāng)中嗎?
我的團(tuán)隊和我們的客戶密切配合。我們發(fā)現(xiàn)我們的開發(fā)者們投入到業(yè)務(wù)流程之中是非常有用的,一旦開發(fā)者們明白了客戶的問題所在,他們就開始躍躍欲試想要解決客戶們的問題了。
這個時候,每一個人都能夠為一個已知的問題提供一個解決方案,不會出現(xiàn)一個特定的問題只能找特定的人去解決。
我并不是說我們的整個團(tuán)隊都是開發(fā)者才行,而是說要賦予開發(fā)者們更多的責(zé)任,而不是只讓他們負(fù)責(zé)編寫代碼,這樣一來,他們能夠在這樣一個靈活的環(huán)境下受益更多。
這樣也能夠有助于我們將思維方式從單純地想要解決問題過渡到專注于問題本身。你從一開始就認(rèn)識到了問題的本質(zhì)所在,而不只是它的表現(xiàn)特征,那么你就也能夠據(jù)此設(shè)計出最優(yōu)的方案來解決問題了。
最后一點(diǎn)說明
全棧開發(fā)意味著跳出你的舒適區(qū),為了產(chǎn)品的成功接受挑戰(zhàn)。
肯定有很多好的論點(diǎn)反對全棧開發(fā)文化,但是我希望這篇文章已經(jīng)反駁了其中那些毫無說服力的觀點(diǎn)。
實現(xiàn)全棧并不總是最好的策略。許多產(chǎn)品大到任何一個個人都不能完全理解。比如,谷歌的代碼庫里面有20億行代碼。在這個層面上,有所專攻是必要的。
全棧開發(fā)應(yīng)該是處理問題的方法,而不是一種死板的思維方式。
你如何看待未來的全棧開發(fā)?在下面評論中留下你的觀點(diǎn)吧。