我認為,優(yōu)秀的軟件架構師在軟件開發(fā)行業(yè)中占據著很重要的位置。國外優(yōu)秀的軟件都是因為軟件架構師開發(fā)了一個擴展性很強的架構才使產品不斷完善和升級的。反觀中國,一大部分企業(yè)比較急功近利,認為界面夠漂亮就行了,完全不關心代碼的組織和架構。日本這幾年也在注重軟件架構上的分析和設計,所以有很多產品和項目外包讓中國來做利潤最少的部分。我們應該開始有意識地做這方面的事情,培養(yǎng)出一大批中國的優(yōu)秀軟件架構師。只有這樣,中國的軟件才有希望!
來自業(yè)界的聲音
什么是架構師呢?架構師是軟件行業(yè)中一種新興職業(yè)或者是角色,他要主導系統(tǒng)全局的分析設計和實施、負責軟件構架和關鍵技術決策。其工作職責是在一個軟件項目開發(fā)過程中,將客戶的需求轉化為規(guī)范的開發(fā)計劃及文本,并制定這個項目的總體架構,指導整個開發(fā)團隊完成這個計劃。架構師的主要任務不是從事具體的軟件程序的編寫,而是從事更高層次的開發(fā)構架工作。他必須對開發(fā)技術非常了解,并且需要有良好的組織管理能力??梢赃@樣說,一個架構師工作的好壞決定了整個軟件開發(fā)項目的成敗。
在中國,有多少人算得上是“軟件架構師”呢?或許很多人抱著不屑一顧的看法,認為只有蓋茨才算得上是架構師,其他人都不過是朝自己的臉上貼金。不過,我們卻不同意這種說法,因為畢竟軟件架構師只是一種角色,就像只承認米開朗基羅是建筑師一樣,都是極端的。
中國軟件這么多年的發(fā)展中,已經有一批出色的程序員跳出了程序的限制,正在從系統(tǒng)架構和全局設計的角度創(chuàng)建大型軟件甚至軟件平臺,有些人雖然擔任著管理職位,但在技術上他們仍然無愧于軟件架構師的稱謂。而程序員通過了解這些架構師的經驗和體會,也能夠朝更高的方向發(fā)展。也希望通過他們的感悟,盡可能吸引更多的人走上軟件架構師的職位。
梁永昌趨勢科技研究部和軟件系統(tǒng)架構部副總裁
主持產品與項目:1990年開發(fā)出LANProtect For Novell Netware Server第一版。此產品為業(yè)界第一個為Netware Server設計的反病毒產品,領先其它品牌九個月。從1995年至今,擔任趨勢科技反病毒引擎(VSAPI)軟件架構師。這是因為在進行LANProect的產品設計時,遇到當時反病毒引擎和其它產品在源代碼上無法共享的問題,當時反病毒引擎越來越復雜,各個產品使用的反病毒引擎功能不盡相同,造成客服相當困擾。因此決定將反病毒引擎獨立出來成為一個共享的模塊,至今趨勢科技所有反病毒產品都使用此引擎模塊。
感悟:軟件架構師在工作的范圍和責任上與蓋房子的建筑師很類似,必須知道他要蓋的是什么房子,有多少預算,施工期有多長,現在要的是兩層樓,但以后會不會要加蓋上去,廁所要幾個,廚房在哪里,哪里要設門,哪兒要開窗,梁柱要多粗,要用什么材料?因為,蓋四合院和十層大樓是不一樣的。
同樣,軟件架構師必須知道他要設計的是什么軟件,將被什么樣的客戶在什么樣的環(huán)境下使用,可使用系統(tǒng)資源限制是多少,兼容性要求高不高,安全要求是什么等級,會不會有下一個版本,下一個版本又將增加什么功能,模塊和模塊之間的關系是什么,每一個不同的考慮都會影響設計,軟件架構師就是要在考慮過種種因素后決定軟件的架構和使用技術。
大家都知道,要在老四合院頂上加蓋十層樓,全部推倒重來可能是唯一的可行方案。同樣,軟件因架構不好造成的問題或限制是很難改善的,有時甚至必須重新設計,這將會是一項耗時費力的投資,與其到時再來一次,不如現在就把架構做好。就像各式各樣的建材一樣,現在的軟件市場上有太多現成的模塊可供軟件架構師選用,但這也造成一個問題:很多軟件架構師只知有哪些模塊可用,卻不知模塊內部做了什么工作。這種知其然不知其所以然的軟件架構師隨著Internet盛行而興起,這種軟件架構師現在到處可見,架過Web Server,寫過CGI/VBS,再連上個Database,簡歷上就自稱軟件架構師,多層式網絡架構(Multi-Tiers Web Serivce Architecture)談起來頭頭是道,討論起細節(jié)卻讓人搖頭。現成的模塊可以用,也應該用,但最重要的是要知道模塊的功能和限制是什么,為什么會有這樣的限制,為什么用這個模塊而不用另一個。
其實商業(yè)軟件架構師最大的挑戰(zhàn)還是在折中的拿捏上。人力總是不足,時間永遠不夠,面對現實狀況的壓力,當完美設計(每個人都如此自認)無法如愿被全盤采用時,討論(或爭吵)就不可避免,效能可不可以讓步,安全等級能不能降低些,哪些項目可以改變,哪些又該堅持到底,這些都是要做出的決定,而且更重要的是要能讓大家充分了解你做此堅持是出自何種考慮。
軟件架構師的工作伙伴大都也是技術人員,就像自古文人相輕一樣,技術人員彼此的尊敬只會建立在技術能力的優(yōu)越性上,軟件架構師必須要有深厚的技術底子和寬廣的業(yè)界信息,再加上一點口才和親和的態(tài)度,這才容易獲得其它工程師的認可和尊敬,也才不會你畫你的十層樓,他蓋他的四合院。
廖恒毅佳軟公司董事長
主持產品與項目:曾負責中文之星2.0的開發(fā),佳軟企業(yè)管理軟件的架構設計,拼音加加等一系列軟件的架構設計。
感悟:軟件設計是一項極具挑戰(zhàn)性的工作。盡管軟件設計人員為世界上無數的人提供了工作的便利,讓大家的工作越來越自動化,軟件設計者自己的工作卻遠沒有見到能夠自動化的可能性。無數的人為了找到一套軟件設計的理論苦苦追尋,到目前為止, 很難看到有什么實質性的進展。當銀彈總是不出現的時候,也許大家都應該想想,其實銀彈也許根本就不存在。
大家都聽說過這個寓言故事。一個數學家跟國王下國際象棋,國王問他如果贏了,要什么樣的獎勵。數學家說,很簡單,你在第一個棋盤格放一粒米,第二個棋盤格放兩粒米,然后一直翻倍下去,把整個64個棋盤格放滿就好了。國王很痛快地答應了數學家的要求。但是,當國王真的給數學家獎勵的時候,才發(fā)現這是不能兌現的,因為沒有任何一個國家,即便是加上全世界的糧食也不夠。
講這個大家耳熟能詳的故事,其實是想談談我對軟件架構師的認識。真正的軟件架構師所面臨問題的復雜度,其實與這個故事很相像。大家都在憑直覺理解軟件的復雜度。而且都想得很淺, 1,2,4,8…… 多簡單的問題,即便是想到第十級,也不過就1024。再往下想一些,也還是大家能夠理解的數字。而人們憑著直覺,也就頂多想到第20格。第20格的數字還沒有超出人們的理解范圍的。真正的難題在第40格以后,很少有人能夠理解第40格以后是什么了。而第60格的難度呢,根本就不是第40格能夠比擬的。如果我們大家都僅僅用直覺的加法來理解問題的話,最后,我們會進入不可解的范疇。人類真正聰明的地方就在于發(fā)明了對數,用對數的方法解決了對這個問題的理解。即便是第64格,也不難理解了,不過就是2的64次方。
當然,軟件復雜度的問題其實比這個問題更加難解,所以我們到現在為止,還沒有找到軟件中的這個對數算法。但是,基于目前軟件界的認知,我們多少有了一些解決方案:對象編程,組件模型,多層結構……,已經為軟件設計提供現實可行的方法。問題是,這些概念理解起來也非常不容易。大家都說著同樣的詞匯,卻有可能干著完全不同的事情,所以才會有誤解,才會有爭執(zhí)。軟件架構師是一個靠無數經驗積累的結果。尤其是優(yōu)秀的軟件架構師,跟所有別的能夠成為“師”的職業(yè)一樣,在對自己的行業(yè)有了基本的了解之后,在自己不斷成長的過程中,并沒有一定的套路的。靠的是領悟力,靠的是對這個現實世界哲學性的思考。當用哲學的眼光來觀察這個世界的時候,就離一個優(yōu)秀的軟件架構師不遠了。
一個優(yōu)秀的軟件架構師,如果他愿意學的話,同樣應該能夠做出很香的飯菜來,因為軟件架構師和廚師有相通的地方。大家以為如何?師者,通也。
何健金算盤CTO,首席架構設計師。
主持產品與項目:4年管理軟件架構設計經驗,曾經先后規(guī)劃和設計了金算盤多年的主流產品。1997年,自主設計和開發(fā)了金算盤電子表格,以當時最先進的VC開發(fā)出的產品的功能、界面、特性比當時的Excel更具有本地化特色,作為財務管理軟件的報表系統(tǒng),在當年的全國財務軟件評測中報表獲得了第一。2002年,在多年的管理軟件架構開發(fā)的背景下,經過長期的探索和思考,形成了平臺的構想。并采用了先進J2EE技術,成功開發(fā)出了金算盤VP平臺。
感悟:架構師是客戶需求和開發(fā)者之間的橋梁。在軟件行業(yè)中,一般提到的架構師是技術架構師,而實際上產品架構包括業(yè)務架構和技術架構,只有技術架構和業(yè)務架構緊密結合才有可能真正創(chuàng)造出一個好的系統(tǒng)。
產品架構是現代應用開發(fā)領域最重要的課題。在這個課題里,沒有終結答案可尋,惟有恒久的問題存在。在紛繁的問題中,最重要和最“真”的問題是產品競爭力問題。除此之外,軟件架構的目的還包括滿足既有客戶需求和提高開發(fā)效率,并且要求產品架構能更好地支持商業(yè)流程,有利于企業(yè)業(yè)務集成。金算盤VPS系列產品就是以此為指導進行架構的產品。
我在做了多年的產品架構后,對這項工作也有一些自己的感觸:
首先,架構是技術。按照摩爾定律的推斷,軟件業(yè)的技術也同樣在日新月異地發(fā)生著變化,我們已經見證了開發(fā)工具越來越短的生命周期。從VB到ASP.Net,從C到Java,無論采用什么新的語言,都體現了不同時期的架構要求。架構已經跨越了簡單的過程模型,對象-時間模型,而今更多的是談論MDA,模型的快速建立,使得軟件能夠快速適應用戶變化成為了可能。而采用先進的技術,使得軟件能夠更加深度地滿足客戶需求。技術本身的發(fā)展是無止境的,如何使得軟件能夠適配新技術,成為一種更為重要的技術。采用各種模式的設計、邏輯分層、降低技術耦合使得技術的融合成為可能,也成為一項高難度的技術。
其次,架構是藝術。產品架構師需要捕捉技術和業(yè)務這個完整拼圖里的某一塊或某個脈絡作為設計的線索。架構師永遠不是先知,而是“存在的探索者”,產品架構的結果要在產品開發(fā)周期完畢時才能被印證。產品架構既要反映對技術的需求,使得架構滿足對技術的適配,對發(fā)布模式能夠提供多樣化支持,能夠滿足性能的要求,還能夠滿足對業(yè)務管理的需要,要適應目標應用的業(yè)務特性。這樣的架構,才是為應用服務的軟件架構,而不僅僅是一個簡單的可重用的技術工具。更重要的是它具有軟件的管理基因,正如平臺能夠得到大量客戶認可,其中最主要的就是它為客戶提供了技術平臺、管理工具、基礎業(yè)務,并使得它們有機地高效地結合在一起。如同流淌的藝術作品一樣,充滿了生機和互動。
同時,架構是質量。好的架構可以使得軟件產品成為一棵常青樹。在和國內外軟件產品對比分析的時候,經常有這樣的感悟,其實好多國外的軟件產品,采用的技術并不是最先進的,但是它具有非常優(yōu)秀的質量,產品穩(wěn)定可靠,同時還具有良好的技術適配能力,從而使得產品適應技術變化的能力非常強。這樣,投資人對軟件的投資價值能夠得到最充分的體現,這是國內職業(yè)經理人非常值得關注和學習的。
陳小群互信互通信息技術有限公司研發(fā)主管
主持產品與項目:全球眼數字視頻監(jiān)控系統(tǒng)。系統(tǒng)組成包括客戶端、中心服務平臺,包括:接入服務器、前端視頻服務器、分發(fā)服務器、存儲服務器、全球眼應用服務器等。系統(tǒng)規(guī)模為17個開發(fā)人員用時8個月,源代碼行數大約15萬。
感悟:軟件架構對軟件系統(tǒng)來說就象建筑結構對建筑物、人骨架對人一樣,是其它成分的基礎,是滿足功能和性能需求的關鍵,因此,軟件架構師對軟件研發(fā)項目的成敗具有決定性的作用。
軟件架構師并不像他的名字所提示的那樣僅僅負責架構的設計,通常他的工作還包括,作為技術專家負責協(xié)助開發(fā)部門、技術支持部門、產品規(guī)劃部門等各方解決技術問題。因此,他的管理和溝通能力是同樣重要的。其它主要的知識和技能還包括分析和解決問題的能力、將需求轉化為設計的能力、對系統(tǒng)未來發(fā)展的預見能力等。
一個優(yōu)秀的程序員會是一個優(yōu)秀的軟件架構師嗎?不一定。對于一個復雜的軟件系統(tǒng)來說,架構設計通常都不是一個人就可以完成的任務,需要一組具有不同知識的工程師協(xié)作完成,在這個過程中,架構師要做大量的解釋、說服、協(xié)調、總結、歸納、妥協(xié)等工作。一個沒有擔任過負責人的程序員缺乏這方面的經驗。
同時,國內一種普遍的現象是,大量缺乏編程經驗的博士、碩士、項目經理負責軟件架構設計,并聲稱不需要學習編程也能搞好軟件架構設計。計算機科學是一門實驗的、技能性的學科,許多概念必須在編程實踐中體會,技能更是必須要操練才能提高。很難想象一個不懂編程的人會理解設計模式,而不懂設計模式的人會是一個優(yōu)秀的軟件架構師!一個看了很多棋譜但從沒有實戰(zhàn)過的人聲稱自己是布局高手,你會信嗎?
全球眼數字視頻監(jiān)控系統(tǒng)是一個大型分布式系統(tǒng),它的開發(fā)涉及到分布式系統(tǒng)、網絡編程、網絡協(xié)議、視頻、音頻、控制、系統(tǒng)管理、數據庫、內容管理、Web編程等許多方面的知識。作為軟件架構師,在技術方面感受最深刻的是對化繁為簡,以及分析和解決問題能力的要求。化繁為簡就是將一個復雜的解決方案分解為一系列簡單的小方案,不僅可以提高開發(fā)效率,而且還可以提高系統(tǒng)的穩(wěn)定性。對于不斷出現的技術問題,架構師應該能夠迅速判斷其難度、重要程度,自己解決不了的話,可以有效利用其它資源解決。
在非技術方面,溝通能力特別重要,你要將你的設計思想傳達給開發(fā)團隊,這件事情已經很不容易了,更困難的是,你還要傳達給技術支持人員,甚至一些非技術人員。有的時候,你還必須妥協(xié),采用一些其他成員支持的、也許不是最好的解決方案,以保持團隊的士氣。
總之,管理、溝通、經驗、分析問題和解決問題的能力是一個軟件架構師必備的素質。對于一些所有工程師都應該具有的素質,比如,工作熱情、責任心、迎接挑戰(zhàn)的勇氣等,就不用多說了。
許式偉金山軟件WPS產品架構師
參與產品與項目:曾參與WPS Office之電子表格項目和WPS Office 2002項目。從2002年至今,參與WPS V6項目。成立框架項目,負責KFC(金山基礎代碼庫)、數據層、IO體系(XML標準等)以及Shell(用戶界面)等公共組件的研發(fā)。
感悟:今年是金山軟件創(chuàng)建十六周年,十六年來金山的每一款成功軟件都凝聚了歷代軟件架構師的心血。每一個金山人都會對自己職業(yè)有著深刻認識。
從性格角度來講,軟件構架師需要心思細膩而嚴謹;從職業(yè)特征來看,軟件構架師要充分理解和尊重軟件產品的需求。由需求引導設計而不是相反。因此,需要特別強調產品需求的重要性。記得GOF有這樣一句話:“設計應該支持變化--獲得最大限度復用的關鍵在于對新需求和已有需求發(fā)生變化時的預見性,要求你的系統(tǒng)設計要能夠相應地改進”。每個程序員都希望能夠寫出最好的程序,并使自己的程序更能適應變化。但事實表明,程序能力尤其是框架設計能力并不是天生的,而是取決于程序構架師對需求的理解程度。如果在不了解系統(tǒng)需求的前提下,就開始進行設計,那么即使是天才,也不能設計出完美的框架。
從另外一方面講,軟件構架師的設計只能應付可預測的變化,而構架師本身的技術積累和對需求的理解程度,往往會決定所設計的框架對需求變化的應變能力。大多數的設計人員都趨向于追求完美,大多對“開閉法則” (OCP:Open Close Principle,注:Software Entities should be open for extension,yet close for modificaiton.:程序應該可擴展但又不可修改)非常認同。而這是一個理想狀態(tài),但又不可太過,一味地讓系統(tǒng)應付位置的變化,會讓自己套上一個無形的枷鎖,更為正確的做法是:讓自己知道的盡可能多,當設計新版本WPS Office V6的整體框架時,通常會參考Microsoft Office和舊版本的WPS Offfice,有時甚至會看PDF對同一功能的支持情況,對同類產品的研究和比較,有助于很好地設計新產品的程序框架。
此外,作為軟件構架師,一定要善于聽取和接納不同的意見,能夠包容新的思想,愿意了解最新的技術和想法。優(yōu)秀的軟件工程師,他應該具有創(chuàng)新的理念和兼容并包的胸懷,比如:C#、AOP等。盡管我最喜歡C++的自由,但并不排斥去了解Java、C#等語言對其的改進,很多新的事物,會讓我獲得共鳴與靈感。
正如上面所講,軟件工程師需要更強的技術積累和更縝密的思維,以及對需求的深刻理解、兼容并包的創(chuàng)新意識和胸懷,軟件構架師的職責顧名思義,從事的主要工作職責就是設計軟件產品的程序構架,也就是要,對他最終設計的結果--軟件產品的程序框架負責??刹僮餍院拖到y(tǒng)的應變能力是軟件構架師的主要職責和工作重點。
我雖不是計算機專業(yè),卻是一位計算機狂熱愛好者,對C語言有著深刻的領悟,被同學們戲稱“C狂”,曾獨立開發(fā)、與同學合作開發(fā)軟件。我對于感興趣的東西,總是去探索它內在的實質性內容。從小就酷愛數學的我,在推理的嚴謹上對自己要求非常高。我相信一個觀念:嚴謹絕對不是創(chuàng)造的對立面,而是創(chuàng)造性思維的必備條件。
王棟 盛世龍吟數字科技
主持產品與項目:主持產品與項目:負責國家疾病預防控制中心的“非典型肺炎個案調查報告管理系統(tǒng)”、“國家疾病報告管理信息系統(tǒng)”、“SARS早期預警監(jiān)測試點項目”。國家質量產品認證中心的“認證人員管理系統(tǒng)”等。其中采用Apex Portal Server(24人/月)兼容于JSR-168的portal實現,采用一些成熟的開放框架,使用輕量級設計開發(fā)理念,加速開發(fā)速度縮短開發(fā)周期。
王棟 盛世龍吟數字科技
感悟:軟件架構師是團隊中的一員,和其他項目成員沒有什么區(qū)別,只不過承擔的職責要大些,因為畢竟架構設計師所作的工作比較重要。架構設計師的具體工作是為系統(tǒng)設計架構,做技術的決策。而國內對于各種角色分工不明確,通常架構師都有項目管理的職責。
一個成功的架構設計師一定是不僅精通設計工作而且精通實現工作的。缺乏了設計的實踐,就缺少了對系統(tǒng)整體的把握;缺乏了實現的實踐,則缺少了對系統(tǒng)中某些重要技術點的全面了解。在和團隊成員的交流當中,特別是講述自己的設計思想時,設計圖固然重要,但設計圖只能提供一個概念模型,真正的設計還是需要用源代碼體現。為了更好的設計和實現還要掌握各種工具和類庫的使用,因為架構設計師有時還是技術咨詢顧問。
在系統(tǒng)設計和技術決策時,最難做到的就是平衡和取舍。在規(guī)定的時間內,團隊內部人員的技術水平和狀態(tài)、技術的成熟穩(wěn)定度、技術實現的難易程度等因素都會影響系統(tǒng)架構的最終實現。比如去年四月底—正是SARS在北京鬧得最兇的時候,我們接到了國家疾病預防控制中心的《非典型肺炎個案調查報告管理系統(tǒng)》的開發(fā)任務,由于國家疾病控制中心沒有一套基于互聯(lián)網的疾病申報系統(tǒng),給這種突發(fā)性的傳染性疾病申報工作帶來一些困難。全部基于傳真和電話的申報信息必須經過人工處理才能形成報告上報,而面對神秘的SARS,申報的內容在不斷的調整,上報的流程也在不斷地更改,如果我們仍然按照通常的應用程序開發(fā)方法,可能很快就能完成這樣簡單的數據提交工作,但是如果任何地方稍有改變,程序開發(fā)人員必須在現場完成程序更改。由于當時的特殊情況,我們的開發(fā)團隊也不可能保持特別大的規(guī)模,而時間要求又極其苛刻——一周之內系統(tǒng)要測試上線。經過權衡,認為必須滿足可實時動態(tài)定制申報內容以及定制的查詢統(tǒng)計,我們承擔著巨大的壓力,最后決定采用簡化的模型實現系統(tǒng),用項目成員最熟悉的技術和概念,完成保證系統(tǒng)運行的最小功能集合。
對于一個系統(tǒng)或產品,還需要有不斷改善它的耐心,有時還需要推翻重新實現的勇氣。上邊提到的項目第一階段,在瘋狂的加班加點中基本完成了。不過,由于時間倉促系統(tǒng)還是有改進和提高的余地。在接下來的幾個月時間內,我們做的就是不斷對這個系統(tǒng)細化,深化,修改,調整。這時候,其他相關項目也要啟動了,啟用我們的核心引擎后,經過很短時間的定制,都分別上線運行了,充分體現了原有模型的設計重用性和系統(tǒng)的可擴充性。但精益求精,針對新的需求,我對原有的一些設計缺陷有了新的認識,界面不夠靈活、流程不能定義、結構稍顯混亂,等等。
隨著又一個項目,所有上次積累下來想修改的東西都有了機會重新實現,這是多么美好的感覺。國家質量認證中心的業(yè)務系統(tǒng),有更多表單要填寫,有更多的復雜流程要實現,有更多的組織機構和角色要定義,需要更靈活的表現形式和配置功能。以前的系統(tǒng)引擎就不能滿足了,就決定使用更新的結構、更新的工具甚至是更新的過程來實現。這回我們做到了每一個工作流可以用戶自定義,每一個工作流節(jié)點中的表單用戶可以自定義,每一個查詢都可以自定義。隨著時間推移,這套系統(tǒng)也在不斷演進中。
作為軟件架構師,學習的能力和態(tài)度、敏銳的觀察能力是非常重要的。必須通過各種途徑學習和觀察。對于目前國內的應用狀況和互聯(lián)網應用的不斷深入,在不斷的學習和觀察中我覺得不管在哪些方面都需要整合,不管是企業(yè)內部的各種信息孤島還是互聯(lián)網上的各種應用。如何去整合資源,為最終用戶服務,這個問題讓我自然想到了Portal,這將是我們公司下一個重要發(fā)展方向。面對Portal世界中紛繁的技術,下一波的學習和實踐就要啟動了。
一個軟件架構師,要勤于學習、觀察、思考,決不放棄對最底層實現技術的掌握同時需要把握好系統(tǒng)框架的平衡,學會正確的取舍,并且要有耐心和勇氣面對自己的設計,不斷進行改進甚至重新實現。
周恒 浪潮軟件技術研究中心
主持產品與項目:開發(fā)了Web應用框架,配套開發(fā)包,樹立了企業(yè)應用框架在浪潮軟件的地位。這一產品也從以Web應用框架1.0為基礎,發(fā)展到今天的包含Web應用框架、工作流平臺、商業(yè)服務平臺、業(yè)務規(guī)則引擎等的企業(yè)應用框架3.0。這一企業(yè)應用框架也已在除煙草外的通訊、衛(wèi)生、政務、稅務等行業(yè)全面開花。
感悟:回顧工作兩年來的情況,分析和目標的差距,朝著目標一步步前進,談談我的反思和體會:
補充基礎理論知識。IT的技術發(fā)展是非??斓?,新技術層出不窮,但是各種技術之間很多原理是一樣的,是相通的,重要的是要把原理搞通。
擴寬知識面。最初,我的知識面還是太窄,當時對于網絡、存儲、大小型機、大型數據庫幾乎都沒有深入的接觸和使用。對于構建一個全新大型的基于J2EE的企業(yè)應用系統(tǒng)來說,架構師需要熟悉數據庫技術、操作系統(tǒng)技術、存儲、網絡技術,J2EE體系架構,MVC框架,Java程序語言,還需要熟悉一到兩個應用服務器、一到兩門大型數據庫。
架構師需要具備扎實全面的技術,掌握廣泛的開發(fā)技能,超離于程序語言之上,熟悉多種系統(tǒng)架構,有豐富的開發(fā)經驗,能選擇并設計合理的方案。
要深入。深入到本質里面去,絕對不能浮躁。不光要了解表象,還必須了解隱藏在表象里面的本質。架構師不只是使用者,更多的是建造者,創(chuàng)新者,每一個決定都可能會影響幾十個開發(fā)人員和成百上千的使用者,因此必須深入熟悉技術的本質,了解原理,才能靈活運用,不可能臨時抱佛腳,現學現賣。
浮躁只會讓人一事無成。曾見過一些人,寫了兩月程序,就嫌寫程序低級要去做設計,剛寫了兩月設計,就嫌設計低級,就要去搞需求分析,剛搞了兩天分析,又覺得搞技術沒前(錢)途,就要去搞管理或者搞市場。也見過一些人,搞了三月嫌工資低,跳一下漲點工資,再搞三月又跳跳漲點工資。跳來跳去,開始還能往“上”跳, 到后面只能被趕著往下跳了。
加強交流和溝通。曾經悶頭苦學,希望能學得很牛,把什么都研究透了,然后可以教徒弟,可以帶出一批人來。在這個過程中總是碰到一些檻,雖不至于灰心喪氣,但也挺郁悶。頭告訴說不要指望一個人都干完了,再厲害也不可能把啥都搞明白,一方面要形成一個學習的氣氛,大家都很厲害,水漲才能船高,另外一方面要加強和業(yè)界尖端人士的交流,共同提高。
學習能力對于一個搞IT的人來說非常重要,如果沒有很強的學 習能力,很難快速適應技術變化的能力。
有一年只做了一個物流管理系統(tǒng)一個單,基于J2EE的單子,一切都是從頭做,單子額不大內容卻不少。雖然最后順利完成,卻因為廣泛使用了應用服務器提供商提供的一個不成熟的擴展包而吃盡了苦頭。雖說架構師不糾纏于細節(jié),但是忽略了細節(jié)卻可能造成嚴重的后果。對于7X24小時系統(tǒng),一個細節(jié)不處理好,就會造成停機和嚴重的損失。細節(jié)就是追求完美,架構師既要有好的大局觀,也不能忽略細節(jié),要求我們不僅對原理搞明白,很多時候必須對具體技術實現有透徹的了解。
架構師要對系統(tǒng)的功能負責,對系統(tǒng)的成熟度負責,對系統(tǒng)的成本負責,架構自軟件始而始,自軟件終而終。架構師需要參與擬定項目的各種標準和規(guī)范,要指導大家,要和低層設計人員探討一些難點的設計問題,他不僅僅是一個技術高手,還要充當技術的領導者,因此,學習一些軟件工程的知識和提高領導力是絕對有必要的。
在項目組中,架構師是一個角色,不一定就是一個人,可能是一個小組。
架構師雖然不要忽略細節(jié),也要警惕過分追求完美,架構師學會放棄,在系統(tǒng)的功能、成熟度、成本中取得平衡,從客戶的角度和開發(fā)者的角度來考慮問題。特別是要警惕技術情結,不能一味追求最新的不成熟的技術,對于難以完成的功能,也需要暫時舍棄。不可能一下造成最完美的系統(tǒng),
袁德俊 軟件工程師 自由職業(yè)
主持產品與項目:1997年金山游俠開發(fā)成功,一直從事系統(tǒng)編程多年。目前,自主開發(fā)的C語言規(guī)范的腳本語言“NGNc”具有高聚合低偶合的系統(tǒng)設計。NGNc從體系結構和應用層級都與JAVA如出一轍,絕非模仿,而是從需求中來。
感悟:自從電腦出現在我的視野,能延伸我的頭腦是我對計算機的最直接感受。而從事軟件編程更給我無窮的力量和沖動,探索、挑戰(zhàn)、駕御是我從一個個不眠之夜的開發(fā)中獲得的最大樂趣。起初只是簡單的重復著編譯Sample,添加個別功能,以為語言就是計算機的全部。隨著系統(tǒng)編程的深入,漸漸我的思維習慣轉變了,操作系統(tǒng)的代碼跟蹤,給了我更大的空間去探索,就象進入了一個幽暗神秘的海洋,漫漫地與現在的各種概念越來越遠,有時候同朋友們溝通都缺乏了共同的關注焦點。
開發(fā)NGNc完全是個偶然的機會。一直以來,用VC的IDE環(huán)境開發(fā)項目,并組織和管理項目需要的文件,盡管VC的功能很強大,但在項目后期,每每都是因為修改個別的數據,而重新編譯整個項目,很麻煩。起初,通過設計系統(tǒng)的數據文件格式,將數據文件搬移出項目,將引擎和數據分離,只在修改數據的時候,用數據編輯器或簡單文本進行描述。編制數據編輯器雖然可以避免規(guī)范數據輸入等優(yōu)點,但額外工作產生了:文本描述成為我們主要的目標。
最初文本描述方法簡單,比如Window的Ini文件管理模式。隨著文本文件格式的逐步復雜,文本文件到特定數據格式的轉換工具越來越想向C語言轉變。這就是NGNc的第一個產生的契機。我們叫它“DataOut”,顧名思義就是將數據拿出來的意思。
項目開發(fā)的越多,項目后期對控制邏輯和規(guī)則描述的需求也逐步呈現出來。僅僅DataOut已經不能滿足我們的需要,起初同文本數據描述一樣,只是簡單的規(guī)則羅列,但隨著功能的發(fā)展,支持簡單的類C語言的規(guī)則書寫方式被支持了。
發(fā)展到現在NGNc已經完全成為了真正的C語言,并擁有自己的虛擬機,IDE調試環(huán)境,NGNbios的UI支持庫,它還將會擁有很多很多。隨著我對NGNc的駕御,我的視野寬廣了,可以想象在它的支持下的應用會更加開枝數葉。
另外說明一下:NGN是“Engine”的音,NGNc是我對它的期望,不只驅動應用,更可以驅動我的夢想,就如同每個程序員在深夜里完成一段代碼后的成就感一樣。
我對“軟件架構師”的理解是,它只是眾多軟件行業(yè)內的一個分工,無論它的高度如何,需要多么資深的背景,多少年頭的開發(fā)經驗,他只是一個崗位,就如同其他崗位一樣,他需要思考他這個層面的問題。任何一個崗位都可以說是一個架構師,如同:人體、器官、組織、細胞,都是個相對封閉的系統(tǒng),都異常的精密,只是它們都有它們各自的責任范圍。
軟件架構師如果是軟件工程師的能力體現,他應該具備從宏觀到微觀的全部知識,并在他的頭腦中運轉著整個行業(yè)甚至世界的模型,他可以通過自己頭腦的精密模擬,實現對任何問題的把握,無論是宏觀還是微觀。我們之所以需要這樣的人,就是因為我們的電腦無法完成如此復雜的計算,即使用巨大的知識庫陣列也無法達到大腦的快速處理速度,有時候,架構師的一個感覺就可以左右整個行業(yè)甚至未來。
具備這樣高度的人是值得人們崇拜的!
后 記
軟件架構師可細分為應用架構師和技術架構師,應用架構是軟件本身作為一個應用而存在的結構,技術架構是使應用能夠運轉的支撐架構。就像軟件是為社會為生活服務一樣,技術架構是服務于應用架構的。
有不少新員工,因為基本是從大學畢業(yè)的人,學習接收新東西的能力都挺快,但是成就迥然有別。有的人,也具有強烈的好奇心,但為了學習而學習,敝帚自珍,不愿意應用到開發(fā)和工作中去,這種人,學到一定程度就很難再提高,學習能力只能算是不及格。
而且,還有一些立志做J2EE架構師的程序員,不但不愿意深入學習Java虛擬機規(guī)范,對于API也只是一知半解。問其理由,答曰,犯不著搞明白,到用的時候查查API就行了。天哪,到用的時候查查API就行了,如果你是一個摩天大樓的建筑師,到蓋高樓的時候現查查各種建材的參數規(guī)格指標就能蓋起大樓來了么?就能把水、電、梁、管、消防等搭配得合情合理么?想想看,我們做的架構可能也會影響大批設計師和程序員,影響大批使用的用戶,豈是現查API就能行的?
因此,我們可以說:架構是一門科學,更是一門藝術,觸類旁通,除了掌握深厚的技術知識以外,要盡可能多地掌握領域知識。成為架構師,沒有速成的辦法,唯有實踐+努力。
--
學海無涯