架構師之路/系統分析員、系統架構師、項目經理的區別/ 軟件架構師之路

架構師(Architecture)是目前很多軟件企業最急需的人才,也是一個軟件企業中薪水最高的技術人才。換句話說,架構師是企業的人力資本,與人力資源相比其能夠通過架構、創新使企業獲得新的產品、新的市場和新的技術體系。那麼什麼是架構師、架構師的作用、如何定位一個架構師和如何成爲一個架構師呢?這是許多企業、許多程序員朋友希望知道的或希望參與討論的話題內容。

所謂架構師通俗的說就是設計師、畫圖員、結構設計者,這些定義範疇主要用在建築學上很容易理解。小時候到河中玩耍,經常乾的事就是造橋,步驟如下:1、在沙灘上畫圖;2、選擇形狀好看、大小適合的石頭;3、搭建拱橋。其中我們挑出來畫圖的那位光PP小孩就是傳說中的“架構師”了。

在軟件工程中,架構師的作用在於三方面:1、行業應用架構,行業架構師往往是行業專家,瞭解行業應用需求,其架構行爲主要是將需求進行合理分析佈局到應用模型中去,偏向於應用功能佈局;2、應用系統技術體系架構,技術架構師往往是技術高手中的高手,掌握各類技術體系結構、掌握應用設計模式,其架構行爲考慮軟件系統的高效性、複用性、安全性、可維護性、靈活性、跨平臺性等;3、規範架構師是通過多年磨礪或常年苦思頓悟後把某一類架構抽象成一套架構規範,當然也有專門研究規範而培養的規範架構師。他們的產物往往也分爲應用規範和技術規範兩類。

與建築學類似,如果軟件系統沒有一個好的架構是不可能成爲成功的軟件系統的。沒有圖紙的建築工地、沒有設計的造橋工程都是不可以想象的混亂世界。建築工程如是,軟件工程中亦然!

由於國內合格、勝任的軟件架構師極爲少見,直接導致了我國民族軟件產業水平的落後。在未來以信息產業爲主導的社會,信息產業水平的低下將直接影響國家核心競爭力。究其原因,無企業非急功近利、個人缺乏引導。

企業的急功近利是有無法克服的原因的,那就是社會發展總體水平。“生存是第一位的,賺錢是第一位的”,多年來許多客戶抱怨國內的軟件公司無法信任、系統項目累做累敗、公司越換越差,但因國外不可能給中國做應用系統項目還不得不找國內軟件公司做。由於人月費用低、公司開發成本高,軟件企業對於應用只能草草了事,拿錢走人(很多公司拿不到後期尾款)。這樣的環境下,企業幾乎無法投入更多資源培養自己的架構師,加上眼花繚亂的跳槽風氣企業更是不願投入……

那麼要成爲架構師的途徑似乎只有現在較爲流行的軟件學院和個人自我培養了。關於軟件學院我接觸過不少,其宗旨絕大部分都是造就(or打造)企業需要的軟件架構師(or程序員or人才)。教師來源與企業、學員來源與企業、人才輸送到企業是他們辦學的手段。儘管各個如雨後春筍般出現的軟件學院口號差不多,但恐怕大多只是爲了圈錢賣學位了事...

架構師不是通過理論學習可以搞出來的,不過不學習相關知識那肯定是不行的。參考軟件企業架構師需求、結合目前架構師所需知識,總結架構師自我培養過程大致如下僅供參考:

1、架構師胚胎(程序員)學習的知識是語言基礎、設計基礎、通信基礎等,應該在大學完成,內容包括java、c、c++、uml、RUP、XML、socket通信(通信協議)——學習搭建應用系統所必須的原材料。

2、架構師萌芽(高級程序員)學習分佈式系統、組建等內容,可以在大學或第一年工作時間接觸,包括分佈式系統原理、ejb、corba、com/com+、webservice(研究生可以研究網絡計算機、高性能併發處理等內容)

3、架構師幼苗(設計師)應該在掌握上述基礎之上,結合實際項目經驗,透徹領會應用設計模式,內容包括設計模式(c++版本、java版本)、ejb設計模式、J2EE架構、UDDI、軟件設計模式等。在此期間,最好能夠了解軟件工程在實際項目中的應用以及小組開發、團隊管理。

4、軟件架構師的正式成型在於機遇、個人努力和天賦,軟件架構師其實是一種職位,但一個程序員在充分掌握軟架構師所需的基本技能後,如何得到這樣的機會、如何利用所掌握的技能進行應用的合理架構、如何不斷的抽象和歸納自己的架構模式、如何深入行業成爲能夠勝任分析、架構爲一體的精英人才這可不是每個人都能夠遇上的餡餅……

然而學海無涯,精力有限,個人如何能夠很快將這些所謂的架構師知識掌握?這是祕密,每個人都有自己的獨門家傳祕笈就不敢一一暴露了。不過有一點就是廣泛學習的基礎之上一定要根據個人興趣、從事領域確定一條自己的主線來努力。

如果說架構師是在模型圖紙上工作的,那麼模型元素必須是實實在在的,正如我們不可能期望抽象派畫家來設計高樓大廈,沒有實際意義的模型元素,是不可能構築出軟件系統的。迄今爲止,絕大部分軟件架構師是依賴軟件程序員來實現他們的架構意圖的,這二者直接的鴻溝是顯而易見的。設計模式的出現是爲縮短二者之間的鴻溝所做的努力,目的是讓架構師和程序員之間有更多的共同語言和規範。儘管設計模式讓軟件開發效率和質量有一定程度的提升,但是它始終面臨一個很明顯的侷限,那就是人的因素。人雖然在創造性方面有絕對優勢,但是在精確性、持久性、效率、質量上是無法比擬機器的。所以我們希望在軟件系統構建過程中,人和機器發揮各自的長處,也就是說,讓人來扮演架構師的角色,而讓機器來扮演程序施工者的角色。事實上,目前已經有了成功的模式了,那就是KCOM 商業工程(http://www.kcomsoft.com)企業應用平臺所採用的基於設計的全自動化軟件工廠模式,採用這種模式,架構師在工具平臺所提供的模型圖設計環境裏做軟件系統的設計,設計結果由工具平臺自身所帶的“軟件工廠”自動加工成最終企業應用軟件系統。這樣的開發模式,能使企業應用軟件系統的開發在效率、質量上有了質的提升,從根本上區別於傳統的設計模式,因爲這裏的設計模式已經包含在軟件工廠編譯器之中了。

系統分析員、系統架構師、項目經理的區別
系統分析員重點關注客戶的業務,將客戶的需求轉化成類似用例圖這樣的表示,從而架起客戶與系統設計人員之間的橋樑,
所以系統分析員要朝着客戶業務專家的方向發展針對現有系統在業務/數據/組織結構等方面進行合理的分析和優化等功能,
就是能指出系統中哪些東西是好的哪些有問題等等.,比如專注電信行業、電力行業、金融行業等。

系統架構師關注的是軟件的骨架,就像設計大樓的設計師一樣,把大樓的框架設計好,至於裏面的分隔、裝修等不是他的關注點,
所以系統架構師往往能夠從系統需求(規格)書中很快的抽象出今後系統將會成爲怎麼樣的一個系統的輪廓,
然後將部件、部件與部件之間的交互用類似UML這樣的建模語言表達出來,供詳細設計人員參照。系統架構師必須擁有相當的工作經驗,
並善於從以往的項目中總結出各種設計模式並加以引用到新的系統中來。

項目經理一般是指軟件開發項目經理,其關注點是開發計劃的編制、計劃的執行、計劃的檢查等,以按時保質開發出軟件爲終極目標,
但涉及面卻非常廣,既要有良好的技術背景,又要有與人溝通的能力(一般技術人員出身的人最欠缺的),要講究一定的方法論,
但更要掌握管理方方面面的最佳實踐。


常和好友孫向暉探討軟件開發之道,他把我作爲架構師推薦到程序員雜誌,提筆良久卻不敢下筆。雖然多年來一直負責開發浪潮軟件的企業應用架構,卻總覺軟件架構師在軟件行業中是一神聖的稱號,所以不敢隨便妄稱架構師。
    本文敘述了筆者工作以來的歷程,穿插談談工作以來的一些關於架構師的體會。
尚在大學時候,非常崇拜那些技術天才,特別對求伯君前輩等以一己之力編寫著名軟件的前輩豪傑等佩服得五體 投地,期望有一天也能像他們那樣成爲大俠。無論黑天白夜,揮斥鍵盤程序人生,累了可以遊戲中十步殺一人,何等自由與瀟灑?
    畢業後到公司,有了機器,抱牀被子到辦公室,靜躺着躲過12點鐘保安手電的掃射檢查,就可以在裏面通宵奮戰了。兩個月時間,也終於把自己打造成氣質癲狂、頭髮蓬亂、臉色蒼白、雙眼通紅、鍵盤敲得滿屋響,具備技術高手的一切外表特徵的狂人了。和大多數新工作的程序員一樣,那時是比較喜歡搞純技術的工作,隔壁辦公室還有另外一位氣質癲狂的戰友,和我一樣喜歡鍵盤敲得滿屋響,閒暇時候常聊些技術話題,也都對寫數據庫的增刪改程序比較深惡痛絕,覺得比較俗。
    不甘於平靜的生活,決定跳槽去淘金,新去的公司使用Lotus,在這個公司持續了短暫的兩個月的通宵奮戰。對Lotus學得也算小有心得。
(回頭想想,如果沒有工作前幾年的知識積累和對技術的狂熱,我或許永遠也走不到現在這條路。) 對技術的狂熱興趣和愛好,不僅對於架構師,而且對於想做好任何工作的人都是必要的,只有對真正感興趣的工作,方能做得出類拔萃。
轉眼間風氣雲涌,.COM泡沫正起,BS開始大行其道,試用期沒有結束就辭職開始了短暫的創業經歷。頭是個爲了搞個程序可以幾天不合眼的人。他認準了BS結構和J2EE,帶着我們追逐J2EE之夢,那時是2000年初。
不過這次是完全不用Lotus,改爲使用Java了,從學校時候使用VB,到工作後用Unix下C,新的公司用Lotus,現在又完全不用Lotus改用Java了。從學校時候使用VB,到工作後用Unix下C,新的公司用Lotus,每樣在周邊環境中都能成爲佼佼者。有一段時間也是比較浮躁,尋思刨根究底每樣都學明白又有什麼用?書到看時方去學就行了。這種心態前前後後持續了半年,其間雖然還熬夜,卻是都打遊戲了。一段時間下來,做J2EE的應用心裏還是沒有一點底,募然回首,發覺這一段時間收穫空空如也。
在頭的指導下,對自己做了反思和重新定位,其時架構師的概念在國內開始比較熱了,於是我對給自己樹立了一個目標,做架構師。目標樹立起來後,回顧工作兩年來的情況,分析和目標的差距,朝着目標一步步前進。下面是當時的一些反思和體會:
補充基礎理論知識。IT的技術發展是非常快的,新技術層出不窮,但是各種技術之間很多原理是一樣的,是相通的,重要的是要把原理搞通。筆者所在的學校以管理嚴格、學生基礎紮實、踏實勤奮而著稱。但在大學的時候畢竟由於缺乏實踐對理論的認識不到位,工作以後回過頭來看看老書,發覺有更深刻的認識和豐厚的收穫。
擴寬知識面。當時知識面還是太窄,當時對於網絡,對於存儲,對於大小型機,大於大型數據庫幾乎都沒有深入的接觸和使用。對於構建一個全新大型的基於J2EE的企業應用系統來說,架構師需要熟悉數據庫技術、操作系統技術、存儲、網絡技術,J2EE體系架構,MVC框架,Java程序語言,還需要熟悉一到兩個應用服務器、一到兩門大型數據庫。
架構師需要具備紮實全面的技術,掌握廣泛的開發技能,超離於程序語言之上,熟悉多種系統架構,有豐富的開發經驗,能選擇並設計合理的方案。
學習儘可能多的領域知識。軟件架構師可細分爲應用架構師和技術架構師,應用架構是軟件本身作爲一個應用而存在的結構,技術架構是使應用能夠運轉的支撐架構。就像軟件是爲社會爲生活服務一樣,技術架構是服務於應用架構的。因此,要做架構師,不能只喜歡純技術,還要學習儘可能多的領域知識。
要深入、深入到本質裏面去,絕對不能浮躁。不光要了解表象,還必須瞭解隱藏在表象裏面的本質。架構師不只是使用者,更多的是建造者,創新者,每一個決定都可能會影響幾十個開發人員和成百上千的使用者,因此必須深入熟悉技術的本質,瞭解原理,才能靈活運用,不可能臨時抱佛腳,現學現賣。
(我後來曾見過一些立志做J2EE架構師的程序員,不但不願意深入學習Java虛擬機規範,對於API也只是一知半解。問其理由,答曰,犯不着搞明白,到用的時候查查API就行了。天哪,到用的時候查查API就行了,如果你是一個摩天大樓的建築師,到蓋高樓的時候現查查各種建材的參數規格指標就能蓋起大樓來了麼?就能把水、電、樑、管、消防等搭配得合情合理麼?想想看,我們做的架構可能也會影響大批設計師和程序員,影響大批使用的用戶,豈是現查API就能行的?)
浮躁只會讓人一事無成。曾見過一些人,寫了兩月程序,就嫌寫程序低級要去做設計,剛寫了兩月設計,就嫌設計低級,就要去搞需求分析,剛搞了兩天分析,又覺得搞技術沒前(錢)途,就要去搞管理或者搞市場。也見過一些人,搞了三月嫌工資低,跳一下漲點工資,再搞三月又跳跳漲點工資。跳來跳去,開始還能往“上”跳, 到後面是隻能往被趕着往下跳了。
加強交流和溝通。曾經悶頭苦學,希望能學得很牛牛,把什麼都研究透了,然後可以教徒弟,可以帶出一批人來。在這過程中總是碰到一些檻,雖不至於灰心喪氣,但也挺鬱悶。頭告訴說不要指望一個人都幹完了,再厲害也不可能把啥都搞明白了,一方面要形成有一個學習的氣氛,大家都很厲害,水漲才能船高,另外一方面要加強和業界尖端人士的交流,共同提高。
關於交流和溝通,古語中提的文人相輕,感覺現在是國人相輕,市場和技術人員相輕,公司間的技術人員之間相輕,殊不知,家裏如何橫沒用,我們應該瞄準的是國外的大廠商,超越他們纔是我們中國軟件同行的目標。
前兩天去建材市場買裝修的材料,每家店主都回告訴你這個價高是因爲使用了進口材料,那個價低是因爲使用了國產的。讓人感覺非常的不爽。
要創新,樹立正確的學習能力觀。當時感覺頭說得沒錯,需要加強交流溝通,自己距離目標差的太遠,周邊沒法寄希望能有人帶着做,於是甚至都想到跳槽賠着錢當學徒工都行。頭告訴我做好自力更生的準備,國內當時就是欠缺好的架構師,幹得好的大多都搞管理去了,剩下沒搞管理的不見得碰得到,就算碰到了不見得肯帶你,就算肯帶你不見得真就比我厲害。我相信他絕對沒有貶低同行的意思,只是爲了激勵我罷。
學習能力對於一個搞IT的人來說非常重要,如果沒有很強的學習能力,很難快速適應技術變化的能力。
(我後來碰到不少新員工,因爲基本都是從大學畢業的人,學習接收新東西的能力都挺快,但是成就迥然有別。有的人,也具有強烈的好奇心,但爲了學習而學習,敝帚自珍,不願意應用到開發和工作中去,這種人,學到一定程度就很難再提高,學習能力只能算是不及格。
筆者後來在浪潮軟件菸草事業部開始做基於J2EE的應用的時候,及時將以前學到的新知識和技術運用到開發中去,從而確立了樓上企業應用框架在浪潮軟件的地位。)
在那一年只做了一個物流管理系統一個單,基於J2EE的單子,一切都是從頭做,單子額不大內容卻不少。雖然最後順利完成,卻因爲廣泛使用了應用服務器提供商提供的一個不成熟的擴展包而吃盡了苦頭。雖說架構師不糾纏於細節,但是忽略了細節卻可能造成嚴重的後果。對於7X24小時系統,一個細節不處理好,就會造成停機和嚴重的損失。細節就是追求完美,架構師既要有好的大局觀,也不能忽略細節,要求我們不僅對原理搞明白,很多時候必須對具體技術實現有透徹的瞭解。
基於J2EE的BS應用畢竟市場還小,加上其它一些原因,在2001年上半年,公司倒閉員工整體併入浪潮軟件成爲了浪潮軟件的菸草事業部,同時帶進浪潮的還有一個J2EE的Framework,樓上Web應用框架1.0。
倚靠浪潮的市場優勢和品牌優勢,依靠樓上架構的卓越品質和快速二次開發 的能力。浪潮軟件在菸草業行業佔有率連續幾年排名第一。而樓上系列產品也以Web應用框架1.0爲基礎,發展到今天的包含Web應用框架、工作流平臺、商業服務平臺、業務規則引擎等的樓上企業應用框架3.0。
樓上企業應用框架也已在除菸草外的通訊、衛生、政務、稅務等行業全面開花。依賴樓上企業應用框架構建的在多個行業屬於首例全省大型集中式企業Web應用。
在使用樓上企業應用框架構建Web應用中,也有一些經驗教訓。
在最初的程序中程序員把太多的東西都放到內存session之中,我看見了這個問題並提出來以後數據量大可能會存在問題,但是不少人都認爲已經寫了不少了改的話返工太多,決定以後再改吧,我屈服了沒有繼續抗爭。但是事實證明我們大家都錯了,我們後來有了更大範圍的返工,造成不少宕機。架構師應該意志堅強,既不偏執,也不輕易屈服。
客戶有時候會提出一些超過條件所能承受的要求,比如說不願意新建一個OLAP庫,要在很繁忙的OLTP庫上做複雜的報表查詢。如果滿足客戶的要求,其結果是最後性能達不到要求,影響實時操作的使用。或者即使把性能優化到能滿足客戶的要求,卻付出非常高的代價,最後客戶和我們都得不償失。這時候需要我們要不卑不亢,和客戶溝通,說服客戶採用更好的技術方案,架構師不僅要和客戶溝通,還要和項目經理溝通,和程序員、測試人員溝通。
架構師要對系統的功能負責,對系統的成熟度負責,對系統的成本負責,架構自軟件始而始,自軟件終而終。架構師需要參與擬定項目的各種標準和規範,要指導大家,要和低層設計人員探討一些難點的設計問題,他不僅僅是一個技術高手,還要充當技術的領導者,因此,學習一些軟件工程的知識和提高領導力是絕對有必要的。
在項目組中,架構師是一個角色,不一定就是一個人,可能是一個小組。
架構師雖然不要忽略細節,也要警惕過分追求完美,架構師學會放棄,在系統的功能、成熟度、成本中取得平衡,從客戶的角度和開發者的角度來考慮問題。特別是要警惕技術情結,一味追求最新的不成熟的技術,對於難以完成的功能,需要暫時捨棄,不可能一下造成最完美的系統。
架構是一門科學,更是一門藝術,觸類旁通,除了掌握深厚的技術知識以外,要儘可能多的掌握領域知識。
成爲架構師,沒有速成的辦法,唯有實踐+努力。

感謝後記:
     感謝我的父母及哥姐,他們教會我如何做一個有道德的中國人!
感謝我的妻子,在我窮困潦倒的時候一如既往的支持我,在我失意頹廢的時候鼓勵我,在我驕傲的時候潑冷水清醒我!
感謝我的頭張暉,沒有他的指導,我現在可能還在跳來跳去尋找職業!
感謝我的領導和同事,他們讓我對國產軟件更加有信心,他們讓樓上框架更上一層樓!
感謝孫向暉同志,他是樓上框架中開發工具、開發方法和協同平臺的架構師,參與本稿的審校!
附筆者介紹:
周恆,網名ZHNT,現年28歲,98年西安電子科技大學計算機軟件專業畢業,畢業後一直從事一線的軟件研發與管理工作,現任浪潮軟件技術研究中心總經理。主持並參與了山東省建行電話銀行系統、山東省建行中間業務系統、山東風翔物流管理系統以及大連、山東、南京、廣西、黑龍江、吉林、山西、廣西、蘭州、江西等十餘個省市集中菸草信息系統項目,對企業級應用軟件開發有許多獨到的見解。
熟悉OOAD、J2EE、工作流技術和企業級應用建模技術,是IT之源專欄J2EE專家,具備豐富的平臺和中間件開發經驗。主持開發了浪潮企業級應用框架、浪潮工作流引擎、浪潮Web應用框架、浪潮商業服務平臺、浪潮協同開發平臺、浪潮門戶平臺等平臺和中間件。上述平臺和中間件廣泛應用於浪潮開發的金融、菸草、移動、政務、衛生、稅務等行業的多個產品中。
個人愛好:足球、籃球、乒乓球等運動
附參考書目:
筆者所在部門,因爲是作公司整個平臺和架構的部門,要求所有的程序員都要熟讀:
編碼的奧祕、Java虛擬機規範、JDK源碼、深入Java虛擬機、Java編程思想、Java與模式、J2EE規範、分析模式、設計模式。
附浪潮樓上企業應用框架介紹:
浪潮樓上企業應用框架(LEAF,Langchao Enterprise Application Framework)是國內第一個基於J2EE規範的真正的應用軟件開發平臺。浪潮樓上企業應用框架是一套基於J2EE規範的面向企業級應用的企業級應用框架,代表商業應用的實體對象相互協作實現核心商業過程,允許開發者使用此框架來開發完成最終的不同需求。
浪潮樓上企業應用框架博採衆長,吸收了先進和成熟的技術和架構思想,借鑑了浪潮多年的大型企業及應用系統的經驗,使用了大量企業級應用模式、企業級數據集成模式、企業級開發管理模式,並經過若干大型成功項目的檢驗。從1998年至今,經過多年的演變和發展,已在此基礎上成功地構建了金融、菸草、移動、政務、衛生、稅務等行業的衆多大型應 用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章