系統架構師是怎麼煉成的

坦率的講,除了少數對開發程序極其熱愛並願意爲之奮鬥終身的編程者來說,對於大多數開發人員,寫代碼只是他們未來獲得職業提升的一個必不可少的積累階段,在做開發的時間裏,他們會積極學習各種知識,經驗,培養自己的商業頭腦,包括擴展自己各方面的資源,這些積累會爲他們未來成爲管理者或創業打下牢固的基礎。

成爲架構設計師是廣大開發者職業發展道路之一,架構師究竟是個什麼樣的職業?需要具備什麼基本能力?如何才能成爲一個優秀的架構設計師以及架構設計師需要關注哪些內容?針對有關問題,本期“專家看臺”爲您採訪了(微軟認證專家,系統分析員,希賽網專業顧問,中國計算機學會會員) 張友邦,他會就相關問題與大家分享他的看法。

“在我工作的六年多時間裏,除了第一年是純粹編碼以外,其餘時間都在做和架構設計有關的工作,當然也還一直在寫各種各樣的代碼。”張友邦認爲架構設計可能看起來很神祕,新入門或沒有架構設計經驗的程序員剛開始的時候會有種不知所措的感覺,但其實架構設計是件很容易的事,它只是軟件系統開發中的一個環節而已,整個軟件系統的開發和維護以及變更還涉及到很多事情,包括技術、團隊、溝通、市場、環境等等。

同時,張友邦表示,雖然架構設計是件容易的事情,但也不是大多數沒有架構設計經驗的程序員想象中的畫畫框圖那麼簡單。把幾臺服務器一擺,每一臺服務器運行什麼軟件分配好,然後用網絡連接起來,似乎每個企業級應用都是如此簡間單單的幾步。但現實生活中的軟件系統實實在在可以用複雜大系統來形容,從規劃、開發、維護和變更涉及到許許多多的人和事。架構設計就是要在規劃階段都把後面的事情儘量把握進來,要爲穩定性努力,還要爲可維護性、擴擴展性以及諸多的性能指標而思前想後。除了技術上的考慮,還要考慮人的因素,包括人員的組織、軟件過程的組織、團隊的協作和溝通等。

另外,架構設計還需要方法論的指導。張友邦強調,這些方法論的思路包括,至上而下的分析,關注點分離,橫向/縱向模塊劃分等。有時候覺得架構設計決策就像是瀏覽Google Earth,實際上反映的是一種自上而下的決策過程。對問題的分解是軟件思維的基本素質,可以有橫向分解、縱向分解以及兩者的結合。能不能有效快速準確的分解問題,是軟件開發人員需要首先訓練的項目。另外,架構設計中圖形化的工具非常有用,它能把系統的結構和運作機制以圖形化的方式表達出來。也正因爲這樣纔有了架構設計就是畫框圖的誤會。再者,架構設計是一個工程性質的工作,對當事人的實際從業經驗要求較高。只有對市場上的各種技術有較全面的瞭解之後纔有可能設計出一個儘可能滿足各種設計約束的架構。

在談到架構師需要具備的能力上,張友邦認爲架構師首先必須具有豐富的開發經驗,是個技術主管。因爲他必須清楚什麼是可以實現的,實現的方式有哪些,相應的難度怎麼樣,實現出來的系統面對需求變化的適應性等一系列指標。另外,需要對面向過程、面向對象、面向服務等設計理念有深刻的理解,可以快速的察覺出實現中的問題並提出相應的改進(重構)方案(也就是通常說的反模式)。這些都需要長期的開發實踐才能真正的體會到,單從書本上很難領會到,就算當時理解了也不一定能融會到實踐中去。

在技術能力上,軟件架構師最重要也是最需要掌握的知識是構件通信機制方面的知識,包括進程內通信(對象訪問、函數調用、數據交換、線程同步等)以及進程外(包括跨計算機)的通信(如RMI、DCOM、Web Service)。在WEB應用大行其道的今天,開發者往往對服務器間的通信關注的比較多,而對進程內的通信較少關注。進程外跨機器通信是構建分佈式應用的基石,它是架構設計中的鳥瞰視圖;而進程內的通信是模塊實現的骨架,它是基石的基石。如果具體到一個基於.Net企業級架構設計,首先需要的是語言級別的認識,包括.NET的CLR、繼承特性、委託和事件處理等。然後是常用解決方案的認識,包括ASP.NET Web Service、.NET Remoting、企業服務組件等。總之,豐富的開發實踐經驗有助於避免架構師紙上談兵式的高來高去,給代碼編寫人員帶來實實在在的可行性。

其次,具有足夠的行業業務知識和商業頭腦也是很重要的。行業業務知識的足夠把握可以給架構師更多的擁抱變化的能力,可以在系統設計的時候留出一些擴展的餘地來適應可能來臨的需求變化。有經驗的設計人員可能都碰到過這樣的事,一廂情願的保留接口在需求變化中的命中率非常低。也就是說,在系統設計之初爲擴展性留下來的系統接口沒能在需求變化的洪流中發揮真正的作用,因爲需求的變化並沒有按照預想的方向進行,到最後還是不得不爲變化的業務重新設計系統。這就是因爲對業務知識的理解和對市場或者商業的判斷沒有達到一個實用的、可以爲架構擴展性服務的水平。

再次,張友邦提到,架構設計師對人的關注必須提升到架構設計之初來納入考慮的範圍,包括溝通以及對人員素質的判斷。軟件過程是團隊協作共同構建系統的過程,溝通能力是將整個過程中多條開發線粘合在一起的膠水。大家都應該碰到過事後說“原來是這樣啊,我不知道啊”或者某個開發人員突然高聲呼喊“爲什麼這裏的數據沒有了”之類的。溝通的目的就是儘量避免多條開發線的混亂,讓系統構建過程可以有條理的高效進行。另外,對人的關注還表現在對團隊成員的素質判斷上,比如哪些開發人員對哪些技術更熟悉,或者哪些開發人員容易拖進度等。只有合理的使用人力資源,讓合適的人做合適的事情才能讓整個軟件過程更加高效。

另外,張友邦認爲架構師應時刻注意新軟件設計和開發方面的發展情況,並不斷探索更有效的新方法、開發語言、設計模式和開發平臺不斷很快地升級,軟件架構師需要吸收這些新技術新知識,並將它們用於軟件系統開發工作中。但對新技術的探索應該在一個理性的範圍內進行,不能盲目的跟風。解決方案提供商永遠都希望你能使用它提供的最新技術,而且它們在推廣自己的解決方案的時候往往是以自己的產品爲中心,容易給人錯覺。比如數據庫,往往讓人覺得它什麼都能做,只要有了它其它什麼都不重要了。但事實上並不是如此,對於小型應用可以將許多業務邏輯用script的方式放入數據庫中,但很少看到大型應用採用這樣的做法。對於新東西需要以一種比較的觀點來判斷,包括橫向的比較和縱向的比較,最後得出一些性能、可移植性以及可升級等指標。另外,新入行的開發人員往往關心新技術動向而忽略了技術的歷史,而從DOS時代一路殺過來的開發者就對現在的技術體系有較全面的把握。

構架師不是通過理論學習可以搞出來的,不學習並且親自實踐相關知識肯定是不行的。就像前面說到的,架構設計是一個工程性質的事情,只有在不斷實踐的基礎上才能逐漸熟悉起來。實踐的內容並不是去深挖各種語言的特性,因爲系統架構師是設計應用系統架構而不是設計語言(除非你是要實現DSL)。更多的時候需要帶着一種比較的眼光去實踐,把不同的實現方式下的優缺點做個總結,做到自己心裏有數,等具體的上下文環境下才好判斷採用什麼樣的方式方法。把基礎打牢的同時掌握一定的方法,架構設計不是想象中的那麼難。【記者/付江】

張友邦:張友邦,男,微軟認證專家,系統分析員,希賽網專業顧問,中國計算機學會會員。1980年生於四川宜賓,2002年獲得國防科技大學宇航科學與工程系空間工程專業學士學位,2004年初成立長沙石斑軟件有限公司並擔任總經理,2006年底出任廣州快網信息技術有限公司技術總監,2007年10月任湖南新郵信息技術有限公司軟件中心副經理。主要研究領域包括軟件架構與設計、WEB RIA、流媒體與計算機圖形圖像。受國家自然科學基金資助,於2001年發表國家級核心刊物學術論文一篇。

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