1.什么是全棧工程師
最近有個(gè)招聘挺火的:
Is it reasonable to expect mere morals to have mastery over every facet of the development stack? Probably not, but Facebook can ask for it. I was told at OSCON by a Facebook employee that they only hire ‘Full Stack’ developers. Well, what does that mean…
這是facebook的招聘青瀑,說是只招Full Stack Engineer剃诅,在中文翻譯過來就是全棧工程師舷丹,也叫全端工程師。那么什么是全棧工程師呢,就是前端和后端全通。前端技術(shù)有html未妹,css和javascript,后端技術(shù)有多種流派空入,比如java络它、php、python等执庐,除此之外酪耕,還需要數(shù)據(jù)庫設(shè)計(jì),比如mysql轨淌、oracle迂烁、Microsoft SQL Server等。說點(diǎn)通熟易懂的递鹉,我們把it開發(fā)行業(yè)與建筑業(yè)相比盟步。一個(gè)全棧工程師能獨(dú)立完成一棟5層的別墅;而一堆普通前端后端工程師一起完成一幢上百層的摩天大廈躏结。話說回來却盘,其實(shí)我們IT民工與他們普通民工,并沒有本質(zhì)上的區(qū)別媳拴,他們?cè)诎岽u黄橘,而我們?cè)诎醔it,他們曬著太陽累一點(diǎn)活得長一點(diǎn)屈溉,我們吹著空調(diào)卻死得早一點(diǎn)塞关。
2.全棧工程師的價(jià)值
也有人說,你牛逼子巾,懂八種技術(shù)帆赢,但你能干八個(gè)人的活嗎小压?全棧工程師并不是說一個(gè)人能干幾個(gè)人的活,我們從幾個(gè)方面來看待這個(gè)問題椰于。
1)溝通成本
項(xiàng)目越大怠益,溝通成本越高,做過項(xiàng)目管理的人都知道瘾婿,項(xiàng)目中的人力是1+1<2的蜻牢,人越多效率越低。因?yàn)闇贤ㄊ切枰杀镜钠悖煌夹g(shù)的人各說各話孩饼,前端和后端是一定會(huì)掐架的,后端API和移動(dòng)客戶端也是一定會(huì)掐架的竹挡。每個(gè)人都會(huì)為自己的利益而戰(zhàn),毫不為已的人是不存在的立膛。
而全棧工程師的成本幾乎為零揪罕,因?yàn)楦鞣N技術(shù)都懂,知道問題的所在宝泵,一不小心自己演示怎么去做就變成全都自己干了好啰。即使是在團(tuán)隊(duì)協(xié)作中,與不同技術(shù)人員的溝通也會(huì)容易得多儿奶。一個(gè)不懂技術(shù)的你框往,讓一個(gè)后端和一個(gè)前端去溝通,那完全是雞同鴨講闯捎,更不用說設(shè)計(jì)師與后端了椰弊。但如果有一個(gè)人懂產(chǎn)品懂設(shè)計(jì)懂前端懂后端,那溝通的結(jié)果顯然不一樣瓤鼻,因?yàn)樗麄冎v的秉版,彼此都能聽得懂。
2)全局觀念
現(xiàn)代項(xiàng)目的開發(fā)茬祷,很少說只用到一兩種技術(shù)的清焕,特別是移動(dòng)互聯(lián)網(wǎng)大潮下。隨便一個(gè)互聯(lián)網(wǎng)項(xiàng)目中用到的技術(shù)祭犯,就會(huì)需要用到后端開發(fā)秸妥、前端開發(fā)、界面設(shè)計(jì)沃粗、用戶體驗(yàn)設(shè)計(jì)粥惧、數(shù)據(jù)庫、安全等級(jí)保護(hù)設(shè)計(jì)陪每、各種移動(dòng)客戶端影晓、三屏合一設(shè)計(jì)镰吵、restFul API風(fēng)格設(shè)計(jì)和OAuth授權(quán)等等,一些比較前衛(wèi)的項(xiàng)目挂签,可能會(huì)用到第三方開發(fā)疤祭,像微信SDK,微博SDK饵婆,支付寶SDK等等勺馆。
Web前端也遠(yuǎn)遠(yuǎn)不是從前的切個(gè)圖用個(gè)jQuery上個(gè)AJAX兼容各種瀏覽器那么簡單了。現(xiàn)代的Web前端侨核,你需要用到模塊化開發(fā)草穆、多屏兼容、MVC搓译,各種復(fù)雜的交互與優(yōu)化悲柱,甚至你需要用到Node.js來協(xié)助前端的開發(fā)。
所以說一個(gè)現(xiàn)代化的項(xiàng)目些己,是一個(gè)非常復(fù)雜的構(gòu)成豌鸡,我們需要一個(gè)人來掌控全局,他不需要是各種技術(shù)的頂級(jí)專家段标,但他需要熟悉到各種技術(shù)原理與實(shí)現(xiàn)涯冠。對(duì)于一個(gè)團(tuán)隊(duì)特別是互聯(lián)網(wǎng)企業(yè)來說,有一個(gè)全局性思維的人非常非常重要逼庞。
3)項(xiàng)目進(jìn)度
軟件工程項(xiàng)目的進(jìn)度管理是比較困難的事情趁窃,完全按部就班的進(jìn)行一個(gè)項(xiàng)目幾乎是不可能的十电。期間將涉及到諸多問題赊舶,或多或少將影響項(xiàng)目的安排摸恍。在制定項(xiàng)目可行性方案時(shí)最大約束就是合同期,里程碑璧南、基線等東西吨瞎。最根本的計(jì)劃只有一條:竭盡一切所能使項(xiàng)目在合同期內(nèi)保證質(zhì)量的完成項(xiàng)目全部工作。
那么穆咐,誰來評(píng)估并且制定周密可行性方案成了首要問題颤诀。這個(gè)艱巨的任務(wù)只能落在對(duì)項(xiàng)目有全面了解,并且懂各方面技術(shù)的人員身上对湃。計(jì)劃要分粗細(xì)崖叫,粗的計(jì)劃就是里程碑,界定某段時(shí)間內(nèi)要出哪些成果拍柒。細(xì)的計(jì)劃也就是任務(wù)執(zhí)行計(jì)劃心傀,要注意預(yù)留單元測試修改的時(shí)間,并且要預(yù)留未知干擾的時(shí)間拆讯。計(jì)劃的制定不單單要滿足工期要求還要可行脂男,再漂亮的計(jì)劃如果不可行就是花瓶养叛。計(jì)劃是可以調(diào)整的,但里程碑計(jì)劃盡量不要調(diào)整宰翅∑基線是一些重要的里程碑,一旦建立汁讼,萬不得已是不能改變的淆攻,否則在多線程的項(xiàng)目將出現(xiàn)扯皮推諉的情況。同時(shí)設(shè)置各個(gè)檢查點(diǎn)嘿架,在規(guī)定的時(shí)間間隔內(nèi)對(duì)項(xiàng)目進(jìn)行檢查瓶珊,比較實(shí)際與計(jì)劃之間的差異,并根據(jù)差異進(jìn)行調(diào)整耸彪。
接下來伞芹,我們需要人來計(jì)劃執(zhí)行情況跟蹤,必須定期跟蹤計(jì)劃的執(zhí)行情況蝉娜,根據(jù)實(shí)際情況做相應(yīng)調(diào)整丑瞧。也就是要監(jiān)督計(jì)劃執(zhí)行。監(jiān)督審查跟蹤蜀肘,推薦由女生來擔(dān)當(dāng),但是調(diào)整項(xiàng)目計(jì)劃需要項(xiàng)目負(fù)責(zé)人來協(xié)調(diào)稽屏。
對(duì)于驗(yàn)收扮宠,每個(gè)任務(wù)的成果都要嚴(yán)格驗(yàn)收,如果有問題沒有及時(shí)解決狐榔,對(duì)后面的工作壓力太大坛增,往往出現(xiàn)前面都是“按計(jì)劃執(zhí)行”,到后面爆發(fā)性的延期薄腻。驗(yàn)收不僅是黑盒子測試收捣,同時(shí)也需要白盒子測試。
風(fēng)險(xiǎn)預(yù)測項(xiàng)目管理庵楷,要有風(fēng)險(xiǎn)意識(shí)罢艾,我起初沒怎么重視,后來經(jīng)歷過了才有感觸尽纽。最大的風(fēng)險(xiǎn)不是在技術(shù)層面上咐蚯,而是在項(xiàng)目組成員上,要注意在項(xiàng)目開發(fā)期間會(huì)不會(huì)有人離開弄贿,會(huì)不會(huì)有人參加春锋,項(xiàng)目組成員在此期間會(huì)不會(huì)休假或外出(如結(jié)婚、生子)差凹,某人生病了期奔,要及時(shí)做好調(diào)整計(jì)劃準(zhǔn)備等等侧馅。技術(shù)方面的可以適當(dāng)預(yù)留新技術(shù)的摸索時(shí)間。
3.全棧工程師的窘境
清高呐萌,自命不凡馁痴。這倒也奇怪了,我接觸很多學(xué)弟或者同學(xué)<也有一些學(xué)長>搁胆,他們的特點(diǎn)都是這個(gè)弥搞,也許他們也都有成長為全棧工程師的資質(zhì)吧,大家都是恃才傲物渠旁。懂一些技術(shù)IT同學(xué)就覺得自己很屌很牛逼的樣子攀例,其實(shí)多數(shù)人員只是知其然不知其所然。然而顾腊,全棧工程師是能了解全部的粤铭,這個(gè)特點(diǎn)就更明顯了。
對(duì)別人要求嚴(yán)格杂靶,喜歡追求完美梆惯,許多事情不小心就全做了÷鹂澹總是覺得別人這不行那不是垛吗,把新手要求的盡善盡美,這往往大家都很累烁登,我曾經(jīng)這么要求過怯屉,后來他就不跟我完了,說我要求太高了饵沧。
低情商锨络,交不到女朋友。學(xué)習(xí)it編程要學(xué)習(xí)的東西很多狼牺,沒有那么多時(shí)間去想其他事情羡儿。這也往往造成程序員低情商,不懂人情世故是钥,全棧工程師更甚掠归。寫到此處,想到一則故事:兩名開發(fā)工程師悄泥,一個(gè)測試人員拂到。其中,兩名開發(fā)工程師是男的码泞,一個(gè)水平高兄旬,一個(gè)水平低,一個(gè)測試人員,女的领铐。好的開發(fā)程序員呢悯森,寫的程序近乎完美,各種好绪撵,各種高質(zhì)量瓢姻,測試的妹紙幾乎找不到任何漏洞。差的開發(fā)工程師呢音诈,成天各種bug幻碱,各種漏洞,總是被測試妹紙叫過去臭罵一頓细溅,回來寫了又提交褥傍。后來是,測試妹紙和差的開發(fā)工程師跑了喇聊。原因是恍风,差的開發(fā)工程師用心不專,但是呢態(tài)度非常好誓篱,一來二往朋贬,和測試妹紙關(guān)系好了。
如果一個(gè)公司不太懂全棧工程師的價(jià)值窜骄,那么全棧工程師的地位將會(huì)很尷尬锦募,說得不好聽一點(diǎn),全棧工程師就是什么都會(huì)邻遏,然后糠亩,你就是什么都不會(huì)。
我不是一個(gè)非常專業(yè)的Web前端党远,不熟悉node.js;也不是一個(gè)專業(yè)的移動(dòng)端開發(fā)工程師富弦,不精通移動(dòng)端開發(fā)沟娱;更不是一個(gè)運(yùn)維工程師,不熟悉高端冗余算法等腕柜。用人單位會(huì)問我济似,你到底是專業(yè)做哪一個(gè)方面的,我為什么要給你這么高的工資盏缤?
4.我為什么成為全棧工程師
全棧工程師和我基本上是一樣的砰蠢,全棧工程師不是為了工作。作為一個(gè)全棧工程師唉铜,不是公司培養(yǎng)出來的台舱,而是逼出來的,不是公司逼出來的,而是自己把自己逼出來的竞惋。自己想要精通技術(shù)的各原理柜去,方便以后實(shí)現(xiàn)夢想。
沒有夢想是可憐的拆宛,沒有實(shí)現(xiàn)夢想的手段或者技術(shù)是可悲的嗓奢。慶幸的是,我一直懷揣著夢想浑厚,并且想用自己的雙手去實(shí)現(xiàn)股耽。
有創(chuàng)業(yè)的心,但我又不會(huì)空手套白狼钳幅,忽悠免費(fèi)勞動(dòng)力物蝙,所以只能自己干。自己干贡这,必須各個(gè)方面都要學(xué)通茬末,哪里不會(huì)就去學(xué)哪里。
曾經(jīng)看過一句話盖矫,大意是這樣的:一般程序員寫程序丽惭,做測試等,牛逼一點(diǎn)的程序員寫算法辈双、Linux內(nèi)核或者Windows內(nèi)核開發(fā)责掏,更牛逼的程序員寫驅(qū)動(dòng)程序開發(fā)。因?yàn)閷戲?qū)動(dòng)程序需要精通軟件語言湃望,同時(shí)精通硬件語言换衬。
大學(xué),學(xué)校目標(biāo)培養(yǎng)的是兩領(lǐng)人才——領(lǐng)導(dǎo)和領(lǐng)軍人才证芭。在電子信息工程學(xué)院瞳浦,目標(biāo)是想把我們培養(yǎng)成驅(qū)動(dòng)程序開發(fā)工程師。
在大學(xué)課程上废士,學(xué)習(xí)C叫潦,學(xué)習(xí)Linux(Ubuntu、CentOS官硝、Slackware)矗蕊,MATLAB編程,Verilog氢架,F(xiàn)PGA編程傻咖,51單片機(jī)編程等軟件或者硬件語言。
在大學(xué)課程選修上岖研,要么跟老師學(xué)習(xí)要么是私自學(xué)習(xí)卿操,ASP,Microsoft SQL server,PHP硬纤,MySQL解滓,HTML,css筝家,JavaScript等洼裤。
在大學(xué)的社團(tuán)活動(dòng),加入攝影協(xié)會(huì)溪王,能運(yùn)用Photoshop作圖腮鞍,修圖,切圖莹菱。雖然在專業(yè)設(shè)計(jì)師眼中只有半吊子的水平移国,但在開發(fā)者中算是佼佼者了。
編程方面道伟,學(xué)習(xí)康盛公司框架迹缀,開發(fā)康盛Discuz!的插件,從Discuz!X系列開始接觸蜜徽,開發(fā)插件是大學(xué)期間花最多時(shí)間的一件事情祝懂。
后來在工作了,領(lǐng)導(dǎo)給我職位是CTO拘鞋。網(wǎng)站從零開始干起砚蓬,由于要快速建起,就用了康盛公司框架盆色。雖然是CTO灰蛙,但是很多事情必須得自己干,就連搬運(yùn)服務(wù)器的事情都要親歷而為——因?yàn)榈紫聸]人隔躲!
由于業(yè)務(wù)發(fā)展摩梧,我們開發(fā)了觸屏版,Android宣旱,iOS仅父,以及開放平臺(tái)(oauth)。誠然响鹃,不是我一個(gè)人把全部代碼都寫了驾霜。觸屏版很簡單案训,寫了幾個(gè)頁面买置。客戶端上强霎,是我的弱項(xiàng)忿项,錯(cuò)失了移動(dòng)互聯(lián)網(wǎng)的大好時(shí)間<時(shí)間為2011年,以移動(dòng)平臺(tái)為主的:微信估值800億美元,Instagram估值300億美元(產(chǎn)于2012年4月)>轩触。雖和Android工程師一起開發(fā)過寞酿,但沒有完整的編寫過一個(gè)apk,目前邊學(xué)習(xí)邊編程項(xiàng)目脱柱。對(duì)于iOS伐弹,不得不說是我的更弱項(xiàng),只是看過幾本書榨为,沒有真正的編程過惨好,還不算真正的全棧。如果是全棧随闺,一定能解決各個(gè)問題日川,不能被技術(shù)人員忽悠。
開放平臺(tái)Oauth矩乐,RESTFUL風(fēng)格設(shè)計(jì)等龄句,這些是后端的知識(shí),編寫它們自然不在話下散罕。在系統(tǒng)性能調(diào)優(yōu)上分歇,學(xué)習(xí)并運(yùn)用了ThinkPHP,Spring笨使,Django等框架思想到新的項(xiàng)目上卿樱,在UIUE上,能熟練的使用bootstrap框架去實(shí)現(xiàn)硫椰。
如果不是為了創(chuàng)業(yè)繁调,我不會(huì)去學(xué)習(xí)那么多技術(shù)。學(xué)了這么多技術(shù)靶草,我的價(jià)值可能也就是個(gè)20k多工資的架構(gòu)師或者技術(shù)經(jīng)理蹄胰,這個(gè)價(jià)格對(duì)不起多年的付出。一個(gè)真正的全棧工程師奕翔,目標(biāo)只有一個(gè):創(chuàng)業(yè)裕寨。
5.全棧工程師的資格與成長路勁
原型設(shè)計(jì),Photoshop派继,前端開發(fā)宾袜,后端開發(fā),移動(dòng)端開發(fā)驾窟,運(yùn)營維護(hù)庆猫,安全等保,數(shù)據(jù)分析...好像都會(huì)了绅络,這算Full Stack Engineer了么月培?
不嘁字,這只是踏上成為Full Stack Engineer的第一步。你知道目前只是每個(gè)stack都懂一點(diǎn)杉畜,離senior或者expert還差得遠(yuǎn)纪蜒,而要每個(gè)stack都做到極致,需要大量的時(shí)間和精力此叠。精力有限纯续,F(xiàn)ullStack 有了廣度自然要犧牲一下深度。那么我想說灭袁,再怎么犧牲深度杆烁,如果各領(lǐng)域都寫過幾行代碼、淺嘗輒止简卧,那肯定是不夠的兔魂。那樣可能只算是一個(gè)愛折騰的 geek 而不是工程師。FSE的特點(diǎn)應(yīng)該和黑客的務(wù)必有的特點(diǎn)類似:高智商举娩,好玩析校,探索。FSE是一直學(xué)習(xí)中的铜涉,務(wù)必要高智商<參考《黑客與畫家》>智玻。簡單來說,F(xiàn)SE更像是“全才大跑酱”吊奢,對(duì)任何一個(gè)領(lǐng)域都達(dá)到了該領(lǐng)域的專業(yè)人士的平均程度,更像是 Engineer × N纹烹。
說具體點(diǎn):
前端開發(fā)页滚,在HTML+CSS上,能做到兼容主流所有瀏覽器铺呵,并且熟知網(wǎng)頁優(yōu)化裹驰,知道如何讓網(wǎng)頁變得更加快速,也能做到搜索引擎優(yōu)化片挂。在JavaScript上幻林,至少會(huì)用js寫出各種效果來。水平不至于達(dá)到能自己寫一個(gè)js框架音念,但至少能用好一個(gè)框架吧沪饺,比如web端的jQuery。
后端開發(fā)闷愤,至少精通一種后端流派語言整葡,比如Java,或者PHP肝谭,或者Python掘宪,能力無需到達(dá)一個(gè)人開發(fā)一個(gè)高可用系統(tǒng)框架,但至少也能熟練使用一種框架攘烛,研究過框架的代碼魏滚,比如Java里面的ssh框架,PHP里面的ThinkPHP框架坟漱,Python里面的Django框架鼠次。