正方:當然當然,面向對象這鬼東西跟王菲的歌兒一樣,初聽時空靈、澄澈,誘惑力十足,聽多了卻發現它離我們凡人竟那么遙遠,簡直是遙不可及。你一定背過無數面向對象的名詞術語,你一定記過許多UML的圖示和標記,可無論你怎樣努力,當你面對實際的軟件開發項目時,你是不是有特別無助,不知道從何下手,或者腦子里一片空白,恨不得回到匯編時代的感覺呢?這是為什么?理論難以付諸實踐呀!
反方:錯!你的論辯從一開始就犯下了南轅北轍的毛病。我們今天要討論的是,程序員是否需要一本指導面向對象開發實踐的書籍,可你說了半天,都是在論證面向對象的理論要聯系實踐。理論當然要聯系實踐,但我們絕對不需要這么一本美其名曰“實踐指南”的破玩意兒!理論就是實踐的指南,理論就是一切,理論不需要任何多余的演繹!當程序員記熟了Jacobson等面向對象大師的理論之后,只要在實踐中不斷探索,不斷總結經驗,自然會找到正確的道路,自然會一天天走向成熟。
正方:老兄,你太天真了!你以為所有程序員都能像你一樣無師自通,舉一反三嗎?對大多數人來說,從茫然無知到滿腹經綸需要有書籍的導引,從一肚子墨水兒到一身絕活兒同樣需要書籍的導引——這就是“實踐指南”或類似書籍存在的價值!我給你舉個例子,初學面向對象,初學需求分析的人很容易記住用例分析的基本步驟,很容易掌握用例圖的繪制方法,但我見過許多剛學會用例分析的程序員在真正的項目里只畫了一、兩個用例圖就徹底對面向對象的需求分析失去了信心,然后立即投向了傳統的、粗放式的需求分析方法——整理(實際上是重復)用戶需求、編撰成文并開始設計。難道你不認為這是因為他們缺乏有效的引導和幫助嗎?如果有一本書告訴他們用例分析的理論如何應用,如何轉化成實際的需求分析結果,不就可以幫助他們重建對面向對象的信心了嗎?
反方:注意注意,你提到了用例分析。首先,我必須告訴你,用例分析不僅僅是一種局限于面向對象領域的需求分析方法,面向對象的需求分析技術也不僅僅包含用例分析這一種。其次,我必須通知你,你像古時候的宋國人那樣有揠苗助長的毛??!就算有一些初學者在前幾個項目里無法體會用例分析技術的真正價值,就算有一些程序員在實際項目中將面向對象技術束之高閣,你也沒必要逼著他們去閱讀一本所謂的“指南”——沒有哪一本書可以讓菜鳥一夜之間成為高手!對真正的程序員來說,實踐本身就是最好的老師,就是最好的指南!當那些不愿或不敢使用面向對象技術的程序員在開發過程中不斷碰壁,不斷遭遇挫折后,他們自然會想到,要讓自己學過的理論真正發揮作用——這種認識一旦產生,他們就會一輩子受用不盡!
正方:我怎么又碰見了一位斷章取義的兄臺?我從來沒有說過用例分析只適用于面向對象的需求分析,我也從來沒說過面向對象的需求分析只有用例分析這華山一條路,你卻急著駁斥這根本不存在的“口誤”!反倒是你自己,說著說著就露餡兒了不是?你憑什么說“那些不愿或不敢使用面向對象技術的程序員”就一定會在開發過程中四處碰壁?面向對象只不過是有效的開發方法之一。許許多多使用結構化程序設計的程序員也能開發出優雅、高效的軟件。我所說的“實踐指南”只適用于那些選擇了面向對象技術的程序員。再跟你舉個例子,學過面向對象的人都知道OOA,都知道分析模型,但他們都能理解分析模型在軟件開發中的作用嗎?他們會不會在實踐中采用必要的手段,防止分析模型過于龐大或過于簡單呢?他們是否知道如何驗證分析模型的有效性呢?
反方:拜托,我也從沒說過不使用面向對象技術的人就一定會碰壁,但君子坦蕩蕩,我是不會跟你一般見識的。你還千萬別跟我提什么OOA,提什么分析模型,一提這個我就來氣。絕大多數人并不真正懂得OOA的含義,他們甚至無法說出OOA和OOD的本質區別。他們根本就不知道,關于提煉分析模型的方法,面向對象的理論界仍然存在相當多的爭論。OOA是面向對象技術里最容易把程序員引入歧途的概念之一,如果沒有一種規范的理論指引,初學者一會兒就會被各種相互矛盾的說法繞暈了。所以,學習OOA最重要的是從一而終,也就是堅持某一種理論,不要管其他的說法。一本經典的理論書籍必不可少,但你說的那個什么“實踐指南”,恐怕就有添亂的嫌疑了吧?
正方:請不要以你自己的狹隘經驗判斷你并不一定十分熟悉的世界!你怎么知道撰寫“實踐指南”的作者一定會給初學者增添學習負擔呢?這種指南性的書籍本身就是為經典理論書籍釋義明理的好幫手,你喝咖啡還要加點兒咖啡伴侶呢,為什么就不能在閱讀大師著作之余,在一本“實踐指南”的引導下提高自己吸收和轉化知識的能力呢?就拿架構設計來說,那么多一心想當架構設計師的程序員明知道要耐心學習各種架構設計方法,包括面向對象領域的組件架構、子系統架構、分層模型等架構技術,但他們一看見經典理論書籍上那些枯燥乏味的條條框框,就再也提不起精神了。這個時候,要是有一本“實踐指南”告訴他們:“別泄氣,架構設計并不是那么難。瞧,對于這么一個實際的案例,你只要如此這般,再如此這般,你的軟件就有了可以和Oracle、Apache或者Eclipse媲美的架構模型?!薄窃撚卸嗪冒?!
反方:別做美夢了!還和Oracle媲美呢!對于大多數面向對象的程序員來說,能按照教科書里的條條框框,把軟件架構設計成中規中矩的樣子,不出大的差錯就謝天謝地了。軟件架構這玩意兒,還真不是所有想玩的人都能玩出彩的。像比爾·蓋茨那樣的“鬼才”當然可以大言不慚地自封為“架構師”,但90%以上的平庸人士,最好還是老老實實地背誦理論書籍里那些看似枯燥,實則妙用無窮的經典架構,比如三層結構,比如MVC模型,比如AOP架構等等。在這方面,程序員根本不需要什么“實踐指南”!
正方:冷靜!冷靜!老兄,你一面說架構設計的理論“枯燥”,一面又要程序員“老老實實地背誦”,你這不是牛不喝水強按頭嗎?我心目中的那本“實踐指南”正是一本把枯燥、抽象的理論變成有血有肉的知識和經驗,把學習變成一種樂趣的書籍!這種書籍不但能降低理論知識的學習難度,而且可以激發程序員藏在心底的靈感。對,靈感,每個人都有靈感,只不過有些人意識不到罷了。比方說,我們讀《設計模式》的時候,會對那四個無比杰出的大師佩服至極,也會為我們自己無法總結出如此精練的設計模式而沮喪至極。但你想過沒有,《設計模式》是死的,程序員是活的,軟件也是活的。如果把你心底深處那一點點靈感拿出來,如果你能在一本“實踐指南”的幫助下,大膽地在軟件設計過程中應用、組合甚至是發明設計模式,那你不也可以擁有和大師一樣的成就感和自豪感了嗎?
反方:算了吧,你病入膏肓了。拿我從澳大利亞學來的歇后語說,你這是“獨生女的兒子——沒救了”。還《設計模式》呢!你知道什么是“設計模式”嗎?你知道設計模式是由多少個著名學者花了多少年的時間研究出來的嗎?那可是面向對象領域無比正確、無比光榮、無比偉大的設計模式呀!你居然想把自己的靈感與設計模式相結合,你居然還想“發明”設計模式?你簡直是在玷污我心中的圣土,你的做法和那些瘋狂、殘暴的異教徒有什么不同?要讓我看呀,你說的那種“實踐指南”多半是一本宣傳異端邪說,不能登大雅之堂的小冊子罷了!
正方:啊,我終于看到你的真面孔了,你原來是這么一個徹底墮落、徹底偽善的衛教士呀!你知道理論都是發展變化的嗎?你相信世界萬物都在無休止運動嗎?我可不愿意與一個渾身中世紀味道的腐朽分子討論問題。在面向對象的世界里,沒有哪種技術是絕對的和永恒的。就拿UML語言來說,從誕生至今,人們總結出了許多種使用UML的方法,比如拿UML當“草圖”來用,拿UML當“藍圖”來用,拿UML當“語言”來用,等等。圍繞著UML的標準,又衍生出不同的設計原則和理論體系,比如最近被人們熱炒的MDA等等。不同的方法、不同的理論各有優缺點,沒有哪一種是普遍適用和絕對正確的。在這樣的情況下,程序員的主觀能動性就顯得尤為重要,他們也更需要一本“實踐指南”來幫助自己完成軟件開發里的一次又一次關鍵的抉擇。
反方:“墮落”?“偽善”?“腐朽”?你也太小瞧我老人家了!我每天聞雞起舞,不停鉆研最新的面向對象理論,閱讀所有我能找到的理論書籍和理論文章,無論它們是國外大師的經典,還是國內同行的作品……
正方:那你為什么要拒絕一本面向對象的實踐指南呢?是因為它沾上了“實踐”二字?即便你要批評或者漫罵它,你也總要先讀過它才有資格開口吧?具體來講,你聽說過有一本書,名叫《道法自然——面向對象實踐指南》嗎?
反方:《道法自然——面向對象實踐指南》?我怎么沒聽說過?這是本什么書?你看過嗎?
正方:我也沒看過呀!可我希望它就是我心目中的那本“實踐指南”。至少,我會找來仔細讀一讀的。你會嗎?
反方:我?也許吧……咦,打??!我突然想起來了,既然你我都沒有讀過這么一本“實踐指南”,那咱們在這里討論了半天,爭得臉紅脖子粗的,這不是沒事兒找事兒,吃飽了撐的嗎?
【注:以上辯論過程是作者根據假想的情境和角色虛擬出來的,不代表作者本人的立場和觀點。其實,作者的真實想法是,希望所有喜歡面向對象技術的初學者都能從《道法自然——面向對象實踐指南》一書中發現有價值的東西?!?BR>
原文轉自:http://www.anti-gravitydesign.com