程序員,練就哪些技能才勝任架構師?

關注「 IT老兵哥 」,賦能程序人生!本系列前序文章索引:html

  1. 程序員爲何必需要懂架構?
  2. 架構究竟是什麼,你知道嗎?
  3. 架構都有哪些,我該怎麼選?
  4. 架構師都幹什麼,你知道嗎?

架構師,咱們程序員打怪升級的主要方向,它不像某些技能報個培訓班就能得到。勝任架構工做須要具有許多技能,既有硬技能還有軟技能。俗話說:一口吃不成胖子。從程序員到架構師也沒法一蹴而就,它是一個按部就班、穩步提高的進階過程,每一個階段都有每一個階段要掌握的技能,多項技能之間還存在前後順序。若是想盡快轉型升級至架構師,那你必須在平常工做中有意識地儲備這些技能,接下來老兵哥結合親身經從來分享一下。程序員

架構師硬技能

1. 硬技能

不像產品、管理等條線更加倚重通用技能,從技術條線轉產品或管理,入門相對容易一些。但從產品或管理很難轉型至架構,架構師必須從開發測試崗作起,在工做中不斷提高專業技能和積累實踐經驗,從一個模塊開始,到一個子系統,再到整個系統,最後到多個系統,這是一個按部就班提高硬技能的過程,也能夠當作構建架構師硬技能「點線面」。面試

1.1 點

老兵哥我剛入行時的崗位就是開發工程師,跟其餘幾個畢業生一塊兒被安排在自動化測試平臺項目組,整個系統由部門資深同事設計的,咱們分別負責開發其中某個子系統的幾個模塊。這個階段我主要關注函數、類和模塊這個粒度,爲了作好工做我要鑽研編程語言 C/C++,以及熟悉 Visual C++ MFC、Socket 等代碼庫的使用。每週咱們還會舉行代碼評審會議,邀請同事點評本身寫的代碼,那時候的本身年輕氣盛,無論收到正面或負面的評價都會極大地激勵本身。通過這個階段的歷練,個人編程技能得以較大的提高,也養成了較規範的編碼習慣,掌握瞭如何設計好一個函數、類和模塊。編程

這個項目先後作了兩年左右時間,後面半年還作了些系統推廣培訓相關的事情。隨後,咱們又啓動了採用腳本語言 Python 做爲自動化測試腳本的自動化測試腳本,在這個項目我負責預研 Python 腳本解釋引擎和開發測試代理子系統,這段項目經歷讓我躍升到子系統這個粒度。我須要考慮這個子系統在整個系統當中須要承擔什麼職責,以及跟其餘子系統或被測系統之間的交互機制。同時,我還要負責這個子系統設計,肯定它由哪些模塊構成、每一個模塊內部包含哪些類等。segmentfault

這個階段讓我具有了構建單個子系統的能力和信心,在後面的工做當中我還使用不一樣類型的編程語言構建過許許多多不一樣類型的子系統,但其實都是在強化構建單個點的能力,關聯技能樹包括:操做系統、編程語言、應用容器、開發框架、多線程等。瀏覽器

1.2 線

對於稍具規模的系統,它都免不了要劃分紅幾個子系統,子系統之間或者與外部系統之間就須要鏈接通訊,這至關於把兩個孤立的點鏈接起來,即連點成線。這個過程跟開發單個子系統所須要的技能有所不一樣,它須要網絡編程相關的知識技能。在老兵哥我剛參加工做的那些年,Web 應用尚未成爲主流的應用形態,瀏覽器/服務器(B/S)架構尚未興起,HTTP 協議還沒有被普遍使用,當時最流行的就是客戶端/服務器(C/S)架構,IP/TCP 纔是最主要的通訊協議,我就是在這個階段積累下網絡編程相關知識技能的。緩存

最先咱們要開發客戶端或服務器程序,就須要熟悉掌握 Socket 網絡編程,包括綁定監聽端口、接受鏈接請求、併發處理請求等,從無到有所有本身編寫,這些經驗對於我後來理解網絡通訊機制有很是大幫助。爲了知足子系統之間的交互需求,咱們要基於 IP/TCP 協議來定製專門的應用層協議,包括制定報文頭和報文體兩層結構,雖然比 HTTP、FTP、SMTP等協議要簡單,但這段經歷讓我對 HTTP 這類應用層協議的實現原理有了深入的理解。另外,咱們還要考慮報文內容過長時的分包組包、網絡發生異常時的丟包重發,以及報文內容的編解碼等。所以,有志於在技術線發展的程序員都有必要補上這塊技能。安全

在近十五年的技術從業生涯中,老兵哥我前先後後解決過無數現網問題,其中有許多複雜的問題都跟系統交互通訊有關,藉助各類網絡抓包分析工具抽絲剝繭,最後定位問題的根源都是沒有正確使用網絡協議,因此我很慶幸本身在過往的工做中有這段經歷。服務器

隨着互聯網的蓬勃發展,Web 應用成了最主要的應用形態,與此同時 HTTP 這種更人性化的網絡通訊協議成了最受歡迎的交互協議。從開發客戶端/服務器(C/S)應用轉到開發瀏覽器/服務器(B/S)應用的過程當中,老兵哥我專門花時間學習了 HTTP 協議,瞭解其運行原理和控制機制,尤爲是協議頭中每一個字段做用,包括請求方法、編碼格式、超時機制、緩存機制等。印象最深入的就是 Roy Thomas Fielding 博士發表了 REST 的論文《Architectural Styles and the Design of Network-based Software Architectures》,即《架構風格與基於網絡的軟件架構設計》,讓我對 HTTP 有了全新的認知,這些知識技能對於理解掌握雲計算時代的服務化架構很是有幫助。網絡

除了 IP/TCP、HTTP 這兩類協議以外,老兵哥我以爲還須要掌握消息隊列(Message Queue)相關的協議,這類型協議更適合構建事件驅動架構的系統,不只僅支持同步還支持異步。我曾經負責一個移動互聯網的系統,其中有個子系統負責維護各類手機終端型號和設備信息,合做夥伴須要從這個子系統及時地獲取最新信息,最初咱們用 HTTP 協議輪詢拉取的方式實現,但隨着合做夥伴數量和信息更新頻次的增長,這種信息同步機制就遭遇瓶頸了,後來咱們經過引入消息隊列中間件優雅地化解這個問題。

1.3 面

從點、線開始修煉,隨着連線愈來愈多,最終將會造成平面,即分佈式系統,這是咱們程序員通往架構師路上必然通過的站點。剛開始咱們僅僅利用互聯網來發布搜索信息,接着咱們的即時通訊和社交也搬到了網上,再後來購物差旅等事情也能夠經過互聯網來完成了,如今跟咱們衣食住行相關的全部事物都開始被互聯網化了,這至關於虛擬世界被構建的愈來愈龐大越複雜。原先咱們開發的軟件系統複雜度仍是有限的,它自己頂多被劃分紅幾個子系統,須要關聯交互的外部系統數量也很是有限。但隨着業務愈來愈豐富,單個系統的複雜度也急劇增加,與之關聯的外部系統也很是多,逐漸演變成一張縱橫交錯的網,也就是咱們所說的「面」。如何在這樣複雜的網絡當中維護好複雜度,以及確保系統依舊知足易用性、性能、可靠性、穩定性、安全性等質量屬性,這就須要程序員修煉分佈式系統相關的技能。

老兵哥我在從事移動互聯網相關係統研發的過程當中遇到了更高複雜的場景,當時咱們要構建一個蘋果應用商店相似的生態體系,咱們負責的系統自己由六七個子系統組成,它還須要跟許多上下游合做夥伴的系統對接交互。若是跟每一個外部系統的對接都採用各自不一樣的標準,隨着接入系統的數量愈來愈多,那對接相關的複雜度最終走向失控。另外,像應用訂閱購買等典型業務場景都須要多個系統協做完成,其中涉及到分佈式事務,怎樣保證數據一致就是很大的挑戰。按照常規邏輯,隨着系統的複雜度不斷提高,那麼系統出現問題宕機的機率就會提高,但對於用戶來講,他們依舊但願系統能夠提供 7*24 小時的服務,不要出現服務超時或失效等異常狀況,這就是「面」帶來的挑戰。

從那個階段開始,我有了學習和實踐分佈式架構的機會。最先就是面向服務架構 SOA,即 Web Service、SOAP 等技術標準,站在如今回看那時候,這套技術棧是偏重偏繁瑣的,但當時分佈式系統對於整個業界都是全新的挑戰,這套解決方案是由 Compaq、HP、IBM、Lotus、Microsoft、SAP 這些傳統軟件巨頭們提出的。它經過 Web 服務描述語言 WSDL 來標準化分佈式系統中的每一個服務,再經過簡單對象訪問協議 SOAP 來規範服務之間的交互,從某個角度來看,越大規模的協做必須依賴統一的標準和規範。但傳統軟件巨頭不多有在互聯網第一線實踐的經驗,不像 BAT 他們對互聯網分佈式系統的挑戰有那麼真切的感覺,阿里巴巴就在實踐中孵化出了比 Web Service、SOAP 更加輕量化的 Dubbo,它也是依託面向服務架構 SOA 這套理論,只是是線上更加接地氣。

這段工做經歷讓我對分佈式架構有了體系化的認知,雖然近些年分佈式技術從面向服務架構 SOA 演進至微服務架構 MicroService,技術中間件從 Dubbo 更替爲 Spring Cloud,但我依然能夠套用這套知識體系去理解新技術。

2. 軟技能

軟硬技能究竟是怎麼區分呢?老兵哥我以爲一我的靠哪門手藝吃飯,那麼這門手藝相關的技能就是硬技能,而輔助硬技能產生更大價值的技能就是軟技能,這跟「T」字型人才的要求相似,既要求有足夠精湛拔尖的主攻技藝,也要有各式各樣的綜合技能。硬技能很重要,這點我相信沒有人會反對,但也有很多人意識不到軟技能的重要性。對技術人來講,從開發到架構,從架構到 CTO,或者從開發轉產品或管理,無論是晉升仍是轉型,咱們都是在增強硬技能的同時提高軟技能的比重,甚至原先的硬技能變成了軟技能,而原先輔助做用的軟技能卻成了硬技能。接下來,我將結合我的從開發轉型架構的經從來談一談哪些軟技能很重要:

  • 溝通:相對於開發工程師,架構師的工做職責決定了他須要對接更多上下游客戶,對溝通技能的要求就要高不少,畢竟不一樣角色的思惟模式和立場角度各不相同,架構師必須懂得采用不一樣方式跟這些角色溝通互動,換位思考,從而挖掘到真實的需求,而後利用專業技能平衡好各方需求,最終輸出各方都滿意的架構方案。
  • 寫做:作開發崗時,個人主要輸出就是代碼。雖然偶爾也要寫一些技術文檔,但一般是供本身看的技術文檔或者湊數用的產品操做使用說明。在轉型作架構以後,我寫代碼的比重下降了,爲了讓各個干係人理解承認個人架構方案,除了口頭說明以外,最主要就是靠技術寫做,寫給他人看的文檔跟純粹記錄的徹底不一樣。
  • 設計:無論是口頭溝通仍是文檔傳播,語文或文字功底再好,也抵不過搭配上設計圖例,圖例中包含的信息是多個維度的,也更加直觀易懂。一般,我習慣在寫技術文檔以前先把設計圖畫出來,畫設計圖的過程就是理順思路的過程,在此基礎上再來組織文字或語言變得更加簡單容易,至關因而看圖說話了。
  • 演講:權力和非職權影響力,架構師開展工做主要依賴於非職權影響力。架構師跟各個干係人之間不存在上下級關係,要讓團隊及合做夥伴承認並執行你的架構方案,你必需要靠本身的專業能力讓對方信服。在以往學校教育或成長過程當中,我自己是缺少這方面的積累的,爲了成功轉型架構師我刻意訓練提高本身這方面的能力。

總結起來講,爲了在架構師這個新平臺上作好工做,咱們須要提高本身輸入、設計和輸出等方面的能力。以往咱們從外界獲取信息主要靠閱讀文檔,如今還要增強立體多方位的溝通。在輸出方面,以往咱們的輸出形式太過單一,如今咱們要掌握文字、演講等多媒體方式。固然,最核心的仍是架構設計的專業技能,這個輸入輸出的中心。

3. 知識體系

今天先分享到這裏,老兵哥後續還會分享程序員到架構師的進階指南等,包括每一個階段須要掌握的軟硬技能圖譜(如題圖所示),文字提綱能夠參考文章:從程序員到架構師,有捷徑嗎?若是你對這個主題感興趣,千萬要記得先關注哦!堅持原創不易,若是你以爲有價值,麻煩動動手指點下文 「 👍 」按鈕,讓更多小夥伴能夠看到,老兵哥會更有動力堅持分享的。另外,我後續還會分享職業規劃、應聘面試、技能提高、影響力打造等經驗,歡迎 關注 本專欄或歪信公主號 「 IT老兵哥 」!

IT老兵哥

軟技能-熱門文章:(首發公衆號)

  • 如何在打造影響力的路上「碼」不停?(
  • 2020 來了,你的 2019 曬好封存了嗎?(
  • 「花式」裁人套路深,你知道嗎?
  • 遭遇裁人,如何渡過心理危機?
  • 程序員「求包養」攻略揭祕

硬技能-熱門文章:

相關文章
相關標籤/搜索