English

软件工程品书录(下)

2005-08-03 来源:中华读书报  我有话说
出乎我们的意料,有一位定居新加坡的读者最近发来电子邮件,信中说:“本人虽身居海外,却保持读中文书的习惯,实因母语吸收,效率更高之故。拜网络之赐,能够读到大作,获益匪浅……然尊作缘起中谈到专栏‘不完全限于书本身,而是涉及书人、书事。但愿能够不辱使命’云云。几个月读下来,论书不可谓不精到,可是书人书
事牵涉却少,似有缺憾……”言语委婉,但我们读来却不禁汗颜。翻读以前发表的专栏文章,更是有如芒刺在背――的确,我们在匆匆前行的路中,已经淡忘了承诺和初衷。本期开始,我们将开始弥补自己的失误。

还有读者询问我在专栏中曾经提到过的《CoreJava》新版的翻译进度,很遗憾,由于时间安排上的关系,我已经放弃了此书的翻译工作。

与读者的互动,是鼓舞我们继续向前的力量。更多反馈,请致信:jch_liu@sohu.com

如果将本文看成是一个软件项目的话,到此我们应该已经完成了漫长的预先(up-front)工作,进入程序员和测试员们大展身手的实现和测试阶段了――听上去我们采用的是一个笨重的指令型过程,不是吗?

实际上,虽然我们在本文的开始就立志抛弃学院路线,标榜“按照开发现场的实际来组织”,但是有一些身边的朋友和同事在读了前两部分之后,却异口同声,很直言不讳地批评我们,本文“总论→综合→UML与面向对象→需求→设计模式与软件架构→……”的顺序,其实还是落入了SWEBOK式的窠臼,并不符合目标读者的需求。如果真有读者按此路线去学习软件工程的话,即使不会中途而废,最终的结果也许还是渐行渐远。

闻此语有如醍醐灌顶。回想自己从校门到企业,从初级编程人员到资深技术人员的历程,其间所读,的确不是沿着那么线性的道路。首先,我个人了解软件工程的概貌,就不是通过本文介绍的几种软件工程总论性书籍,而是经人指点,阅读了两三本当时比较新的系统分析与设计方面的图书(比如Jeffrey Whitten或者Alan Dennis的著作,前者已经有了中文版)。严格讲,这些书应该属于信息系统管理专业的教材,但是,与Pressman之类的学术性浓厚容易拒人于千里之外的正规计算机专业教材相比,由此入门反而更加容易。同样,本文上部分讨论的综合部分里的书籍,也是适合有了较多现场开发经验的读者思考阅读。UML与面向对象当然重要,不过实际情况下可能更多会最早接触到。此外,测试与需求的顺序也许颠倒过来更加合适。

按照这样的思路,我发现自己所犯的最大错误,就是漏掉了关键的一环――构造。最开始进行自上而下的预先规划时,我们实际上是把构造等同于编程而忽略掉了。而实际上,在掌握了具体的一些编程技术、工具和思想(当然包括面向对象)之后,也许最自然的提升途径是学习构造技术。我这里所说的构造(construction)接近于Steve Mc Connell的定义,以编程和调试为主,但也涉及详细设计、单元测试、集成和集成测试等等活动。显然这是广大程序员的基本功,也是程序员成长的最关键一步。通过了这道坎儿,你可能就进入了快速发展通道,可以或者沿着设计模式和软件架构向上攀登,或者探索项目管理、需求分析乃至软件过程的改进。可是,这一步往往走得最为艰难。原因很简单,这正是学校不怎么讲,参考书也很少的死角。因此,我们在这里增加了构造这一部分,算是一点小小的重构好了。

构 造

构造基于编程而又高于编程。这种关系导致了能归入此类的图书非常之少。但是能归入此类的几乎每一种都堪称经典。

代码大全作者:Steve Mc Connell译者:天奥定价:66.00学苑出版社 ISBN:7-5077-0876-4

此书乃大名鼎鼎的《Code Complete》是也。中文版出版于12年前(1993年11月,要知道,英文版出版时间是1993年的5月,中文版出版的速度可够惊人的),现在市面上应该早已经找不到了。图书馆似乎也不易寻得――我在网上查询了北大、清华、上海交大、上海图书馆等多家(国家图书馆搜索功能暂时无法使用)馆藏,无一命中。看来读者只能在网上搜索电子版本了。去年6月,本书第二版出版,海外一片轰动,毕竟这是一本曾拥有近百万读者的书(英文版销量30万左右,翻译版有十几种)。而国内似乎到现在,也没有什么动静,实在叫人纳闷。十年之后,难道出版界反而倒退了吗?请知情者告我,我们再在未来的专栏中向大家报告。

回想当时C语言的好书都很少,讲构造云云对于中国读者而言绝对是超越时代的,可以说这本书有些生不逢时。在中国读者成长起来的时候,书已经很难买到了。我本人也是在出版几年后才从朋友那里借阅的,它与那一批微软出版社的其他几本书一起,给了我极大震撼。眼界逐渐开阔大概就是从此开始的。也难怪,这本书的第一版所涵盖的信息量和深度都是当时我们闻所未闻的。比如防御性编程、代码质量、单元测试、系统集成等等。

值得一提的是,Steve本人相当帅,年轻时候的照片颇有些费翔加谭咏麟的意思。

10多年后,他似乎变得更有魅力。我有幸在今年听过他的讲座,对其自信和不随波逐流的风采深为叹服。我印象最深的地方包括,他认为10年以来本书中的思想和原则95%都依然适用――虽然时代已经从结构化方法迈向面向对象,迈向敏捷方法(Steve在讲座上轻描淡写地将极限运动说成是软件工程发展某种意义上的一次小结,而非全新的外星来客――如果你也和我一样在多年前读过本书,就不会感到奇怪了)。

程序员修炼之道――从小工到专家作者 Andrew Hunt,David Thomas译者:马维达定价:48.00电子工业出版社 ISBN:7-5053-9719-2

又是一本名气很大的书。不过,对习惯于常见技术图书阅读体验的一些读者而言,本书具有相当的挑战性。技术背景的要求当然很高(两位作者大有在各种语言、平台之间纵横捭阖的意思),文化背景的不同也是一个问题。这里的文化还包括书中浓浓洋溢着的黑客文化――大段大段的引语,随处可见的隐喻、缩写词……。文字非常多,好在翻译还算认真,但是生涩之处也不少。当然,你也可以选择影印版(中国电力出版社ISBN:7 5083 0798 4,39元)。本书属于可以一读再读的那一类,不用急于一口吃下(实际上也不太可能),其中轻松的笔调甚至适于枕上。另外,同一作者编写的系列小册子“单元测试之道”“版本控制之道”等等(电子工业出版社)可以降低阅读此书的门槛,也有补充作用,非常实用――最新的一本居然是讲Web开发新贵Rails的。

测 试

测试方面的书曾经一本难求,但是这两年突飞猛进,转而有些供大于求了。按照贴近的标准,我们首选CemKaner领衔的两本书:计算机软件测试(原书第2版)作者 Cem Kaner,Jack Falk,Hung Q.Nguyen译者:王峰 陈杰 喻琳定价 39.00机械工业出版社 ISBN:7-111-14246-2

软件测试:经验与教训作者 Cem Kaner,James Bach,Bret Pettichord译者:韩柯定价:35.00机械工业出版社ISBN:7 111 12975 X

实际上,这两本书也是国际软件测试界最为推崇的读物。虽然SWEBOK主要参考的并不是它们(又是学院气的体现),而是Paul Jorgensen的《软件测试》(机械工业出版社,7-111-12166-X),也很有特色,适合作为课堂教材使用,但是中文版的翻译不佳,无法推荐。

两本书一个属于教程,一个属于经验总结(条目式,类似于Effective系列),配合得极好,基本能够解决测试方面的问题了。

第一作者Cem Kaner是一个颇富传奇色彩的人物。他直到研究生阶段学的还是实验心理学,加入硅谷之后,几乎干遍了所有软件公司中的各种角色。当然,最终他因为软件测试方面的成就得享大名,这很大程度还需要归功于心理学背景所带来的特色。他还是一位职业律师,在软件消费者保护方面也非常活跃,堪称权威。

对于想在测试方面浅尝辄止的读者,我推荐下面这本书,定价不贵,没有太多理论大话,非常实际。

软件测试入门作者: 英 Louise Tamres译者:包晓露 王小娟 朱国平定价:28.00人民邮电出版社 ISBN:7-115-11796-9

敏捷方法与实践

极限运动和敏捷方法在一片如火如荼之后,似乎开始进入主流,同时也开始归于平静。标志性的迹象,可能是Kent Beck本人所著的纲领性文献在图书市场上的反差了。

解析极限编程――拥抱变化作者 Kent Beck译者:唐东铭定价:29.00人民邮电出版社 ISBN:7-115-10378-X

此书英文版刚刚出版的时候,曾经跃居Amazon计算机图书榜首,书评争论颇有些白热化的味道。至今Amazon上最引人关注的评论还是颇具挖苦意味以“Programming Malpractice Explained Justifying Chaos”(解析编程错误实践――为混乱正名)为名的一段两星论断,有158人对此评论表明态度,其中110人同意。此外尚有100多条态度分明洋洋洒洒的评论。而到了2004年年底修订再版的时候,就只有10来条一边倒的声音了。也许一条“我们已经长大”的评论可以作为最好的注解。这本书更多是理念性的,所以英文版也是一种好选择:影印版中国电力出版社(ISBN:7-5083-1314-3)。要更多地了解敏捷运动,可以去看JimHighsmith的《敏捷软件开发生态系统》(机械工业出版社ISBN:7-111-12597-5)。

重构:改善既有代码的设计作者 Martin Fowler译者:侯捷 熊节定价:68.00中国电力出版社 ISBN:7-5083-1554-5

将此书放于此处,可能是要起争议的。应该说重构是Smalltalk文化传统的一部分,并不是敏捷所专有的,只不过敏捷方法中非常强调重构,并引以为基石之一罢了。此书重要性无需多言了。有说法将其与《设计模式》并称,其实与设计模式需要顿悟和较多经验摸索不同,许多重构非常基础,即使对初级程序员也可能是必备的日常活动。

敏捷软件开发:原则、模式与实践作者 Robert C.Martin译者:邓辉定价:59.00清华大学出版社 ISBN:7-302-07197-7

这本书内容极为丰富,你也可以将其归入面向对象、模式或者构造中去。如果知道此书其实是从Robert和Grady Booch(UML之父之一)原本合作的面向对象分析与设计著作中派生出来的,就能理解这一切了。我有些好奇的是,Grady Booch还没有写完的那本书,还能否达到本书的高度,甚至还能否写完。本书在国内图书网站上居然赢得了200多条评语,总平均还是5星。Amazon上虽然只有26条,但是分量极重,交口称赞的人中有著名的技术畅销书作家Jesse Liberty(《C 程序设计》等书作者)、DaveAstels等等。在我看来,它的级别一点儿也不比《代码大全》差,层次还稍微高一些。

项目管理

如果认识到软件项目管理也是一种项目管理的话,可以选择的面就太宽了――项目管理的书早已经汗牛充栋。要学项目管理,从PMBOK出发肯定是一个好主意,或者找一本主流的通用项目管理的书。然后,为了认识软件项目管理的特殊性,还可以读下面这两本书。是的,都是Steve Mc Connell的。

快速软件开发――有效控制与完成进度计划作者 Steve Mc Connell译者:席相霖等定价:58.00电子工业出版社 ISBN:7-5053-7285-8

微软项目:求生法则作者Steve Mc Connell译者:余孟学定价:25.00机械工业出版社 ISBN:7-111-07732

CMMI与软件过程

提到软件过程和CMMI,很容易联想起一大堆文档。其实,这些著名的业界标准过程和模型中凝聚的是几十年软件工程界经验之大成,好像是少林寺的藏经阁一般。即使你所在的开发小组不采用相应的方法,如果能够从中学到几招,也胜过你独自摸索多日,这可是我的亲身经验。

个体软件过程作者:WattsS.Humphrey译者:吴超英 车向东定价:30.00人民邮电出版社 ISBN:7-115-09650-3  

我个人感觉,把握CMMI甚至其他正规过程,从PSP(个体软件过程)出发然后结合TSP(小组软件开发过程),再寻机探索CMMI很不错。要知道,PSP、TSP和CMM同出自Watts S.Humphrey之手,其实是一脉相承的。

小组软件开发过程作者 Watts S.Humphrey译者:韩丹 袁詈定价:39.00人民邮电出版社 ISBN:7 115 08763 6

CMMI 过程集成与产品改进指南(影印版)作者 Mary Beth Chrissis,Mike Konrad,Sandy Shrum定价 49.00清华大学出版社 ISBN:7-302-07868-8

统一软件开发过程作者 Ivar Jacobson,Grady Booch,James Rumbaugh译者:周伯生冯学民樊东平定价:45.00机械工业出版社 ISBN:7-111-07572-2  

IBM f Rational公司和SEI(软件工程研究所)是软件工程界的双峰,宛如少林武当。已经学得少林秘笈,又哪能忽视了武当绝学呢?实际上,与CMMI只是一个过程模型不同,RUP(统一软件开发过程)是一个真正的过程,其核心包括一份巨型的文档,可以说汇聚了从上世纪60年代爱立信、通用电气等大公司开发大型软件开始的经验积累。诸如用例(为Jacobson发明)、迭代开发等等思想尽在其中。值得一提的是,当年三家合一统一了天下的UML三友,如今虽然已经星散,但是写书并没有耽误:三部曲中的UML参考手册和UML用户指南新版都已经出版,不知本书是否也有计划?

手机光明网

光明网版权所有

光明日报社概况 | 关于光明网 | 报网动态 | 联系我们 | 法律声明 | 光明网邮箱 | 网站地图

光明网版权所有