关键字:
正方:当然当然,面向对象这鬼东西跟王菲的歌儿一样,初听时空灵、澄澈,诱惑力十足,听多了却发现它离我们凡人竟那么遥远,简直是遥不可及。你一定背过无数面向对象的名词术语,你一定记过许多UML的图示和标记,可无论你怎样努力,当你面对实际的软件开发项目时,你是不是有特别无助,不知道从何下手,或者脑子里一片空白,恨不得回到汇编时代的感觉呢?这是为什么?理论难以付诸实践呀!
反方:错!你的论辩从一开始就犯下了南辕北辙的毛病。我们今天要讨论的是,程序员是否需要一本指导面向对象开发实践的书籍,可你说了半天,都是在论证面向对象的理论要联系实践。理论当然要联系实践,但我们绝对不需要这么一本美其名曰“实践指南”的破玩意儿!理论就是实践的指南,理论就是一切,理论不需要任何多余的演绎!当程序员记熟了Jacobson等面向对象大师的理论之后,只要在实践中不断探索,不断总结经验,自然会找到正确的道路,自然会一天天走向成熟。
正方:老兄,你太天真了!你以为所有程序员都能像你一样无师自通,举一反三吗?对大多数人来说,从茫然无知到满腹经纶需要有书籍的导引,从一肚子墨水儿到一身绝活儿同样需要书籍的导引——这就是“实践指南”或类似书籍存在的价值!我给你举个例子,初学面向对象,初学需求分析的人很容易记住用例分析的基本步骤,很容易掌握用例图的绘制方法,但我见过许多刚学会用例分析的程序员在真正的项目里只画了一、两个用例图就彻底对面向对象的需求分析失去了信心,然后立即投向了传统的、粗放式的需求分析方法——整理(实际上是重复)用户需求、编撰成文并开始设计。难道你不认为这是因为他们缺乏有效的引导和帮助吗?如果有一本书告诉他们用例分析的理论如何应用,如何转化成实际的需求分析结果,不就可以帮助他们重建对面向对象的信心了吗?
反方:注意注意,你提到了用例分析。首先,我必须告诉你,用例分析不仅仅是一种局限于面向对象领域的需求分析方法,面向对象的需求分析技术也不仅仅包含用例分析这一种。其次,我必须通知你,你像古时候的宋国人那样有揠苗助长的毛病!就算有一些初学者在前几个项目里无法体会用例分析技术的真正价值,就算有一些程序员在实际项目中将面向对象技术束之高阁,你也没必要逼着他们去阅读一本所谓的“指南”——没有哪一本书可以让菜鸟一夜之间成为高手!对真正的程序员来说,实践本身就是最好的老师,就是最好的指南!当那些不愿或不敢使用面向对象技术的程序员在开发过程中不断碰壁,不断遭遇挫折后,他们自然会想到,要让自己学过的理论真正发挥作用——这种认识一旦产生,他们就会一辈子受用不尽!
正方:我怎么又碰见了一位断章取义的兄台?我从来没有说过用例分析只适用于面向对象的需求分析,我也从来没说过面向对象的需求分析只有用例分析这华山一条路,你却急着驳斥这根本不存在的“口误”!反倒是你自己,说着说着就露馅儿了不是?你凭什么说“那些不愿或不敢使用面向对象技术的程序员”就一定会在开发过程中四处碰壁?面向对象只不过是有效的开发方法之一。许许多多使用结构化程序设计的程序员也能开发出优雅、高效的软件。我所说的“实践指南”只适用于那些选择了面向对象技术的程序员。再跟你举个例子,学过面向对象的人都知道OOA,都知道分析模型,但他们都能理解分析模型在软件开发中的作用吗?他们会不会在实践中采用必要的手段,防止分析模型过于庞大或过于简单呢?他们是否知道如何验证分析模型的有效性呢?
反方:拜托,我也从没说过不使用面向对象技术的人就一定会碰壁,但君子坦荡荡,我是不会跟你一般见识的。你还千万别跟我提什么OOA,提什么分析模型,一提这个我就来气。绝大多数人并不真正懂得OOA的含义,他们甚至无法说出OOA和OOD的本质区别。他们根本就不知道,关于提炼分析模型的方法,面向对象的理论界仍然存在相当多的争论。OOA是面向对象技术里最容易把程序员引入歧途的概念之一,如果没有一种规范的理论指引,初学者一会儿就会被各种相互矛盾的说法绕晕了。所以,学习OOA最重要的是从一而终,也就是坚持某一种理论,不要管其他的说法。一本经典的理论书籍必不可少,但你说的那个什么“实践指南”,恐怕就有添乱的嫌疑了吧?
正方:请不要以你自己的狭隘经验判断你并不一定十分熟悉的世界!你怎么知道撰写“实践指南”的作者一定会给初学者增添学习负担呢?这种指南性的书籍本身就是为经典理论书籍释义明理的好帮手,你喝咖啡还要加点儿咖啡伴侣呢,为什么就不能在阅读大师著作之余,在一本“实践指南”的引导下提高自己吸收和转化知识的能力呢?就拿架构设计来说,那么多一心想当架构设计师的程序员明知道要耐心学习各种架构设计方法,包括面向对象领域的组件架构、子系统架构、分层模型等架构技术,但他们一看见经典理论书籍上那些枯燥乏味的条条框框,就再也提不起精神了。这个时候,要是有一本“实践指南”告诉他们:“别泄气,架构设计并不是那么难。瞧,对于这么一个实际的案例,你只要如此这般,再如此这般,你的软件就有了可以和Oracle、Apache或者Eclipse媲美的架构模型。”——那该有多好啊!