??
字號:
第十三章 軟件科技的發(fā)展和Borland的未來
"Into The Future?"
在前面的章節(jié)中,本書討論了許多現(xiàn)象和問題。除了Borland本身的發(fā)展故事之外,
也討論了一些科技的現(xiàn)狀和未來的發(fā)展。在Java和.NET平臺的競爭以及許多科學技術
的發(fā)展下,Borland的未來到底會如何呢?Borland又要如何適應才能夠持續(xù)在信息界
競爭、生存下去,進而茁壯成為更大的信息公司呢?在本章中我將提出一些個人的看
法。
除了軟件公司的發(fā)展之外,我也觀察到了一些信息技術的走向。這些信息的發(fā)展在未
來也都將牽動著開發(fā)人員的走向。除了在第10章中討論的事項之外,我也認為更精致
化的程序開發(fā)能力、面向對象和Modeling的平民化、Web Service的發(fā)展以及.NET平
臺的普及化都將在2003年開始對于開發(fā)人員產生愈來愈深的影響。其中,Web Service
和.NET是開發(fā)人員無法控制的信息發(fā)展潮流。開發(fā)人員唯有在了解了它們的趨勢之后,
及早準備以適應未來的趨勢。
而精致化的程序開發(fā)能力、面向對象和Modeling技術的平民化,則是屬于比較貼近開
發(fā)人員的發(fā)展,也是開發(fā)人員能夠掌握和進一步控制的因素,是軟件人員必須了解未
來繼續(xù)從事軟件開發(fā)工作時必須克服和掌控的技術趨勢。
到底這些因素的影響事項是什么呢?為什么它們對于軟件人員在未來有很大的影響呢?
這些也是本章討論的重點。
不都是整理和抽絲剝繭嗎?
我在從事信息工作的生涯中使用過數(shù)種不同的程序語言、數(shù)據(jù)庫、組件模型以及
Framework。面對許多新的技術不斷地出現(xiàn),開發(fā)人員似乎陷入了永遠學不完新東西的
夢魘。不過,如果開發(fā)人員仔細回味許多技術的本質,卻會發(fā)現(xiàn)這些技術其實只是把
我們已經了解的東西再以更細致化的方式加以運用,關鍵在于開發(fā)人員是否注意到了
這些本質和趨勢而已。
例如,目前在C++中流行得火熱的Template、Policy-Based template,在Java、Object
Pascal和C#中當紅的接口程序設計,以及各種組件模型和Web Service中的服務接口
等,如果我們仔細地咀嚼,會發(fā)現(xiàn)許多的東西正是發(fā)揮程序員原本就擁有的整理和抽
絲剝繭精神,再加以發(fā)揮的東西。這怎么說呢?讓我們以數(shù)個例子來說明讀者就容易
了解了。
首先讓我們想想為什么會出現(xiàn)數(shù)據(jù)庫這類的產品?很簡單,因為由于數(shù)據(jù)愈來愈多,
數(shù)據(jù)種類也愈來愈繁雜,因此造成了我們需要一種軟件產品能夠整理這些數(shù)據(jù)讓它們
更容易的被我們處理和使用,因此才有了數(shù)據(jù)庫的想法和產品。
在每一個程序員學習撰寫程序代碼時,也會發(fā)現(xiàn)隨著撰寫的程序代碼愈來愈多,許多
的程序代碼不斷重復出現(xiàn)和被使用,因此很自然的程序員開始使用例程(routine)/子
程序(subroutine)或是過程(procedure)、函數(shù)(function)等機制幫助我們進行程序
代碼整理和抽絲剝繭的工作。
這些數(shù)據(jù)和程序代碼整理的工作幾乎是每一個程序員的求生本能,只是有的程序員只
做基本的整理工作,而更聰明的開發(fā)人員則對于整理的工作有不同的看法,進而促使
了許多延伸軟件技術的出現(xiàn),也開始對軟件開發(fā)產生了重大的影響。例如,對于原本
雜亂的程序代碼以數(shù)據(jù)和程序代碼分離的看法而逐漸產生了面向對象的技術,以分離
例程/子程序和數(shù)據(jù)類型為看法的應用則產生了類似C/C++中的template技術,而以函
數(shù)面對服務的看法,認為開發(fā)人員應該面向服務的開發(fā)模式則造成了接口程序設計
(Interface Programming)的應用熱潮。雖然現(xiàn)在這些從程序代碼延伸出的技術都獨領
風騷,在軟件開發(fā)界中產生了重大的影響和開發(fā)模式的改變,但是,如果我們追根究
底來觀察,這些技術不都是從對程序代碼和數(shù)據(jù)的分析、整理和抽絲剝繭之后,以更
精致的方式來處理和開發(fā)軟件嗎?
因此,本著相同的想法和精神,聰明的開發(fā)人員開始脫離單一程序語言的架構而進入
了開發(fā)出可重復使用的軟件組件模型,讓不同的程序語言都能夠在統(tǒng)一的組件模型中
達成團隊開發(fā)的功效。這個更聰明的整理和抽絲剝繭的想法造就了CORBA、COM/COM+
和EJB等組件模型的驅動力。
除了脫離程序語言之外思考的開發(fā)人員外,另外有一些開發(fā)人員則再次回頭檢視本身
和他人的程序代碼,并且努力搜尋優(yōu)良和成功程序代碼的基因,因此發(fā)現(xiàn)了這些優(yōu)良
和成功的程序代碼似乎都有著類似的模式和架構,再經過進一步的分析之后終于產生
了Design Pattern,這成為目前最重要的軟件開發(fā)模式和技巧之一。在這之后,這些
聰明的開發(fā)人員了解到如果能夠成功運用Design Pattern,并且把程序設計轉變成以
服務為目標的方式,將更能夠簡化、標準化和結合Design Pattern的運用,并且隱藏
復雜的實現(xiàn)技巧,這就進而產生了Service Interface Programming的觀念和技巧。
由此可見,只要開發(fā)人員能夠發(fā)揮細心整理和抽絲剝繭的能力,那么即使無法創(chuàng)造出
偉大的新軟件工程或是軟件技術,但是仍然能夠幫助我們增加生產力和軟件品質。因
此,對于開發(fā)人員來說重要的不是無止境地學習層出不窮的各種新技術,而是到底有
沒有了解這些技術之后代表的觀念、思想,以及學習最重要的對于軟件開發(fā)整理和抽
絲剝繭的能力。在我的工作生涯中,一直認為技術終究是會被大多數(shù)的人學會的,但
是在辛辛苦苦地努力這么多年后,到底我們的思想、眼光和抽絲剝繭的能力是否有所
精進呢?如果沒有,那么我們永遠就像被蒙著眼睛,只能尾隨著他人告訴的技術前進,
永遠找不到自己的方向。
現(xiàn)在,再讓我們以一個C++的例子來證明只要開發(fā)人員能夠看透程序語言和技術背后
代表的真實意義,那么即使是在已經被眾人熟知的技術中,仍然能夠創(chuàng)造出新的技術
和含義。在Andrei Alexandrescu先生所著的"Modem C++Design"一書中,我們再次看
到了聰明的開發(fā)人員對于程序語言的了解和對于程序代碼撰寫整理以及抽絲剝繭的驚
人能力。Andrei的想法不算復雜,但是卻巧妙地運用了對于C++ template深刻的了解
而創(chuàng)造出了自己的精彩之作。其實,全書呈現(xiàn)的思維之妙,讓讀者可以從一開始的小
范例就看出如何運用已經廣為人知的技巧之后呈現(xiàn)出的不同風貌。
例如,Andrei想法是以Policy-Based想法為主,以各種不同的準則來提供服務函數(shù),
那么通過C++ template的能力,讓開發(fā)人員能夠根據(jù)自己的需求來選擇需要的Policy
和數(shù)據(jù)類型,結合于C++的template,可以捉供開發(fā)人員前所未有的自由度,并且開
啟了以往函數(shù)庫開發(fā)人員無法想象的揮灑空間。例如,下面的程序代碼中提供了三個
不同的類別,這三個類別都可以建立指定類別T的對象實例(Object Instance),但是,
這三個類別各自使用了不同的方式來建立T的對象實例。在這里提供了建立T類別的對
象實例的準則Create()方法,但是卻允許開發(fā)人員自由地根據(jù)自己的需求選擇要使用
那一種方式來建立對象實例。
由于上面的三個類別提供了相同的Policy(其實,從Service Programming的角度來看,
可以說它們都提供了相同的服務),因此,開發(fā)人員可以再自行定義一個consumer類別,
并且結合C++的template功能,讓這三個服務類別成為客制化數(shù)據(jù)類型,再通過template
的能力,自由地被開發(fā)人員選擇使用。例如在下面的程序代碼中,WidgetManager
類別通過template功能可以在編譯時期動態(tài)決定使用那一個Policy類別作為父代類別,
而自動擁有建立T類別的對象實例的能力。
最后,我們可以再次使用template能力在編譯時期由開發(fā)人員代入欲建立的T類別的
實體類別定義,通過template功能結合Policy服務和各種不同的數(shù)據(jù)類型。例如,下
面的程序代碼即指定了使用OpNewCreator這個Policy服務類別,以傳統(tǒng)的new操作數(shù)
來建立Widget類別的對象實例,并且定義成新的客制化類型MywidgetMgr:
typedef WidgetManager<OpNewCreator<Widget>>MywidgetMgr;
在這個范例中,我們看到了Andrei真正了解了程序語言的機制,并且經過他的思考和
抽絲剝繭之后,開創(chuàng)出了以Policy為主的template class library。Andrei的這番思
考的確為C++語言開創(chuàng)了新的應用和視野,這正是發(fā)揮開發(fā)人員聰穎的整理和抽絲剝
繭能力的另外一個好典范。
不過,C++的template功能卻只局限于C++程序語言本身,這是因為template是C++語
言本身的特性,只有C++編譯器提供了強勁支持。所以,C++的template無法在程序語
言之外和其他的程序語言合作提供類似組件模型的能力,因為其他的程序語言并不了
解template,也不支持template,這也是為什么Microsoft會以COM來提供不同程序語
言之間的整合,EJB則更單純地只限定使用Java的原因。
其實在上面討論的C++ template中,仍然可以通過混合編譯時期和執(zhí)行時期的功能來
提供C++在組件模型和其他程序語言或是技術結合的能力,同時又能夠使用C++本身強
勁的語言機制。例如,我們可以在外部使用XML作為組態(tài)文件,以指定我們想要使用
的Creator以及想要建立的對象。例如下面的XML內容即指明了和前面相同的Creator:
OpNewCreator,以及要建立的對象:Widget:
而C++可輸出一個純粹的服務接口,類似COM的接口以便和其他組件模型或是程序語言
整合:
最后,在CPPCreator的實體衍生類別中可以通過分析XML組態(tài)文件的內容來決定建立
何種的Manager:
上述的機制可以讓C/C++語言提升至組件模型和其他的技術整合的層面,又能夠仍然
使用本身強大的template、Policy-Based template或是template函數(shù)庫。當然,這
里我并不是以討論C/C++程序語言的技巧為主,不過,上面的程序代碼仍然可以進一
步使用dynamic dispatch來改善,成為品質更好的程序代碼。
其實,這些想法和實現(xiàn)機制仍然是在使用整理和抽絲剝繭程序代碼的方式來解決問題,
只是以更細致的想法重新給予程序語言或是工具新的意義并且運用在日常的開發(fā)生活
之中,有時候只要腦筋稍為轉個彎就能夠看到新的應用。
現(xiàn)在,除了在程序語言層面運用各種整理和抽絲剝繭的技術來增進我們開發(fā)的速度和
品質之外,許多人已經開始運用相同的想法在建立企業(yè)應用系統(tǒng)了。例如,現(xiàn)在許多
人已經了解Design Pattern除了在程序語言方面有實質的幫助之外,在企業(yè)應用系統(tǒng)
的設計方面更有極大的應用價值。而且許多人已經開始整合這方面的Design Pattern,
例如Martin Fowler最新著的"Patterns Of Enterprise Application Architecture
"一書中便分析和整理了他觀察和使用Design Pattern在設計和發(fā)展企業(yè)應用系統(tǒng)的
心得。在這本書中,Martin Fowler也清楚地說明了他只是發(fā)揮了整理和抽絲剝繭的
原則提供給開發(fā)企業(yè)應用系統(tǒng)的開發(fā)人員參考,許多的Design Pattern并不是他發(fā)明
的。可見,現(xiàn)在許多的開發(fā)人員只是更精煉地觀察和整理多年的開發(fā)經驗,以萃取出
更佳的Coding和開發(fā)的技巧以及開發(fā)慣例。
而Design Pattern運用在企業(yè)應用系統(tǒng)中的功用是能夠幫助開發(fā)人員更了解整個系統(tǒng)
的架構,并且更容易掌握如何分門別類企業(yè)應用系統(tǒng)不同層次之間如何的切割和分發(fā),
能夠營造出體質更為健全的復雜企業(yè)應用系統(tǒng)。
目前,這股重新整理和抽絲剝繭的風氣也已經蔓延到各種信息開發(fā)領域,從程序語言、
組件模型一直到大型應用系統(tǒng)的設計和開發(fā)。我認為,下一步將繼續(xù)進入整個開發(fā)流
程的領域之中。當軟件廠商提供了完整的開發(fā)流程工具之后,就開始會有人研究如何
在開發(fā)流程中再度應用Design Pattern等技術。
因此在未來,開發(fā)人員必須了解Patterns,并且在開發(fā)的過程中時時注意軟件開發(fā)的
趨勢和使用慣例,不斷吸收更多的技巧,以更精致的思想和方式來開發(fā)軟件,如此一
來才能夠脫穎而出,在軟件開發(fā)的生涯中出人頭地。
Web Service Works
SOAP和Web Service從去年開始快速興起,并開始占據(jù)信息整合應用的市場。雖然許
多人提出對于SOAP和Web Service執(zhí)行效率和安全性的質疑,但是,SOAP和Web Service
的穿透力、整合力卻無庸置疑是極具吸引力的。因此,目前Web Service的各種規(guī)格
除了蓬勃發(fā)展之外,Web Service的應用也的確開始出現(xiàn)在我們的四周。不過,Web
Service到底應用在哪些方面呢?SOAP和Web Service目前在信息業(yè)界使用的情形如何?
相信這些都是許多人關心的問題,也是許多人想要知道的答案。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -