架構師所需的硬實力與軟技能
架構師需要有什麼硬實力和軟技能呢?硬實力需要具備很強的技術廣度和深度,包括問題定義、問題解決、救火能力,能夠快速定位並處理問題的能力。
軟技能即管理的能力,需要有專案範圍管理、專案設計及規劃的能力,如何準確評估工作量的能力,開發過程中的風險管理能力,以及溝通協調能力,這些軟技能能夠幫助團隊取得更大的成就。
▲聯通物聯網開發經理&架構師 蘇仕祥
嘉賓介紹: 蘇 仕祥,開源愛好者,架構師,專注於資料庫技術、微服務架構領域。 對分散式,大規模資料處理,高併發高效能系統有著深入理解以及相關實踐經驗,有大規模跨語言跨平臺的異構系統微服務架構實踐經驗。開源資料庫中介軟體Apache ShardingSphere、DBLE原始碼貢獻者。有著豐富的系統問題定義及最佳化經驗,軟體專案管理經驗。目前擔任聯通物聯物聯網億級裝置連線平臺系統架構師。
以下是蘇仕祥老師在SACC2022大會的演講實錄:
一、概述
架構師分為軟體架構師、硬體架構師、系統架構師等。其中,軟體架構師分工很詳細,包括雲端計算架構師、中介軟體架構師、資料庫架構師、微服務架構師。所以,架構師到底是做什麼的?架構師就是在有限的資源(時間有限、資源有限、相互制約、需要協調)下,透過設計並實現軟體系統架構,來獲得業務的最大價值。
架構師需要什麼技能?首先是專業能力——硬實力,技術廣度和深度、問題定義與解決的能力、快速有效進行軟體選型、線上問題的定位與解決。其次是軟技能,具備專案管理的能力和團隊管理的能力。這是一個實踐的世界,不落地的方案不是好方案。
二、架構師職業必點技能
(一)技術廣度和深度
我們要成為一個優秀的架構師,需要哪些技能?從框架到中介軟體,資料庫,作業系統,再到大資料,運維監控,所有的一系列技術都需要熟悉,特別是在跨團隊協調溝通的情況下,更需要具備一定的技術廣度和深度。
上圖是雲原生的全景圖。面對如此多的知識點,可能無從下手,以我的實踐經驗總結來看,其實我們應該先學深。
那麼,學深怎麼學?舉例,Spring學深能學到哪些?MySQL學深能學到哪些?中介軟體(Mycat、RocketMQ、Redis等)學深能學到哪些?
Spring是一套非常成功的web框架,簡化了JAVA系統的開發,我們可以從中學到JAVA語言(資料結構、演算法、類載入、多執行緒等)、網路處理(Http協議、IO模型)、Spring的應用部署運維(作業系統、負載均衡、高可用)。
透過MySQL,我們可以學到C++語言(資料結構、演算法等)、網路處理(MySQL協議、IO模型)、MySQL的部署運維(高可用、高可靠、資料複製、作業系統)。對於計算機技術來講,最基本的就是資料結構、演算法、網路和作業系統。
技術學廣還是學精?對此,我們一定要深入淺出,抽象出它們共性通用的知識,快速學廣。大家不要侷限於某一個應用,而應該去掌握真正底層的知識,做到融會貫通,一通百通。
(二)問題定義與解決的能力
任何事情都沒有你想象的那麼緊急,在解決問題之前,我們首先需要知道要解決的問題是什麼?愛因斯坦曾經說過,如果他只有一小時來解決某個問題,他會花55分鐘弄清楚要解決的問題究竟是什麼,剩下的5分鐘用來思考解決方案。
問題定義與解決的模型如上圖,很多問題來源於需求,所以首先是需求溝通,然後是問題定義,弄清楚這個問題是什麼?再然後去尋求解決方案,最後一定要實施驗證,看解決方案能否滿足使用者的需求。
如何提高問題定義的能力?首先要學會溝通,認真聆聽業務需求,把問題表述出來,總結確認。其次是持續學習,不斷擴充套件自己的知識面,不要自我設限。最後是抽象概括。
如何提高問題解決的能力?首先要具備資訊收集的能力,其次是持續學習的能力,如果不擴充套件自己的知識面,可能就無法獲得相應的解決方法。最後是團隊能力,依賴團隊的力量,做到集思廣益。
(三)快速有效進行軟體選型
選型的需求來源於業務訴求,選型總是在業務驅動下進行的。當業務使用良好,沒有效能瓶頸,沒有合規要求,也沒有新需求要開發的時候,我們不會想換個框架或元件。當業務有真正的訴求時,比如有資料同步、業務解藕、削峰填谷、分散式事務等需求,我們就需要調研相應的解決方案。
在開始選型前,我們需要了解有哪些待調研的物件。想用訊息中介軟體,需要調研的物件可能有RabbitMQ、RocketMQ、Kafka等。有資料同步的需求,需要調研的物件可能有otter、Datax、canal等。想用rpc服務,調研的物件可能有Dubbo、gRPC、Thrift等。
整個調研的內容包括,系統架構、軟體社群情況、文件、其他四部分。上圖是系統架構,軟體的系統架構在很大程度上決定了軟體的簡單或複雜、可擴充套件性、高可用性等較難改變的屬性。
活躍的社群對於開源軟體來講很重要,因為活躍的社群說明軟體的使用者很多,使用者多就有很多的實踐經驗可以參考交流,在你遇到問題的時候能有個交流的平臺。社群情況一般看軟體的最近一次提交是什麼時候,issue的數量以及回覆情況,更進一步可以看軟體的郵件列表內容。
產品做的再好,沒有文件,也沒人會用。詳細的產品文件主要包括但不限於軟體架構、使用者手冊、效能測試、常見問答等。其他方面包括但不限於合規性、法律、生態工具等內容,比如如果使用的開源軟體協議為GPL,按照協議規定,所有的二次開發都應該再次開源出來。
調研完產品後,我們對軟體應該有了個大概瞭解,此刻我們需要回到業務上來。產品的特性或功能能否滿足業務的需求,這才是決定我們選型的最重要原因。 一般的原則是,能夠滿足當前以及可預見的未來需求的軟體,才是最合適的,因為這樣的軟體既能滿足需求,又不至於太過複雜。
在特性或功能驗證階段,一般會進入到體力活環節,需要各種測試,比如基本功能測試、高可用測試、效能測試等。在測試的過程中,也儘可能的將測試指令碼化、自動化,因為這個過程可能會重複多次,沒人想一次次的手動來做。
在應用階段,如果軟體是基礎軟體比如資料庫之類,一般會先進行試點應用,因為基礎軟體的影響面比較大,而選擇試點應用,既可以規避大的風險,也能夠透過實踐積累起經驗,方便後續的全面升級。如果軟體只是當前業務使用,影響較小,那麼要有自信直接上,不要慫。
在經歷了軟體調研、功能特性驗證,到專案的正式使用之後,可以說現在的你也成為了軟體社群中的一員,那麼不要忘了分享你的使用經驗,幫助其他軟體使用者,畢竟一開始也是社群幫你解決了問題。
(四)線上問題的定位與處理
架構師需要有線上問題定位處理能力,應急救火的能力。如何提升救火的能力?一是問題定位能力,正確歸因問題。二是問題處理能力,復現-修復-測試-迴歸。三是持續學習積累,持續學習知識,實踐中積累知識。
三、優秀架構師還需要哪些管理技能
(一)專案管理的能力
很多公司希望透過專案的方式來做產品。我們是如何開始一個專案的?以資料中臺專案為例,基於公司實踐中遇到一些問題,提出了階段性的新目標,以及相應分析報告,比如投入產出比,風險係數等等,最終經過決策,才會開始這個專案。
專案管理包括範圍、時間、風險、人力、質量、成本、溝通、採購等領域。
專案範圍管理最重要的是確認專案產出物,即決定這個專案完成後,最終要做什麼產品,達成怎樣的目標,能夠實現哪些功能?
專案時間管理的核心在正確評估工作量。開始一個專案,需要有時間節點。對於IT行業來說,有一種說法是專案最長時間不能超過18個月(沒記錯的話,當初微軟的作業系統專案完成時間也是定的18個月,雖然最終也有延期)。我們來看一下專案工作量評估的幾種情況。第一種情況,能夠準確的評估出工作量。這種情況下,相應的專案對於公司來講可以說是輕車熟路,有足夠的專案資訊可供參考。
第二種情況,能夠大概評估出工作量。此種情況,多發生在公司擴充業務時。公司以前是做智慧交通的,現在接到了智慧醫療的專案,組織內沒有足夠的資訊可供參考。第三種情況,無法評估出工作量。比如原始創新型專案,沒有任何資訊可供參考。那麼,如何正確評估工作量?核心在於充分收集資訊。
在專案的實施過程中總會遇到一些問題,有些小問題可能會導致專案的延期,有些大問題甚至會影響整個專案的成功與否,這些都是專案風險。所以,專案風險如何應對?遏制風險、容忍風險、分擔風險、規避風險。遏制風險簡單來說就是兵來將擋水來土掩,遇見什麼問題解決什麼問題,其實對於大多數風險,我們都可以遏制。容忍風險就是容忍了,比如專案延期就延期吧,容忍它。分擔風險一般是透過外包或者其他形式,將組織內不熟悉的領域分擔給其他組織來做,將風險分擔出去。規避風險可以說是最高等級的風險處理方式了,即有所為有所不為,不做不就自然沒有風險了嘛。
關於專案溝通管理,上圖是管理溝通的過程模型,管理溝通的基本原則包括:準確性、完整性、及時性、非正式溝通。準確性表示要和準確的人溝通準確的事;完整性表示把事情說清楚完整。很多事情具有及時性,需要在有效的時間內溝通。
如何管理溝通的技巧?一是學會說,學會聽;二是書面溝通,能用一頁紙把事情說清楚最好;三是有效的會議組織,其中,會議分為專案情況評審會議、專案技術評審會議、專案問題解決會議等等;四是非正式溝通運用。
在日常工作中,開會是再尋常不過的活動了,我們重點講下會議組織的相關內容。組織者需要掌握會議溝通方法,在會前,是否真的需要開會?明確會議目的、議程、與會人員、地點,以郵件或微信的方式通知給各部門,準備會議材料。在會中,按時開始,再次說明會議目的、議程,指定一個人做會議記錄,掌握和控制會議,不要超時,總結。在會後,得出會議結果,傳達給每個人,執行與反饋。
如何彙報專案進度?專案彙報秉承著簡單直觀的原則,能用圖的不要用表,能用表的不要用文字。
(二)團隊管理的能力
我們為什麼要努力?有些人可能是生活所迫,有些人擁有遠大的目標,有些人是因為興趣愛好。成功的團隊管理可以滿足各利益方期望。團隊成員實踐、成長、收穫的期望,公司完成經營目標、獲取盈利的期望,團隊管理者成長、收穫的期望。個人、公司、團隊管理者的利益並不衝突,完全能夠實現共贏。
如何實現共贏?個人可以找到自己的興趣愛好,在工作中實現人生價值。管理者認識團隊在公司實現目標過程中的角色,幫助團隊成員,帶領團隊目標一致的前進。公司資訊決策透明化,給予員工安全感。
四、架構師的挑戰
架構師的挑戰主要有全域性視角、業務理解、保持謙虛、持續學習。你需要知道整個業務的全域性,包括資源、團隊定位。同時,要對自己的業務有非常深的理解,才能在有限的資源下,實現業務價值最大化。我們需要一直保持謙虛的心態,並且持續學習,今天的知識在明天不一定會生效。
五、總結
架構師是在有限資源下透過設計並實現軟體系統架構,來獲取業務的最大價值。優秀架構師除了自身專業技能外,還需要有專案管理、團隊管理的能力,能夠幫助你成功落地方案。
面對如此多的技術,我們需要抓住不變的思想,深入淺出,融會貫通。比解決問題更難的是定義問題,事情遠沒有你想得如此緊急,解決問題之前,我們需要知道要解決的問題是什麼。
掌握軟體選型的方法論,可以幫助你快速有效進行選型。持續學習,持續積累,能讓你在緊急情況下不慌不忙。我們要學會溝通,相信團隊的力量。賈伯斯告誡所有的年輕人:“Stay hungry,Stay Foolish”也就是,求知若飢,虛心若愚。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31545813/viewspace-2911506/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 阿里架構師Peter老師講述Java程式設計師→架構師所需要掌握的技能阿里架構Java程式設計師
- 程式設計師面試所需的軟技能程式設計師面試
- 軟體架構與架構師架構
- 軟體架構師需要具備的技能 - Abeysinghe架構
- 架構師技能圖譜架構
- 架構師之路:一個架構師需要掌握的知識技能架構
- 軟體測試所需要掌握的技能
- 架構師害怕程式設計師知道的十項技能架構程式設計師
- 前端架構師破局技能,NodeJS 落地 WebSocket 實踐前端架構NodeJSWeb
- 軟體架構師架構
- 架構師日記-聊聊開發必掌握的那些實踐技能架構
- 架構師日記—聊聊開發必掌握的那些實踐技能架構
- oracle rac 所需硬體、軟體詮釋Oracle
- Java架構師必備技能:docker使用大全Java架構Docker
- 開發者漲薪指南:提升軟、硬實力
- 軟體構架師之路
- 雲架構師:職責、技能以及如何成為一名雲架構師架構
- AI架構師:職責、技能以及如何稱為一名AI架構師?AI架構
- 軟體架構師的工作職責架構
- 微服務與架構師微服務架構
- 務實的軟體架構師是什麼樣?(tpierrain)架構AI
- 軟體架構與敏捷架構敏捷
- 走向架構師——1~3年java程式設計師面試必備的技能架構Java程式設計師面試
- 架構學習筆記系列四——架構師軟文架構筆記
- 架構師與程式設計師的區別架構程式設計師
- 程式設計師與架構師的區別程式設計師架構
- 軟體測試架構師的職責架構
- 架構的思想與指導原則——架構師的思維架構
- 架構實戰--軟體架構設計的過程架構
- 唯品會架構師是如何實現架構重構的架構
- 超融合架構hci之路坦力nutanix之硬體規格及軟體配置之一架構
- 阿里畢玄:程式設計師如何提升自己的硬實力阿里程式設計師
- TOGAF企業架構與軟體架構的對應圖架構
- 《程式設計師必讀之軟體架構》作者Simon Brown:架構師與程式設計師的區別(圖靈訪談)程式設計師架構圖靈
- 阿里大資料架構師必備技能,你“佩奇”了嘛?阿里大資料架構
- java和大資料架構師,各需要什麼技能?Java大資料架構
- 軟體架構師或解決方案架構師必讀的五本書 - javarevisited架構Java
- 10個所需的IT技能 助你職場成功