架構師是近幾年來在國內外迅速成長並發展良好的一個職業,它對系統開發和資訊化建設的重要性及給IT業所帶來的影響是不言而喻的。在我國,雖然系統架構師的職業在工作內容、工作職責以及工作邊界等方面還存在一定的模糊性和不確定性,但它確實是時代發展的需要,並正在實踐中不斷完善和成熟。
下面和大家聊一聊架構師的幾個特點
架構師,聽起來是如此神祕的一個稱號。尤其是在開發領域剛入門不久的菜鳥級程式設計師眼中,架構師都是高手,都是牛人,都是如此高高在上的存在。
不過,在搞了四、五年程式設計之後,程式設計師們往往早已失去了當年對這些“高階”職位的神祕感,甚至會對自己所在專案的架構師抱怨不已,背後裡稱他們是一群水王。所以有江南白衣曾撰文述說:“國內的架構師到了三十歲以後很多就往理論上跑,而國外的架構師在往上發展的同時保持下面的程式設計體驗,所以國內多水王,而國外則多大師。”
這就是我們今天這篇文章的論題:一個優秀的軟體架構師,首先一定是一個出色的程式設計師。
這句話按照Fred George的話來說,那就是“不程式設計的架構師的職業生涯是短暫的”。他說這句話的背景主要是針對有些架構師的設計與實現有斷層的問題而言的,因為如果架構師不去實踐,只是想當然的認為“沒問題,這個想法能實現”,那麼對於專案的落實而言是個很大的隱患。[支付寶架構師馮大輝]也表示過,架構師是一個比較“虛”的崗位,主要的問題都在“落地”的過程中。
而一個架構師確認一個想法究竟能不能落地的最直接的方法,就是自己編寫程式碼,嘗試“實現一個系統最難實現的一部分”(Fred George)。看看Fred,他自己就是最好的示範:年紀一大把了,仍然每天都在編寫程式碼。事實上,我們可以列舉出一個長長的頂級架構師的列表,你會發現他們沒有一個不是頂級的程式設計師。
我們可以列舉出一個長長的頂級架構師的列表,你會發現他們沒有一個不是頂級的程式設計師
不過這在邏輯上或許沒有多少說服力,因為似乎這並不能證明一位資深架構師憑自己的經驗感覺不能夠知道一個想法能不能落實。如果你覺得上面這些只是某些西方老頭兒對程式設計的古怪癖好,那麼不妨看看eBay的架構師[Randy Shoup先生]是如何總結架構師在專案中的職責的:
l 具備豐富的一線大中型開發專案的整體規劃、方案設計及技術隊伍管理經驗。
l 具備軟體行業工作經驗,熟悉業務領域的技術應用和發展。
l 具有專案管理理論基礎,並在應用系統開發平臺和專案管理上有實踐經驗。
l 對相關的技術標準有深刻的認識,對軟體工程標準規範有良好的把握。 具備C/S或B/S體系結構或特定領域軟體產品開發及架構和設計的經驗。
l 具有物件導向分析(Object-Oriented Analysis, OOA)、設計(OOD)、開發(OOP)能力,精通UML和XML等,熟練使用Rational Rose、PowerDesigner等CASE工具進行設計開發。
l 對相關程式設計技術及整個解決方案有深刻的理解及熟練的應用,並且精通架構和設計模式,並在此基礎上設計產品框架。
l 精通大型資料庫如Oracle、Sql Server、MySQL等的開發。l 對計算機系統、網路和安全、應用系統架構等有全面的認識。
l 良好的團隊意識和寫作精神,有較強的內外溝通能力。
在這個過程中,一個架構師至少有一半以上的工作是需要與開發團隊一起進行的。按照Randy的描述,這是“一個架構師不能將實施細節拋之腦後”的體現。而且與開發團隊一起工作,命令式的領導方式並不被推崇,一個架構師必須通過自己的個人影響力來對開發團隊進行指導工作。而什麼是影響力?說的直白一些,就是通過自己寫程式碼以及和其他成員一起寫程式碼,來指導團隊成員實現每個架構細節的思路。
只要稍微思考一下,就會明白此舉的重要性。如果一個架構師靠命令管理開發團隊,告訴他們“要實現這個模組”,“要實現那個功能”,而團隊也嘗試照辦。可是或許是架構師的要求太高了,或許是團隊的開發實力不夠,團隊成員便會向架構師求助:您看這個我們不知道如何實現,您能否指導一下?架構師可能知道怎麼處理,也可能沒有仔細思考過這個問題,但又覺得自己做大事者不拘泥於小節也,於是一皺眉頭扔下一句:這是你們的事,你們自己解決!
然後就是矛盾的開始了。架構師只覺得團隊技術不夠,而團隊則對架構師愈發不滿。專案黃了不說,開發團隊中也會傳出各種說法,比如說“此君其實是個一行程式碼也不會寫的大忽悠!”
做為系統架構師,必須成為所在開發團隊的技術路線引導者;具有很強的系統思維的能力;需要從大量互相沖突的系統方法和工具中區分出哪些是有效的,哪些是無效的。架構師應當是一個成熟的、豐富的、有經驗的、有良好教育的、學習快捷、善溝通和決策能力強的人。豐富是指他必須具有業務領域方面的工作知識,知識來源於經驗或者教育。他必須廣泛瞭解各種技術並精通一種特定技術,至少了解計算機通用技術以便確定哪種技術最優,或組織團隊開展技術評估。優秀的架構師能考慮並評估所有可能用來解決問題的總體技術方案。需要良好的書面和口頭溝通技巧,一般通過視覺化模型和小組討論來溝通指導團隊確保開發人員按照架構建造系統。
因此,系統架構師知識維度可以總結為“多層次+多方面”。所謂多層次,意味著系統架構師必須在體系結構、計算機軟硬體與網路基礎知識、資訊化基礎知識、資訊保安與可靠性基礎知識等基本功的層面上受過良好的教育和快捷的學習能力;還須在系統架構設計方法、設計模式、設計流程以及各種模型等方面有豐富的經驗,廣泛瞭解各種構件產品和技術並精通一種特定領域的架構設計;進一步,還須在系統架構設計實踐層面,有自己的認識和理解,同時具有很強的表述能力;所謂多方面,意味著系統架構師在每個知識層面上必須具有即使、管理、心理和藝術等多方面的知識和能力。這和系統架構師的多角色特點是相關的。
在此我向大家推薦一個架構學習交流群。交流學習群號: 744642380, 裡面會分享一些資深架構師錄製的視訊錄影:有Spring,MyBatis,Netty原始碼分析,高併發、高效能、分散式、微服務架構的原理,JVM效能優化、分散式架構等這些成為架構師必備的知識體系。還能領取免費的學習資源,目前受益良
工程化專題
(團隊大於3個人之後,你需要去考慮團隊合作,科學管理)
原始碼分析專題
(好的程式設計師,一行程式碼一個設計就能看出來,原始碼分析帶你品味程式碼,感受架構)
3.高效能及分散式專題
(跟上技術節奏,擴寬技術視野,程式設計師要往上提升,要有自己的技術工具箱和技術認知。)
4.技術架構專題
(真實案例分享,帶你領略大型專案風采)
5.效能調優
(追求高效、科學調優,不靠碰運氣)
在此我向大家推薦一個架構學習交流群。交流學習群號: 744642380, 裡面會分享一些資深架構師錄製的視訊錄影:有Spring,MyBatis,Netty原始碼分析,高併發、高效能、分散式、微服務架構的原理,JVM效能優化、分散式架構等這些成為架構師必備的知識體系。還能領取免費的學習資源,目前受益良