先來看看軟件架構的廣泛定義吧。程序員
一個程序和計算系統軟件體系結構是指系統的一個或多個結構。結構中包括軟件的構建,構建的外部可見屬性以及它們之間的相互關係。面試
體系結構並不是可運行軟件。確切的說,它是一種表達,使軟件工程師可以:數據庫
分析設計在知足規定需求方面的有效性。編程
在設計變動相對容易的階段,考慮體系結構可能的選擇方案。安全
下降與軟件構造相關聯的風險。架構
軟件開發有其生命週期,它應該是:併發
而軟件架構也有着其生命週期,它又是怎麼樣的呢?框架
爲何說一個軟件架構是很重要的呢?直接編程直接開發,多EASY?請看下面幾點:異步
軟件架構可以知足系統的品質模塊化
架構設計使受益人達成一致的目標
架構設計可以支持計劃編制過程
架構設計對系統開發的指導性
架構設計可以有效地管理複雜性
架構設計爲複用奠基了基礎
架構設計可以下降維護費用
架構設計可以支持衝突分析
這個問題,可能你們一直都在問,包括一些IT企業也在問,對於這個問題的回答,可能不只僅是一個簡單的語句或者是定義就能夠回答的出的,咱們來看下面的幾個形象的例子:
這個是什麼東東呢?樂高玩具,樂高玩具你們確定都玩過吧?
它便可以以一個完整的模型賣給你,你也能夠把它所有打碎了從新從一個模型自由的再去組裝成另外一個模型,由於每個樂高的模塊在橫向、堅向裏都有標準的接口,這就是咱們常說的高內聚、低耦合。
你們看看上面這幅圖是什麼?
一個是清代的八股文,一個是孔乙己。
還記得回字的四種寫法嗎?
那麼你專門就研究回字的四種寫法 ,但你有沒有想過我把回字折開來又能夠變成幾個字?是否好折?
爲何M1A2和阿帕奇直升機裏不用A8處理器,或者是最新的奔騰處理器啊?實用、通過檢驗的纔是最好的!
咱們談的是軟件架構,架構的最終體現是一個軟件,那麼什麼是成功的架構什麼是成功的軟件呢?
你們看左邊的這個圖,是美國的「阿利伯克級」宙斯盾驅逐艦,右邊的是印度模仿美國的宙斯盾本身設計和建造的」德里級」的「咖喱盾」驅逐艦。
兩艘戰艦一對比,怎麼樣?
一個是模塊化的設計,總體線條流暢,戰損時模塊能夠任意替換。
一個倒是拼拼湊湊,線路外露,甲板上佈滿了各類電子設備和天線,一旦戰損,極難維護
架構,架構,到底什麼是架構?我之前上大學時有一個70多歲的老教授,他上課每講20分鐘左右,須要2個同窗」架「着去上一次WC,咱們的架構師固然不是指這種」架構溼「。那麼咱們一直說的架構,到底它是一個什麼樣的東西呢? 怎麼樣又能夠作出一個完美的架構呢?
動做輕靈敏捷,靈活多變
它其實違背一切傳統拳法,所以能夠克敵制勝。
破劍式、破槍式、無招勝有招,它發源於傳統武術,又擴展了傳統的武術
有時一個看似簡單的架構每每倒是一件藝術珍品。
你們知道這幅畫嗎?他是挪威畫家蒙克的一幅做品叫」吶喊「,蒙克這我的是一個瘋子,這幅畫很簡單,就是隨手塗鴉通常,可是你們可知道這幅畫值多少錢嗎?2012年該畫在紐約蘇富比拍賣上以1.19億美圓被拍賣。
一個好的架構不該該受限於框架,受限於語言,受限於技術,受限於各類條條框框,它是一種意境。
固然,咱們這邊主要說的是JAVA,那麼做爲一名學習JAVA、J2EE的架構師來講,要具有一些什麼樣的技能才能達到架構師的水平呢?
上面這張圖,咱們這樣來看,它分爲3個部分:
頂部,是咱們須要掌握的一些技術領域的知識,它可使咱們應對通用領域如電商、企業OA、銀行保險金融等領域的一些解決方案和設計
中部,爲了達到頂部這些技術咱們須要瞭解的一些中間件、數據庫、開發框架這些知識,它是一根支柱
底部,底部呢?它是咱們的基礎,爲鋪設咱們通向中間或者更上層的一個基石,這也是爲何你們有時發覺個人博客和其它博客有不同的地方,不只僅有編程還有」中間「的這一層即數據庫、性能、安全、框架搭建這些東西混合在裏面的緣由,由於我不但願你們經過閱讀完了個人博客還只是停留在一個碼農、碼工、螺絲釘的這種水平上。
說了這麼多架構,咱們來講說架構師吧。
你們看到了沒有,架構師的第一職責就是關注: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有哪些呢?
你們必定必定要記住,架構師決不是像你們想像中的那樣,是所謂的皇冠上的明珠,架構師承擔的責任是至關的大的。
人類是如何進化的?
學習、使用工具、社會協做性、不斷的總結經驗。
若是中止了學習的步伐,那麼。。。。。。
你們注意,上面這個列表在學習時是有前後順序的,從上至下分別爲第一步,第二步,第三步。。。。。。不要以爲枯燥,你能夠去試試,真的,被折騰着和被快樂着。
成功的惟一方法即是,認可現實,超越現實,鼓起勇氣並善用它。
學會平靜的對待生活中的不完美之處,適應本身的情緒,瞭解如何讓它們天然宣泄出去
學習如何把不完美的地方轉換成咱們的優點,激發咱們的創造力
自我激勵,無論外部條件是否有激勵性,找到一種激發最佳狀態的情緒,學習如何在咱們的意識中製造一些波動來激勵咱們前進
此文獻給開春後工做的衆IT技術人員和那些將要或想要走上IT道路的朋友們,祝你們新年新事,工做和學習順利,最後我還將在2015年繼續個人博客寫做。
--吾以吾血薦中華之IT。