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