俗話說(shuō):不想當(dāng)架構(gòu)師的程序員不是好程序員。成為架構(gòu)師,幾乎是每位開(kāi)發(fā)者入行初期的共同理想。但架構(gòu)師并非只是一個(gè)單純的技術(shù)崗位,它需要技術(shù)能力與綜合能力的共同支持。了解架構(gòu)師的職業(yè)定位與主要職責(zé),掌握架構(gòu)師所需的核心技能,是通往這一高階職位道路上的必修課。
在由51CTO舉辦的【T·TALK】全年系列技術(shù)分享活動(dòng)的第二期中,51CTO內(nèi)容中心特別邀請(qǐng)到了前貝殼金服小微企業(yè)生態(tài)CTO史海峰老師,為大家親述他的架構(gòu)師修煉之道。以下為本次直播分享的核心內(nèi)容整理,希望能為讀者帶來(lái)幫助。
T·TALK:在您看來(lái),架構(gòu)師的職業(yè)定位與核心職責(zé)是什么?
史海峰:
架構(gòu)師的本質(zhì)是更高級(jí)更資深的工程師,架構(gòu)師的能力要求在工程師之上,一些大廠層級(jí)較多,架構(gòu)師成了一個(gè)職級(jí),高級(jí)工程師跳槽到小廠做架構(gòu)師也是游刃有余。所以并不需要糾結(jié)工程師或架構(gòu)師的邊界到底在哪里。
我傾向于認(rèn)為架構(gòu)師是一個(gè)角色,在足夠復(fù)雜、規(guī)模較大的系統(tǒng)才需要的角色,當(dāng)系統(tǒng)架構(gòu)不那么一目了然時(shí),需要有人在更高的視角上去關(guān)注系統(tǒng)的整體。且架構(gòu)師是高階職位,難以通過(guò)培訓(xùn)批量生產(chǎn),在能力方面更多的需要依賴于個(gè)人工作經(jīng)驗(yàn)的積累與一些軟性技能的支撐。
架構(gòu)師的核心職責(zé),是系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)的最核心的工程師,用七句話總結(jié)我對(duì)架構(gòu)師職責(zé)的定義:
以工程思維全面理解業(yè)務(wù)需求
基于模型和基礎(chǔ)模式抽象簡(jiǎn)化
提出恰當(dāng)可行的整體解決方案在限定資源范圍完成明確目標(biāo)
滿足業(yè)務(wù)需求且保證系統(tǒng)質(zhì)量
在可預(yù)見(jiàn)的周期內(nèi)具備擴(kuò)展性
并在系統(tǒng)生命周期內(nèi)持續(xù)演進(jìn)
T·TALK:架構(gòu)師需要掌握的的核心技能都有哪些?
史海峰:
借用李智慧老師《大型網(wǎng)站技術(shù)架構(gòu):核心原理與案例分析》中的說(shuō)法:軟件架構(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ù)場(chǎng)景的理解、對(duì)人性的把握、甚至對(duì)世界的認(rèn)知。
在技術(shù)團(tuán)隊(duì)中,架構(gòu)師是技術(shù)領(lǐng)導(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)師應(yīng)當(dāng)是胸懷理想的現(xiàn)實(shí)主義者,高度在理想,落地在現(xiàn)實(shí)。
以個(gè)人經(jīng)驗(yàn)來(lái)講,架構(gòu)師需要具備五方面的能力。
1.全面的專業(yè)能力和經(jīng)驗(yàn),包括技術(shù)能力和業(yè)務(wù)能力
2.自我驅(qū)動(dòng)能力
3.高效學(xué)習(xí)能力
4.保持良好心態(tài)
5.善于溝通協(xié)作
一個(gè)合格的架構(gòu)師,需要擁有很強(qiáng)的綜合能力,不能有明顯的短板。其中技術(shù)能力和業(yè)務(wù)能力屬于硬指標(biāo),可以通過(guò)學(xué)習(xí)和工作,跨過(guò)行業(yè)門(mén)檻獲得。而后四種能力,則可以稱為通用技能,或是軟技能、軟素質(zhì),對(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í)能力則是方向盤(pán)和變速箱,良好心態(tài)就是汽車懸掛和制動(dòng)系統(tǒng)。溝通協(xié)作則是外功,是最重的外在體現(xiàn)。架構(gòu)師并不是一個(gè)人在戰(zhàn)斗,閉門(mén)造車是不可取的。而且架構(gòu)師不是管理職位,在工作中更多充當(dāng)領(lǐng)導(dǎo)者的角色,需要讓大家了解你的想法,需要團(tuán)隊(duì)通力合作共同完成目標(biāo),這都是要靠溝通的。
T·TALK:作為一名架構(gòu)師,您是如何理解系統(tǒng)架構(gòu)的?
史海峰:
杰拉爾德·溫伯格的《系統(tǒng)化思維導(dǎo)論》中提到過(guò):系統(tǒng)是對(duì)世界的一種看法。而世界是多元的、世界是有機(jī)的、世界是變化的,并且世界并不完美。通過(guò)這個(gè)邏輯引申一下,架構(gòu)其實(shí)就是對(duì)系統(tǒng)的一種看法。
以人為例,我們可以認(rèn)為人也是一個(gè)復(fù)雜系統(tǒng),生命則可以理解為一個(gè)信息處理器,但不同的學(xué)科和理論體系對(duì)人的認(rèn)識(shí)是不一樣的,比如現(xiàn)代醫(yī)學(xué)區(qū)分神經(jīng)系統(tǒng)、循環(huán)系統(tǒng)、消化系統(tǒng)等等,傳統(tǒng)醫(yī)學(xué)講究陰陽(yáng)五行五臟六腑。我們每天都和別人交流,別人說(shuō)的話就是各種信息,我們的回應(yīng)便是輸出反饋。架構(gòu)不僅僅是靜態(tài)的視圖,還包含了整個(gè)系統(tǒng)的實(shí)現(xiàn)過(guò)程,所以要面向未來(lái)。架構(gòu)設(shè)計(jì)需要能夠化繁為簡(jiǎn),將架構(gòu)進(jìn)行抽象,當(dāng)然這個(gè)過(guò)程中每個(gè)人的理解是不一樣的,很難用一句話去總結(jié)。
在這個(gè)思路上繼續(xù)擴(kuò)展,無(wú)論面對(duì)軟件還是硬件,都可以將其拆解為時(shí)間與空間,并對(duì)其進(jìn)行時(shí)空的轉(zhuǎn)換,時(shí)間換空間,空間換時(shí)間,是在進(jìn)行架構(gòu)設(shè)計(jì)時(shí)最常見(jiàn)的做法,這其中并沒(méi)有嚴(yán)格的界限。最終架構(gòu)設(shè)計(jì)還是要以人為本,需要更多思考系統(tǒng)的用戶是誰(shuí),維護(hù)者是誰(shuí),在不同場(chǎng)景之下系統(tǒng)將會(huì)對(duì)他們產(chǎn)生怎樣的影響。深入了解業(yè)務(wù)及需求,才能找到架構(gòu)設(shè)計(jì)的最優(yōu)解決方案,因?yàn)槲覀兊臅r(shí)間與資源都是有限的。
還需要補(bǔ)充的一點(diǎn)是衡量系統(tǒng)架構(gòu)的標(biāo)準(zhǔn),一個(gè)好的架構(gòu)首先要滿足需求、性能優(yōu)良、實(shí)用友好,滿足使用者是架構(gòu)設(shè)計(jì)的最核心目標(biāo)。其次,需要做到的是結(jié)構(gòu)合理、設(shè)計(jì)簡(jiǎn)潔、成本可控,這幾項(xiàng)則更多地涉及到系統(tǒng)的開(kāi)發(fā)效率。最后,穩(wěn)定健壯、易于維護(hù)、易于分解同樣是優(yōu)秀架構(gòu)不可或缺的,舉個(gè)最簡(jiǎn)單的例子,在一個(gè)系統(tǒng)中使用不同的命名規(guī)則和接口規(guī)范,可能會(huì)導(dǎo)致很嚴(yán)重的后果。實(shí)現(xiàn)這些要求,才能使系統(tǒng)擁有更高的上限。
T·TALK:在您做架構(gòu)師的過(guò)程中,發(fā)生過(guò)哪些令您印象深刻的事件?
史海峰:
有兩件印象比較深刻的事情。首先是去當(dāng)當(dāng)面試的時(shí)候,那時(shí)并不知道互聯(lián)網(wǎng)企業(yè)具體是什么樣的,對(duì)架構(gòu)師的概念也不是很清晰。當(dāng)被問(wèn)到如何解決錯(cuò)誤訂單問(wèn)題時(shí),我沒(méi)有在技術(shù)棧方面做過(guò)多糾結(jié),而是依靠在亞信處理相似場(chǎng)景的經(jīng)驗(yàn),從系統(tǒng)整體角度出發(fā),給出了恰當(dāng)實(shí)用的解決方案。這件事給了我很大啟發(fā),讓我對(duì)架構(gòu)以及架構(gòu)師的職責(zé)有了更深刻的認(rèn)知。
其次,是在加入當(dāng)當(dāng)一年多后,和另一位架構(gòu)師趙振林共同完成了一張當(dāng)當(dāng)?shù)恼w架構(gòu)圖,將所理解的100多個(gè)系統(tǒng)都串聯(lián)了起來(lái)。雖然其中肯定是有遺漏甚至錯(cuò)誤,但通過(guò)這張圖,我成功驗(yàn)證了自己對(duì)當(dāng)時(shí)公司整體架構(gòu)的理解。這也讓我意識(shí)到,做架構(gòu)師同樣是需要輸出的,自我感覺(jué)并不是總能靠得住,需要通過(guò)文字、圖案等一些方式將自己所了解的表達(dá)出去,并對(duì)自己的認(rèn)知不斷進(jìn)行校正。
T·TALK:在敏捷開(kāi)發(fā)流行的今天,架構(gòu)師該如何確保開(kāi)發(fā)設(shè)計(jì)的質(zhì)量呢?
史海峰:
我們?cè)?jīng)討論過(guò)這個(gè)問(wèn)題,甚至討論敏捷的模式中是否需要有架構(gòu)師,因?yàn)槊艚菟坪跏敲看沃唤鉀Q一個(gè)問(wèn)題,但如果只看眼前而忽略長(zhǎng)遠(yuǎn),一定會(huì)出更大的問(wèn)題。人無(wú)遠(yuǎn)慮必有近憂,架構(gòu)是演進(jìn)的,目標(biāo)不是自己說(shuō)了算。變化越快的系統(tǒng),其腐化就會(huì)越快,幾年之后就很可能會(huì)面臨重構(gòu)。重構(gòu)的同時(shí),原有系統(tǒng)要迭代,然后并行,再切換掉,重構(gòu)需要做架構(gòu)設(shè)計(jì),而且要盡可能有前瞻性,幫助團(tuán)隊(duì)甩掉技術(shù)債,避免保留原來(lái)的局限。想要確保質(zhì)量,日常迭代便要把握原則,就算敏捷也要做方案評(píng)審,做CodeReview ,該做性能測(cè)試做性能測(cè)試,該監(jiān)控監(jiān)控,該復(fù)盤(pán)復(fù)盤(pán),確保把基本動(dòng)作做到位。說(shuō)回來(lái),敏捷開(kāi)發(fā)對(duì)團(tuán)隊(duì)整體能力要求更高,每個(gè)成員都要對(duì)業(yè)務(wù)目標(biāo)、架構(gòu)原則、開(kāi)發(fā)流程、協(xié)作機(jī)制有充分的認(rèn)知,才能真正跑得又穩(wěn)又快。
T·TALK:最后,能否從架構(gòu)師的角度,給有志于此的開(kāi)發(fā)者提供一些建議。
史海峰:
先拋個(gè)梗,架構(gòu)設(shè)計(jì)是一門(mén)藝術(shù),架構(gòu)師作為架構(gòu)設(shè)計(jì)的實(shí)踐者,要掌握四門(mén)功課:多打醬油,能和稀泥,肯背黑鍋,敢拉仇恨。
前面提到過(guò)沒(méi)有完美的架構(gòu),只有合適的架構(gòu)。技術(shù)同學(xué)在工作中容易理想主義,不考慮ROI,廢寢忘食熬夜加班。但我們做的是工程,時(shí)間資源是有限的,要能夠在有限時(shí)間內(nèi)交付符合預(yù)期的成果。因此,怎么能在復(fù)雜的系統(tǒng)里化繁為簡(jiǎn),舉重若輕,找到最簡(jiǎn)單有效的解決方案,是做技術(shù)的同學(xué)應(yīng)該更多思考的問(wèn)題。最終我們要靠實(shí)踐獲得反饋,靠成果積累經(jīng)驗(yàn),簡(jiǎn)單一句話,光說(shuō)不練假把式,光練不說(shuō)傻把式,能說(shuō)會(huì)練真把式。
關(guān)于工程師、架構(gòu)師的成長(zhǎng),我寫(xiě)過(guò)一些文章,大家可以到我的公眾號(hào)“IT民工閑話”上搜索“工程師”和“架構(gòu)師”關(guān)鍵字,可以進(jìn)一步交流,共同成長(zhǎng)。
疑難解答:架構(gòu)設(shè)計(jì)的框架如何選擇?
史海峰:
架構(gòu)設(shè)計(jì)的框架有很多,比如付曉巖老師在《企業(yè)級(jí)業(yè)務(wù)架構(gòu)設(shè)計(jì)》開(kāi)篇有介紹,但無(wú)論哪個(gè)體系,都是方法和手段,我們不能被體系所限制。應(yīng)當(dāng)更多地去了解其中的思維模式,初步了解并不會(huì)花費(fèi)太多的時(shí)間。當(dāng)我們對(duì)大部分體系都有所理解后,才能夠更準(zhǔn)確的選擇出最能夠幫助到你且最適用于你目前工作的架構(gòu)體系,而后再去對(duì)其進(jìn)行深究。
疑難解答:架構(gòu)師需要有產(chǎn)品經(jīng)理的經(jīng)驗(yàn)么?
史海峰:
是否具備產(chǎn)品經(jīng)理的經(jīng)驗(yàn)并不是關(guān)鍵因素。從個(gè)人發(fā)展的角度講,在初入職場(chǎng)的時(shí)候,只要把本職工作做好就可以了。而在三五年后,則需要考慮差異化競(jìng)爭(zhēng),發(fā)揮自己的專長(zhǎng),這需要對(duì)某一領(lǐng)域進(jìn)行深耕,成為領(lǐng)域內(nèi)的專家。接下來(lái)要發(fā)揮更大價(jià)值,則需要與更多相關(guān)角色打交道,要能夠換位思考,對(duì)不同角色工作的方式與輸入輸出有感性的認(rèn)知。架構(gòu)師要知道團(tuán)隊(duì)中每一個(gè)角色的關(guān)注點(diǎn)是什么,不只局限于自己擅長(zhǎng)的領(lǐng)域,要讓整個(gè)團(tuán)隊(duì)都能夠了解你的設(shè)計(jì)思維,這樣才能使團(tuán)隊(duì)擁有更好的配合度,形成合力。
嘉賓介紹:
史海峰,前貝殼金服小微企業(yè)生態(tài)CTO。
曾在神州數(shù)碼、亞信聯(lián)創(chuàng)長(zhǎng)期從事電信行業(yè)業(yè)務(wù)支撐系統(tǒng)集成工作,參與中國(guó)移動(dòng)、中國(guó)聯(lián)通多個(gè)項(xiàng)目,具有豐富的大型業(yè)務(wù)系統(tǒng)研發(fā)實(shí)施經(jīng)驗(yàn)。
曾在當(dāng)當(dāng)負(fù)責(zé)總體架構(gòu)規(guī)劃、技術(shù)規(guī)范制定和技術(shù)預(yù)研推廣,善于把握復(fù)雜業(yè)務(wù)需求,提出創(chuàng)新性解決方案,參與多個(gè)重點(diǎn)項(xiàng)目的方案設(shè)計(jì),在項(xiàng)目中對(duì)系統(tǒng)架構(gòu)進(jìn)行持續(xù)改造優(yōu)化。負(fù)責(zé)技術(shù)委員會(huì)組織管理工作,發(fā)掘最佳實(shí)踐、推動(dòng)技術(shù)革新、開(kāi)源產(chǎn)品,組織內(nèi)外部技術(shù)交流。
曾負(fù)責(zé)餓了么技術(shù)創(chuàng)新部產(chǎn)品研發(fā)團(tuán)隊(duì),完成多個(gè)創(chuàng)新性業(yè)務(wù)項(xiàng)目及技術(shù)產(chǎn)品。
曾在貝殼金服負(fù)責(zé)小微企業(yè)生態(tài)金融服務(wù)產(chǎn)品規(guī)劃、技術(shù)團(tuán)隊(duì)管理、系統(tǒng)建設(shè)。
下期預(yù)告
3月2日,周三晚八點(diǎn),【T·TALK】將通過(guò)51CTO技術(shù)棧視頻號(hào)舉辦第三場(chǎng)線上直播分享活動(dòng)。屆時(shí),「開(kāi)源之道」發(fā)起人及主創(chuàng)、《開(kāi)源之謎》作者適兕老師將為廣大聽(tīng)眾帶來(lái)《開(kāi)源項(xiàng)目如何走商業(yè)化道路》的主題分享。作為一位觀察開(kāi)源近20年的資深開(kāi)源布道師,適兕老師將從自身視角出發(fā),跳出技術(shù)之外,與大家探討開(kāi)源的崛起歷程、開(kāi)源的商業(yè)化成功以及開(kāi)源未來(lái)發(fā)展的諸多可能。
分享內(nèi)容涵蓋開(kāi)源作者“刪庫(kù)”背后的故事解讀、開(kāi)源的發(fā)展歷史回顧、軟件的交易邏輯分析、軟件開(kāi)源的本質(zhì)屬性探討以及對(duì)未來(lái)開(kāi)源軟件全面商業(yè)化的展望。感興趣的同學(xué)可掃描下圖二維碼添加小助手微信提前預(yù)約直播。期待您的關(guān)注與支持!