編者按:系統(tǒng)架構師是許多程序員的夢想職業(yè)。今天的你也許已經(jīng)掌握了各種開發(fā)工具,并且能夠使用各種平臺進行開發(fā),但作為一個架構師的要求,也許還 有很長的道路。邢波濤先生在LAMP架構上的造詣,讓我邀請他撰寫本文,也許這位架構師的建議能讓你在未來的架構師之路上節(jié)省一點時間。
一個產(chǎn)品的經(jīng)典開發(fā)步驟通常需要經(jīng)過系統(tǒng)需求調(diào)研、系統(tǒng)分析、系統(tǒng)設計、開發(fā)、測試、部署實施等一系列的步驟,如下圖所示:
而系統(tǒng)架構師,則在這個過程中,起到了承上(面對業(yè)務專家/系統(tǒng)分析員)和啟下(面對軟件工程師)的作用。所以說,系統(tǒng)架構師,在整個產(chǎn)品開發(fā)周期 內(nèi)是一個核心角色。如果說市場和銷售決定一個產(chǎn)品是否好賣的話,系統(tǒng)架構師則直接決定著這個產(chǎn)品的開發(fā)是否成功。從某種意義上說,這也是眾多程序員未來的 夢想職業(yè)。
要想成為一個優(yōu)秀的系統(tǒng)架構師,并非一朝一夕之功所能達到的,“冰凍三尺,非一日之寒”,除了要有很深的專業(yè)技能外,還需技術全面、成熟練達、洞察 力強、經(jīng)驗豐富,具備戰(zhàn)略性和前瞻性思維能力,善于把握全局,能夠在更高抽象級別上進行思考。如果說系統(tǒng)分析員、業(yè)務專家只需要對一個產(chǎn)品的業(yè)務負責,可 以不關心一個產(chǎn)品軟件開發(fā)語言的話,而一個優(yōu)秀的職業(yè)系統(tǒng)架構師,不僅要對產(chǎn)品背景和產(chǎn)品背后的業(yè)務邏輯熟悉,而且要對所用的軟件開發(fā)語言(例如 Java/C#/C/C++/J2EE),也要非常熟悉才可以,兩者缺一不可。否則就起不到承上啟下的作用,當然也設計不出良好的軟件架構。在美國,一個 合格的系統(tǒng)架構師的薪水甚至比部門經(jīng)理或產(chǎn)品經(jīng)理要高很多,這也是美國為什么三四十歲甚至五十歲的程序員也很常見的原因。
事實上,軟件開發(fā)中碰到的很多問題,歸結起來都可能和當初的架構設計有關,所以架構師要想不成為眾矢之的,決不是件容易的事情?;诖?,我認為,要 想成為合格的系統(tǒng)架構師,首先要從程序員做起,只有有了多年的一線軟件開發(fā)經(jīng)驗,深刻體會到了程序員的艱辛與不容易,才能設計出易于擴展、易于修改、易于 維護、“不難為”程序員的架構出來。一個系統(tǒng)架構師,首先要能做出能夠“自圓其說”的原型,才能跟程序員進行有效的溝通,而不是只是設計出來一個架構,就 完全交給程序員來做了,這樣,后期開發(fā)出來的產(chǎn)品風險很大。以我現(xiàn)在參與開發(fā)的產(chǎn)品為例,這個產(chǎn)品只是公司核心戰(zhàn)略產(chǎn)品的很小的一部分,當然,雖然小,卻 是核心中的核心。這個產(chǎn)品配了3個系統(tǒng)架構師(年齡都在40歲以上,有數(shù)十年的軟件開發(fā)經(jīng)驗),6個程序員、5個測試,還有一個負責產(chǎn)品打包的工程師。這 3個系統(tǒng)架構師也都參與核心代碼編寫。
其次,合格的系統(tǒng)架構師,對所要開發(fā)的產(chǎn)品的業(yè)務背景,也要相當?shù)氖煜げ藕?,否則,設計出來的產(chǎn)品就不是客戶想要的產(chǎn)品,當然也就不是成功的產(chǎn)品。 還是以我現(xiàn)在參與的產(chǎn)品為例,這個產(chǎn)品是SCA規(guī)范的一個實現(xiàn),3個系統(tǒng)架構師的其中一個,就是SCA標準規(guī)范的參與者與制定者,對SOA/SCA標準, 有著相當?shù)墓Φ?,否則,做出來的產(chǎn)品,就只能圍著大公司,在他們屁股后面天天追了,別人做什么,自己也做什么,別人標準修改了,自己也趕快跟著修改。
第三,作為系統(tǒng)架構師,要經(jīng)常閱讀一些關于產(chǎn)品背景資料和系統(tǒng)架構設計方面的最新書籍。雖然現(xiàn)在技術方面的書籍,出得太濫,精品極少,大部分是從網(wǎng)上抄襲一些資料攢出來的,但是經(jīng)常閱讀一些國外大師的一些精品圖書,還是能給自己帶來一些新的思路和設計理念的。
第四,作為系統(tǒng)架構師,一定要有自信,既不要保守,也不要人云亦云,千萬不要迷信于大師和大俠。別人說J2EE好,自己的產(chǎn)品就基于J2EE開發(fā); 別人說.NET容易開發(fā),開發(fā)成本低,就轉(zhuǎn)做.NET;別人說Ruby很敏捷,自己就說自己的產(chǎn)品是基于ROR開發(fā)的。一定要結合公司、市場和項目的實際 情況,采用合適于自己的開發(fā)語言,設計出合適于自己的架構。比如,《J2EEWithoutEJB》那本書,提出了著名的“不要造新輪子”原則。如果大家 都不要造輪子,都利用別人現(xiàn)有的框架和產(chǎn)品,怎么可能有技術的進步和百花齊放、欣欣向榮的景象呢?Spring的作者還不是看到經(jīng)典J2EEEJB框架的 詬病,才設計出來自己的Spring輪子了嗎,為什么自己有了Spring輪子,就勸別人不要另造輪子了呢?GavinKing造出來了Hibenate 這個輪子,為什么又參與EJB3.0的制定呢?并又參與設計出Seam這個輪子?我個人覺得,一個系統(tǒng)架構師,一定要造出自己的輪子,才算是真正的系統(tǒng)架 構師,而不是拿著一大堆開源框架進行拼湊。
第五,對于開源的架構設計,要批判性地繼承。要多閱讀這些框架的源代碼。以J2EE和Eclipse插件開發(fā)為例(因為我專注于這兩個方面的開 發(fā)),從前些年流行EJB,再到Struts→J2EEwithoutEJB→Spring/Hibernate→AJAX,每一個框架的流行,都有其深 刻的歷史背景,有一些現(xiàn)有框架解決不了的難題在里面,這些框架都是為了解決一些問題而出現(xiàn)的。我們經(jīng)常閱讀這些大師的源代碼,精神上是一種享受,對錘煉自 己的功底,也是大有好處的。例如,在做Eclipse插件開發(fā)的時候,常常會遇到一個問題,怎么才能監(jiān)聽到用戶保存的事件,雖然Eclipse提供了資源 變化監(jiān)聽機制,但是直接利用其機制,是很原始的,任何資源的變化,比如,添加/刪除/移動一個圖形,都會引起這個事件的調(diào)用,而我只想監(jiān)聽用戶存盤的一剎 那那個事件,以前在做項目的時候,想盡各種辦法也沒解決好。后來,在另外一個產(chǎn)品的源代碼中,就看到了別人很好的解決方案,自己看到那段源代碼,真的是領 悟到很多。有時候,Eclipse的源代碼和J2EE的源代碼,在架構上是可以互相借鑒和補充的。比如,Eclipse的Adapter擴展機制和事件、 資源監(jiān)聽機制,我們一樣可以拿到J2EE框架中來,作為設計自己產(chǎn)品的設計模式藍圖。
第六,優(yōu)秀的系統(tǒng)架構師還要擁有優(yōu)秀的溝通能力,用以進行說服、鼓勵和指導等活動,并贏得項目組成員的信任。一個系統(tǒng)架構師設計出一個良好的框架 后,如果不能跟程序員進行有效的溝通,不能對程序員進行良好的指導,則這個良好的框架就不能很好的貫徹到產(chǎn)品開發(fā)的每個環(huán)節(jié)中去。有的程序員可能還是按照 老經(jīng)驗對程序中的一些關鍵環(huán)節(jié)進行處理,等到這個架構師發(fā)現(xiàn)問題時,可能已經(jīng)很晚了,說服、教育、培訓和處罰到那時已經(jīng)沒有意義了。另外,如果一個系統(tǒng)架 構師不能贏得項目組成員信任的話,那么他設計出來的架構就不具備說服力,程序員遇到困難,就會抱怨系統(tǒng)架構師設計的框架有問題,不能充分調(diào)動起來程序員的 責任感和主觀能動性。所以說,一個優(yōu)秀的系統(tǒng)架構師,無論在精神上,還是技能上,都是一個程序員良好的導師。
第七,系統(tǒng)架構師要分清自己和系統(tǒng)分析員、項目經(jīng)理或產(chǎn)品經(jīng)理之間的角色和關系,不能負責一切,也不能只負責技術架構。由于系統(tǒng)架構師在整個產(chǎn)品開 發(fā)周期內(nèi)處于承上啟下的中間地位,和程序員打交道的時間比系統(tǒng)分析員面向程序員的時間要長,有時候甚至比項目經(jīng)理和程序員之間還熟悉,使得程序員很容易認 為系統(tǒng)架構師對所有的需求和架構都負責,容易造成系統(tǒng)架構師職責過重。
成為優(yōu)秀系統(tǒng)架構師的路,是一條漫長而任重道遠的路。在這條道路上,要不斷說服自己,不斷抵制各種誘惑,要能在深夜無人的時候,挑燈閱讀別人的源代 碼,還要有承受住各種壓力的能力,能跟項目經(jīng)理一起抵制住老板的無理工期要求,還要在困難的時候,鼓勵項目組成員一起渡過難關??傊痪湓?,要想成為系統(tǒng) 架構師,不是很容易。“路漫漫其修遠兮,吾將上下而求索”。
作者簡介:
邢波濤,11 年軟件開發(fā)和管理經(jīng)驗,7 年的J2EE 開發(fā)經(jīng)驗, 資深J2EE 專家。對JSP/ Servlet /JavaBean/EJB 技術有深刻了解。熟悉Oracle、MS SQL Server、DB2,對Eclipse 平臺開發(fā),基于SWT/GEF/EMF 的Eclipse 插件開發(fā)有深入的實踐基礎。此外,熟悉UML、Rational Rose/ Rational Software Architecture 等面向?qū)ο蠓治黾夹g和工具,熟悉WBI Modeler 等業(yè)務建模工具,從事過MDA/MDD 開發(fā)。