想要成為一個(gè)合格的架構(gòu)師?看這篇文章就足夠了
在互聯(lián)網(wǎng)圈,架構(gòu)師這個(gè)名號(hào)的火熱程度堪比產(chǎn)品經(jīng)理,它在產(chǎn)品經(jīng)理沒火之前就已經(jīng)風(fēng)生水起。
僅以本文向帶給我許多歡樂和感悟的周星馳致敬。
架構(gòu)師的定義
喬布斯是蘋果的產(chǎn)品架構(gòu)師,比爾蓋茨是微軟的首席架構(gòu)師,馬化騰也號(hào)稱騰訊的首席架構(gòu)師。
有些人會(huì)覺得架構(gòu)師很神秘,不知道整天腦袋里在想什么。那么架構(gòu)師到底是什么樣的人?
聚焦到 IT 技術(shù)領(lǐng)域,基本可以還原,架構(gòu)師的本質(zhì)就是更高級(jí)更資深的程序員,架構(gòu)師的能力要求在程序員或者說工程師之上,是一脈相承,有延續(xù)性的。
有些大廠因?yàn)閷蛹?jí)較多(當(dāng)然也是有更頂尖的人才),高級(jí)工程師跳到小廠做個(gè)架構(gòu)師游刃有余。
所以我們并不糾結(jié)于工程師進(jìn)階架構(gòu)師的邊界到底在哪里,實(shí)際上有的公司架構(gòu)師是正式職位,有的只是項(xiàng)目的臨時(shí)職務(wù)。
架構(gòu)師是足夠復(fù)雜、規(guī)模較大的系統(tǒng)才需要的角色,當(dāng)系統(tǒng)架構(gòu)不那么一目了然,才需要有人在更高的視角上去關(guān)注整體性的東西。
架構(gòu)師是高階職位,難以通過培訓(xùn)批量生產(chǎn),嚴(yán)重依賴于個(gè)人的工作經(jīng)驗(yàn)和成長,而且各方面都要求更高。
架構(gòu)師的經(jīng)驗(yàn)體現(xiàn)在什么地方呢?舉一個(gè)例子:
比如一個(gè)復(fù)雜的分布式系統(tǒng),時(shí)時(shí)刻刻處理業(yè)務(wù)請求,要設(shè)計(jì)一套機(jī)制,保證所有的業(yè)務(wù)都能處理完成,無論成功失敗。
簡單的開發(fā)思維會(huì)考慮,盡可能的捕獲異常,給每一種錯(cuò)誤類型編號(hào),中途失敗的流程要進(jìn)行回退,相信設(shè)計(jì)能否覆蓋所有情況。
有經(jīng)驗(yàn)的架構(gòu)師則會(huì)清醒的認(rèn)識(shí)到,這樣的系統(tǒng)隨著不斷升級(jí)和持續(xù)運(yùn)行,一定會(huì)出現(xiàn)各種各樣的問題,不出問題是不可能的。
應(yīng)用的潛在 Bug、業(yè)務(wù)邏輯漏洞、數(shù)據(jù)異常、網(wǎng)絡(luò)抖動(dòng)、硬件故障、人工誤操作,甚至還有莫名其妙未能找到原因只能歸結(jié)為靈異事件的問題,會(huì)層出不窮,等你解決。
我們需要做的是盡可能監(jiān)控、捕獲到異常情況,通過技術(shù)手段修復(fù)多數(shù)的問題,少數(shù)不常見的或者難以自動(dòng)解決的問題最終還是要考慮通過人工方式處理。
我們的目標(biāo)是解決問題,通過分析,調(diào)整架構(gòu),優(yōu)化邏輯,舊的問題解決后,還會(huì)有新的問題。
只要系統(tǒng)運(yùn)行,就需要維護(hù),軟件工程理論中系統(tǒng)上線后期維護(hù)都是一個(gè)重要的階段,此時(shí)系統(tǒng)是動(dòng)態(tài)的,業(yè)務(wù)是連續(xù)的。
用近幾年很多人用過的比喻,開著飛機(jī)修飛機(jī),開著火車修火車,在原有的系統(tǒng)上做修改,并不比從頭做一個(gè)系統(tǒng)輕松。
就像是 CAP 理論下,多數(shù)的選擇是最終一致性,即通過努力,無限趨近于問題最小化,時(shí)刻準(zhǔn)備著迎接新問題,動(dòng)態(tài)平衡才是系統(tǒng)運(yùn)行的常態(tài)。
用七句話總結(jié)我對(duì)架構(gòu)師的定義:
- 以工程思維全面理解業(yè)務(wù)需求
- 基于模型和基礎(chǔ)模式抽象簡化
- 提出恰當(dāng)可行的整體解決方案
- 在限定資源范圍完成明確目標(biāo)
- 滿足業(yè)務(wù)需求且保證系統(tǒng)質(zhì)量
- 在可預(yù)見的周期內(nèi)具備擴(kuò)展性
- 并在系統(tǒng)生命周期內(nèi)持續(xù)演進(jìn)
以上只是描述了架構(gòu)師本身,實(shí)際工作中還有許多干系人,包括了項(xiàng)目經(jīng)理、業(yè)務(wù)需求提出方、產(chǎn)品經(jīng)理、研發(fā)工程師、測試工程師、運(yùn)維工程師、DBA 及各部門各層級(jí)的管理者,在一些外部合作的項(xiàng)目中還包括其他公司的各類人員。
項(xiàng)目由相關(guān)干系人組成的團(tuán)隊(duì)完成,架構(gòu)師必須與其中各類角色協(xié)作,以達(dá)成項(xiàng)目目標(biāo)。
因此要有很好的綜合素養(yǎng),對(duì)于相關(guān)干系人的職責(zé)必須有深入理解,熟悉項(xiàng)目操作流程,能夠與各方做好溝通。
比如現(xiàn)在都推行敏捷開發(fā),快速迭代,一般的需求,小的敏捷團(tuán)隊(duì)就可以實(shí)現(xiàn),架構(gòu)師可能不會(huì)參與,怎樣保證設(shè)計(jì)開發(fā)的質(zhì)量?
更遠(yuǎn)一點(diǎn),怎么保證在諸多小團(tuán)隊(duì)各行其是的情況下,整體架構(gòu)的合理性、先進(jìn)性,甚至推進(jìn)架構(gòu)演化?
這其中會(huì)有很多流程外的溝通交流,架構(gòu),不是編碼規(guī)范、設(shè)計(jì)原則、技術(shù)框架,更多的時(shí)候是通過各種溝通,尤其是非正式溝通,所達(dá)成的共識(shí)。
這個(gè)共識(shí)越清晰,溝通成本就越低,工作就越高效,產(chǎn)品質(zhì)量就越有保證。
架構(gòu)師的核心價(jià)值
系統(tǒng)架構(gòu)有哪些特征?對(duì)架構(gòu)師有怎樣的要求呢?我總結(jié)了如下五點(diǎn):
技術(shù)開源化
開源已經(jīng)成為互聯(lián)網(wǎng)技術(shù)的主流,多數(shù)公司使用開源技術(shù),自行選型維護(hù),出了問題自己解決,而且技術(shù)更新很快,需要能夠高效學(xué)習(xí)快速上手。
開源的技術(shù)流,與大眾創(chuàng)業(yè)、萬眾創(chuàng)新一樣,充分發(fā)揮創(chuàng)造力,各種風(fēng)險(xiǎn)和坑也都由使用者來買單。
產(chǎn)品敏捷化
業(yè)務(wù)調(diào)整快,小步快跑,快速試錯(cuò),必然弱化長期規(guī)劃,創(chuàng)業(yè)公司可以先上 MVP,已經(jīng)上規(guī)模的公司怎么保持活力?
可以將新的業(yè)務(wù)做成獨(dú)立的模塊,解耦,降低依賴,更重要的是時(shí)刻關(guān)注架構(gòu)的靈活性,有備無患。
服務(wù)全網(wǎng)化
面向全網(wǎng)用戶,隨時(shí)提供服務(wù),系統(tǒng)規(guī)模大,停止服務(wù)就會(huì)損失收入,要求盡可能無縫升級(jí)。
業(yè)務(wù)不可控性較大,業(yè)務(wù)量可能波動(dòng)很大,一旦業(yè)務(wù)爆發(fā),要有快速的彈性部署方案。
系統(tǒng)復(fù)雜化
難免有很多的臨時(shí)方案,以及有用沒用的功能堆積,會(huì)使系統(tǒng)的可維護(hù)性,架構(gòu)合理性越來越差。
系統(tǒng)的交互越來越多,關(guān)聯(lián)性強(qiáng),需要工具結(jié)合系統(tǒng)機(jī)制進(jìn)行管理,否則就會(huì)失控。
人力高效化
根據(jù)摩爾定律,基礎(chǔ)設(shè)施成本日趨廉價(jià),而人工成本則持續(xù)走高,這是兩個(gè)必然方向。
那么就需要提供更好的技術(shù)平臺(tái),好鋼用在刀刃上,技術(shù)人員的能力要求越來越高,高效做有意義的事,簡單重復(fù)的東西讓機(jī)器去做。
架構(gòu)師的核心價(jià)值是什么?借用李智慧老師《大型網(wǎng)站技術(shù)架構(gòu)核心原理與案例分析》中的說法:
軟件架構(gòu)師的最大價(jià)值不在于掌握多少先進(jìn)的技術(shù),而在于具有將一個(gè)大系統(tǒng)切分成 N 個(gè)低耦合的子模塊的能力,這些子模塊包含橫向的業(yè)務(wù)模塊,也包含縱向的基礎(chǔ)技術(shù)模塊。
這種能力一部分源自專業(yè)的技術(shù)和經(jīng)驗(yàn),還有一部分源自于架構(gòu)師對(duì)業(yè)務(wù)場景的理解、對(duì)人性的把握、甚至對(duì)世界的認(rèn)知。
在技術(shù)團(tuán)隊(duì)中,架構(gòu)師是技術(shù)的領(lǐng)導(dǎo)者,沒有人輔導(dǎo),手把手教更是不可能,必須對(duì)最終設(shè)計(jì)和實(shí)現(xiàn)負(fù)責(zé)。
多數(shù)情況下,架構(gòu)是一種妥協(xié),一種平衡的產(chǎn)物,掌握這個(gè)平衡度的,就是架構(gòu)師。
我們都知道,理想的架構(gòu)是什么樣的,但又必須抱殘守缺,面對(duì)現(xiàn)實(shí),提出可行方案。
因此,架構(gòu)師是胸懷理想的現(xiàn)實(shí)主義者,高度在理想,落地在現(xiàn)實(shí),絕對(duì)是有挑戰(zhàn),有難度。
架構(gòu)師的核心能力
對(duì)于架構(gòu)師的核心能力定義,《軟件架構(gòu)師的 12 項(xiàng)修煉》中有一張圖,可作參考。
周愛民老師也曾經(jīng)在《程序員》上發(fā)表過《做人、做事,做架構(gòu)師——架構(gòu)師能力模型解析》。
就我的個(gè)人總結(jié),架構(gòu)師的核心能力包括六個(gè)方面:
做一個(gè)合格的架構(gòu)師,需要各方面能力都比較強(qiáng),不能有明顯的短板。
其中技術(shù)能力和業(yè)務(wù)能力屬于硬指標(biāo),可以通過學(xué)習(xí)和工作,跨過行業(yè)門檻獲得。
這里主要分析下后四種,可稱為通用技能,對(duì)于團(tuán)隊(duì)協(xié)作的技術(shù)職位都是需要的。
前三種自我驅(qū)動(dòng)、高效學(xué)習(xí)、良好心態(tài)是內(nèi)功,用汽車比喻的話,自我驅(qū)動(dòng)能力相當(dāng)于發(fā)動(dòng)機(jī),高效學(xué)習(xí)能力則是方向盤和變速箱,良好心態(tài)就是懸掛和制動(dòng)系統(tǒng)。
溝通協(xié)作則是外功,最終的外在體現(xiàn),內(nèi)功與外功兩者之間就如同內(nèi)因和外因,起決定作用的是內(nèi)部因素。
自我驅(qū)動(dòng)能力
這是一種特質(zhì),簡單說就是有上進(jìn)心,不甘于混日子,閑不住,愛鉆研,始終有目標(biāo)性的追求,有很強(qiáng)的自控力。
這種動(dòng)力來自于興趣,比如對(duì)技術(shù)的熱愛,就是喜歡。
每個(gè)人都有自己的興趣點(diǎn),可能不是 IT 技術(shù),找對(duì)自己的方向很重要。
而且喜歡不一定就能做好,有時(shí)候努力夠了,成就要看天分,發(fā)現(xiàn)對(duì)自己不合適,干活沒勁頭,不如及早調(diào)整。
具備這樣能力的人一般都很明顯,做事努力,用心,進(jìn)步很快,相信大家在工作和學(xué)習(xí)過程中都遇到過。
舉一個(gè)加班的例子吧,搞 IT 的加班很常見,甚至可能許多人并不是真心愿意加班,但一定有很多人有這樣的經(jīng)歷。
就是碰到一個(gè)技術(shù)問題,哪怕工期上沒有那么緊迫,也要盯著它,甚至不吃飯,不喝水,絞盡腦汁要整明白,死磕到底,搞定為止。
自我驅(qū)動(dòng)力表現(xiàn)在了這種高度專注的精神,遇到問題斗志昂揚(yáng)的沖勁,解決問題的成就感之上。
高效學(xué)習(xí)能力
IT 技術(shù)需要不斷學(xué)習(xí),持續(xù)更新,真正的學(xué)習(xí),是要靠自己的,要把學(xué)習(xí)養(yǎng)成習(xí)慣。
架構(gòu)師很多時(shí)候要快速切入一個(gè)不熟悉的領(lǐng)域,必須要有高效的學(xué)習(xí)能力。
有些人會(huì)抓住一切機(jī)會(huì)學(xué)習(xí),比如我的某位同事,等待面試的時(shí)候還拿著一本技術(shù)的書在看。
在同等的時(shí)間里,怎樣能有最高效的吞吐量,獲得更多的有價(jià)值的信息量,并沉淀為自己的能力,就需要正確的方法。
每個(gè)人都有自己的特點(diǎn),需要找到適合自己的學(xué)習(xí)方法,方法得當(dāng),事半功倍。
那么學(xué)習(xí)的過程,也是一個(gè)不斷發(fā)現(xiàn)自我,形成模式,目標(biāo)導(dǎo)向,反復(fù)強(qiáng)化,不斷調(diào)整的過程。
比如曾經(jīng)有位同學(xué),每天下班回家,還要看英文原版的書,在家鉆研技術(shù)到后半夜,形成了習(xí)慣,成效自然顯著,后來去了百度?!稄膶W(xué)渣到學(xué)霸-我的 100 天閱讀簡史》,可作為學(xué)習(xí)的借鑒。
保持良好心態(tài)
N 年前,曾經(jīng)流行一句話,心態(tài)決定一切。TVB 有句經(jīng)典臺(tái)詞說得好,做人呢,最重要的就是開心。
積極正面的陽光心態(tài),是把事情做好的基礎(chǔ),因?yàn)楣ぷ髦须y免有意外和波折,不會(huì)一帆風(fēng)順,好心態(tài)能夠?yàn)槟惚q{護(hù)航。
好心態(tài)一般什么樣呢?謙虛平和、寬容、有韌性,活在當(dāng)下,內(nèi)心強(qiáng)大。不是說你是架構(gòu)師就高人一等,要憑實(shí)力說話。
這其中還包括責(zé)任心,決定了心態(tài)的方向。比如我就認(rèn)為,敬業(yè)是職業(yè)化的體現(xiàn),那么無論是否處在已經(jīng)即將離職的狀態(tài),都應(yīng)該做好自己的職責(zé),做一天和尚撞一天鐘。
善于溝通協(xié)作
架構(gòu)師處在團(tuán)隊(duì)中,且屬于技術(shù)核心角色,必須做許多溝通配合的工作,而且要做好,做到位。
這其中有幾方面需要強(qiáng)調(diào),首先是團(tuán)隊(duì)精神,架構(gòu)師不能個(gè)人英雄主義,團(tuán)隊(duì)的存在就是因?yàn)槟茏龅奖葌€(gè)人更好,團(tuán)隊(duì)的成功才是最終的目標(biāo)。
團(tuán)隊(duì)成員各有千秋,合作愉快的基礎(chǔ)是理解萬歲,消除溝通障礙,架構(gòu)師在這方面有更大的責(zé)任和義務(wù)。
技術(shù)人員相對(duì)簡單直接,也容易認(rèn)可技術(shù)上的原則,以誠相待能夠最大程度上降低溝通的成本,事情說清楚就好。
而成就他人是一個(gè)技術(shù)領(lǐng)導(dǎo)者必備的素質(zhì),相信互惠互利,我為人人,人人為我,甚至要把更多的機(jī)會(huì)給別人,吃獨(dú)食的人難以服眾。
架構(gòu)師的四門功課
架構(gòu)設(shè)計(jì)是一門藝術(shù),架構(gòu)師作為架構(gòu)設(shè)計(jì)的實(shí)踐者,要掌握四門功課,不是說學(xué)逗唱,而是:多打醬油,能和稀泥,肯背黑鍋,敢拉仇恨。
多打醬油
互聯(lián)網(wǎng)公司普遍存在人員流動(dòng)性強(qiáng),缺乏文檔的情況,而架構(gòu)設(shè)計(jì)偏偏需要全方位考慮問題。
我就曾經(jīng)遇到過這樣的事情,一大幫人開了兩小時(shí)的會(huì),終于討論出一個(gè)都能夠接受的可行方案,結(jié)果第二天有個(gè)沒能參會(huì)的人回了個(gè)郵件,說他們有問題趟不過去,原來的方案得推翻重來。
技術(shù)最重要的一點(diǎn)就是復(fù)用,不重復(fù)造輪子,如果有的功能或者組件別人做過,拿過來用是最方便的。
所以架構(gòu)師必須消息靈通,覆蓋全面,知己知彼,收集問題,盡可能了解全局。
多打醬油什么意思,無論是否由你主導(dǎo),主要的項(xiàng)目都要保持關(guān)注,多參與,多積累才有發(fā)言權(quán)。
這個(gè)過程中要不裝不拿,不懂多問,誰也不是全才,不必急于表達(dá)自己和做出判斷,謀定后動(dòng)。
打醬油不僅獲取信息,還要輸出信息,哪怕事不關(guān)己,可以建議,但不能指手畫腳,獲取溝通的最大收益,形成技術(shù)部門共識(shí)。
一般來說,男同學(xué)都是單線程思維模式,要達(dá)到最好的效果,打醬油的時(shí)候也要專注精神不分二心。
當(dāng)然也有奇人能夠做到并發(fā)處理,比如我的前同事老王,時(shí)間分片高頻切換事務(wù)處理輸入輸出,堪稱一臺(tái)人形電腦。
當(dāng)當(dāng)技術(shù)部原來有一個(gè)開會(huì)的潛規(guī)則就很好,除了產(chǎn)品經(jīng)理和項(xiàng)目經(jīng)理,其他人開會(huì)都不帶電腦,只拿筆記本。
能和稀泥
架構(gòu)的核心在于平衡,實(shí)用導(dǎo)向,最終要提出解決方案。
那么就需要在這個(gè)過程中綜合考量,化解爭論,對(duì)事不對(duì)人,規(guī)避面子問題,努力充分溝通,達(dá)成共識(shí)。
充分了解各方意見,設(shè)身處地理解本質(zhì)問題,提出多種方案,客觀的列出優(yōu)缺點(diǎn),以供決策。
但有時(shí)也有化解不了的矛盾,無論是基于技術(shù)理念、設(shè)計(jì)思路、自身定位還是意氣之爭,有時(shí)擱置也是一種可選項(xiàng),比如鄧小平對(duì)釣魚島、臺(tái)灣問題的處理方式。
之前有一個(gè)項(xiàng)目,我們提出的方案某個(gè)系統(tǒng)開發(fā)負(fù)責(zé)人不認(rèn)可,期望用另一種實(shí)現(xiàn)方式。
那我們就把兩種方案都拉出來對(duì)比,每個(gè)系統(tǒng)的改動(dòng)難度、問題都說清楚,最終對(duì)方還是接受了原來的方案。因?yàn)榫C合考慮,這才是最優(yōu)解。
肯背黑鍋
能力越大,責(zé)任越大,想做事就要有勇氣擔(dān)責(zé)任,抗風(fēng)險(xiǎn),逃避責(zé)任是難有成就的。
舉個(gè)例子,曾經(jīng)有一個(gè)緊急的需求,交給了一個(gè)同事,快上線的時(shí)候撂挑子說干不完,領(lǐng)導(dǎo)找到我,問能不能干。
這種情況,時(shí)間緊任務(wù)重,要是接了沒干出來,黑鍋就落在自己身上,但需求總要有人做,領(lǐng)導(dǎo)的信任更不能辜負(fù),任務(wù)接下來干好了,后面就不必說了。
架構(gòu)師作為主導(dǎo),要清醒的意識(shí)到,需求和狀況總是變化的,總有考慮不周的,總有難辦的有挑戰(zhàn)的,總有不確定的各種風(fēng)險(xiǎn),需要堅(jiān)持推進(jìn)達(dá)成目標(biāo)。
如果推進(jìn)不成或者發(fā)現(xiàn)之前的判斷甚至決策失誤,適時(shí)調(diào)整,不必鉆牛角尖,也要坦然承擔(dān)失敗的責(zé)任,這也是一種寶貴的經(jīng)驗(yàn)。
作為一個(gè)技術(shù)團(tuán)隊(duì),可能出現(xiàn)問題并非直接責(zé)任人是架構(gòu)師,不必非要?jiǎng)澢褰缦?,團(tuán)隊(duì)的失敗,也是每個(gè)人的失敗。
最后要清楚,謀事在人,成事在天,事在人為,但要的確可為,明知不可為而為之,不是明智之舉。
敢拉仇恨
架構(gòu)師要面對(duì)很多挑戰(zhàn),技術(shù)人員都很有想法,都認(rèn)為自己偉大光榮正確,不會(huì)因?yàn)槟闶羌軜?gòu)師就乖乖地聽話,要以理服人。
一個(gè)設(shè)計(jì)方案的出爐,可能需要像諸葛亮一般舌戰(zhàn)群儒,說服很多人。
我遇到過這種情況,明明是好事兒,做起來也不難,就是有人不接受,不愿意做。
那就需要堅(jiān)持主張,胸懷坦蕩,沒有私心,正直誠實(shí),打開天窗說亮話。
即便大家很熟,也不能抹不開面子,不講原則。
要注意一點(diǎn),雖然真理經(jīng)常是掌握在少數(shù)人手里,但要讓多數(shù)人接受,不能被接受的真理也是沒有價(jià)值的,可能就不是真理。
所以架構(gòu)師可以力排眾議,但不能成為千夫所指。
比如我們經(jīng)常遇到時(shí)間緊迫要做臨時(shí)方案,不考慮擴(kuò)展性,如果同類的業(yè)務(wù)模式重復(fù)出現(xiàn),再做臨時(shí)方案雖然大家都輕車熟路,卻不是一個(gè)好的選擇。
因?yàn)橛性僖辉俣?,就?huì)有再三再四,只要把握住這一點(diǎn),盡早進(jìn)行架構(gòu)改造,實(shí)現(xiàn)后就能快速響應(yīng)后續(xù)的同類需求,這也體現(xiàn)了架構(gòu)師的價(jià)值。
當(dāng)你做的正確的事情多了,才會(huì)與團(tuán)隊(duì)磨合,獲得大家的信任,而不是怨念,逐步樹立自己的權(quán)威,從此可以跟小伙伴們一起愉快地玩耍了。