《道法自然——面向对象实践指南》一书10月即可问世。网上关心这本书的朋友不少,我在这里也自卖自夸一下,贴两篇我自己写的评论文章吧。
有一种道理叫“实践”
王咏刚
2004年7月
《道法自然——面向对象实践指南》是一本关于“实践”的书。作为主创者之一,我很想写一写这本书问世的经过——尽管这多少有些自卖自夸的嫌疑,很容易让人想起张艺谋托甘露拍摄的《缘起》和《如花》。
我觉得,面向对象的世界就像一个充满刺激的冒险类游戏,其中最富有挑战性的一道谜题,大概就是理论和实践如何结合的问题了。
和许多工作在第一线的普通程序员一样,我个人的面向对象之旅也是从实践开始的。在借助C++、Java这样的面向对象语言迈出了第一步后,我很快就对自己驾驭面向对象技术的能力产生了怀疑:自己精心编写的C++和Java程序竟然和以前的C或Pascal程序没有太大的区别,对软件的质量改进也起不到显著的作用;当时的我就像一个刚刚换装了第三代战机却又只会目视瞄准、射击的飞行员,茫然而不知所措。
幸好,2000年以后在大陆兴起的面向对象理论热潮一下子点醒了我:理论!没有理论指导的实践终归是蛮干!我开始拼命学习设计模式、分析模型、用例规则和架构知识,还不忘了在饭前默念Booch、Vlissides、Jacobson、Lieberherr等面向对象大师们的名字……但这一次我跌得更惨:在严酷的现实面前,我才发现理论和现实间的距离竟那么遥远;摸不到门径、四处碰壁的我简直就是一个揣了本《大学物理》就妄想造出原子弹的恐怖分子,要多可笑有多可笑。
正因为如此,我才患上了可怕的“面向对象综合症”:一边在口头上大肆鼓吹面向对象技术的优越性,一边在实际工作里对所有和面向对象沾边儿的东西敬而远之;一边抱怨理论书籍太过玄虚,一边又神经质似地逢人便问:“您听说过一本面向对象的‘实践指南’吗?”
2003年7月,王咏武(我们是兄弟,他在面向对象领域的积累颇深,这两点都确凿无疑)最早提出了这本书的构思。他在一个嵌入式软件的研发项目中,成功地用面向对象的理论知识解决了许多非常具体的实践问题,于是就有了把相关经验记录下来的想法。当时,我几乎立即举双手赞成这一计划,并竭力劝说他把计划的目标调整得更高、更远些,最好能得到一本用实战案例详细论述面向对象理论和技术如何应用的指南,以根治我和其他程序员的“面向对象综合症”。不过,对于面向对象理论和实践的结合问题,王咏武也有他独到的认识。他更进一步地指出:这一计划的结果应该是一本有用并且好用的参考书;在初学者攻读面向对象的理论著作时,它可以起到润滑剂或指南针的功效。换句话说,古人读《四书》时尚且要记诵朱熹老先生的《集注》,为什么我们在学习面向对象的时候,就不能有一本明理释义的参考读物呢?
本着上述目标,我们开始了技术写作的艰辛历程。说将近一年(2003年8月~2004年5月)的写作过程“艰辛”,其实一点儿也不过分,从本书书名的几次变更中,我们就能窥知一二。
起初,王咏武为本书设计的题目是《面向对象的辩证法》。因为在他的经验里,任何成功的面向对象开发实践都是一次又一次权衡与折中的结果。优秀的面向对象设计师善于处理系统开发中遇到的各种矛盾,善于把需求和成本、分散和集中、数据和操作、效率和质量、优雅和实用等经常发生龃龉乃至抵触的对立统一体协调到最佳的平衡点。因此,成功的面向对象实践都是成功的辨证过程,这毫无疑问应该是本书的重点。我当然同意他的观点,但我实在不喜欢这个政治气息十足的书名——它容易让人想起主席的《矛盾论》和《实践论》。最终,我们放弃了这个题目,但全书仍然保持了重视辨证的既定风格。最明显的例子是,本书每一章的标题里都包含了一组对立统一的概念。
接下来,我提出了《道法自然》这个略有些魏晋风尚的书名。当时,我在业余时间里正像着了魔一样钻研《老子》的要义,每天只知道把通行本、帛书本和楚简本的《老子》比较来、比较去。结果,一提起面向对象的理论和实践,我首先想到的就是老子所说的“道”和“自然”:如果“理论”是形而上学的“道”,而“实践”是无处不在的“自然”,那么,“人法地,地法天,天法道,道法自然”这句名言岂不就是面向对象实践原理的最好阐释吗?——直到今天我才知道,当时的我是多么的虚妄:两千多年前的老子自有他的见解,又怎么会为21世纪的软件开发操闲心呢?像我这样妄解古人的文意,说不定哪天就会受到惩罚呢!
随着写作的进展,我们很快就对《道法自然》这个抽象的书名失去了信心。我们发现,写作中最大的障碍其实还是如何权衡折中的问题。这一次的矛盾来自全书的技术定位:我们在最初撰写的几个章节中,总想把相关的知识点尽量讲深、讲透,并试图涵盖已知的所有相关技术;但我们不久就意识到,这种求深、求全的做法绝不会有什么好结果,它要么让全书厚重不堪,难以卒读,要么使所有论点都含混不清,特色全无——我们必须在深奥、全面和浅易之间寻求最佳的平衡。结果,我们决定保持本书“初学者实践指南”的定位,舍弃所有容易让初学者产生混淆的名词术语,删去大多数繁难的理论和技术阐释。为了适应这一变化,我们也毅然把不那么实在的《道法自然》换成了实实在在的《面向对象实践指南》。
不过,到了本书付梓的时候,出版社的编辑们又觉得《面向对象实践指南》这个名字缺乏新意,在各种媒体肆无忌惮地以视觉或听觉刺激吸引眼球的时代里,它恐怕无法引起读者足够的重视。于是乎,在权衡了各种利弊和矛盾之后,我们和编辑们都一致认为,把抽象和具象两个标题结合起来,也许才是最好的选择,这就是《道法自然——面向对象实践指南》这个书名的由来了。
所以,即便是书名的确定,创作者也需要应对各种复杂甚至是痛苦的抉择,比选书名更复杂、更系统的面向对象软件开发就更是如此了。回顾整个写作过程,我们的经历和以往的软件开发体验没什么两样,都充满了挑战、乐趣、痛苦和刺激。这些经历反过来又增强了我们对本书的信心:除了贴近实践、面向实践以外,它没有更多的亮点,但那些初涉面向对象世界的探险者们,不正在寻找这样一本用“实践”来摆事实、讲道理的指南读物吗?