也遵循着Williams先生倡导的历史眼光,我打开了Ivar Jacobson的文集《统一软件开发过程之路》(机械工业出版社2003年8月版)。作为发明了UML和统一过程“三位老友(the three amigos)”之一,Jacobson博士是面向对象软件开发运动的一个最重要的推动者。编者精心汇集了大师80年代以来多篇里程碑式的名文,归为7大部分,而每部分之后再加入几页不衫不履的访谈、语录,由此构成了闪光而和谐的整体。
这是一面历史之镜:从最初在爱立信公司开发名牌交换机AXE时采用的AXE方法,到后来领导(爱立信控股的)独立公司Objectory创建的Objectory方法论和相关的过程、工具SEP、SEPSE,到以Objectory与Rational合并、Jacboson与另两位“老友”汇合为标志的“方法之战休战”,直至最终在Rational推出的UML和RUP,书中映着一位业界泰斗的思想发展的各个环节;而Jacobson之路,也就是面向对象软件开发之路、人们心中的“统一开发过程”之路。我们现今耳熟能详的很多概念,正是从书中的多篇名作中萌蘖、演进、长成参天巨木;因此本书的读者,每每会有回到思想诞生的第一时间、目击大师心路历程的体验。
在人类文明发展史上,软件业是个难得的怪物:它还太年轻,尚未学会回忆自己的过去;但又已经太老,早早就承载了需要普通人几世才能全部理解的内容。具有历史旨趣的软件技术著作太少(除本书外,我所知最出色的可能是Stroustrup博士的《C++语言的设计和演化》),怪兽也就很难瞥见自己的容颜。也就是在这里,前引《Salon》杂志的意见是有效的:软件业需要更开阔的历史目光——可是Williams先生,为了“UML”,我向您推荐这本薄薄的文集!
撇开玩笑,本书当然(主要)不是为“Williams先生们”所作,Jacobson博士的野心也不限于回首从前、留下史料。就我个人的兴趣而言,本书出色地厘清了“过程”、“方法”、“模型”、“架构”、“框架”、“构件”、“对象”这几个概念,并把它们植入了面向对象软件开发的丰厚土壤中。根本上,Jacobson博士是用本书回答了“什么是软件开发”的问题——这个翻转了的斯芬克斯之谜:在早晨、中午和傍晚,人们分别把软件开发理解为“工程”、“游戏”和“园艺”,那么,究竟哪一个隐喻、哪一种措辞才更符合这里的实情?我们的大师答道:软件开发就是建模。软件是模型,是现实事物的摹本和镜子。而开发者面临的任务则是,如何用文字、图示和代码来表现这整个概念大厦,最终给出事物最精确的摹本和映射。
在这个洞见的烛照下,软件开发的各环节无不条分缕析、纤毫毕见。对于面向对象开发来说,处于最底层的是OO编程“原则”(对此作者未加细谈),其上是OO开发“方法”(比如UML/OMT,用例/CRC等技术),最后是软件开发“过程”(比如Objectory的OOSE过程,以及后来Rational的“统一过程”)。在所有这些环节中,为确保“镜子”与“现实”、“模型”与“实物”之间的精确对应,也就要保证每个环节按部就班地完成,保证所有中间产品(文档、图示、代码)的随时同步。由此产生了一整套严格的过程,产生了“统一的”、“普适的”、“重量级”的方法论体系。
“模型”是这里的关键词。Jacobson博士自称,他的雄心是用统一的语言和标记为世间万物建模,魔镜的受益者也不限于软件业,还可以包括物理学、心理学甚至天文学。事实上,大师本人除了对普通商业组织作软件建模之外,还用自己的方法完成了软件开发企业本身的模型。这是镜子中的镜子,像钢蓝色的手术刀一样暗示着无以复加的精确,暗示着对疑难杂症的轻视与根除。恰恰基于以上模型,Rational公司完成了RUP和Rational Enterprise Suite等系列产品。这些产品传奇性的优雅和高效,已经成为上述方法论有效性的明证。
一种模型、一种图示、一种“镜子”的发明,总是人类心灵的一次难以测度的跃迁。相传,哲学家维特根斯坦就是受到法庭上车祸模型的启发,才提出了他早期著名的语言理论:语言的界限即是世界的界限、命题是现实的图像。这个意思和Jacobson模型理论颇可相互印证(后者则是在与一个爱读康德的同事谈话时第一次想到“模型”的),这也是软件方法论与哲学理论相互渗透的佳话。有意思的是,另一位名家Cockburn却援引晚期维特根斯坦的“游戏说”,向模型论中注射了另一种修正:语言作为一种自身有效的游戏,无需与现实精确对应;同样,软件开发中的建模工作是必要的,但其价值仅类似于形成珍珠的那颗沙粒,或是翻墙用的梯子;所有过程、工件、文档、图示都是游戏的必要道具,我们借此展开游戏,获得了软件产品,但这并不意味着每个文档、每种图示都应达到无可挑剔的精确,并且永远与代码同步。换句话说,镜子的意义在于它的用法、它给我们带来的帮助。如果过分推重文档、过程,那不啻于扛着梯子上墙,或是把镜子本身当成了意中人。无论上述修正与RUP的正宗理论究竟孰高孰下,软件开发究竟更类似于建模还是游戏,它们作为重要理论资源,都在启发开发者们的思考与实践。
本书版式大方,印制精美,译笔也堪称流畅。不过若能保留原书索引,在术语选择上再多参照一下Rational官方的RUP中文文献,译本也许能够更完美些——当然讲求实际的读者不会像我这样“不贤识小”,而是秉照维特根斯坦式的语言观,依据自己的用法,摆弄这面珍贵的魔镜。