為什么未來(lái)是全棧工程師的世界?

x> 謹(jǐn)以此片獻(xiàn)給每一個(gè)為成為優(yōu)秀全棧工程師奮斗的人。

技術(shù)在過(guò)去的幾十年里進(jìn)步很快,也將在未來(lái)的幾十年里發(fā)展得更快。今天技術(shù)的門(mén)檻下降得越來(lái)越快,原本需要一個(gè)團(tuán)隊(duì)做出來(lái)的Web應(yīng)用,現(xiàn)在只需要一兩個(gè)人就可以了。

同時(shí),由于公司組織結(jié)構(gòu)的變遷,以及到變化的適應(yīng)度,也決定了賦予每個(gè)人的職責(zé)將會(huì)越來(lái)越多。盡管我們看到工廠(chǎng)化生產(chǎn)帶來(lái)的優(yōu)勢(shì),但是我們也看到了精益思想帶來(lái)的變革。正是這種變革讓越來(lái)越多的專(zhuān)家走向全棧,讓組織內(nèi)部有更好的交流。

你還將看到專(zhuān)家和全棧的兩種不同的學(xué)習(xí)模式,以及全棧工程師的未來(lái)。

讓我毫不猶豫地選擇當(dāng)全棧工程師有兩個(gè)原因:

  1. 這個(gè)世界充滿(mǎn)了未解的迷,但是我只想解開(kāi)我感興趣的部分。
  2. 沒(méi)有探索,哪來(lái)的真愛(ài)?你都沒(méi)有探索過(guò)世界,你就說(shuō)這是你最喜歡的領(lǐng)域。

技術(shù)的革新史

從開(kāi)始的CGI到MVC模式,再到前后端分離的架構(gòu)模式,都在不斷地降低技術(shù)的門(mén)檻。而這些門(mén)檻的降低,已經(jīng)足以讓一兩個(gè)人來(lái)完成大部分的工作了。

CGI

二十年前的網(wǎng)站以靜態(tài)的形式出現(xiàn),這樣的網(wǎng)站并不需要太多的人去維護(hù)、管理。接著,人們發(fā)明了CGI(通用網(wǎng)關(guān)接口,英語(yǔ):Common Gateway Interface)來(lái)實(shí)現(xiàn)動(dòng)態(tài)的網(wǎng)站。下圖是一個(gè)早期網(wǎng)站的架構(gòu)圖:

CGI網(wǎng)站架構(gòu)

當(dāng)時(shí)這種網(wǎng)站的URL類(lèi)似于:

https://www.phodal.com/cgi-bin/getblog

(PS:這個(gè)鏈接是為了講解而存在的,并沒(méi)有真實(shí)存在。)

用戶(hù)訪(fǎng)問(wèn)上面的網(wǎng)頁(yè)的時(shí)候就會(huì)訪(fǎng)問(wèn),cgi-bin的路徑下對(duì)應(yīng)的getblog腳本。你可以用Shell返回這個(gè)網(wǎng)頁(yè):

#!/bin/sh
echo Content-type: text/plain
echo hello,world

Blabla,各種代碼混亂地夾雜在一起。不得不說(shuō)一句:這樣的代碼在2012年,我也看了有一些。簡(jiǎn)單地來(lái)說(shuō),這個(gè)時(shí)代的代碼結(jié)構(gòu)就是這樣的:

CGI腳本文件

這簡(jiǎn)直就是一場(chǎng)惡夢(mèng)。不過(guò),在今天好似那些PHP新手也是這樣寫(xiě)代碼的。

好了,這時(shí)候我們就可以討論討論MVC模式了。

MVC架構(gòu)

我有理由相信Martin Fowler的《企業(yè)應(yīng)用架構(gòu)模式》在當(dāng)時(shí)一定非常受歡迎。代碼從上面的耦合狀態(tài)變成了:

MVC架構(gòu)

相似大家也已經(jīng)對(duì)這樣的架構(gòu)很熟悉了,我們就不多解釋了。如果你還不是非常了解的話(huà),可以看看這本書(shū)后面的部分。

后臺(tái)服務(wù)化與前端一致化架構(gòu)

在今天看來(lái),我們可以看到如下圖所示的架構(gòu):

后臺(tái)服務(wù)化與前臺(tái)一致化架構(gòu)

后臺(tái)在不知不覺(jué)中已經(jīng)被服務(wù)化了,即只提供API接口和服務(wù)。前端在這時(shí)已經(jīng)盡量地和APP端在結(jié)合,使得他們可以保持一致。

軟件開(kāi)發(fā)的核心難題:溝通

軟件開(kāi)發(fā)在過(guò)去的幾十年里都是大公司的專(zhuān)利,小公司根本沒(méi)有足夠的能力去做這樣的事。在計(jì)算機(jī)發(fā)明后的幾十年里,開(kāi)發(fā)軟件是大公司才能做得起的。一般的非技術(shù)公司無(wú)法定制自己的軟件系統(tǒng),只能去購(gòu)買(mǎi)現(xiàn)有的軟件。而隨著技術(shù)成本的下降,到了今天一般的小公司也可以雇傭一兩個(gè)人來(lái)做同樣的事。這樣的演進(jìn)過(guò)程還真是有意思:

開(kāi)發(fā)演進(jìn)

在這其中的每一個(gè)過(guò)程實(shí)質(zhì)上都是為了解決溝通的問(wèn)題。從瀑布到敏捷是為了解決組織內(nèi)溝通的問(wèn)題,從敏捷到精益不僅僅優(yōu)化了組織內(nèi)的溝通問(wèn)題,還強(qiáng)化了與外部的關(guān)系。換句話(huà)說(shuō),精益結(jié)合了一部分的互聯(lián)網(wǎng)思維。

瀑布式

在最開(kāi)始的時(shí)候,我們預(yù)先設(shè)計(jì)好我們的功能,然后編碼,在適當(dāng)?shù)臅r(shí)候發(fā)布我們的軟件:

預(yù)先式設(shè)計(jì)的瀑布流

然而這種開(kāi)發(fā)方式很難應(yīng)對(duì)市場(chǎng)的變化——當(dāng)我們花費(fèi)了幾年的時(shí)間開(kāi)發(fā)出了一個(gè)軟件,而這個(gè)軟件是幾年前人們才需要的。同時(shí),由于軟件開(kāi)發(fā)本身的復(fù)雜度的限制,復(fù)制的系統(tǒng)在后期需要大量的系統(tǒng)集成工作。這樣的集成工作可能要花費(fèi)上大量的時(shí)間——幾星期、幾個(gè)月。

瀑布流的溝通模型

當(dāng)人們意識(shí)到這個(gè)問(wèn)題的時(shí)候,開(kāi)始改進(jìn)工作流程。出現(xiàn)了敏捷軟件開(kāi)發(fā),這可以解釋為什么產(chǎn)品經(jīng)理會(huì)經(jīng)常改需求。如果一個(gè)功能本身是沒(méi)必要出現(xiàn)的話(huà),那么為什么要花功夫去開(kāi)發(fā)。但是如果一個(gè)功能在設(shè)計(jì)的初期就沒(méi)有好好設(shè)計(jì),那么改需求也是必然的。

敏捷式

現(xiàn)有的互聯(lián)網(wǎng)公司的工作流程和敏捷軟件開(kāi)發(fā)在很多部分上是相似的,都有迭代、分析等等的過(guò)程:

敏捷軟件開(kāi)發(fā)

但是據(jù)我的所知:國(guó)內(nèi)的多數(shù)互聯(lián)網(wǎng)公司是不寫(xiě)測(cè)試的、沒(méi)有Code Review等等。當(dāng)然,這也不是一篇關(guān)于如何實(shí)踐敏捷的文章。敏捷與瀑布式開(kāi)發(fā)在很大的區(qū)別就是:溝通問(wèn)題。傳統(tǒng)的軟件開(kāi)發(fā)在調(diào)研完畢后就是分析、開(kāi)發(fā)等等。而敏捷開(kāi)發(fā)則會(huì)強(qiáng)調(diào)這個(gè)過(guò)程中的溝通問(wèn)題:

敏捷軟件開(kāi)發(fā)的溝通模型

在整個(gè)過(guò)程中都不斷地強(qiáng)調(diào)溝通問(wèn)題,然而這時(shí)還存在一個(gè)問(wèn)題:組織結(jié)構(gòu)本身的問(wèn)題。這樣的組織結(jié)構(gòu),如下圖所示:

組織結(jié)構(gòu)

如果市場(chǎng)部門(mén)/產(chǎn)品經(jīng)理沒(méi)有與研發(fā)團(tuán)隊(duì)坐一起來(lái)分析問(wèn)題,那么問(wèn)題就多了。當(dāng)一個(gè)需求在實(shí)現(xiàn)的過(guò)程中遇到問(wèn)題,到底是哪個(gè)部門(mén)的問(wèn)題?

同樣的如果我們的研發(fā)部門(mén)是這樣子的結(jié)構(gòu):

研發(fā)部門(mén)

那么在研發(fā)、上線(xiàn)的過(guò)程中仍然會(huì)遇到各種的溝通問(wèn)題。

現(xiàn)在,讓我們回過(guò)頭來(lái)看看大公司的專(zhuān)家與小公司的全棧。

大公司的專(zhuān)家與小公司的全棧

如果你經(jīng)??匆恍╆P(guān)于全棧和專(zhuān)家的技術(shù)文章的時(shí)候,你就會(huì)發(fā)現(xiàn)不同的人在強(qiáng)調(diào)不同的方向。大公司的文章喜歡強(qiáng)調(diào)成為某個(gè)領(lǐng)域的專(zhuān)家,小公司喜歡小而美的團(tuán)隊(duì)——全棧工程師。

如我們所見(jiàn)的:大公司和小公司都在解決不同類(lèi)型的問(wèn)題。大公司要解決性能問(wèn)題,小公司都活下去需要依賴(lài)于近乎全能的人。并且,大公司和小公司都在加班。如果從這種意義上來(lái)說(shuō),我們可以發(fā)現(xiàn)其實(shí)大公司是在剝削勞動(dòng)力。

專(zhuān)家

我們所見(jiàn)到的那些關(guān)于技術(shù)人員應(yīng)該成為專(zhuān)家的文章,多數(shù)是已經(jīng)成為某個(gè)技術(shù)領(lǐng)域里的專(zhuān)家寫(xiě)的文章。并且我們可以發(fā)現(xiàn)很有意思的一點(diǎn)是:他們都是管理者。管理者出于招聘的動(dòng)機(jī),因此更需要細(xì)分領(lǐng)域的專(zhuān)家來(lái)幫助他們解決問(wèn)題。

全棧

相似的,我們所看到的那些關(guān)于成為全棧工程師的文章,多數(shù)是初創(chuàng)公司的CTO寫(xiě)的。而這些初創(chuàng)公司的CTO也多數(shù)是全棧工程師,他們需要招聘全棧工程師來(lái)幫助他們解決問(wèn)題。

兩種不同的學(xué)習(xí)模型

而不知你是否也注意到一點(diǎn):專(zhuān)家們也在強(qiáng)調(diào)“一專(zhuān)多長(zhǎng)”。因?yàn)閱渭円揽坑谝粋€(gè)領(lǐng)域的技術(shù)而存在的專(zhuān)家已經(jīng)很少了,技術(shù)專(zhuān)家們不得不依據(jù)于公司的需求去開(kāi)拓不同的領(lǐng)域。畢竟“公司是指全部資本由股東出資構(gòu)成,以營(yíng)利為目的而依法設(shè)立的一種企業(yè)組織形式;”,管理人們假設(shè)技術(shù)本身是相通的,既然你在技術(shù)領(lǐng)域里有相當(dāng)高的長(zhǎng)板,那么進(jìn)入一個(gè)新的技術(shù)也不是一件難的事。

作為一個(gè)技術(shù)人員,我們是這個(gè)領(lǐng)域中的某個(gè)子領(lǐng)域?qū)<?。而作為這樣一個(gè)專(zhuān)家,我們要擴(kuò)展向另外一個(gè)領(lǐng)域的學(xué)習(xí)也不是一件很難的事。借鑒于我們先前的學(xué)習(xí)經(jīng)驗(yàn),我們可以很快的掌握這個(gè)新子域的知識(shí)。如我們所見(jiàn),我們可以很快地補(bǔ)齊圖中的短板:

木桶

在近來(lái)的探索中發(fā)現(xiàn)有一點(diǎn)非常有意思:如果依賴(lài)于20/80法則的話(huà),那么成為專(zhuān)家和全棧的學(xué)習(xí)時(shí)間是相當(dāng)?shù)?。在最開(kāi)始的時(shí)候,我們要在我們的全棧工程和專(zhuān)家都在某個(gè)技術(shù)領(lǐng)域達(dá)到80分的水平。

那么專(zhuān)家,還需要80%的時(shí)間去深入這個(gè)技術(shù)領(lǐng)域。而全棧工程師,則可以依賴(lài)于這80%的時(shí)候去開(kāi)拓四個(gè)新的領(lǐng)域:

全棧與專(zhuān)家學(xué)習(xí)時(shí)間

盡管理論上是如此,但是專(zhuān)家存在跨領(lǐng)域的學(xué)習(xí)障礙——套用現(xiàn)有模式。而全棧也存在學(xué)習(xí)障礙——如何成為專(zhuān)家,但是懂得如何學(xué)習(xí)新的領(lǐng)域。

解決問(wèn)題的思路:不同的方式

有意思的是——成為專(zhuān)家還是成為全棧,取決于人的天性,這也是兩種不同的性格決定的。成為管理者還是技術(shù)人員看上去就像一種簡(jiǎn)單的劃分,而在技術(shù)人員里成為專(zhuān)家還是全棧就是另外一種劃分。這取決于人們對(duì)于一個(gè)問(wèn)題的思考方式:這件事情是借由外部來(lái)解決,還是由內(nèi)部解決。下面這張圖剛好可以表達(dá)我的想法:

內(nèi)向與外向思維

而這種思維依據(jù)于不同的事情可能會(huì)發(fā)生一些差異,但是總體上來(lái)說(shuō)是相似的。當(dāng)遇到一個(gè)需要?jiǎng)?chuàng)輪子的問(wèn)題時(shí),我們就會(huì)看到兩種不同的方式。

對(duì)于全棧工程師來(lái)說(shuō),他們喜歡依賴(lài)于外部的思維,用于產(chǎn)生顛覆式思維。如Angular.js這樣的框架便是例子,前端結(jié)合后端開(kāi)發(fā)語(yǔ)言Java的思維而產(chǎn)生。而專(zhuān)家則依賴(lài)于內(nèi)部的條件,創(chuàng)造出不一樣的適應(yīng)式創(chuàng)新。如之前流行的Backbone框架,適應(yīng)當(dāng)時(shí)的情況而產(chǎn)生。

全棧工程師的未來(lái):無(wú)棧

全棧工程師本身不應(yīng)該僅僅局限于前端和后臺(tái)的開(kāi)發(fā),而可以嘗試去開(kāi)拓更廣泛的領(lǐng)域——因?yàn)槿珬1旧硎且蕾?lài)于工程師本身的學(xué)習(xí)能力,正是這種優(yōu)秀的學(xué)習(xí)能力可以讓他們可以接觸更廣泛的知識(shí)。

全棧的短板

如果你也嘗試過(guò)面試過(guò)全棧工程師,你會(huì)怎么去面試他們呢?把你知道的所有的不同領(lǐng)域的問(wèn)題都拿出來(lái)問(wèn)一遍。是的,這就是那些招聘全棧工程師的公司會(huì)問(wèn)你的問(wèn)題。

人們以為全棧工程師什么都會(huì),這是一個(gè)明顯的誤區(qū)——然而要改變這個(gè)誤區(qū)很難。最后,導(dǎo)致的結(jié)果是大家覺(jué)得全棧工程師的水平也就那樣。換句來(lái)說(shuō),人們根本不知道什么是全棧工程師。在平時(shí)的工作里,你的隊(duì)伍都知道你在不同領(lǐng)域有豐富的知識(shí)。而在那些不了解你的人的印象里,就是猜測(cè)你什么都會(huì)。

因此,這就會(huì)變成一個(gè)罵名,也是一個(gè)在目前看來(lái)很難改變的問(wèn)題。在這方面只能盡可能地去了解一些通用的問(wèn)題,并不能去了解所有的問(wèn)題。在一次被面試全棧工程師的過(guò)程中,有一個(gè)面試官準(zhǔn)備了幾個(gè)不同語(yǔ)言(Javascript、Java、Python、Ruby)的問(wèn)題來(lái)問(wèn)我,我只想說(shuō)Ciao——意大利語(yǔ):你好!

除了這個(gè)問(wèn)題——人們不了解什么是全棧工程師。還有一個(gè)問(wèn)題,就是剛才我們說(shuō)的成為專(zhuān)家的老大難問(wèn)題。

無(wú)棧

當(dāng)我第一次看到全棧工程師這個(gè)名字的時(shí)候,我發(fā)現(xiàn)我已然是一個(gè)全棧工程師。因?yàn)槲业膶W(xué)習(xí)路線(xiàn)比較獨(dú)特:

中小學(xué):編程語(yǔ)言 -> 高中:操作系統(tǒng)、內(nèi)核、游戲編程 -> 大學(xué): 硬件、Web開(kāi)發(fā) -> 工作:后端 + 前端

而在當(dāng)時(shí)我對(duì)SEO非常感興趣,我發(fā)現(xiàn)這分析和Marketing似乎做得還可以。然后便往Growth Hacking發(fā)展了:

Growth Hacking

而這就是全棧學(xué)習(xí)帶來(lái)的優(yōu)勢(shì),學(xué)過(guò)的東西多,學(xué)習(xí)能力就變強(qiáng)。學(xué)習(xí)能力往上提的同時(shí),你就更容易進(jìn)入一個(gè)新的領(lǐng)域。

參考書(shū)籍

  • 《精益企業(yè): 高效能組織如何規(guī)?;瘎?chuàng)新》
  • 《企業(yè)應(yīng)用架構(gòu)模式》
  • 《敏捷軟件開(kāi)發(fā)》
  • 《技術(shù)的本質(zhì)》
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,323評(píng)論 25 708
  • 全棧工程師,英文 Full Stack developer,是指那些掌握多種技能,并能利用多種技能獨(dú)立完成產(chǎn)品的人...
    OneAPM閱讀 2,477評(píng)論 0 20
  • 現(xiàn)在越來(lái)越多的創(chuàng)業(yè)公司都想找全棧工程師,因此市場(chǎng)上就出現(xiàn)了很多偽全棧工程師,特別是學(xué)會(huì)了Node的前端工程師,前端...
    offbye西濤閱讀 5,062評(píng)論 35 75
  • 命令格式 rmdir [參數(shù)] 目錄 命令功能 刪除空目錄 命令參數(shù) rmdir --help 常用命令 刪除空目...
    簡(jiǎn)單2016閱讀 292評(píng)論 0 0
  • 圖文整理根據(jù)李哲老師之姿勢(shì)評(píng)估網(wǎng)課,vivian整理。 身體前方姿勢(shì)評(píng)估 步驟5. 肩膀高度 步驟6.圓肩 步驟7...
    舒涵vivian閱讀 1,421評(píng)論 0 3

友情鏈接更多精彩內(nèi)容