架構師成長之路(2)--架構師必備技能(目標)

序言: ? "比你牛B的人比你還努力,你有什么資格不去奮斗"

前言:

哲學家常思考的問題:" 我是誰?"" 我從哪里來?"" 要到哪里去?不只是哲學家,我想每個人都有自己對這三個問題的認知。

如果我們要成為架構師,我們自己要面臨的三大問題:

找準自己定位:我是誰?在哪里?

怎樣做好架構師:我要做什么?

如何搭建架構師知識體系:我該怎么做?

這里面就是做事方法論:目標(我要做什么),方法(計劃)(我該怎么做), ?執(zhí)行/行動


再來看看架構師該具備什么能力才能成為一家公司中的「靈魂人物」。我們先來看一下調查數(shù)據(jù)——




1、技術實力:每個好架構師都是一位出色的程序員


這一點毋庸置疑,如果不是寫過N年代碼的優(yōu)秀程序員,一定不是好的架構師。“架構師”這是一個聽上去比較虛的職位,它的主要價值在于“落地”的過程中,而不是“指點江山”。eBay的架構師總結架構師在項目中的職責:


1)、解決解決方案:產(chǎn)品團隊要做一個產(chǎn)品,架構師要幫助團隊把技術可行性,技術方案權衡取舍一一剖析清楚;


2)、架構設計和技術實現(xiàn)步驟:技術方案權衡取舍出來了,架構師要設計整體的技術實現(xiàn)步驟,這個過程一定是和團隊其他成員一起完成的,常見的實踐是,1到2個核心成員出一個初稿,然后大家討論完善;


3)、編寫核心模塊:技術實現(xiàn)步驟出來了,架構師要和開發(fā)團隊一起,進行編碼,可能架構師不一定細究到任何細節(jié),常見的實踐是,系統(tǒng)最困難最核心最關鍵的部分往往由架構師親自操刀;


4)、部署上線和完善流程:系統(tǒng)初版實現(xiàn)了,架構師要和開發(fā)團隊、測試團隊、運維團隊一起,完成各類測試,協(xié)助解決最困難的bug,和團隊一同完成線上部署、并一同排除上線初期系統(tǒng)的故障;


在項目的過程中,架構師至少一半以上的時間是和開發(fā)團隊一起進行的,好的架構師不能將實施細節(jié)拋之腦后,更直白一些,他要通過撰寫代碼的方式來指導團隊其他成員理解和實現(xiàn)架構中的細節(jié)。


反面的例子是,項目失敗后,架構師反饋“團隊的技術能力不夠”,團隊反饋“這是一個一行代碼也不會寫的大忽悠”。


2、抽象能力:駕馭概念的技能是最高潛力

“邏輯思維,抽象思維”比“編碼的時間”對架構師而言更為重要,如果你不能讓某個非IT人員明白某個概念在說什么,這個架構師注定也是失敗的


邏輯思維不用展開多說,程序員的代碼都是邏輯,如果XXX就YYY,如果AAA就BBB,缺乏良好的邏輯思維能力基本不可能成為好的架構師,甚至好的程序員。


抽象思維又分兩點,一個是將實在的事物概念化,一個是將模糊的感覺數(shù)量化。一個蘋果,抽象為質量、大小、顏色、形狀、味道等,這是概念化,是架構師的必備思維。至于質量、大小、顏色、形狀、味道如何轉變成數(shù)字來描述,這也是架構師必備的思維。


有了上述兩點,架構師能將一個“虛”的架構概念描述清楚。



3、設計能力:前瞻性的設計眼光,站在技術的山頂向前眺望

鐵打的程序員,流水的技術。程序員的開發(fā)生涯可能長達幾十年,但一門技術的平均壽命卻不長。因此作為程序員們的技術領袖,架構師必須有 很好的技術前瞻性,要先于大家了解到最新的技術。


架構是過程,并非結果:架構是架構師洞察內在結構、原則、規(guī)律與邏輯的過程,架構師要做到清晰理解系統(tǒng),以及簡潔描述,這是分析整合的能力。

一個架構師必須具備極強的分析能力,要做到根據(jù)產(chǎn)品宗旨和目標,分析清楚產(chǎn)品定位以及產(chǎn)品業(yè)務,再整合利用現(xiàn)有的技術領域,找出最佳方案,實現(xiàn)產(chǎn)品概念。

架構師與技術高手的區(qū)別在于,架構師不僅局限于如何調用、如何并發(fā)等架構細節(jié)(技術高手對這些也非常熟練),還跳出三界,考慮未來問題和潛在風險的應對之道。


????? 一名合格的架構師設計出來的架構是要有前瞻性的,要為了將來的組織能力更上一個臺階而設計, 滿足當下需求并能夠適當擴展,是遵循架構設計的系統(tǒng)實現(xiàn)要關注的事情,系統(tǒng)是多樣的,架構不是,系統(tǒng)是演化出來,架構不是。

要培養(yǎng)自己的技術前瞻性,首要是學好英語(不多屆時了,希望未來最先進的技術都首先從國內誕生),看懂外文技術文章,能與業(yè)界專家溝通交流,學習別人的實踐方案。


反面的例子是,成天將技術前言的名詞掛在嘴邊,大談“云計算,SaaS”這些東西,天天吹水,而落不了地(有可能他自己也搞不清概念如何落地)。


技術前瞻性還提現(xiàn)在對新技術的選型上,哪些東西適合自己團隊,哪些不適合。學習成本、維護成本、硬件成本、潛在風險等等都是架構師需要考慮的。


架構師在自己所處的領域肯定了解頗深,未來本領域技術該如何發(fā)展,應該有自己的理解。也會對未來技術的發(fā)展有所期盼,有自己的見解。當然這屬于比較發(fā)散的想法,個人有個人的目標。





4、系統(tǒng)性的思考:權衡利弊,只有合適沒有喜歡


???? 合格的架構師都是好的戰(zhàn)略家,前瞻性眼光是他們起碼的要求,而系統(tǒng)性的思考則是將這些前瞻性眼光落地的必備素質。

???? 架構既看重前瞻,又看重落地,落不了地的架構只是空中樓閣,所以,如何將架構落地,考量的就是一名合格架構師的綜合素質和系統(tǒng)思考的能力。

因為架構的規(guī)劃和落地依附于現(xiàn)有的環(huán)境因素很多且不可重現(xiàn),所以,合格的架構師要能夠盡可能多的將對架構有過多權重影響的因素考量進來,然后做權衡,抓住重點因素,最后集中兵力重點突破。


??? 比如,是采用傳統(tǒng)的Monolith架構體系,還是時下風靡的微服務架構體系,你要能夠從團隊人員層次和能力,組織和公司的發(fā)展現(xiàn)狀,時機等重點因素中做出權衡,你沒法通過數(shù)據(jù)建模的手段去完成這個工作,你能依靠的,只有你的綜合素質和系統(tǒng)思考能力:


從時機(Timing)上說,如果單個應用結點就可以滿足業(yè)務發(fā)展需求,那么,就沒有必要上微服務,否則反而憑空增加了整個交付鏈路的負擔;


如果團隊的成員能力還不足以支撐起微服務體系相關的所有工具化,服務化和平臺化建設,那么微服務架構也不是最合適的方向;


如果公司業(yè)務還處在四處拼殺,生死未卜的時候,公司的現(xiàn)狀也不會允許你去搞各種完善的基礎性建設,活下來才是第一位的;


對于架構師來說,你要關注的不是“點”,而應該關注的是盡可能多的“點”,進而是連接點的線,到面,甚至到體。



5、透過問題看本質:解決問題和繞開問題

看到問題的本質,是架構師必須具備的素質。


菜鳥程序員的如此寫php:

echo $_GET['username'];


大部分人知道這個出現(xiàn)安全隱患。一般人使用htmlspecialchars解決問題就可以了。但問題的本質是什么?可以從更深的層次去理解:


比如echo是如何執(zhí)行的?在什么時候執(zhí)行的?哪些字符可能導致安全問題?htmlspecialchars為什么能解決這個問題?它真的解決這個問題了么?那么他將會一點一點的進步,逐漸成為一個合格的程序員。


什么是本質?將世界萬物理解為原子,將整個互聯(lián)網(wǎng)理解成0和1,這倒的確是非常本質了,不過并不能解答任何問題。從問題看本質,實質上是一個從表層逐步深入的過程。在架構師面對一個用戶需求時,這個“用戶需求”是非常表層的——比如說,一個自動遠程備份數(shù)據(jù)庫的功能。而架構師的主要工作,就是把這樣的“業(yè)務需求”翻譯成“技術需求”。這個過程一方面需要通過抽象思維將用戶需求提煉為啟動、讀取、存儲、中斷處理等模塊,而另一方面則需要看到更深層次的網(wǎng)絡、操作系統(tǒng)、硬件等方面,以及其可靠性、穩(wěn)定性、適用性、安全性等問題。


架構師要有將“業(yè)務需求”轉化為“技術需求”的能力,這是一個本質的挖掘。例如,業(yè)務層面看到的是一個“電子商務網(wǎng)站系統(tǒng)”,架構師看到的是一個多人在線,并發(fā)交易,需要保證數(shù)據(jù)一致性的站點、服務、數(shù)據(jù)系統(tǒng),功能、性能、擴展性、維護性、安全性、可用性這些字眼會慣性的蹦到架構師的腦子里。


架構師之所以是架構師,他在龐大系統(tǒng)的面前,仍然能夠敏銳發(fā)現(xiàn)其底層之真實,這就需要,他有多年多領域知識和經(jīng)驗的沉淀。



6、跨域知識:要成為百科全書式的智者

首先,作為一名卓越的程序員,架構師肯定不欠缺開發(fā)方面的知識。從架構到方法論,從數(shù)據(jù)處理到安全監(jiān)控。可以說IT開發(fā)層面上,架構師可以做到爐火純青的地步。但是這僅僅是一名卓越程序員的能力級別,離架構師那還有很大的一段距離。


架構師作為一名技術領袖,需要通過散發(fā)知識的光芒來溫暖開發(fā)團隊,如果只一個領域內的知識爛熟于胸,那也僅僅是一名技術高手。要想更進一步,需要對APP層面、服務層面、數(shù)據(jù)層面均要了解(系統(tǒng)分層),要對研發(fā)、測試、運維、安全也要有所了解(職能),上要對接口,下要對原理(接口與實現(xiàn))都有所了解,甚至,要在多個業(yè)務領域都有所涉獵。


有的程序員也會說,如果多學習跨領域、跨學科的東西,會不會成為什么都懂,但什么都不精的人?其實在這里的跨領域,并不是要求大家都成為每個領域的專家。最重要的是有一門敲門磚,學習的引子。如果開發(fā)一套金融系統(tǒng),對于財務結算以及處理方法都不了解,那別說是勝任架構師的任務,連普通程序員的工作也不可能做好。假設大家工作一段時間后,對某領域很了解,但由于工作變動的緣故,到其他公司后,開發(fā)的領域完全不會。這里就要用到跨領域知識學習的能力了,需要大家樣樣都要知曉。

談到跨領域學習,知識面廣似乎是最好實現(xiàn)的目標,只要博覽群書,加上高中之前各學科扎實的基礎,相信大多數(shù)程序員本身就具備一定的跨領域學習的能力。但想成為真正的百科全書式的智者,恐怕不光是簡單覺得眼熟就行。在條件允許的情況下,程序員其實可以去參加一些其他領域的專業(yè)考試。比如參加會計資格證的考試,抑或其他專業(yè)中較初級的考試。這樣的經(jīng)歷,主要還是在于“以學促考”,通過一定的壓力讓自己能鉆進去學習。


初級架構師所害怕的,是跳出自己的“獨門絕技”,在一定程度上說,在一定深度之內成為一個“雜家”也沒什么不好。



7、溝通能力:善于溝通的技術領袖


架構師必須參與項目開發(fā)全過程,包括確認需求、系統(tǒng)分解、架構設計、技術選型、制定技術規(guī)格說明、系統(tǒng)實現(xiàn)、集成測試和部署各階段,在這一系列過程中,架構師會與各部門溝通交流。

一個產(chǎn)品會有多部門合作,架構師在其中的溝通極為重要,直接影響產(chǎn)品進度與質量。架構師不僅要與開發(fā)人員溝通,也要和項目經(jīng)理、分析人員甚至用戶溝通,來實現(xiàn)產(chǎn)品的各種可能性。


架構師和項目經(jīng)理,對溝通能力的要求都很高,很多互聯(lián)網(wǎng)公司甚至直接由架構師擔任項目經(jīng)理的角色。這兩個角色其實還是有所偏重的,項目經(jīng)理更傾向于與客戶的交流,跨團隊的協(xié)作與交流,架構師主要偏向技術團隊內部的溝通與交流,純技術上的溝通。


如何成為一名“善于溝通”的架構師呢?在目標清晰的前提下:


首先做到平和,不能將自己所在象牙塔上,頤指氣使的發(fā)號施令,這樣的態(tài)度必然遭恨,大家都是技術人員,只是分工不同,為何要受你的氣呢?


其次,架構師要有一定的繪圖能力。人對圖形的理解遠大于對文字的理解,一個層次圖,一塊小白板,幾只筆,真的這么容易把問題描述清楚么?


做到人性化的溝通,需要我們在平時就進行培養(yǎng)。寫出大部頭的架構書,有的時候并沒有用VISIO畫出的簡單架構圖好理解。人對圖形理解遠遠大于對文字的理解,直觀簡單的UML圖可以極大的方便程序員理解架構師的意圖。


其次,可以召開小范圍的技術人員會議,大家一起來討論,一起理解架構師真正的意圖。甚至就是一塊小白板,幾支筆就能把問題擺清楚,講明白,統(tǒng)一意見后的團隊必然干勁十足,再不會出現(xiàn)互相推諉的情況。

架構師就相當于一支球隊的主教練,如何將自己布置的戰(zhàn)術交到執(zhí)行的球員,也就是開發(fā)人員的腦袋里,是關乎勝利的關鍵。那么怎樣才能成為一名能說會道的程序員呢?

在一般人的印象里,程序員都是一群略顯呆滯,溝通能力不強的技術狂人。邏輯思維非同常人,但就是倒不出來。有些人通過找女朋友作為旁證,連經(jīng)濟適用男中的定義原型都是IT人士,月薪4000以上,不善言談,最后娶一剩女為妻??磥砦业瘸绦騿T,真的只能被人如此定義了。雖說架構師技術層面上的東西與前例不可同日而語,但是也看到溝通能力上,程序員還有很大的發(fā)展空間。



?(原文地址:https://blog.csdn.net/hguisu/article/details/46506361?

?? 感謝作者,尊重原創(chuàng) )

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容