與其他互聯(lián)網(wǎng)熱詞一樣,”全?!俺绦騿T也是英譯過來的,英文全文是:Full-Stack Developer,你想啊,中國人民怎么會(huì)用客棧的棧、堆棧的棧來形容工程師呢? 談?wù)撘粋€(gè)概念,首先得給伊個(gè)定義,一般來說,全棧工程師就是指技術(shù)多面手,掌握多種技能,能夠獨(dú)立完成 non-trivial application 的人。non-trivial 怎么解呢?就是有一定復(fù)雜度的,具備一定規(guī)模的意思。基于此,我和我的程序員朋友們,對(duì)全棧工程師的認(rèn)識(shí)是:在技術(shù)棧的各個(gè)領(lǐng)域都能夠做到出色的工程師。有了這個(gè)標(biāo)準(zhǔn),我和程序員們面面相覷,發(fā)現(xiàn)沒有一個(gè)是全棧工程師。技術(shù)領(lǐng)域浩如煙海,更新?lián)Q代之迅猛如炸雷不及掩耳,別說盜鈴了?;ヂ?lián)網(wǎng)短短 20 年的發(fā)展,累積的技術(shù)信息已經(jīng)不是我們終其一生能夠消化的了,知道尚不可為,何以做到出色? 但是,這個(gè)標(biāo)準(zhǔn)稍稍降低一點(diǎn),早期的程序員差不多就都能叫全棧了。2001 年左右我們開發(fā) B/S 產(chǎn)品,用來展現(xiàn) UI 和數(shù)據(jù)的程序代碼中混雜了 Java、HTML、CSS 和 JavaScript,根本不可能把前端和后端拆開編寫,而后端業(yè)務(wù)邏輯本身就是 Java 實(shí)現(xiàn)的,你不寫誰寫?懂了業(yè)務(wù)邏輯和算法還不行,你得把數(shù)據(jù)存數(shù)據(jù)庫和文件系統(tǒng)吧,什么?你不懂 SQL?我靠那你還是程序員嗎?你不能每次和數(shù)據(jù)庫交互都讓一個(gè)進(jìn)程去敲門吧,數(shù)據(jù)庫招你惹你了?這時(shí)候就得有個(gè)連接線程池。異常得統(tǒng)一處理吧,得支持集群吧,給用戶部署了得能自動(dòng)擴(kuò)展吧,沒測試怎么辦?你自己寫的代碼寫的業(yè)務(wù)邏輯寫的界面,你不保證正確性誰保證?…… 總之在那個(gè)年代,每個(gè)程序員差不多什么都得會(huì)點(diǎn),但有的人在這個(gè)領(lǐng)域強(qiáng)一些,有的人在那個(gè)領(lǐng)域出色一些,不一而足。 現(xiàn)在看來,那時(shí)候我們應(yīng)該叫全沾工程師,什么都會(huì)點(diǎn),能解決問題,但是單個(gè)人,除了自己擅長的技術(shù),在其他領(lǐng)域,都沒能做到出色。 如果這個(gè)標(biāo)準(zhǔn)再降低一點(diǎn),比如說把「non-trivial」去掉,隨便做個(gè) Application,那就容易多了,一個(gè)零基礎(chǔ)智力正常的成年人去培訓(xùn)班培訓(xùn)幾個(gè)月,差不多就能做出一個(gè)網(wǎng)站、一個(gè)移動(dòng) App 還包括后端,或者一個(gè)數(shù)據(jù)挖掘的展示頁面。但這個(gè)范圍僅僅局限在會(huì)上,和做好、出色,差距明顯??梢钥醋鍪侨腴T級(jí)的工程師,只不過和前端工程師、移動(dòng)開發(fā)工程師、Java 工程師相比,什么技術(shù)都懂一點(diǎn)點(diǎn)而已。 這種工程師,我們可以把他們叫做全站工程師,基本上,進(jìn)入企業(yè)之后,都得有老師傅帶著,手把手教,練習(xí)和實(shí)戰(zhàn),才能做「non-trivial」的項(xiàng)目。為啥叫全站呢,意思就是老師傅講東西的時(shí)候,都在旁邊站著。 有沒有真正的全棧工程師?有,比如菲爾普斯在游泳層面勉強(qiáng)算全棧,奧運(yùn)會(huì)咔咔拿 7 枚金牌,你服不服?你說我也會(huì)四種泳姿……您那叫會(huì),會(huì)和做好,差著幾十個(gè)二把刀。當(dāng)然了,二把刀也沒什么不好,至少比拿根兒木頭杵著強(qiáng)多了。鼓勵(lì)大家在立足本職成為專家的基礎(chǔ)上,成為一個(gè)認(rèn)真的二把刀。 什么是程序領(lǐng)域的全棧工程師呢?我覺得云風(fēng)算是游戲領(lǐng)域的全棧工程師,他自幼編程,在語言層面對(duì)匯編、C、C++、Lisp、Java、Python、Lua 都有深入的理解,使用起來如臂指使,對(duì)游戲領(lǐng)域的策劃、引擎、協(xié)議和服務(wù)端架構(gòu)也是駕經(jīng)就熟,最新開源出來的 skynet —— 基于 Lua 實(shí)現(xiàn)的網(wǎng)絡(luò)游戲服務(wù)器框架,極具參考和實(shí)用意義( https://github.com/cloudwu )……但是云風(fēng)不做 Web 游戲啊,他對(duì) JavaScript 的評(píng)價(jià)是:javascript 真是門惡心的語言! 領(lǐng)我編程入門的師兄 baby,也是一個(gè)編程奇才,他對(duì)操作系統(tǒng)、編程語言、數(shù)據(jù)庫均有透徹的了解,學(xué)習(xí)新技術(shù)只能用迅猛來形容,每次技術(shù)選型之后,他就會(huì)趴在辦公室里敲敲打打幾天,然后丟給我們一個(gè)用新語言實(shí)現(xiàn)的框架,告訴我們,用!一用之下,幾乎沒有 bug。這樣的人,可稱全棧。他們并不是在編程領(lǐng)域樣樣精通,而是在需要的時(shí)候能夠在極短的時(shí)間內(nèi)達(dá)到常人需要長時(shí)間練習(xí)才能達(dá)到的水準(zhǔn)。 正如我在書中寫到,高手并不是懂得多,他們只是學(xué)得快而已。 現(xiàn)在 baby 早有了自己的公司,估計(jì)技術(shù)也做的少了,現(xiàn)在想起他那訓(xùn)疾如風(fēng)的鍵盤指法和閃電般的學(xué)習(xí)速度,還是讓人一聲嘆息。 整體來說,我覺得程序員們沒必要去追逐什么「全棧工程師」,在工作和生活中,花 200% 的時(shí)間讓自己在擅長的領(lǐng)域成為超越 80% 的人,然后,需要學(xué)什么就去學(xué)什么,一味追求大而全,反而會(huì)適得其反。 之前推薦的公眾號(hào)「劉炯」曾經(jīng)寫過一篇「想當(dāng)全才的自我反省」,其中一段大意如下:
這就如同很多游戲中的稀缺技能點(diǎn)一樣,玩家永遠(yuǎn)加不滿所有的技能樹,如何有策略的使用有限的技能點(diǎn)來解決對(duì)應(yīng)的問題,成了每個(gè)玩家必修的課程。 現(xiàn)實(shí)生活中,亦是如此! |
|