程序员需要一本面向对象的实践指南吗?

发表于:2008-05-30来源:作者:点击数: 标签:程序员面向对象实践指南
正方:当然当然, 面向对象 这鬼东西跟王菲的歌儿一样,初听时空灵、澄澈,诱惑力十足,听多了却发现它离我们凡人竟那么遥远,简直是遥不可及。你一定背过无数面向对象的名词术语,你一定记过许多 UML 的图示和标记,可无论你怎样努力,当你面对实际的软件

正方:当然当然,面向对象这鬼东西跟王菲的歌儿一样,初听时空灵、澄澈,诱惑力十足,听多了却发现它离我们凡人竟那么遥远,简直是遥不可及。你一定背过无数面向对象的名词术语,你一定记过许多UML的图示和标记,可无论你怎样努力,当你面对实际的软件开发项目时,你是不是有特别无助,不知道从何下手,或者脑子里一片空白,恨不得回到汇编时代的感觉呢?这是为什么?理论难以付诸实践呀!

    反方:错!你的论辩从一开始就犯下了南辕北辙的毛病。我们今天要讨论的是,程序员是否需要一本指导面向对象开发实践的书籍,可你说了半天,都是在论证面向对象的理论要联系实践。理论当然要联系实践,但我们绝对不需要这么一本美其名曰“实践指南”的破玩意儿!理论就是实践的指南,理论就是一切,理论不需要任何多余的演绎!当程序员记熟了Jacobson等面向对象大师的理论之后,只要在实践中不断探索,不断总结经验,自然会找到正确的道路,自然会一天天走向成熟。

    正方:老兄,你太天真了!你以为所有程序员都能像你一样无师自通,举一反三吗?对大多数人来说,从茫然无知到满腹经纶需要有书籍的导引,从一肚子墨水儿到一身绝活儿同样需要书籍的导引——这就是“实践指南”或类似书籍存在的价值!我给你举个例子,初学面向对象,初学需求分析的人很容易记住用例分析的基本步骤,很容易掌握用例图的绘制方法,但我见过许多刚学会用例分析的程序员在真正的项目里只画了一、两个用例图就彻底对面向对象的需求分析失去了信心,然后立即投向了传统的、粗放式的需求分析方法——整理(实际上是重复)用户需求、编撰成文并开始设计。难道你不认为这是因为他们缺乏有效的引导和帮助吗?如果有一本书告诉他们用例分析的理论如何应用,如何转化成实际的需求分析结果,不就可以帮助他们重建对面向对象的信心了吗?

    反方:注意注意,你提到了用例分析。首先,我必须告诉你,用例分析不仅仅是一种局限于面向对象领域的需求分析方法,面向对象的需求分析技术也不仅仅包含用例分析这一种。其次,我必须通知你,你像古时候的宋国人那样有揠苗助长的毛病!就算有一些初学者在前几个项目里无法体会用例分析技术的真正价值,就算有一些程序员在实际项目中将面向对象技术束之高阁,你也没必要逼着他们去阅读一本所谓的“指南”——没有哪一本书可以让菜鸟一夜之间成为高手!对真正的程序员来说,实践本身就是最好的老师,就是最好的指南!当那些不愿或不敢使用面向对象技术的程序员在开发过程中不断碰壁,不断遭遇挫折后,他们自然会想到,要让自己学过的理论真正发挥作用——这种认识一旦产生,他们就会一辈子受用不尽!

    正方:我怎么又碰见了一位断章取义的兄台?我从来没有说过用例分析只适用于面向对象的需求分析,我也从来没说过面向对象的需求分析只有用例分析这华山一条路,你却急着驳斥这根本不存在的“口误”!反倒是你自己,说着说着就露馅儿了不是?你凭什么说“那些不愿或不敢使用面向对象技术的程序员”就一定会在开发过程中四处碰壁?面向对象只不过是有效的开发方法之一。许许多多使用结构化程序设计的程序员也能开发出优雅、高效的软件。我所说的“实践指南”只适用于那些选择了面向对象技术的程序员。再跟你举个例子,学过面向对象的人都知道OOA,都知道分析模型,但他们都能理解分析模型在软件开发中的作用吗?他们会不会在实践中采用必要的手段,防止分析模型过于庞大或过于简单呢?他们是否知道如何验证分析模型的有效性呢?

    反方:拜托,我也从没说过不使用面向对象技术的人就一定会碰壁,但君子坦荡荡,我是不会跟你一般见识的。你还千万别跟我提什么OOA,提什么分析模型,一提这个我就来气。绝大多数人并不真正懂得OOA的含义,他们甚至无法说出OOA和OOD的本质区别。他们根本就不知道,关于提炼分析模型的方法,面向对象的理论界仍然存在相当多的争论。OOA是面向对象技术里最容易把程序员引入歧途的概念之一,如果没有一种规范的理论指引,初学者一会儿就会被各种相互矛盾的说法绕晕了。所以,学习OOA最重要的是从一而终,也就是坚持某一种理论,不要管其他的说法。一本经典的理论书籍必不可少,但你说的那个什么“实践指南”,恐怕就有添乱的嫌疑了吧?

    正方:请不要以你自己的狭隘经验判断你并不一定十分熟悉的世界!你怎么知道撰写“实践指南”的作者一定会给初学者增添学习负担呢?这种指南性的书籍本身就是为经典理论书籍释义明理的好帮手,你喝咖啡还要加点儿咖啡伴侣呢,为什么就不能在阅读大师著作之余,在一本“实践指南”的引导下提高自己吸收和转化知识的能力呢?就拿架构设计来说,那么多一心想当架构设计师的程序员明知道要耐心学习各种架构设计方法,包括面向对象领域的组件架构、子系统架构、分层模型等架构技术,但他们一看见经典理论书籍上那些枯燥乏味的条条框框,就再也提不起精神了。这个时候,要是有一本“实践指南”告诉他们:“别泄气,架构设计并不是那么难。瞧,对于这么一个实际的案例,你只要如此这般,再如此这般,你的软件就有了可以和Oracle、Apache或者Eclipse媲美的架构模型。”——那该有多好啊!

    反方:别做美梦了!还和Oracle媲美呢!对于大多数面向对象的程序员来说,能按照教科书里的条条框框,把软件架构设计成中规中矩的样子,不出大的差错就谢天谢地了。软件架构这玩意儿,还真不是所有想玩的人都能玩出彩的。像比尔·盖茨那样的“鬼才”当然可以大言不惭地自封为“架构师”,但90%以上的平庸人士,最好还是老老实实地背诵理论书籍里那些看似枯燥,实则妙用无穷的经典架构,比如三层结构,比如MVC模型,比如AOP架构等等。在这方面,程序员根本不需要什么“实践指南”!

   正方:冷静!冷静!老兄,你一面说架构设计的理论“枯燥”,一面又要程序员“老老实实地背诵”,你这不是牛不喝水强按头吗?我心目中的那本“实践指南”正是一本把枯燥、抽象的理论变成有血有肉的知识和经验,把学习变成一种乐趣的书籍!这种书籍不但能降低理论知识的学习难度,而且可以激发程序员藏在心底的灵感。对,灵感,每个人都有灵感,只不过有些人意识不到罢了。比方说,我们读《设计模式》的时候,会对那四个无比杰出的大师佩服至极,也会为我们自己无法总结出如此精练的设计模式而沮丧至极。但你想过没有,《设计模式》是死的,程序员是活的,软件也是活的。如果把你心底深处那一点点灵感拿出来,如果你能在一本“实践指南”的帮助下,大胆地在软件设计过程中应用、组合甚至是发明设计模式,那你不也可以拥有和大师一样的成就感和自豪感了吗?

    反方:算了吧,你病入膏肓了。拿我从澳大利亚学来的歇后语说,你这是“独生女的儿子——没救了”。还《设计模式》呢!你知道什么是“设计模式”吗?你知道设计模式是由多少个著名学者花了多少年的时间研究出来的吗?那可是面向对象领域无比正确、无比光荣、无比伟大的设计模式呀!你居然想把自己的灵感与设计模式相结合,你居然还想“发明”设计模式?你简直是在玷污我心中的圣土,你的做法和那些疯狂、残暴的异教徒有什么不同?要让我看呀,你说的那种“实践指南”多半是一本宣传异端邪说,不能登大雅之堂的小册子罢了!

    正方:啊,我终于看到你的真面孔了,你原来是这么一个彻底堕落、彻底伪善的卫教士呀!你知道理论都是发展变化的吗?你相信世界万物都在无休止运动吗?我可不愿意与一个浑身中世纪味道的腐朽分子讨论问题。在面向对象的世界里,没有哪种技术是绝对的和永恒的。就拿UML语言来说,从诞生至今,人们总结出了许多种使用UML的方法,比如拿UML当“草图”来用,拿UML当“蓝图”来用,拿UML当“语言”来用,等等。围绕着UML的标准,又衍生出不同的设计原则和理论体系,比如最近被人们热炒的MDA等等。不同的方法、不同的理论各有优缺点,没有哪一种是普遍适用和绝对正确的。在这样的情况下,程序员的主观能动性就显得尤为重要,他们也更需要一本“实践指南”来帮助自己完成软件开发里的一次又一次关键的抉择。

    反方:“堕落”?“伪善”?“腐朽”?你也太小瞧我老人家了!我每天闻鸡起舞,不停钻研最新的面向对象理论,阅读所有我能找到的理论书籍和理论文章,无论它们是国外大师的经典,还是国内同行的作品……

    正方:那你为什么要拒绝一本面向对象的实践指南呢?是因为它沾上了“实践”二字?即便你要批评或者漫骂它,你也总要先读过它才有资格开口吧?具体来讲,你听说过有一本书,名叫《道法自然——面向对象实践指南》吗?

    反方:《道法自然——面向对象实践指南》?我怎么没听说过?这是本什么书?你看过吗?

    正方:我也没看过呀!可我希望它就是我心目中的那本“实践指南”。至少,我会找来仔细读一读的。你会吗?

    反方:我?也许吧……咦,打住!我突然想起来了,既然你我都没有读过这么一本“实践指南”,那咱们在这里讨论了半天,争得脸红脖子粗的,这不是没事儿找事儿,吃饱了撑的吗?

    【注:以上辩论过程是作者根据假想的情境和角色虚拟出来的,不代表作者本人的立场和观点。其实,作者的真实想法是,希望所有喜欢面向对象技术的初学者都能从《道法自然——面向对象实践指南》一书中发现有价值的东西。】

原文转自:http://www.ltesting.net