`

原版软件工程图书阅读指南 刘艺

 
阅读更多

读原版计算机书绝不是为了赶时髦,而是为了更好地学习。通过读原版书可以获得第一手资料,了解作者的真正意图,避免 翻译作品带来的失真。我们必须承认,再好的翻译作品都会有不同程度上的失真,能够做到信、雅、达的译作就更少。我翻译过为数不多几本书,就感到翻译是一件 很难做的事,尽管再三推敲,咬文嚼字,仍然感到译好一本书实在不容易。
即使是一些责任心强、工作认真的译者,有时面对不断创新的计算机术语、西方人特有的俚语和幽默,也会一时找不到中文的合适译法。生翻硬译,往往令读者对于原文语境(context)中的言外之意,难以理解,如坠云里雾里。加之时间紧,内容多,亦难免疏漏百出,难尽人意。
2001 年我曾经为《程序员》杂志写过一篇文章《程序员如何掌握计算机英语》,这篇文章在网上广为流传。我在这篇文章中最早提倡一个优秀的程序员应该尝试阅读外国 计算机原版图书。我在文中谈到:“一般在完整阅读2-3本原版书以后,你就能发现读原版书的乐趣。值得一提的是读原版书的真正乐趣并非只是在于提高英语水 平,而更是在于获得一种和西方人一致的思维方式,这种思维方式对学习计算机技术极为有益,因为计算机技术甚至现代科学体系都是建立在这种思维方式的基础之 上的。坚持阅读英文计算机图书可以达到‘品’的感觉,这种感觉是指在阅读时无需将英文转换为中文,而是直接用英文和作者在同一个水平线上进行思考和交流。 至此,我们获得的不仅是英语水平的突破,更是计算机水平的突破。这也是许多计算机高手成功的秘密。”
时隔5年的今天,外国计算机原版图书已经充斥 着计算机图书柜台,原版书的阅读在程序员中已经蔚然成风。然而,面对大量引进的计算机原版图书,我们又该如何去选择,如何获得那些蕴含真知灼见的高手秘 籍?为此,我根据个人的经验,分类推荐一些值得大家一读的有代表性的原版经典计算机图书,希望对大家有参考价值。


《Software Engineering: A Practitioner’s Approach》(《软件工程:实践者的研究方法》)
25 年前,一位美国年轻的教授,坐在桌前,正用手写着一部当时人们觉得不可思议的书稿。这部书的主题是关于软件工程的。在当时,计算机少得可怜,只有一些性能 远不如现在家用电脑的小型机供一些高深莫测的程序员使用,大家讨论的也只是软件编程,对于软件工程却极少有人关心,甚至很少有人真正懂得。因为那时只有科 学家和程序员,还没有今天这样已经成为一种热门职业的软件工程师。
这位写作软件工程的年轻教授就是后来软件工程界大名鼎鼎的Roger S. Pressman。当时他没有想到自己的书稿会被出版商拒绝,因为出版商说将不会存在关于“软件工程”的书籍的市场。几经挫折,幸运的是最后McGraw -Hill出版公司决定尝试一下,于是我们终于能够读到这本流行25年经久不衰的软件工程经典著作——《软件工程:实践者的研究方法》,以致SEPA-- 这本书的书名缩写,也已经成为软件工程领域的热门词汇。
25年前,别说软件工程,就是计算机对于受过教育的中国人来说都是陌生的。20年前,我第 一次接触到计算机。那是我上高中的时候,在一种Apple II的计算机上用固化的BASIC编写一些简单的程序。15年前,当我用IBM兼容的PC机开发DOS程序时,崇拜的是编程高手、软件英雄。10年前,当 Windows开发渐成主流,团队开发势在必行,我开始朦胧意识到需要有软件工程的指导时,却找不到一本软件工程的图书和资料!5年前,当我读到20周年 纪念版的《软件工程:实践者的研究方法(第5版)》时,软件工程已经成为国内软件业的最新热点,国内的大学开始招收首批软件工程硕士。今天,当软件工程已 经深入人心,成为软件业必修课程时,我再次推荐程序员重读原版,为成就辉煌事业奠定基础。
Roger S. Pressman是软件过程改善和软件工程技术方面国际知名的权威。30多年来,他作为软件工程师、管理者、教授、作者以及咨询顾问,一直工作在软件工程 领域。在这本跨越20年的软件工程经典教材中,他全面介绍了软件工程学科的概念和方法。本书从软件工程学科的概要介绍开始,逐步介绍了管理软件项目、传统 软件工程方法、面向对象软件工程方法以及软件工程的高级课题,包括传统的分析、设计、测试和度量,面向对象的分析、设计、测试和度量,形式化方法、净室软 件工程、基于构件的方法、客户/服务器软件工程、Web工程、再设计工程和CASE等。最后,本书还对软件工程学科的未来发展做了预测和展望。
通过这本经典教材,我们可以跨越四分之一的软件工程发展历史,领略从传统的工程到面向对象软件工程的思想方法,掌握大量实用的软件工程技术,追踪软件工程最新的发展方向。
作 为软件工程的权威教材,这本书涵盖了软件工程的诸多重要方面,为读者展现了百科全书式的全景画面。最令人兴奋的是,这本书还提供了大量的文献资源和强大的 网络支持,为读者深入学习和进一步查找资料提供了帮助。这本书的结构和版式也设计得很好,使人感觉层次分明,条理清晰,十分便于学习和掌握重点。
阅读之余,我们不妨思考一下这样的问题:虽然计算机软件开发的工程方法现在已经日益成熟,软件工程的基本原则也已在产业界得到普遍接受。然而,为什么软件工程在国内的实践却如此落后?
我 想这很大程度上和国内的计算机教育体制有关。以前大家都把软件工程当作学术来研究,而实际上软件工程是实践性很强的学问。在课程设置和教材选择上,许多大 学并没有把软件工程当作一门实践性很强的课程来讲授,也未能选用像《软件工程:实践者的研究方法》这样的好教材。以致我们培养的软件人才重理论轻应用,缺 乏软件工程方面的实践能力。
随着国内软件企业的不断发展,无论是在发展规模上还是在开发观念上的变化,都导致了对软件工程的巨大需求。掌握和精通 软件工程的人才必将成为整个行业最抢手的人才。《软件工程:实践者的研究方法》给了我们一次宝贵的机会。相信在大师的引领下,会有越来越多的IT精英脱颖 而出,为我国的软件企业跻身世界一流软件企业作出贡献。
《软件工程实践者之路(第5版)英文影印版》清华大学出版社2001年1月出版
《软件工程实践者之路(第5版)中文版》 机械工业出版社机械2002年9月出版


《Design Patterns: Elements of Reusable Object-Oriented Software》(《设计模式:可复用面向对象软件的基础》)
四 人帮(文献上常用GoF)Erich Gamma、Ralph Johnson、Richard Helm和John M. Vlissides合著的《Design Patterns: Elements of Reusable Object-Oriented Software》(《设计模式:可复用面向对象软件的基础》)可以说大名鼎鼎,无人不晓。但是真正通读过该书的人并不多,这是因为该书源自一篇博士论 文,篇幅不厚,却字字珠玑,博大精深,体现了作者言简意骇,惜字如金写作风格。因此,该书非细嚼慢咽而不能读也。
2004年我为了写作 《Delphi模式编程》而重新研读了该书原版,发现该书与中国古代建筑学经典著作《营造法式》有异工同曲之妙。十分有趣的是GoF在《设计模式》一书中 归纳出模式的四个基本要素为:pattern name(模式名称)、problem(问题)、solution(解决方案)、consequences(效果);而李诫的《营造法式》则分为释名、各 作制度、功限、料例和图样5部分。通过对比我们不难发现,其中释名相当于“pattern name”,给出模式的定义,便于交流和记忆。各作制度相当于“problem”,描述了应该在何时使用模式。它解释了设计问题和问题存在的前因后果,它 可能描述了特定的设计问题。功限相当于“consequences”,描述了模式应用的功效及使用模式应权衡的问题。料例和图样相当于 “solution”,是解决所阐述问题的一个构造或配置。
品读英文原版,在优雅的行文之间,你会有一种阅读先秦诸子散文感觉,简约的文辞蕴藏着穿透字面的真知灼见,让你不得不进行深入的思考,否则你将陷入晦涩之中难以续读。
该 书作者认为类比和联想可以帮助读者谙悉模式的奥秘。书中写到:“An analogy will help illustrate the point. Novelists and playwrights rarely design their plots from scratch. Instead, they follow patterns like ‘Tragically Flawed Hero’ (Macbeth, Hamlet, etc.) or ‘The Romantic Novel’ (countless romance novels). In the same way, object-oriented designers follow patterns like ‘represent states with objects’ and ‘decorate objects so you can easily add/remove features.’Once you know the pattern, a lot of design decisions follow automatically.”(以下类比可以帮助说明这一点。小说家和剧本作家很少从头开始设计剧情。他们总是沿袭一些业已存在的模式,像“悲剧性英 雄”模式 (《麦克白》、《哈姆雷特》等)或“浪漫小说”模式(存在着无数浪漫小说)。同样地,面向对象设计员也沿袭一些模式,像“用对象表示状态”和“修饰对象以 便于你能容易地添加/删除属性”等。一旦懂得了模式,许多设计决策自然而然就产生了。)实际上,这也正是作者写作最成功的地方。
我在外国网站看到 很多读者用尽赞誉之词力荐该书,例如:“this beautifully-written book is something quite different, a book of design patterns which prescribe simple solutions to the problems programmers face in object-oriented software design.”“This is the OO programmer's Bible, don't miss it.”使用的竟是beautifully-written book、programmer's Bible这样的词汇。如果要让我来用中文来评价该书,那么我会用“文辞渊懿”四个字。由于对该书的偏爱,我专门节选片断作为拙作《计算机英语(第2 版)》中的课文,以便更多立志掌握计算机英语的读者鉴赏。
在这里我也不想多谈设计模式对于面向对象编程的重要性,关于设计模式现在已有太多的作品 问世。但我想,面对这样一本好书应该像读经书那些去研读,除了手头常备一本牛津(Oxford)或朗文(Longman)字典外,还要准备其他解说设计模 式的参考书,甚至莎士比亚戏剧集。

《设计模式:可复用面向对象软件的基础(英文影印版)》机械工业出版社机械2002年3月出版


《The Unified Modeling Language User Guide》(《UML用户指南》)
除 了模式四人帮外,UML三剑客的巨著也是程序员必读的经典。 Grady Booch、James Rumbaugh和Ivar Jacobson合著的《The Unified Modeling Language User Guide》奠定了UML在业界的重要地位,是UML用户的权威指南。
Grady Booch、IvarJacotson和JamesRumbaugh是世界公认的UML创始人。这三个人对开发对象技术做出了许多重大的贡献,包括对象工 厂(OOSE)过程、Booch方法和对象建模技术(OMT)等。《The Unified Modeling Language User Guide》倾注UML三巨头的毕生心血,尽管他们分分合合,但对UML的贡献始终如一。历经十载,UML已经成为软件业首肯的重要标准之一。UML作为 事实上的标准建模语言,有力地促进了项目相关人员之间的沟通,大大降低了沟通中出现混乱的几率。而UML 2.0规范更进一步扩展了UML这门语言的适用范围和生命力,其内在的丰富表现力使得用户可以为任何应用建模,从企业信息系统、基于Web的分布式应用, 直到实时嵌入式系统。阅读英文原版,不仅有助于了解最新的UML基础知识,还可以掌握大量UML的术语、规则和语言特点,以及如何运用该语言去解决各种应 用领域中的复杂建模问题。事实上,我们在使用UML建模中英语才是工作语言,一些术语很难对应于中文,也没有必要翻译成中文。以前在网上曾经发生case 是应该翻译成“用况”还是“用例”的争论(该书中文版将case翻译成“用况”),其实完全没有必要,在国内IT术语中译难以统一的情况下,看原版才最为 明白!
令人高兴的是三剑客能聚首再出该书第2版,新版中不仅保持了第1版论述全面深入、实例丰富的特点,更彻底更新了内容以符合UML 2.0规范。


《System Analysis and Design Methods》(《系统分析与设计方法》)
《System Analysis and Design Methods》是我最早读到的国内英文影印版图书之一。当时2001年高等教育出版社出版了一套原版影印丛书,名为“国外优秀信息科学与技术系列教学用 书”,给我留下很深影响。《System Analysis and Design Methods》是其中的一本。
这本书吸引我的是别具一格的 案例教学。全书采用一个完整的案例研究,以整个信息系统构件(基于Zachman框架)和信息系统开发生命周期(FAST方法学)为主线,详细探讨了系统 开发生命周期以及跨生命周期的活动。另外,书中每一章都提供了大量的练习题、讨论题、研究题和小型案例,以加深读者对书中所述理论的实际应用和掌握。特别 是该书既能结合传统方法(如结构化分析和信息工程),也能推介最新方法(如面向对象分析、敏捷开发和快速应用开发)来指导系统分析与设计,有利于开拓视 野,全面了解信息系统分析和设计原理、方法、技术、工具和应用。这也是为什么该书自问世以来能够广受欢迎,以至于一版再版,延续至今的奥秘。
即使是阅读英文原版,书中每一章中大量的情景案例,也都生动翔实,引人入胜,绝无一般教科书的乏味。该书的内容组织和写作手法对于我国目前高校中教材僵化,课堂沉闷,教学与实践脱节的教学模式无疑是最好的借鉴。

这本书的英文并不是很难,大约CET4级水平就可以流利阅读80%内容。一些案例教学的情景对话很口语化,并有大量图解。该书适合双语教学,对于有志成为系统分析师和设计师的程序员,则更值得一读。
《系统分析与设计方法(英文影印版•第5版)》高等教育出版社2001年5月出版
《系统分析与设计方法(第6版)》中文版 机械工业出版社机械2004年8月出版


《Agile Software Development》(《敏捷软件开发》)
设计模式的作者之一John Vlissides 评论《Agile Software Development》时说过:“这大概是第一本将敏捷方法、模式和当代软件开发基础糅合在一起的书。当Bob Martin发言的时候,我们最好洗耳恭听。”
是的,我很早以前就在洗耳恭听Bob大叔的发言。我最早是在Object Mentor公司的网站(

《敏捷软件开发(英文影印版)》中国电力出版社2003年5月出版

http://www.objectmentor.com/)上下载他的文章,后来读到原版的《Agile Software Development》,发现这本书正是他那些文章的汇总和升华。
那个Bob大叔就是敏捷开发创始人之一的Robert C.Martin。他创建了Object Mentor公司,领导这一支经验丰富的软件咨询团队,其本人也是享誉全球的软件开发专家和软件工程大师。
《Agile Software Development》汇集了顶级高手敏捷软件开发的宝贵经验,当之无愧地荣获了2003Jolt大奖。这本书的中译版在国内也很畅销。不过我还是强烈建议阅读原版,在原汁原味中才能够真正体会到这本书的精妙之处。
本 书的核心价值在于以创建美的软件为最高享受。作者在书中针对每个案例,都会和你一起思索、一起探讨、一起权衡、一起验证。展示的是为追求软件设计之美而反 复思索、权衡、折中、选择的一个个完整的设计活动过程。这里面包含着Agile方法、面向对象设计原则、各种设计模式以及UML的应用。
追求软件之美应该是每个软件开发人员遵循的首要原则,正如Robert C.Martin在该书中文版给中国读者的序言中写道的那样:
There is a secret that the best software developers know. Beauty is cheaper than ugliness. Beauty is faster than ugliness. A beautiful software system can be built and maintained in less time, and for less money, than an ugly one. Novice software developers don't understand this. They think that they have to do everything fast and quick. They think that beauty is impractical. No! By doing things fast and quick, they make messes that make the software stiff, and hard to understand. Beautiful systems are flexible and easy to understand. Building them and maintaining them is a joy. It is ugliness that is impractical. Ugliness will slow you down and make your software expensive and brittle. Beautiful systems cost the least to build and maintain, and are delivered soonest.(最好的软件开发人员都知道一个秘密:美的东西比丑的东西创建起来更廉价,也更快捷。构建、维护一个美的软件系统所花费的时间、金钱都要 少于丑的系统。软件开发新手往往不理解这一点。他们认为做每件事情都必须要快,他们认为美是不实用的。错!由于事情做得过快,他们造成的混乱致使软件僵 化,难以理解。美的系统是灵活、易于理解的,构建、维护它们就是一种快乐。丑陋的系统才是不实用的。丑陋会降低你的开发速度,使你的软件昂贵而又脆弱。构 建、维护美的系统所花 费的代价最少,交付起来也最快。)
感谢Robert Martin为我们写了一本如此优秀的著作,阅读原文我们是不是更能进入软件之美的境地呢?《UML用户指南(英文影印版•第2版)》机械工业出版社机械2006年4月出版
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics