坦率的講,除了少數(shù)對(duì)開(kāi)發(fā)程序極其熱愛(ài)并愿意為之奮斗終身的編程者來(lái)說(shuō),對(duì)于大多數(shù)開(kāi)發(fā)人員,寫(xiě)代碼只是他們未來(lái)獲得職業(yè)提升的一個(gè)必不可少的積累階段,在做開(kāi)發(fā)的時(shí)間里,他們會(huì)積極學(xué)習(xí)各種知識(shí),經(jīng)驗(yàn),培養(yǎng)自己的商業(yè)頭腦,包括擴(kuò)展自己各方面的資源,這些積累會(huì)為他們未來(lái)成為管理者或創(chuàng)業(yè)打下牢固的基礎(chǔ)。
成為架構(gòu)設(shè)計(jì)師是廣大開(kāi)發(fā)者職業(yè)發(fā)展道路之一,架構(gòu)師究竟是個(gè)什么樣的職業(yè)?需要具備什么基本能力?如何才能成為一個(gè)優(yōu)秀的架構(gòu)設(shè)計(jì)師以及架構(gòu)設(shè)計(jì)師需要關(guān)注哪些內(nèi)容?針對(duì)有關(guān)問(wèn)題,本期我們?yōu)槟稍L(fǎng)了(微軟認(rèn)證專(zhuān)家,系統(tǒng)分析員,希賽顧問(wèn)團(tuán)顧問(wèn),中國(guó)計(jì)算機(jī)學(xué)會(huì)會(huì)員) 張友邦,他會(huì)就相關(guān)問(wèn)題與大家分享他的看法。
“在我工作的六年多時(shí)間里,除了第一年是純粹編碼以外,其余時(shí)間都在做和架構(gòu)設(shè)計(jì)有關(guān)的工作,當(dāng)然也還一直在寫(xiě)各種各樣的代碼!睆堄寻钫J(rèn)為架構(gòu)設(shè)計(jì)可能看起來(lái)很神秘,新入門(mén)或沒(méi)有架構(gòu)設(shè)計(jì)經(jīng)驗(yàn)的程序員剛開(kāi)始的時(shí)候會(huì)有種不知所措的感覺(jué),但其實(shí)架構(gòu)設(shè)計(jì)是件很容易的事,它只是軟件系統(tǒng)開(kāi)發(fā)中的一個(gè)環(huán)節(jié)而已,整個(gè)軟件系統(tǒng)的開(kāi)發(fā)和維護(hù)以及變更還涉及到很多事情,包括技術(shù)、團(tuán)隊(duì)、溝通、市場(chǎng)、環(huán)境等等。
同時(shí),張友邦表示,雖然架構(gòu)設(shè)計(jì)是件容易的事情,但也不是大多數(shù)沒(méi)有架構(gòu)設(shè)計(jì)經(jīng)驗(yàn)的程序員想象中的畫(huà)畫(huà)框圖那么簡(jiǎn)單。把幾臺(tái)服務(wù)器一擺,每一臺(tái)服務(wù)器運(yùn)行什么軟件分配好,然后用網(wǎng)絡(luò)連接起來(lái),似乎每個(gè)企業(yè)級(jí)應(yīng)用都是如此簡(jiǎn)間單單的幾步。但現(xiàn)實(shí)生活中的軟件系統(tǒng)實(shí)實(shí)在在可以用復(fù)雜大系統(tǒng)來(lái)形容,從規(guī)劃、開(kāi)發(fā)、維護(hù)和變更涉及到許許多多的人和事。架構(gòu)設(shè)計(jì)就是要在規(guī)劃階段都把后面的事情盡量把握進(jìn)來(lái),要為穩(wěn)定性努力,還要為可維護(hù)性、擴(kuò)擴(kuò)展性以及諸多的性能指標(biāo)而思前想后。除了技術(shù)上的考慮,還要考慮人的因素,包括人員的組織、軟件過(guò)程的組織、團(tuán)隊(duì)的協(xié)作和溝通等。
另外,架構(gòu)設(shè)計(jì)還需要方法論的指導(dǎo)。張友邦強(qiáng)調(diào),這些方法論的思路包括,至上而下的分析,關(guān)注點(diǎn)分離,橫向/縱向模塊劃分等。有時(shí)候覺(jué)得架構(gòu)設(shè)計(jì)決策就像是瀏覽Google Earth,實(shí)際上反映的是一種自上而下的決策過(guò)程。對(duì)問(wèn)題的分解是軟件思維的基本素質(zhì),可以有橫向分解、縱向分解以及兩者的結(jié)合。能不能有效快速準(zhǔn)確的分解問(wèn)題,是軟件開(kāi)發(fā)人員需要首先訓(xùn)練的項(xiàng)目。另外,架構(gòu)設(shè)計(jì)中圖形化的工具非常有用,它能把系統(tǒng)的結(jié)構(gòu)和運(yùn)作機(jī)制以圖形化的方式表達(dá)出來(lái)。也正因?yàn)檫@樣才有了架構(gòu)設(shè)計(jì)就是畫(huà)框圖的誤會(huì)。再者,架構(gòu)設(shè)計(jì)是一個(gè)工程性質(zhì)的工作,對(duì)當(dāng)事人的實(shí)際從業(yè)經(jīng)驗(yàn)要求較高。只有對(duì)市場(chǎng)上的各種技術(shù)有較全面的了解之后才有可能設(shè)計(jì)出一個(gè)盡可能滿(mǎn)足各種設(shè)計(jì)約束的架構(gòu)。
在談到架構(gòu)師需要具備的能力上,張友邦認(rèn)為架構(gòu)師首先必須具有豐富的開(kāi)發(fā)經(jīng)驗(yàn),是個(gè)技術(shù)主管。因?yàn)樗仨毲宄裁词强梢詫?shí)現(xiàn)的,實(shí)現(xiàn)的方式有哪些,相應(yīng)的難度怎么樣,實(shí)現(xiàn)出來(lái)的系統(tǒng)面對(duì)需求變化的適應(yīng)性等一系列指標(biāo)。另外,需要對(duì)面向過(guò)程、面向?qū)ο、面向服?wù)等設(shè)計(jì)理念有深刻的理解,可以快速的察覺(jué)出實(shí)現(xiàn)中的問(wèn)題并提出相應(yīng)的改進(jìn)(重構(gòu))方案(也就是通常說(shuō)的反模式)。這些都需要長(zhǎng)期的開(kāi)發(fā)實(shí)踐才能真正的體會(huì)到,單從書(shū)本上很難領(lǐng)會(huì)到,就算當(dāng)時(shí)理解了也不一定能融會(huì)到實(shí)踐中去。
在技術(shù)能力上,軟件架構(gòu)師最重要也是最需要掌握的知識(shí)是構(gòu)件通信機(jī)制方面的知識(shí),包括進(jìn)程內(nèi)通信(對(duì)象訪(fǎng)問(wèn)、函數(shù)調(diào)用、數(shù)據(jù)交換、線(xiàn)程同步等)以及進(jìn)程外(包括跨計(jì)算機(jī))的通信(如RMI、DCOM、Web Service)。在WEB應(yīng)用大行其道的今天,開(kāi)發(fā)者往往對(duì)服務(wù)器間的通信關(guān)注的比較多,而對(duì)進(jìn)程內(nèi)的通信較少關(guān)注。進(jìn)程外跨機(jī)器通信是構(gòu)建分布式應(yīng)用的基石,它是架構(gòu)設(shè)計(jì)中的鳥(niǎo)瞰視圖;而進(jìn)程內(nèi)的通信是模塊實(shí)現(xiàn)的骨架,它是基石的基石。如果具體到一個(gè)基于.Net企業(yè)級(jí)架構(gòu)設(shè)計(jì),首先需要的是語(yǔ)言級(jí)別的認(rèn)識(shí),包括.NET的CLR、繼承特性、委托和事件處理等。然后是常用解決方案的認(rèn)識(shí),包括ASP.NET Web Service、.NET Remoting、企業(yè)服務(wù)組件等?傊S富的開(kāi)發(fā)實(shí)踐經(jīng)驗(yàn)有助于避免架構(gòu)師紙上談兵式的高來(lái)高去,給代碼編寫(xiě)人員帶來(lái)實(shí)實(shí)在在的可行性。
其次,具有足夠的行業(yè)業(yè)務(wù)知識(shí)和商業(yè)頭腦也是很重要的。行業(yè)業(yè)務(wù)知識(shí)的足夠把握可以給架構(gòu)師更多的擁抱變化的能力,可以在系統(tǒng)設(shè)計(jì)的時(shí)候留出一些擴(kuò)展的余地來(lái)適應(yīng)可能來(lái)臨的需求變化。有經(jīng)驗(yàn)的設(shè)計(jì)人員可能都碰到過(guò)這樣的事,一廂情愿的保留接口在需求變化中的命中率非常低。也就是說(shuō),在系統(tǒng)設(shè)計(jì)之初為擴(kuò)展性留下來(lái)的系統(tǒng)接口沒(méi)能在需求變化的洪流中發(fā)揮真正的作用,因?yàn)樾枨蟮淖兓](méi)有按照預(yù)想的方向進(jìn)行,到最后還是不得不為變化的業(yè)務(wù)重新設(shè)計(jì)系統(tǒng)。這就是因?yàn)閷?duì)業(yè)務(wù)知識(shí)的理解和對(duì)市場(chǎng)或者商業(yè)的判斷沒(méi)有達(dá)到一個(gè)實(shí)用的、可以為架構(gòu)擴(kuò)展性服務(wù)的水平。
再次,張友邦提到,架構(gòu)設(shè)計(jì)師對(duì)人的關(guān)注必須提升到架構(gòu)設(shè)計(jì)之初來(lái)納入考慮的范圍,包括溝通以及對(duì)人員素質(zhì)的判斷。軟件過(guò)程是團(tuán)隊(duì)協(xié)作共同構(gòu)建系統(tǒng)的過(guò)程,溝通能力是將整個(gè)過(guò)程中多條開(kāi)發(fā)線(xiàn)粘合在一起的膠水。大家都應(yīng)該碰到過(guò)事后說(shuō)“原來(lái)是這樣啊,我不知道啊”或者某個(gè)開(kāi)發(fā)人員突然高聲呼喊“為什么這里的數(shù)據(jù)沒(méi)有了”之類(lèi)的。溝通的目的就是盡量避免多條開(kāi)發(fā)線(xiàn)的混亂,讓系統(tǒng)構(gòu)建過(guò)程可以有條理的高效進(jìn)行。另外,對(duì)人的關(guān)注還表現(xiàn)在對(duì)團(tuán)隊(duì)成員的素質(zhì)判斷上,比如哪些開(kāi)發(fā)人員對(duì)哪些技術(shù)更熟悉,或者哪些開(kāi)發(fā)人員容易拖進(jìn)度等。只有合理的使用人力資源,讓合適的人做合適的事情才能讓整個(gè)軟件過(guò)程更加高效。
另外,張友邦認(rèn)為架構(gòu)師應(yīng)時(shí)刻注意新軟件設(shè)計(jì)和開(kāi)發(fā)方面的發(fā)展情況,并不斷探索更有效的新方法、開(kāi)發(fā)語(yǔ)言、設(shè)計(jì)模式和開(kāi)發(fā)平臺(tái)不斷很快地升級(jí),軟件架構(gòu)師需要吸收這些新技術(shù)新知識(shí),并將它們用于軟件系統(tǒng)開(kāi)發(fā)工作中。但對(duì)新技術(shù)的探索應(yīng)該在一個(gè)理性的范圍內(nèi)進(jìn)行,不能盲目的跟風(fēng)。解決方案提供商永遠(yuǎn)都希望你能使用它提供的最新技術(shù),而且它們?cè)谕茝V自己的解決方案的時(shí)候往往是以自己的產(chǎn)品為中心,容易給人錯(cuò)覺(jué)。比如數(shù)據(jù)庫(kù),往往讓人覺(jué)得它什么都能做,只要有了它其它什么都不重要了。但事實(shí)上并不是如此,對(duì)于小型應(yīng)用可以將許多業(yè)務(wù)邏輯用script的方式放入數(shù)據(jù)庫(kù)中,但很少看到大型應(yīng)用采用這樣的做法。對(duì)于新東西需要以一種比較的觀(guān)點(diǎn)來(lái)判斷,包括橫向的比較和縱向的比較,最后得出一些性能、可移植性以及可升級(jí)等指標(biāo)。另外,新入行的開(kāi)發(fā)人員往往關(guān)心新技術(shù)動(dòng)向而忽略了技術(shù)的歷史,而從DOS時(shí)代一路殺過(guò)來(lái)的開(kāi)發(fā)者就對(duì)現(xiàn)在的技術(shù)體系有較全面的把握。
構(gòu)架師不是通過(guò)理論學(xué)習(xí)可以搞出來(lái)的,不學(xué)習(xí)并且親自實(shí)踐相關(guān)知識(shí)肯定是不行的。就像前面說(shuō)到的,架構(gòu)設(shè)計(jì)是一個(gè)工程性質(zhì)的事情,只有在不斷實(shí)踐的基礎(chǔ)上才能逐漸熟悉起來(lái)。實(shí)踐的內(nèi)容并不是去深挖各種語(yǔ)言的特性,因?yàn)橄到y(tǒng)架構(gòu)師是設(shè)計(jì)應(yīng)用系統(tǒng)架構(gòu)而不是設(shè)計(jì)語(yǔ)言(除非你是要實(shí)現(xiàn)DSL)。更多的時(shí)候需要帶著一種比較的眼光去實(shí)踐,把不同的實(shí)現(xiàn)方式下的優(yōu)缺點(diǎn)做個(gè)總結(jié),做到自己心里有數(shù),等具體的上下文環(huán)境下才好判斷采用什么樣的方式方法。把基礎(chǔ)打牢的同時(shí)掌握一定的方法,架構(gòu)設(shè)計(jì)不是想象中的那么難。
張友邦,男,微軟認(rèn)證專(zhuān)家,系統(tǒng)分析員,希賽顧問(wèn)團(tuán)顧問(wèn),中國(guó)計(jì)算機(jī)學(xué)會(huì)會(huì)員。1980年生于四川宜賓,2002年獲得國(guó)防科技大學(xué)宇航科學(xué)與工程系空間工程專(zhuān)業(yè)學(xué)士學(xué)位,2004年初成立長(zhǎng)沙石斑軟件有限公司并擔(dān)任總經(jīng)理,2006年底出任廣州快網(wǎng)信息技術(shù)有限公司技術(shù)總監(jiān),2007年10月任湖南新郵信息技術(shù)有限公司軟件中心副經(jīng)理。主要研究領(lǐng)域包括軟件架構(gòu)與設(shè)計(jì)、WEB RIA、流媒體與計(jì)算機(jī)圖形圖像。受?chē)?guó)家自然科學(xué)基金資助,于2001年發(fā)表國(guó)家級(jí)核心刊物學(xué)術(shù)論文一篇。
相關(guān)推薦:2010年計(jì)算機(jī)軟件水平考試時(shí)間安排通知北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |