今天我要批判架构师
我在阿里巴巴工作期間是一個(gè)名副其實(shí)的“刺頭”,批判中臺(tái)、批判架構(gòu)師、批判技術(shù)管理者,當(dāng)然,也包括自我批判。
今天來(lái)聊聊批判架構(gòu)師!
Martin Fowler在他的一篇IEEE論文“Who Needs an Architect?”中提到,
能使團(tuán)隊(duì)更加敏捷的架構(gòu)師比只做決定的架構(gòu)師要更有價(jià)值,因?yàn)橹蛔鰶Q定的架構(gòu)師會(huì)成為團(tuán)隊(duì)的瓶頸(bottleneck)。顯然,一個(gè)架構(gòu)師的價(jià)值和他做的決定是成反比的。
實(shí)際上,在這篇文章中,Martin甚至不認(rèn)為架構(gòu)師(Architect)這個(gè)名詞是合適的,他認(rèn)為更合適的叫法應(yīng)該是向?qū)?#xff08;Guide),即一個(gè)更有經(jīng)驗(yàn)的人帶領(lǐng)團(tuán)隊(duì)走出復(fù)雜的迷霧。
尷尬的架構(gòu)師
在進(jìn)入阿里巴巴工作之前,我就職于eBay的支付部門(mén)。當(dāng)時(shí)有一位架構(gòu)師,所有的設(shè)計(jì)和方案都需要獲得他的審批才能通過(guò),結(jié)果他成了整個(gè)團(tuán)隊(duì)的瓶頸,很多事情都堆積在他那里。
工程師很難受,光是給他介紹和討論業(yè)務(wù)及系統(tǒng)設(shè)計(jì)就需要花費(fèi)大量的時(shí)間(因?yàn)闀r(shí)差原因,經(jīng)常要討論一周才有定論);他也不容易,要理解每個(gè)系統(tǒng)的結(jié)構(gòu)和業(yè)務(wù)細(xì)節(jié)也是很累的。
這里存在的主要問(wèn)題是這位架構(gòu)師不在執(zhí)行團(tuán)隊(duì)內(nèi)部,不了解細(xì)節(jié),所以很難給出有價(jià)值的建議。對(duì)于很多細(xì)節(jié),我們認(rèn)為他不懂,他的方案也無(wú)法讓我們信服,合作起來(lái)自然就很困難。
尷尬的架構(gòu)部門(mén)
如果說(shuō)架構(gòu)師是輕量級(jí)解決方案,那么還有一個(gè)“大規(guī)模殺傷性武器”——設(shè)立一個(gè)專(zhuān)門(mén)的架構(gòu)部門(mén)。
在阿里巴巴的B2B部門(mén)曾經(jīng)就有這樣一個(gè)架構(gòu)組。我記得在當(dāng)年的啟動(dòng)會(huì)上,負(fù)責(zé)人要求我們畫(huà)架構(gòu)圖,我質(zhì)問(wèn)他這個(gè)架構(gòu)組存在的意義是什么。如果只是畫(huà)架構(gòu)圖,給老板當(dāng)PPT用的話(huà),那么我不愿意畫(huà)這個(gè)圖。
實(shí)際上,畫(huà)架構(gòu)圖這種務(wù)虛任務(wù)還好,雖然用處不大,但也構(gòu)不成殺傷力。真正構(gòu)成殺傷力的是架構(gòu)組不甘無(wú)為而挖空心思要“做事情”。可以說(shuō),在業(yè)務(wù)技術(shù)部門(mén),架構(gòu)組這種想做事的行為是很危險(xiǎn)的,事情越大,殺傷力越大。
為什么這么說(shuō)呢?我們不妨先來(lái)看一下,在業(yè)務(wù)技術(shù)部門(mén)中的架構(gòu)組能做什么。
(1)業(yè)務(wù)架構(gòu)?我是營(yíng)銷(xiāo)域的、訂單域的、商品域的、供應(yīng)鏈域的……如果架構(gòu)組想比產(chǎn)品經(jīng)理、運(yùn)營(yíng)人員、工程師更懂業(yè)務(wù)領(lǐng)域、業(yè)務(wù)流程和業(yè)務(wù)細(xì)節(jié),恐怕很難。一個(gè)合格的產(chǎn)品經(jīng)理應(yīng)該能做好業(yè)務(wù)領(lǐng)域的抽象和業(yè)務(wù)流程的抽象,至于細(xì)節(jié),好像沒(méi)有人比一線(xiàn)開(kāi)發(fā)人員更懂。——架構(gòu)組,卒!
(2)應(yīng)用架構(gòu)?需求相對(duì)清晰之后,在應(yīng)用架構(gòu)領(lǐng)域有一些影響力的團(tuán)隊(duì)負(fù)責(zé)人(Team Leader,TL)在和團(tuán)隊(duì)討論邊界劃分和設(shè)計(jì)方案的時(shí)候,尚且會(huì)時(shí)常爭(zhēng)論不休。架構(gòu)組的“外人”想來(lái)指手畫(huà)腳?這是多么碾壓程序員的自尊心啊!——架構(gòu)組,卒!
(3)技術(shù)架構(gòu)?好吧,讓我們架構(gòu)組回歸技術(shù)本身,做點(diǎn)純技術(shù)的事情。可是對(duì)不起,但凡有點(diǎn)價(jià)值的技術(shù)中間件都已經(jīng)有中間件團(tuán)隊(duì)在做了。——架構(gòu)組,帶著整個(gè)部門(mén)一起,卒!
因此,在企業(yè)內(nèi)部設(shè)立架構(gòu)部門(mén)是一件要十分謹(jǐn)慎對(duì)待的事情。
對(duì)一個(gè)企業(yè)來(lái)說(shuō),在某個(gè)特殊階段,也許的確需要實(shí)體架構(gòu)組織去保障落實(shí)架構(gòu)工作。但在大部分情況下,特別是在技術(shù)體系已經(jīng)相對(duì)完備的情況下,最好不要在部門(mén)(Business Unit,BU)內(nèi)設(shè)立專(zhuān)門(mén)的架構(gòu)組織。在我的職業(yè)生涯中,我看到過(guò)很多業(yè)務(wù)技術(shù)部門(mén)嘗試設(shè)立技術(shù)架構(gòu)組織,基本都以失敗告終。
人人都是架構(gòu)師
架構(gòu)師不行,架構(gòu)部門(mén)也不行。那由誰(shuí)來(lái)做架構(gòu)的事情呢?
看一下你左邊的同事,再看一下右邊的同事,再看一下你的主管……別看了,他們的確要做,然而你自己也要做——人人都是架構(gòu)師。
在探討架構(gòu)師的工作職責(zé)之前,我們先來(lái)看一下什么是架構(gòu)。關(guān)于這個(gè)問(wèn)題,每個(gè)人的答案可能都不一樣。我曾經(jīng)看過(guò)一本技術(shù)書(shū),其中用了一章的篇幅討論架構(gòu)的定義,但是最終也沒(méi)有說(shuō)得很明白。我個(gè)人比較認(rèn)可的關(guān)于架構(gòu)的定義是來(lái)自IEEE的定義。簡(jiǎn)單來(lái)說(shuō),架構(gòu)的定義就是要素結(jié)構(gòu)+關(guān)系+指導(dǎo)原則。要素(Components)是指架構(gòu)中的主要元素,結(jié)構(gòu)是指要素之間的相互關(guān)系(Relationships),再配合指導(dǎo)原則(Guidelines),便構(gòu)成了架構(gòu),如圖1所示。
圖1 ?架構(gòu)的定義
從架構(gòu)定義中,我們不難發(fā)現(xiàn),架構(gòu)師所要具備的架構(gòu)能力實(shí)際上就是一套分析問(wèn)題、解決問(wèn)題的方法論。它需要你具備洞察問(wèn)題本質(zhì)要素、厘清要素之間的關(guān)系,以及制定相應(yīng)策略的能力。
從這個(gè)角度出發(fā),架構(gòu)能力就是核心競(jìng)爭(zhēng)力,每個(gè)工程師都應(yīng)該具備一定的架構(gòu)能力,人人都應(yīng)該是架構(gòu)師。
(1)作為技術(shù)一線(xiàn)的員工,如果你工作的時(shí)間并不長(zhǎng),架構(gòu)能力相對(duì)較弱,那么沒(méi)有捷徑,只有學(xué)習(xí)學(xué)習(xí)再學(xué)習(xí)、成長(zhǎng)成長(zhǎng)再成長(zhǎng),架構(gòu)能力是可以習(xí)得的,沒(méi)那么高深,但也沒(méi)那么容易,需要長(zhǎng)期積累。
(2)作為技術(shù)團(tuán)隊(duì)負(fù)責(zé)人(TL),你必須要具備一定的架構(gòu)能力。不管是對(duì)于業(yè)務(wù)架構(gòu),還是應(yīng)用架構(gòu),TL都應(yīng)該具備發(fā)現(xiàn)問(wèn)題的本質(zhì)要素及厘清要素之間關(guān)系的能力。如果你是一名比較欠缺架構(gòu)能力的TL,那么你需要盡快去補(bǔ)足,不足沒(méi)有關(guān)系,可怕的是停止了學(xué)習(xí)和成長(zhǎng)。正如我比較欣賞的一位技術(shù)負(fù)責(zé)人懷素所說(shuō)的,很多后勁不足的人主要是過(guò)早地停止了學(xué)習(xí)和成長(zhǎng),你的能力應(yīng)該是圍繞著你的層級(jí)上下震蕩的,這個(gè)震蕩范圍偏差不會(huì)太大,遲早會(huì)歸于一個(gè)相對(duì)合理的區(qū)間。
(3)作為首席技術(shù)官(CTO),那么沒(méi)得選了,你必須是一個(gè)非常優(yōu)秀的架構(gòu)師才行。你不僅要熟悉業(yè)務(wù)架構(gòu)、精通技術(shù)架構(gòu),還要通過(guò)組織架構(gòu)設(shè)計(jì)去解決部門(mén)墻問(wèn)題,讓生產(chǎn)關(guān)系適應(yīng)生產(chǎn)力的發(fā)展。唯有如此,才能使技術(shù)穩(wěn)定高效地支撐業(yè)務(wù)發(fā)展。
有一些互聯(lián)網(wǎng)公司沒(méi)有CTO,他們每個(gè)業(yè)務(wù)單元都有一套自己的技術(shù)棧和中間件,大家各自為政,如圖2所示。
圖2 ?各自為政的技術(shù)體系
針對(duì)上述技術(shù)體系,最好設(shè)置一名CTO。因?yàn)閷?duì)于通用的技術(shù)解決方案,比如大數(shù)據(jù)處理、技術(shù)中間件,沒(méi)必要重復(fù)造輪子,顯然復(fù)用是更科學(xué)的做法。
本文節(jié)選自《程序員的底層思維》一書(shū),想要了解更多相關(guān)內(nèi)容,歡迎閱讀本書(shū)!
▊ 《程序員的底層思維》
張建飛 著
這是一本超越具體編程技法的技術(shù)書(shū):職場(chǎng)晉升不僅需要技術(shù)能力,更重要的是思維能力。本書(shū)帶你學(xué)會(huì)用底層思維解決復(fù)雜技術(shù)問(wèn)題,突破職場(chǎng)“天花板”。
這也是一本培養(yǎng)思維能力的通用技能書(shū):打破認(rèn)知局限,培養(yǎng)通用的思維能力。本書(shū)幫你跳出思維定勢(shì),輕松解決生活及工作中遇到的問(wèn)題。
本書(shū)涵蓋程序員應(yīng)知應(yīng)會(huì)的16種思維能力,共18章,分為三部分。
第一部分主要介紹抽象思維、邏輯思維、結(jié)構(gòu)化思維、批判性思維、維度思維、分類(lèi)思維、分治思維、簡(jiǎn)單思維,以及成長(zhǎng)型思維等解決日常問(wèn)題的基礎(chǔ)思維能力。
第二部分結(jié)合軟件行業(yè)的特點(diǎn),主要介紹解耦思維、契約思維、模型思維、工具化思維、量化思維、數(shù)據(jù)思維,以及產(chǎn)品思維等專(zhuān)業(yè)思維能力。
第三部分主要是對(duì)上述思維能力的綜合運(yùn)用實(shí)踐。
粉絲專(zhuān)享六折優(yōu)惠,掃碼即購(gòu)!
如果喜歡本文 歡迎?在看丨留言丨分享至朋友圈?三連往期推薦
成為優(yōu)秀軟件工程師的三條路徑
好代碼和壞代碼
大疆再遭制裁,設(shè)計(jì)軟件Figma斷供!中國(guó)工業(yè)軟件如何應(yīng)對(duì)全面封禁?
美團(tuán)搜索多業(yè)務(wù)商品排序探索與實(shí)踐
史海峰:我的架構(gòu)師修煉之道
一年之計(jì):如何構(gòu)建知識(shí)體系?
千萬(wàn)級(jí)流量的大型分布式系統(tǒng)架構(gòu)設(shè)計(jì)
40歲從零開(kāi)始學(xué)習(xí)軟件開(kāi)發(fā),四年后我成了首席研發(fā)
一張圖看懂微服務(wù)架構(gòu)路線(xiàn)
入行二十年的一些認(rèn)知
微信支付架構(gòu)為什么這么牛?
總結(jié)
- 上一篇: NYOJ 692 Chinese che
- 下一篇: 省赛组队赛3 比赛总结