標籤:
本來我是不知道這個稱謂的,在oschina完善簡曆的時候系統幫我選了這個角色,引起了我的注意,於是就瞭解了一下。老樣子引入一篇文章,加上自己的一點點體會。(連結:http://digi.163.com/14/0116/10/9IN26JNS00162OUT.html)
最近國內外都在流行一個詞叫Full Stack,中文翻譯過來叫全棧工程師,也叫全端工程師。微博上很多專業人士都在討論全端工程師,有贊有毀的。我對全端工程師的定義是:掌握多種技能,並能利用多種技能獨立完成產品的人。打外比方,全棧工程師就是一個能獨立蓋一幢10層小洋樓的人,而普通工程師,則是可以和一群人蓋一幢摩天大廣告的人。
至於要掌握哪些技能,我覺得這個要跟從事的行業與技術方向有關,做互連網的和做軟體的是不一樣的,即使是做互連網的,後端也可以分為很多種技術流派。
8/2定律在哪都適用,全棧工程師就是掌握20%常用技能的人,但這20%的技能會有80%的幾率被用到,剩下那80%不常用的,讓我們Google吧。
有人說,全棧工程師在中國已經很多年了,他們叫站長。這個說話有點靠譜但又不那麼靠譜,我自己也做過站長,深知作為一名站長需要掌握很多種技術。不靠譜的是,很多站長其實並沒有真正寫過多少代碼,而是熟練利用一些建站軟體來建站。
全棧工程師的價值
有人說了,你再牛逼,你懂五種技術,你能幹五個人的活嗎?全棧工程師並不是說一個人能幹幾個人的活,而是要從多個方面來看這個問題。
全域性思維
現代項目的開發,很少說只用到一兩種技術的,特別是移動互連網大潮下。隨便一個互連網項目中用到的技術,就會需要用到後端開發、前端開發、介面設計、產品設計、資料庫、各種移動用戶端、三屏相容、restFul API設計和OAuth等等,一些比較前衛的項目,可能會用到Single Page Application、Web Socket、HTML5/CSS3這些技術,還有像第三方開發像公眾號微博應用等等。(這個確實,自己也是涉獵了一二,如後端開發、前端開發、資料庫、restFul、OAuth、websocket、第三方服務號,企業號)
Web前端也遠遠不是從前的切個圖用個jQuery上個AJAX相容各種瀏覽器那麼簡單了。現代的Web前端,你需要用到模組化開發、多屏相容、MVC,各種複雜的互動與最佳化,甚至你需要用到Node.js來協助前端的開發。(Node.js之前還是研究過的,奈何沒有在實際的項目中運用過,web前端真的不再是切個圖用個jQuery上個AJAX相容各種瀏覽器那麼簡單了,早在四年前我記得web前端就是這麼做的,接觸過的backbone.js就是一個前端mvc架構,模組開發也是趨勢,前端的複雜性,與背景互動,頁面的渲染,代碼的最佳化。。前端開發的複雜度,從我近期參與的項目新介面的改造就感觸頗深。。)
所以說一個現代化的項目,是一個非常複雜的構成,我們需要一個人來掌控全域,他不需要是各種技術的資深專家,但他需要熟悉到各種技術。對於一個團隊特別是互連網企業來說,有一個全域性思維的人非常非常重要。(讓我想起了已經跳槽了的技術總監。。)
像如果是我經手的項目,我肯定會注意到網頁最佳化,也會考慮到API來相容各種用戶端,更會考慮到三屏相容的問題。不會說項目中完全使用AJAX而不顧SEO,也不會為了功能性而忽略訪問速度,我會很好的把握這個平衡,因為我知道它們的權重與實現成本。
溝通成本
項目越大,溝通成本越高,做過專案管理的人都知道,項目中的人力是1+1<2的,人越多效率越低。因為溝通是需要成本的,不同技術的人各說各話,前端和後端是一定會掐架的。每個人都會為自己的利益而戰,毫不為已的人是不存在的。
而全棧工程師的成本幾乎為零,因為各種技術都懂,胸有成竹,一不小心自己就全做了。即使是在團隊協作中,與不同技術人員的溝通也會容易得多,你讓一個後端和一個前端去溝通,那完全是雞同鴨講,更不用說設計師與後端了。但如果有一個人懂產品懂設計懂前端懂後端,那溝通的結果顯然不一樣,因為他們講的,彼此都能聽得懂。(之前沒感覺到溝通成本,因為之前大多是後端開發,一個開發小組或是一個團隊溝通沒有那麼高成本,直到最近這個團隊,與app團隊的溝通讓我深深體會了溝通的重要性,溝通成本之高遠超出我的想象,從介面文檔到開發聯調無處不在的溝通成本。。)
創業公司
對於創業公司來說,全端工程師的價值是非常大的,創業公司不可能像大公司一樣,各方面的人才都有。所以我們需要一個多面手,各種活都能一肩挑,獨擋多面的萬金油。對於創業公司,不可能說DBA前端後端用戶端各種人才全都備齊了,很多工作請人又不飽和,不請人又沒法做,外包又不放心品質,所以全端工程師是省錢的一妙招。雖然說全端工程師工資會比一般的工程師會高很多,但綜合下來,成本會低很多。(這個。。。想起了nba裡面的搖擺人,如駭客,巔峰期從1號位防到4號位,但是工資沒有那些巨星高。。。)
全棧工程師的困境
我講技術有兩個發展方向,一種是縱向一種是橫向的,橫向的是瑞士軍刀,縱向的是削鐵如泥的幹將莫邪。這兩個方向都沒有對與錯,發展到一定程式都會相互溶合,就好比中國佛家禪修的南頓北漸,其實到了最後,漸悟與頓悟是一樣的,頓由漸中來。
如果一個公司不太懂全棧工程師的價值,那麼全棧工程師的地位將會很尷尬,說得不好聽一點,全棧工程師就是什麼都會,都麼都不會。曾經有一次面試,對方問我很基礎的問題,我答不上來,我能做出產品,也知道什麼是怎麼一回事,我也不會犯那些錯誤,但我就是答不上概念,要考倒我非常容易。所以在應聘面試的時候,有些時候會吃虧,你可能會不如哪些在某一方面鑽得很深的人工資拿得高。(。。。此處省略一百字)
由於經常在各種技術穿梭,我會經常忘記代碼的文法和一些API,所以我經常需要去查API甚至查文法,我覺得沒有Google我幾乎沒法工作。這在某些人的眼裡,是技術不夠的表現。我記的只是一個Key,一個如何找尋答案的索引,而不是全部,人腦不是電腦,我不可能要求我能記下所有的東西。(。。。筆試面試喜歡考文法的問一些生疏的api用法的你們夠了!)
有一次面試官問我一個問題,我說我不知道,但我猜大概是如此這般,對方問我,你為什麼這麼猜,我說憑直覺,對方笑了笑沒說話。面試完後我一查,果然和我猜的差不多。沒錯,我就是憑直覺,但這種直覺和女人的直覺不一樣,這種直覺是技術上的直覺,是你過去技術經驗累積的一個反射。
我不是一個非常專業的Web前端,也不是一個非常專業的Node.js開發工程師,更不是一個非常專業的iOS開發工程師。用人單位會問我,你到底是專業做哪一個方面的,我為什麼要給你這麼高的工資?
有什麼資格來談全棧工程師
我應該算是一個全棧型工程師了,行業經驗已經超過10年。獨立做過不少產品,也帶過不少項目,經過的產品包括案頭端、Web產品、移動端產品,Web端涵蓋前端與後端,移動端主要做iOS和混合開發。
熟悉Web前端,對MVC/模組化開發有實戰經驗,熟悉CoffeeScript、Grunt、RequireJS、Handlebars等等,自己寫過小型的Javascript架構,一個項目中的JS代碼超過一萬行。熟知網頁最佳化,知道如何讓網頁變得更加快速。也略懂SEO,知道什麼樣的URL和代碼會更討好Spider。
熟悉Node.js,有幾個項目都是基於Node.js的,目前發布有開源的Blog程式Purelog,在NPM上有多個模組發布。熟悉混合開發,過去我曾經有超過一年的時間是在研究Hybrid技術,多個App基於混合開發技術,也有開發類似於PhoneGap的解決方案。對HTML5在手機上的表現頗為熟悉,挖過很多的技術坑,如白屏問題,Sqlite問題,捲軸問題,硬體動畫加速、點擊延時問題等等。
會做設計,熟悉Photoshop,所有的產品不管是Logo還是介面全都是自己做的設計,雖然在資深的設計師眼裡不值一提,但在工程師隊伍中算是比較另類了。
熟悉Objective-C,有兩年以上的iOS開發經驗,在App Store上有約十款App。熟悉伺服器的一般性操作,自己有VPS並運行多個網站,雖然設定管理員經常要去Google。
早年曾經做過一年的Delphi,也曾做過幾年的ASP.net,雖然這些技術我目前已經放棄,完全轉向*nix平台,但累積下的經驗是在的。多年的專案管理經驗,曾在三個公司擔任過專案經理,累計專案管理經驗超過4年。在多個科技門戶發表過技術和評論文章。(這一段主要是為了說明作者有資格。。。膜拜一下即可,自己還需努力)
為什麼我會成為全棧工程師
我相信很多全棧型工程師會和我一樣,是因為要創業才成為全棧型工程師的。我有一顆創業和做產品的心,而且我又是一個不願意麻煩別人的人,有些人擅長整合資源,空手套白狼,但我顯然不是這種人,所以我只好自己做了。
在經曆過兩次孤獨的創業之後,我發現我並不是一個適合獨立創業的人,所以,我成為了一個全端工程師。我最初是做ASP,後來自己創業寫用戶端用Delphi,然後寫了三年的ASP.Net,2010年的時候因為公司需要開始做iOS開發。Web前端是一直自己在做,項目中的的Javascript基本都是我自己在做。
我熱愛寫代碼,熱愛重複發明輪子,熱愛新技術,我想這也是我成為一個全棧工程師的重要原因。(哈哈)
於我自己來說,我覺得全棧工程師的樂趣要比一般工程師來得多,因為你知道一個產品的形態,你可以去設計一個產品,你是從全域的視野來做事情,你得到的成就感會更多一些。
其實需要學習的東西還很多。
全棧工程師