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