在SDCC2016的架構(gòu)師進(jìn)階之路主題,我分享了《老曹眼中的全棧架構(gòu)師》話題蔓倍,會后在csdn博客發(fā)布了同名文字悬钳,在我的公眾號(wireless_com)發(fā)了《全棧的技術(shù)棧設(shè)想》。然后偶翅,有幸得到了中生代技術(shù)(freshmanTechnology)和多人的轉(zhuǎn)載默勾,中生代技術(shù)還專門開通了全棧架構(gòu)師深度討論群,引起了很多的爭論和爭議。
主要分為以下三種觀點:
1)根本沒有意義聚谁,純屬忽悠
如網(wǎng)友回復(fù):“鬼都知道說的什么 數(shù)據(jù) 緩存 業(yè)務(wù) 性能 消息隊列 操作系統(tǒng) 產(chǎn)品 云存儲 大數(shù)據(jù)這些高大上的名次母剥,天天聊天就討論這些高大上的名稱, 然而并沒有什么卵用形导』诽郏”
2)有可能,但參考意義不大
有網(wǎng)友回復(fù):“個人覺得不值得推崇朵耕,很多程序員為了全棧炫隶,東一榔頭西一棒子,結(jié)果啥都沒搞好”
3)表示贊同阎曹,具體實踐待推敲
如網(wǎng)友@張真Alex 的說法:“比較認(rèn)同全棧架構(gòu)師伪阶,從前ibm把架構(gòu)師分為六大類,是六脈神劍各使一劍处嫌,而如今栅贴,不管是工程師還是架構(gòu)師都應(yīng)該有全棧的思維(不一定全棧的技能),特別是架構(gòu)師的職能熏迹,需要從業(yè)務(wù)檐薯,技術(shù)體系,端到端都具備相當(dāng)?shù)膽?zhàn)斗力才行”
如此多的爭議并不意外癣缅,事情越辯越明厨剪,在此分享一下那篇文字的初衷和自己的重新思考哄酝。本著科學(xué)的態(tài)度,討論的前提應(yīng)該是對問題明確祷膳,基本概念的定義是一致的陶衅,對不同邏輯推理得到的結(jié)果進(jìn)行討論。針對全棧架構(gòu)師這一命題直晨,個人覺得先要明確幾個概念搀军。
什么是架構(gòu)?什么是架構(gòu)師勇皇?
架構(gòu)的定義業(yè)界一般有三種方法罩句,一個定義為決策過程,一個定義為體系結(jié)構(gòu)敛摘,還有就是兩者兼而有之门烂。 Simon Brown 在《software architect for Developers》一書中嘗試給出了架構(gòu)一詞作為名詞和動詞的定義,并嘗試給出了架構(gòu)的分類兄淫。好友@溫昱在《一線架構(gòu)師實踐指南中》嘗試給出了軟件架構(gòu)的方法論ADMEMS即所謂的5視圖方法屯远。然而,Len Bass 在《軟件架構(gòu)實踐(第2版)》中談到“軟件架構(gòu)在不斷發(fā)展捕虽,但它仍然是一個尚不成熟的學(xué)科”慨丐。
歷史是任人打扮的小姑娘,類似的泄私, 每個人對架構(gòu)和架構(gòu)師都有著不同的理解房揭。螞蟻金服@右軍(公眾號:流浪部署我的初衷)有一篇文章《談架構(gòu)》有著自己對架構(gòu)的看法: ''' 架構(gòu)是一種思維模式。架構(gòu)師是一個title晌端。為什么說架構(gòu)是一種思維模式呢捅暴,小到一個模塊,大到一個平臺斩松,都是一樣樣的伶唯。 軟件架構(gòu)的作用包括:
軟件架構(gòu)能夠滿足系統(tǒng)的品質(zhì)
架構(gòu)設(shè)計使受益人達(dá)成一致的目標(biāo)
架構(gòu)設(shè)計能夠支持計劃編制過程
架構(gòu)設(shè)計對系統(tǒng)開發(fā)的指導(dǎo)性
架構(gòu)設(shè)計能夠有效地管理復(fù)雜性
架構(gòu)設(shè)計為復(fù)用奠定了基礎(chǔ)
架構(gòu)設(shè)計能夠降低維護(hù)費用
架構(gòu)設(shè)計能夠支持沖突分析
...
'''
其中有很多有價值的觀點,感興趣可以參考這篇文章惧盹。
在前當(dāng)當(dāng)架構(gòu)部總監(jiān)@史海峰看來乳幸,架構(gòu)師首先是一個工程師,就如同在一些傳統(tǒng)行業(yè)里钧椰,有總工程師粹断、總設(shè)計師的說法。他把架構(gòu)師的定義總結(jié)為七句話:
NO.1 以工程思維全面理解業(yè)務(wù)需求
NO.2 基于模型和基礎(chǔ)模式抽象簡化
NO.3 提出恰當(dāng)可行的整體解決方案
NO.4 在限定資源范圍完成明確目標(biāo)
NO.5 滿足業(yè)務(wù)需求且保證系統(tǒng)質(zhì)量
NO.6 在可預(yù)見的周期內(nèi)具備擴(kuò)展性
NO.7 并在系統(tǒng)生命周期內(nèi)持續(xù)演進(jìn)
在@史海峰看來嫡霞,不同架構(gòu)師擅長的技術(shù)領(lǐng)域或有不同瓶埋,但大家有共通的拿手絕活,那就是“快速切入、解構(gòu)拆分系統(tǒng)模塊和代碼养筒、有技術(shù)話語權(quán)”曾撤。這些絕活并非一蹴而就,而是架構(gòu)師們?nèi)粘9ぷ髦性畏啵粩嗟厝グl(fā)現(xiàn)問題挤悉、思考解決、設(shè)計取舍巫湘、重構(gòu)迭代装悲、協(xié)作傳道、響應(yīng)支持尚氛,持續(xù)學(xué)習(xí)進(jìn)步達(dá)成的诀诊。并非所有公司都需要招架構(gòu)師,只有當(dāng)系統(tǒng)復(fù)雜達(dá)到某個程度阅嘶,幾個高級工程師一起難以很快說清楚的時候属瓣,就需要架構(gòu)師加入了。架構(gòu)師有兩忌兩宜奈懒。兩忌分別是不應(yīng)過于追求高大上奠涌,否則可能會和現(xiàn)有團(tuán)隊脫節(jié)宪巨,難以落地磷杏;技術(shù)上不應(yīng)過于求全面,以能解決當(dāng)前問題為主捏卓。兩宜則是團(tuán)隊協(xié)助溝通能力要好和適應(yīng)性強(qiáng)极祸。
對于架構(gòu)師,不同公司有不同的定義和解讀怠晴,我覺得我們是幸運的遥金,因為我們在實踐著一種動態(tài)且沒有成熟的技術(shù),可能創(chuàng)造著一個新的團(tuán)隊角色甚至工種蒜田。
什么是全棧工程師稿械?什么是全棧架構(gòu)師?
對于全棧工程師冲粤,引用一個不權(quán)威的說法美莫,百度百科中對全棧的描述是這樣的:
全棧工程師,也叫全端工程師(同時具備前端和后臺能力),英文Full Stack developer。是指掌握多種技能隔缀,并能利用多種技能獨立完成產(chǎn)品的人幢炸。
根據(jù)自己的經(jīng)驗體會,全棧工程師在很多時候系洛, 是為了夢想的苦命碼農(nóng)的無奈選擇劝贸。其實碍论,大公司也需要全棧的寒砖。我最早了解這個詞赐劣,是從一個facebook那里的朋友知道的。
全棧哩都,不是全能隆豹,和所選擇的技術(shù)棧甚至業(yè)務(wù)棧相關(guān)。例如以LNMP(Linux + Nignx + MySQl+ PHP)茅逮,那么掌握了這四種技能璃赡,算不算一個全棧工程師呢?個人覺得可以的献雅。但是隨著技術(shù)棧的變化碉考,例如引入了緩存Memcache乃至其他分布式緩存,那原來的全棧工程師還是全棧么挺身?全棧是否要隨之變化呢侯谁?
隨著業(yè)務(wù)和技術(shù)棧選擇的動態(tài)性變化,能否在團(tuán)隊中有一角色能夠相對系統(tǒng)地對架構(gòu)有個動態(tài)的設(shè)計章钾,使我想到了“全棧架構(gòu)師”這個詞墙贱,這就是我引入全棧架構(gòu)師的一個原因。同架構(gòu)師和全棧一樣贱傀,全棧架構(gòu)師更不好定義惨撇,甚至可能錯誤地導(dǎo)致全棧就是全能的說法。
網(wǎng)友@張真Alex 認(rèn)為全棧架構(gòu)師最好是T型人才府寒。
一豎的部分包括:
專業(yè)知識(應(yīng)用魁衙,系統(tǒng),安全株搔,運維等)剖淀,
戰(zhàn)略分解(抽象,分類纤房,算法)纵隔,
調(diào)研選型(目標(biāo)識別,快速學(xué)習(xí)炮姨,調(diào)查方法捌刮,可行研究)
hands on(精通1-2語言,大量代碼實踐剑令,設(shè)計方法等)
一橫的部分包括:
leadership(號召力糊啡,決斷力,mentorship)
項目管理(項目計劃吁津,風(fēng)險控制棚蓄,取舍權(quán)衡)
領(lǐng)域知識(行業(yè)知識堕扶,行業(yè)生態(tài))
創(chuàng)新思維(應(yīng)用創(chuàng)新,跨界思維)
突破能力(經(jīng)驗沉淀梭依,覺一反三)
溝通協(xié)調(diào)(主動溝通稍算,靈活協(xié)調(diào))
這一橫一豎才構(gòu)成了架構(gòu)師(技術(shù)專家)的能力圖譜,他認(rèn)為可算全棧架構(gòu)師役拴。我覺得這是非常有益的探討糊探,很遺憾,我還沒有能力給出全棧架構(gòu)師的完整而又清晰的定義河闰,邊界也不好界定科平,但是,我覺得我們都在探索的路上姜性。
為什么需要全棧架構(gòu)師瞪慧?
大家普遍認(rèn)為,團(tuán)隊需要深入業(yè)務(wù)部念,理解業(yè)務(wù)的發(fā)展弃酌,搭建核心架構(gòu),理清技術(shù)架構(gòu)的細(xì)節(jié)和門檻儡炼,實現(xiàn)架構(gòu)的迭代資源妓湘,掃清技術(shù)疑點和難點的人;需要把握好非功能需求的6種類型(功能性乌询、可靠性榜贴、易用性、效率楣责、維護(hù)性竣灌、可移植性)的人;....
那么秆麸,全棧架構(gòu)師能夠滿足我們的哪些需求呢?我在《老曹眼中的全棧架構(gòu)師》中談到了4個自己認(rèn)為的典型場景:
1) 性能瓶頸及汉,業(yè)務(wù)系統(tǒng)是很復(fù)雜的沮趣,不管是什么量級的業(yè)務(wù)系統(tǒng),當(dāng)出現(xiàn)性能瓶頸的時候可能一個人解決不了坷随,如果你能夠貫穿所有被使用的技術(shù)棧房铭,就能相對很容易地知道哪一點出現(xiàn)了問題。
2)溝通温眉,前后端工程師缸匪,尤其是、各個跨語言前后端工程師之間的溝通是存在障礙的类溢,全棧能夠做好溝通的橋梁凌蔬。
3)救火露懒,比如突然間夜里給你一個短信告訴你系統(tǒng)出問題,你可能當(dāng)時找不到那個開發(fā)此模塊的工程師砂心,怎么辦懈词?系統(tǒng)還能不能運行?業(yè)務(wù)會不會崩潰辩诞?如果崩潰坎弯,公司會遭受什么損失?這個時候就需要有全棧译暂,他能夠在要在第一時間解決系統(tǒng)中的問題抠忘。
4)資源緊張,資源緊張更多存在于創(chuàng)業(yè)公司外永,我也在一些創(chuàng)業(yè)公司里做過事情褐桌。比如說我們想搭一個系統(tǒng)出來,沒錢象迎、沒資源荧嵌,這個時候,很多想法要訴諸實踐砾淌,一定要有全棧啦撮。
肯定還有其他的需求存在的,只是我可能沒有經(jīng)歷過汪厨,或者是大家沒有關(guān)注過而已赃春。
如果對全棧架構(gòu)師的需求是存在,那么劫乱,如何才有可能成為一名全棧架構(gòu)師呢织中?我試圖從技術(shù)棧,性能棧衷戈,和效率棧三個方面進(jìn)行了探討狭吼,在《老曹眼中的全棧架構(gòu)師》中有所描述,這里不再贅述殖妇。
我說過全棧架構(gòu)師可能是自己的杜撰刁笙, 但是,全棧思維優(yōu)先還是被大多數(shù)朋友認(rèn)可的谦趣,實際上是一種大局觀疲吸,一個功能既可以前端又可以后端實現(xiàn),利弊和方案的選擇是需要有全棧架構(gòu)師的前鹅,至少要有全棧的思維摘悴。全棧的思維,簡單地可以理解成系統(tǒng)的思維方式舰绘。
全棧架構(gòu)師是不是一個偽命題呢蹂喻,是一個上帝類嗎葱椭? 我不知道,我只是想說那篇文字叉橱,試圖明確:
什么是架構(gòu)挫以?什么是架構(gòu)師?
什么是全棧窃祝?什么是全棧架構(gòu)師掐松?
為什么需要全棧/架構(gòu)師? 如何可能成為一個全棧架構(gòu)師粪小?
如果問題分為:已知的已知大磺,已知的未知,未知的未知 的話探膊,即便是將全棧架構(gòu)師這一角色杠愧,從未知的未知變成已知的未知,我想也是一件好事情逞壁,能力所限流济,隨筆如上。
歡迎關(guān)注本公眾號:wireless_com
微信掃一掃關(guān)注該公眾號