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