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