不管是在公司內部,仍是在面試過程當中,常常看到不少開發人員,說想成長爲架構師,可是實際上卻像一支無頭蒼蠅同樣學習、成長。因此今天我就來簡單總結一下,開發人員要成長爲一個架構師,都應該學習哪一方面的知識。也就是:架構師的能力模型。html
(PS:本文純屬我的看法,並不必定徹底正確。對於此類話題,每一個人可能都有不一樣的見解。歡迎你們拍磚。)前端
開發人員職業發展方向面試
在說明架構師能力模型前,我得先說明開發人員在職場中的職業發展方向圖。算法
開發者應該根據本身的性格、愛好來選擇本身的職業方向。對於性格外向、願意多與人交流、溝通能力較好的同窗,能夠考慮向管理方向發展。對於熱愛技術、喜歡鑽研、性格偏內向的同窗,則更適合往技術方向發展。後端
兩個方向並無好壞之分,只是術業有專攻而已。兩個方向也不是徹底獨立的,對於技術總監、架構師及其以上的崗位,每每也須要較強的溝通能力,以及必定的管理能力。設計模式
CTO 是不少開發人員理想中的最終職業方向。可是對於不一樣的公司而言,對 CTO 要求不盡不一樣(能夠看看 2016年炒得比較火的某 CTO 離職事件)。因此 CTO 也會由不一樣的崗位成長而來。可是,並不意味着每一個人都要以 CTO 爲本身的職業目標。圖中黑體的崗位,均可以做爲開發人員的職業方向。架構
對於尚未職業方向的的開發人員來講,選擇好一個奮鬥的方向,很是關鍵。方向對了,就不怕路遠!方向不清晰,則會作不少徒勞無功的事。關於更多關於開發者如何對本身的職業進行規劃,請看知乎:《開發人員如何規劃本身的職業生涯?》。其中有一點很是關鍵:遵從心裏的召喚!框架
架構師能力模型學習
網上已經有前輩在 2007 年時,已經總結了他對架構師的能力模型的理解。寫得很是詳細,見:《架構師的能力模型(圖)》、《能力要成體系》、《舊文重發:作人、作事,作架構師——架構師能力模型解析》。職業規劃
我的以爲,上文中的能力模型有些過於具體,不方便讀者按照該模型進行學習。同時,也缺乏一些我認爲必需的元素。
我在面試架構師或者挑選架構師的苗子時,每每看得很重要的一點是此人對技術的熱情程度、學習能力。若是他在面試過程當中說「我之後會轉管理」,那我基本會認爲此人不適合。由於不熱愛,因此難作好。引用知乎某牛的觀點:「對新技術發自心裏的喜好和好奇,對本身產品和代碼的尊重與自豪,是技術人員從優秀走向傑出的關鍵因素。」
這些因素爲何會成爲架構師能力模型中的關鍵因素?
下面我來補充一下我對架構師的能力模型的理解。能力模型分爲兩個層次。
通用能力層
可能讀這一節,讀者會以爲有些偏題、有些抽象,可是本層中的能力其實才是最重要的能力。這些能力要求,其實在任何一行、任何一崗都是很是重要、且適用的,這固然也包括架構師職業。
可能比較抽象,我對本層能力模型中的各個能力點作一些簡單的詮釋:
專業能力層
通用能力層之上,就是架構師能力模型中第二個層次:專業能力層。這一層的能力越精通,說明越能勝任架構師。
基礎能力層:基礎能力層的特色是很是簡單,可是卻很是重要。
入門級的打字、輸入法、快捷鍵等能力,其實在 IT 盛行的今天,不該該算是一個專業技能,而更是一個通用技能。想象一下,一我的,特別是開發人員,這一生要打多少字、多少漢字?若是鍛鍊了打字、輸入法後,會爲你節省多少時間(提高 30% 效率,意味着每10年,你比別人多出3年的時間)?可是又有幾個開發人員專門去練過打字,練過五筆呢?練武之人,應該先練好馬步!
開發語言:道理同輸入法。開發者只能經過開發語言來跟電腦進行溝通,因此對語言中每個語法的精通、高效運用,都能提升你寫出來的程序的素質。
開發框架:爲何要學?要學到什麼程度?見我09年爲本身寫的《框架學習計劃》。
設計能力層:
開發者每每會花大量的時間在一些具體的技術上,例如基礎能力層中的開發框架。學了一個框架,又學另外一個框架;學了一門語言,又學另外一門語言;學了前端開發,又學後端開發。其實,這都只是在第一個層次上進行學習,兜圈子。想要成爲架構師,還得先成爲設計師,提高本身的微觀、中觀設計能力。
我面試過不少的高級開發者、架構師,可是每每只是經驗豐富、框架用得較多,設計能力卻很是薄弱!
算法對程序設計師來說很是重要,影響到設計師編寫的代碼的微觀結構。不過,因爲其處於微觀層面,如今大多數語言框架都已經提供了大部分基礎算法的封裝,因此對更高級的架構師而言,經常再也不須要關心具體的算法。
UML、面向對象是很是重要的兩個分析、設計能力。特別是面向對象,當前主流的高級語言都是面向對象的,因此能夠說是「設計師」的必備技能。
設計模式:這裏我想說的不是隻設計模式的重要性,而是「模式」的重要性。在《哲》的抽象層次章節中,我指出了模式是在方法層內、實踐層之上,是通過經驗總結出的可複用的方法,很是重要!在《學習過程反思》中,指出了總結對於學習的重要性,其實,總結出來的東西,也都是可複用的模式!對後續的實踐起到很好的指導做用。因此,設計模式對設計來講,很重要!
架構能力層:
架構設計方法:如何進行架構設計?架構設計的方法有哪些?我很是驚訝地發現,95%面試架構師的人,都沒有系統地學習架構設計的方法論……是否是你們覺得架構師都是靠忽悠?仍是說只要會搭幾個基礎的程序架子就算得上架構師了?汗……
架構模式:可複用的架構的模式有哪些?
對於架構師而言,要求會高許多。專業能力除了純技術能力,軟件開發過程也是很重要的一個內容(瀑布、RUP、敏捷等)。軟件的架構每每與開發的過程是相關的。不少架構甚至是伴隨着開發過程而演進的。
業務理解能力,也是架構師的要求之一。更好更快更全面地理解業務,才能設計出匹配的架構。
其實,想成爲架構師的同窗,能夠嘗試考一下國家軟考的架構師。經過過程當中的學習,能夠系統地學習架構師相關的不少知識。
結語
回頭想一想,其實在我我的寫程序之初,腦子裏面就有簡化版本的這個能力模型架構了。這使得我在學習專業知識的時候,很快地學習了幾個層次的相關內容。並在後來的時間裏,不斷對這些能力進行深化、鞏固,少走了一些彎路。
上述能力模型中,我沒法列全全部的技術分類。可是我列出了我認爲比較重要的技術。同時,一些新、老技術,你均可以把它們歸類到這三個層次中。這樣,在能力分層以後,你們就能夠按照這個圖來進行規劃本身的學習了。圖中的每個點,都須要進行學習,規劃到你的學習計劃當中去。當你真正學會這些內容後,恭喜你,你已經成長爲一個很是優秀的架構師了。
(注意,我說的是「學會」。因此你得先好好總結一下本身的學習!看完本文,讀者要是能總結一下本身的學習方法,那就算我熬夜到三點寫的這篇文章沒有白費…… )