1. 程式人生 > >[轉]談什麼是架構以及怎麼成為一個架構師

[轉]談什麼是架構以及怎麼成為一個架構師

【轉】
新年新事,來點輕鬆的話題。我們調劑一下後再繼續講CAS SSO單點登入吧因為後面的內容全部和程式碼有關,大家會覺得枯燥。所以今天我們先來點”番外篇“,講講什麼是架構師,什麼是架構這個永恆的話題吧。此篇源出自我在公司內部寫的一個PPT,它是用於在公司內部向廣大技術人員做普及用的一個資料,而CSDN這邊的編輯不支援圖文混排的效果,因此一些章節我就直接擷取自我的PPT裡的內容了,這樣可能對大家在閱讀上會顯得更加生動和活潑一些吧。

架構的定義

先來看看軟體架構的普遍定義吧。

  1. 一個程式和計算系統軟體體系結構是指系統的一個或多個結構。結構中包括軟體的構建,構建的外部可見屬性以及它們之間的相互關係。
  2. 體系結構並非可執行軟體。確切的說,它是一種表達,使軟體工程師能夠:
  3. 分析設計在滿足規定需求方面的有效性。
  4. 在設計變更相對容易的階段,考慮體系結構可能的選擇方案。
  5. 降低與軟體構造相關聯的風險。

軟體架構的生命週期

軟體開發有其生命週期,它應該是:
這裡寫圖片描述
而軟體架構也有著其生命週期,它又是怎麼樣的呢?
這裡寫圖片描述

軟體架構的重要性

為什麼說一個軟體架構是很重要的呢?直接程式設計直接開發,多EASY?請看下面幾點:

  1. 軟體架構能夠滿足系統的品質
  2. 架構設計使受益人達成一致的目標
  3. 架構設計能夠支援計劃編制過程
  4. 架構設計對系統開發的指導性
  5. 架構設計能夠有效地管理複雜性
  6. 架構設計為複用奠定了基礎
  7. 架構設計能夠降低維護費用
  8. 架構設計能夠支援衝突分析

什麼是好的軟體架構

這個問題,可能大家一直都在問,包括一些IT企業也在問,對於這個問題的回答,可能不僅僅是一個簡單的語句或者是定義就可以回答的出的,我們來看下面的幾個形象的例子:
這裡寫圖片描述

這個是什麼東東呢?樂高玩具,樂高玩具大家肯定都玩過吧?

它即可以以一個完整的模型賣給你,你也可以把它全部打碎了重新從一個模型自由的再去組裝成另一個模型,因為每一個樂高的模組在橫向、堅向裡都有標準的介面,這就是我們常說的高內聚、低耦合。

什麼又是糟糕的架構
這裡寫圖片描述

大家看看上面這幅圖是什麼?

一個是清代的八股文,一個是孔乙己。

還記得回字的四種寫法嗎?

那麼你專門就研究回字的四種寫法 ,但你有沒有想過我把回字折開來又可以變成幾個字?是否好折?

要知道最時髦的並不一定是最好的
這裡寫圖片描述

為什麼M1A2和阿帕奇直升機裡不用A8處理器,或者是最新的奔騰處理器啊?實用、經過檢驗的才是最好的!

成功的軟體又是怎麼樣的呢

我們談的是軟體架構,架構的最終體現是一個軟體,那麼什麼是成功的架構? 什麼是成功的軟體呢?

這裡寫圖片描述

大家看左邊的這個圖,是美國的“阿利伯克級”宙斯盾驅逐艦,右邊的是印度模仿美國的宙斯盾自己設計和建造的”德里級”的“咖哩盾”驅逐艦。

兩艘戰艦一對比,怎麼樣?

  • 一個是模組化的設計,整體線條流暢,戰損時模組可以任意替換。
  • 一個卻是拼拼湊湊,線路外露,甲板上佈滿了各種電子裝置和天線,一旦戰損,極難維護

架構之美

架構,架構,到底什麼是架構?我以前上大學時有一個70多歲的老教授,他上課每講20分鐘左右,需要2個同學”架“著去上一次WC,我們的架構師當然不是指這種”架構溼“。那麼我們一直說的架構,到底它是一個什麼樣的東西呢? 怎麼樣又可以做出一個完美的架構呢?

架構就像是迷蹤拳

動作輕靈敏捷,靈活多變

它其實違背一切傳統拳法,因此可以克敵制勝。
這裡寫圖片描述

架構就像是獨孤九劍

破劍式、破槍式、無招勝有招,它發源於傳統武術,又擴充套件了傳統的武術

這裡寫圖片描述

架構就像是一件藝術珍品

有時一個看似簡單的架構往往卻是一件藝術珍品。

大家知道這幅畫嗎?他是挪威畫家蒙克的一幅作品叫”吶喊“,蒙克這個人是一個瘋子,這幅畫很簡單,就是隨手塗鴉一般,但是大家可知道這幅畫值多少錢嗎?2012年該畫在紐約蘇富比拍賣上以1.19億美元被拍賣。

架構的意境

一個好的架構不應該受限於框架,受限於語言,受限於技術,受限於各種條條框框,它是一種意境。
這裡寫圖片描述

架構時需要考慮的幾個基本因素
這裡寫圖片描述

JAVA通用領域的相關技術

當然,我們這邊主要說的是JAVA,那麼作為一名學習JAVA、J2EE的架構師來說,要具備一些什麼樣的技能才能達到架構師的水平呢?
這裡寫圖片描述

上面這張圖,我們這樣來看,它分為3個部分:

  1. 頂部,是我們需要掌握的一些技術領域的知識,它可以使我們應對通用領域如電商、企業OA、銀行保險金融等領域的一些解決方案和設計
  2. 中部,為了達到頂部這些技術我們需要了解的一些中介軟體、資料庫、開發框架這些知識,它是一根支柱
  3. 底部,底部呢?它是我們的基礎,為鋪設我們通向中間或者更上層的一個基石,這也是為什麼大家有時發覺我的部落格和其它部落格有不一樣的地方,不僅僅有程式設計還有”中間“的這一層即資料庫、效能、安全、框架搭建這些東西混合在裡面的原因,因為我不希望大家通過閱讀完了我的部落格還只是停留在一個碼農、碼工、螺絲釘的這種水平上。

架構師的職能

說了這麼多架構,我們來說說架構師吧。
這裡寫圖片描述

大家看到了沒有,架構師的第一職責就是關注:non-functional requirements,即非功能性需求

很多人對功能性需求和非功能性需求的界線劃分還是不清楚,我這邊舉2個例子說明一下吧:

功能性需求

頁面查詢,這個查詢是關聯哪些哪些資料庫表,因為我的業務是有這樣這樣的需求,在介面A裡點了一個按鈕,然後彈出視窗B,在視窗B裡要顯示什麼樣的資料,最後介面A裡點完後,當我開啟介面B時哪塊資料已經隨之發生了更改。

非功能性需求

我們的系統查詢速度小於2S,是否考慮使用非同步查詢、使用隊佇列機制,系統要求可以容納1000個併發,這個系統要可以做成外掛式的,要可以橫向擴充套件,要符合XXX協議,這個Webservice要做成SOAP HEAD內帶有BASIC認證,還是做成符合NTLM的認證的,還是使用令牌環認證的?這個下拉框要做成即可輸入又可以下拉的,這塊認證要訪問LDAP?

很多以業務為主的專案型公司認為架構師就是trouble shooting(即排錯、查錯的意思,就是有錯誤、出問題了再找架構師),把架構師當成了fireman(救火員),可是你不自己想想為什麼出了問題架構師過來2秒、2分鐘或者1天半可以解決你們1個月幾十人天天到零晨也解決不了的問題呢?嗯?

解決了說這是人家應該的,解決不了,說人家架構師不合格呢?是不是我們應該從這個軟體最早的框架上、架構上去發現一下問題呢?

架構師啊,這不是一個trouble shooting的問題啊。

在節前我也進行了一些面試,出於純技術角度來說,即走架構師,TECH LEADER這樣的路線的侯選人。

我還是發覺了不少的問題這也是中國的一個通病:即我們的程式設計師,很多時候不是在做程式,而更多時候是在做業務邏輯,成了一個某一領域的業務人員了。

當然,我們的程式設計師在其職業生涯的前3年、4年都是做某一塊領域的程式碼的,這個是沒有問題的,但是請一定一定記住,我們是編碼,是IT,是程式設計師,不是“業務人員”!!!

什麼是IT?什麼是程式設計師?什麼是Tech Leader?什麼是架構師?

這個問題大家有必要好好的去問一下自己,去好好的想一下,架構師的要求是什麼?

我這邊隨便說一些東西:相信對一些要走技術道路的同學們是有幫助的:

TCP/IP協議,加密解密,計算機原理(增補反碼),JPG碼,MPEG2-3協議,邏輯電子電路,計算機編譯器原理(堆、棧、佇列),這些東西你平時工作時一直用到嗎?這些是你一直關注的底層嗎?

如果你是要走技術路線,一定一定請記得“資料庫+ASP/JSP”不是技術,它只比表單製作,報表製作人員稍微強了那麼一點點。

請一定記住,技術路線關注的是非功能性需求,非功能性需求啊,就是一種一通百通的東西,有了這塊底蘊,任何需求和你說清了,對你來說是沒有任何“難度”的,或者你再去學,是可以舉一反三的啊。

最近一直面試一些侯選人,做架構師的,在此過程中我對此深有感受,找一個程式設計師開發不難,招一個架構師,難。。。唉,我覺得大家有必要要考慮一下,如果我走技術路線,我缺什麼,我怎麼補,還要關注些什麼?

科技是第一生產力,管理方法論中的所謂的六SIGMA即六西格瑪的第一條就是“技術人材是當下企業的第一生產力”,大家看看能夠發財的是哪些公司?阿里,淘寶,支付寶,GOOGLE, 騰迅,網際網路,高科技等等等一些企業,他們靠的不是業務邏輯,而是真正的技術,這足以說明問題了,所以大家如果要走技術道路,請多關注一下更細節,更底層的東西吧。

這也是為什麼我在之前的博文中所擅述的那些東西的原因,可見企業IT專案開發之七宗罪。

  • 第一宗罪:重業務不重技術
  • 第二宗罪:程式設計開發人員淪為業務開發人員、淪為碼農
  • 第三宗罪:IT市場淪為自由市場、小菜場一樣的叫買
  • 第四重罪:技術無用論的誕生
  • 第五宗罪:閉門造車,與實際脫節,完全拋棄業
  • 第六宗罪:消極怠工 第七宗罪:不思進取

架構師的分類

一般會把架構師分為:

業務架構師即BA
系統架構師SA
其實從嚴格意義上業說架構師是可以分成三類的:
這裡寫圖片描述

一般就是把系統架構師和應用架構師合成一類。這個從本質上來講倒沒有什麼太大的區別,不傷大雅。

架構師會做什麼

一個架構師在一個團隊中或者說在一個企業中它具體要做哪些日常工作呢?
這裡寫圖片描述

架構師並不是萬能的

架構師很牛B,可是架構師也是人,他不是超人。
這裡寫圖片描述

架構師需要掌握的軟技巧

技術,是架構師的Hard Skill,那麼架構師的Soft Skill有哪些呢?
這裡寫圖片描述

架構師不是皇冠上的明珠

大家一定一定要記住,架構師決不是像大家想像中的那樣,是所謂的皇冠上的明珠,架構師承擔的責任是相當的大的。
這裡寫圖片描述

如何成為架構師

人類是如何進化的?

學習、使用工具、社會協作性、不斷的總結經驗。
這裡寫圖片描述

架構師也會退化到比一般的程式設計師都不如
如果停止了學習的步伐,那麼。。。。。。疑問
這裡寫圖片描述

談架構師的自我修養

學習之道
這裡寫圖片描述

需要掌握的基本功中的基本功
這裡寫圖片描述

大家注意,上面這個列表在學習時是有先後順序的,從上至下分別為第一步,第二步,第三步。。。。。。不要覺得枯燥,你可以去試試,真的,被折騰著和被快樂著。

Bad artist copy good artist steal
這裡寫圖片描述

放正你的心態
這裡寫圖片描述

不斷的需要自我激勵

成功的唯一方法便是,承認現實,超越現實,鼓起勇氣並善用它。

  1. 學會平靜的對待生活中的不完美之處,適應自己的情緒,瞭解如何讓它們自然宣洩出去
  2. 學習如何把不完美的地方轉換成我們的優勢,激發我們的創造力
  3. 自我激勵,不管外部條件是否有激勵性,找到一種激發最佳狀態的情緒,學習如何在我們的意識中製造一些波動來激勵我們前進.

(結束)