第一名:《 More Effective C++中文版 》 2697票
作者:Scott Meyers 译者:侯捷 中国电力出版社
电影的续集总让人失望,《 Effective C++中文版 》的续集却依然给你惊喜,这本书荣登2003最佳图书榜首不是偶然,它秉承了《 Effective C++中文版 》的风格,列出35个改善C++程序技术与设计思维的方法。Meyers没有说教语法细节,也不求大凑全,而是以多年经验为基础,向大家解释了如何更有效率地撰写软件:使效率更高、更稳健强固、更一致化、更具移植性、更富重用性,简单地说就是撰写更好的C++软件。读者看过后会由衷地感叹“原来C++程序是可以这样写的!”书中每一句话都体现着C++程序的编程思想,你会发现越品越有味道。
自从《 Effective C++中文版 》出版后,许多人一直期待着这本书。由侯捷亲自翻译保证了译本的质量,但也有一部分读者对侯先生的翻译风格表示不适应。这本书能排在这个位置说明目前国内对C++的学习热情还是非常高的!但是,由于本书原版写于1996年,所以没有涉及C++中最新的技术,如泛型 、STL这些目前很流行的东西。
第二名:《 人月神话(影印版) 》 2664票
影印版是未翻译的英文书,该书中文版为《 人月神话 》
作者:Frederick P. Brooks Jr. 中国电力出版社
即使《 人月神话 》中文版已于2002年上市,影印版还是受到了如此热烈的欢迎,可见大家对《 人月神话 》的认可。自从1975年首版到今,《 人月神话 》不断地被重印,这本身就构成了软件领域的神话。在这本经典著作中,Brooks深刻地阐述了复杂项目管理中存在的问题,让你思考四个变量(成本、时间、质量、范围)之间的一些故事,以及“人月”、“概念完整性”等重要的项目管理概念。
相比于1975年版,这本20周年纪念版更收录了包括《没有银弹》在内的几篇经典论文,并对首版二十年来软件项目管理的发展做了一个回顾。特别是著名的论文《没有银弹》,引领你对软件开发的发展做一个深入的思考。虽然我们的计算机性能不知比1975年时提高多少倍,制造了多少高效的开发工具,但我们依然能从《 人月神话 》中得到有益的启示。
在风格上,每章前面的图片和诗给人耳目一新的感觉。
第三名:《 Borland传奇 》2177票
作者:李维 电子工业出版社
一本非技术书能在评选中获得如此高的位置足以说明它的精彩。在这本书中李维向大家介绍了Borland杰出的技术大师、跌宕起伏的企业发展,让读者看着大呼过瘾!本书部分内容曾在《程序员》杂志上连载,其间读者反响强烈,即使不使用Borland开发工具的朋友也为Borland精彩的故事所吸引。
很多中国程序员是伴随着Borland成长起来的,他们学习编程时的起步就是Turbo C、Turbo Pascal,这些朋友对Borland格外有感情,却对Borland的发展了解不多,这本书正好填补了这个空隙。以史为镜,可以知兴亡,在本书中,作者观察分析了Borland的演变以及软件发展的趋势等重要问题,这些故事本身不仅非常有意思,而且能和读者的实际学习、工作联系起来,更能引发对深层次问题的思考,Borland这样的企业究竟应该侧重技术还是市场?自己怎样在软件技术的发展潮流中找到方向?
由于李维是本土作家,全书语言流畅,在文字上更贴近我们。书中用到的图表很有表现力,对作者意思的表达起了很好的帮助作用。
第四名:《 Java编程思想(英文版•第3版) 》2120票
该书第二版的中文版为:《 Java编程思想(第2版) 》
作者:Bruce Eckel 机械工业出版社
这本书的影响力盖过了Java之父James Gosling参与编著的《 Java编程语言(第三版) 》,受到全球程序员的广泛认同,它的前两版曾多次荣获Software Development , JavaWorld等机构颁发的大奖,《 Java编程思想(第2版) 》在去年本刊举办的年度评选活动中获得冠军。
这本书全面介绍了从Java的基础语法到最高级特性,并针对Java 1.4版做了更新。在内容上有广度,也有一定深度,不仅适合入门,也可供深入学习用,同时作者还着重阐释了面向对象设计的理念。
Eckel开放了这本书的电子版,很值得我们尊敬,树立了一个慈祥的教育家的形象,不过如果要系统学习的话最好买一本纸版,否则太累眼。本书在国内上市不久就受到了如此热烈的欢迎,再次证实了其前作的成功,看的出大家对这本书期待已久,如果出版中文版市场一定会很好。
第五名:《 Effective Java中文版 》2061票
作者:Joshua Bloch 译者:潘爱民 机械工业出版社
这本薄薄的小书不仅获得了2002年度Jolt大奖,还受到Java之父的推荐。它继承了《 Effective C++中文版 》的名字和风格,Bloch为我们带来了57条极具实用价值的Java经验规则,书中每条规则都以简短、独立的小文章形式出现,这些小文章包含了详细而精确的建议,以及对语言中许多细微之处的深入分析,并通过例子代码加以进一步说明。这本书实践性很强,作者把开发中的经验和模式进行讲解,并举实例进行说明。同《 Effective C++中文版 》一样,这本书也不适合初学者。
中文版由潘爱民翻译,保证了译本的质量。
第六名:《 Java夜未眠 》1779票
作者:蔡学镛 电子工业出版社
可以说这本书是TOP10中读起来最轻松的书了,它是一本程序员写给程序员的散文集。作者蔡学镛作为享誉国内外的Java高手,在本书中除了技术相关的文章之外,他也没有僭越自己的专业,随笔中所提及的都是软件产业里的甘苦点滴。无论您是程序员与否,本书都可以带给现代社会的年轻人一个借镜或指引。
作者以诙谐、戏谑的笔触,写出时下程序员共同的心声,这本书很快就可以看完,而且文章都已发表在网络上,之所以受到如此欢迎,源于它包含了作者对工作、对人生的更改思考,更贴近了程序员的生活,值得一提的是作者将所有的版税捐助了希望工程。
第七名:《 人件(第2版) 》1684票
作者:Tom DeMarco,Timothy Lister 译者:UMLChina翻译组
清华大学出版社
同《人月神话》一样,《人件》已成为软件团队管理的经典之作,它们共同被誉为软件图书中“两朵最鲜艳的奇葩”。人们认为,《人月神话》关注“软件开发”本身,《人件》则关注软件开发中的“人”,因此,在成千上万的书架上,《人件》永远和《人月神话》并列在一起。这本书专门讨论了软件开发和维护团队的管理问题,并向人们的传统认识提出了挑战。作者在书中推崇人本管理思想,正确指出知识型企业的核心是人,而不是技术,呼吁给予软件工作者充分的自由和信任。
它的宣传语是“为程序员伸张权利”、“别把开发人员当成牲口”,如果给企业管理层看效果会更好,可读者中很多是被作为“人件”的程序员,于是在网络上引发了大家对目前工作环境的讨论(抱怨?)。但是,东西方文化的差异和我国的客观条件是否能容许《人件》中的观点?这很值得怀疑。
第八名:《 泛型编程与STL 》1644票
作者:Matthew H. Austern 译者:侯捷 中国电力出版社
这本书揭露了 STL 的奥秘,引导你进入泛型程序设计的思维模式,以你自己的可携式组件和可交互作用的泛用型组件来扩充 STL。阅读这本书比较艰深,你必须对 STL 的运用、泛型程序设计的基本精神、C++ template 技术都有相当基础了,才得一窥堂奥。
随着STL的广泛运用,泛型这种编程技术逐渐被人们关注。如果你想深入探究STL原理,或者要自己用泛型编写一个高效的程序库,这本书一定会对你有所帮助。
第九名:《 重构——改善既有代码的设计(中文版) 》1530票
作者:Martin Fowler 译者:侯捷 熊节 中国电力出版社
这是一本软件工程领域的经典著作,与另一巨著《 设计模式--可复用面向对象软件的基础 》并称“软工双雄”。什么是重构?我们在写程序的时候,经常需要反复推敲修改代码,其实这就是重构。这实际上就是软件的持续改进之路,我们不可能总是第一次就能做好,但是我们总是有机会完善。
本书除了讨论重构的各种技巧之外,还提供了超过70个可行重构的详细目录,给出了重构的工作原理,并以step by step的形式给出了应用每一种重构的指南。这些示例都是用Java语言写成的,但其中的思想却可以运用到任何面对象的编程语言中。
第十名:《 C# Primer中文版 》 1507票
作者:Stanley B.Lippman 译者:侯捷 陈硕 华中科技大学出版社
这本书是为有一定编程基础又想成为C#程序员的朋友写的入门读物,它内容详实、实例丰富,全面介绍了C#这门新的面向对象编程语言,对已经对面向对象程序设计有所了解的读者,作者为他们提供在 C# 中使用面向对象的编程方法的必备知识。它假设读者有其它语言的基础,明白循环之类最基本的概念。
值得一提的是,本书的初译陈硕是一位在读本科大三的学生,你可能会对译本的质量怀疑,但这种怀疑是多余的。这本书登上TOP10表明.NET技术已经在国内开始被广泛学习,如果你想成为一名C#程序员而又不想花费太多的时间和精力,就请试试看 Lippman 的这本《C# Primer》吧。
附11至16名:
11.《 加密与解密(第二版) 》(段钢) 1435票
12.《 编程高手箴言 》(梁肇新) 1407票
13.《 C++设计新思维——泛型编程与设计模式之应用 》(侯捷、於春景译) 1372票
14.《 Inside VCL(深入核心——VCL架构剖析) 》(李维) 1329票
15.《 .NET大局观 》(侯捷、荣耀译) 1258票
16.《[ISBN]7-5083-[/ISBN]》1211票
总结:
从评选结果我们可以看出,讲述具体技术的书籍的比例开始下降,软件工程类和技术人文类图书开始受到欢迎,这两类书在TOP10占有5个名额,说明大家的视野已经开始放开,特别是技术人文这种迎合程序员的非技术书一出现就受到大家的喜爱。
值得一提的是,TOP10中有四本书是侯捷翻译或参与翻译的,另外还有两本他参与翻译的《 C++设计新思维——泛型编程与设计模式之应用 》和《 .NET大局观 》也位居前16位,就目前看这种与别人合译的模式很成功,也许这就是已经形成的品牌效应吧。
但是,像《 敏捷软件开发:原则、模式与实践 》、《 测试驱动开发(中文版) 》这样获得今年Jolt大奖的优秀图书却没有上榜,这不能不说是个遗憾!所以我们在关注经典图书的同时也应该适当关注一下目前国际上最新的进展。
在新的一年中,我们期待着更多本土作家、译家为我来带来丰盛的大餐!
《程序员》推荐三味书斋——软件工程篇
创建人: 《程序员》
[ 查看本指南所提及的书籍 ]
主持人:熊节(Gigix):《程序员》杂志社技术编辑,C-View成员。
嘉 宾:刘艺(Newdream):大学教师,撰写和编译图书多部。
汪颖(Adams):UMLChina成员,《人月神话》译者。
Newdream:
随着计算机技术的发展,由一两个人关起门来打天下的软件英雄时代一去不复返了。现在的商业软件大部分都是很多人协同工作的结果,应用软件也已经由桌面应用发展到分布式网络应用,软件开发的难度和规模日益扩大。不管我们愿不愿意,软件工程正在从课堂上、书本上走下来,强迫我们去学习它,应用它。工程是将理论知识应用于实践的科学,而软件工程则借鉴了传统工程的原则和方法,以求高效地组织和开发高质量软件。
国内软件工程的研究虽然并不比国外晚,但在软件工程的实用方面仍然滞后于美国等发达国家,特别是软件工程的应用人才奇缺。最近几年,随着大量国外软件工程经典图书的引进,国内的计算机研究和开发人员了解和学习了很多最新的软件工程理论和技术,从而推动了软件工程的广泛应用。现在越来越多的IT企业意识到软件工程对保证产品质量、降低开发风险、提高管理效率的重要作用,而精通软件工程的开发人员也成为大公司高薪争聘对象。软件工程图书正在成为计算机图书的一大热点。
Gigix:
是的。两位在软件工程方面都有比较深的认识,并且也都博览群书。下面我们就来谈谈软件工程的书籍吧。
Newdream:
对于软件工程的初学者来说,清华大学出版社的中国计算机软件专业技术水平考试指定用书《软件工程》(分为初、中、高级)是一本不错的入门读物。该书的作者郑人杰教授是我国知名的软件工程专家。这本书通俗易读,内容系统权威,可以帮助读者较全面地了解软件工程方面的知识。但由于这本书侧重应试,因此实用性较差。
Adams:
新近业界推崇的CMM 2级从需求管理、配置管理、SQA、软件计划以及软件跟踪等KPA的角度,为规范化的软件管理提供了理论依据——然而,它依然带有学术派的色彩,使若干从业者有意犹未尽的感觉。《 软件工程--实践者的研究方法 》则涵盖了上述领域,全面深入浅出地介绍了软件工程学科的各个方面。其中,所涉及的实践已在很大程度上超越了目前的软工水平——不用再哀叹路在何方,路就在脚下。
另外,《超越混沌——有效管理软件开发项目》这本软件工程的散文集里总结了许多经验教训,有空翻一翻,经常会心有戚戚焉的感觉。可惜,目前还没有影印版。
Gigix:
Newdream的评价比较“中庸”,呵呵。
在我看来,软件工程教材,能够起到的惟一作用(如果的确有作用的话),就是指导软件开发者的工作。如果不能指导实际工作,那些听起来很美的词汇、术语就没有任何意义。因此,我总是认为那本《 软件工程--实践者的研究方法 》算是目前为止最好的一本教材。对于名词的解释,那本《 软件工程--实践者的研究方法 》肯定不如某些国产教材来得好;但是这种一定程度的晦涩和复杂,对于正经学习软件工程是必要的。任何一个道理,如果说得过于抽象过于概括,那肯定会变成同义反复(也就是废话)。国产教材往往就犯这个毛病。
好象我不应该用“国产教材”这样一个比较隐晦的称呼?没错,说郑人杰教授那套《软件工程》教材,记得以前在学校的时候,大概有一年的时间在学郑教授那套“钦定”教材。学完的感觉就是:他解释的每个词都很好,说的每句话都正确。整本书放之四海而皆准——科技工作者的直觉告诉我,放之四海而皆准的东西,多半都不可操作。
这也算是我挑选软件工程书的一个办法吧:不光要有办法,还要有办法的约束条件,以及办法不适用的场合。也就是说,书中提供的知识必须是可证伪的。如果一本书不能说明自己提供的办法在什么条件下失效,那读者学到这些办法之后还得自己去摸索它的约束条件,这本书又有什么作用呢?前一阵Smiling上有人讥笑“刚从学校出来的小朋友”,大抵就是这种情况。
Adams:
其实,软件工程归根到底是实践性的学科,它主要针对的是软件开发中社会学——人的问题。因而,很难找到一篇放之四海而皆准的圣经,每一位前人的著作都是来自于自己的项目、实践,已经为大家提供了非常好的参考。在同一位“大牛”李亮的交流中提到,“即使是相同性质的项目,不同的团队(人员)也需要对原先积累的过程、方法进行调整。”换言之,“迷时师渡,悟了自渡”,各种书籍、文献、前人的经验,在“工作在如此易于驾驭的介质上。程序员,就像诗人一样,几乎仅仅工作在单纯的思考中。程序员凭空地运用自己的想象,来建造自己的‘城堡’”的学科中,只能充当自己的老师,需要的还是自己的顿悟。
另一个角度而言,尽信书,不如无书。如果完全迷信书中的观点,也是不可行的。
Gigix:
刚才Adams引用的是《人月神话》中的句子吧?这本书恐怕是最近一段时间最热门的一个话题了。记得前次有人在一个小论坛上问“这本书究竟怎么样”,我的回答是:“如果没有读过‘人月’,如果不知道‘no silver bullet’,恐怕很难被认为是一个合格的软件工程师。”Adams没有多谈《人月神话》,大概是作为译者的避嫌吧。
我知道的确有人不同意我的观点。有个朋友认为《人月神话》只是说出了一些指导性的原则、一些大而化之的概念,认为不应该过分地推崇它。但是,我认为,国内的情况,并不是普及过分,而是普及严重不足。这一点从许多的实例中就可以看出来。
所以,尽管可能被人骂为“盲从”,但我还是得说:作为一名软件工程师,《人月神话》就是必读书目。
Newdream:
Gigix谈到普及《人月神话》的重要性,殊不知现在许多做软件的人(他们也有软件工程师、系统分析师等各种时髦的称谓),根本就没有软件工程的概念。经常见到一些言必谈各种专业术语和词汇,甚至怀揣系统分析员证书的人,却连基本的软件开发文档都读不懂。
记得有一次讲面向对象的方法,我举的是COM+的例子,居然还有软件工程师问哪里有对象,我说什么是COM,不就是组件对象模型(The Component Object Model)吗,COM就是对象呀。像这种笑话很多,我们许多搞软件开发的人还停留在崇尚编码英雄的“小农经济”时代,而软件工程化则是软件工业化生产时代的必由之路,没有软件工程思想的指导,我们无法想象如何去应对复杂多变的需求,如何组织和实施软件开发,如何进行人员管理和团队协作。实际上正是近几年来软件工程在理论和实践上的迅速发展,才使软件行业的生产率得以提高,而这种提高并不是建立在新增多少软件英雄或编程高手的基础上。
所以普及和推广软件工程是一个十分严肃的话题。而这项工作需要面对不同层次和水准的对象。你不可能指望每个开发人员都去读《设计模式——可复用面向对象软件的基础》或《人月神话》,甚至连《软件工程:实践者的研究方法》这样的教科书对于某些人也勉为其难。相反林锐的一篇《软件工程思想》的随笔却成为众多程序员追捧的软件工程入门读物,在网上广为传播。这篇文章的魅力在于它来自作者的经验和体会,同时也向我们展示了一个梦想成为编程高手的程序员最终成长为一名软件工程信徒的曲折心路历程。最有趣的是文中“让我们高举程序主义、软件工程思想的伟大旗帜,紧密团结在以Microsoft为核心的软件公司周围,沿着比尔•盖茨的生财之道,不分白天黑夜地编程,把建设有中国特色的软件产业的伟大事业全面推向21世纪”的“经典名句”已经成为不少程序员津津乐道的口头语。
无可否认,近两年大量引进的外国软件工程经典图书确实为我们打开了眼界,据说单是机械工业出版社和中信出版社就引进了70多种软件工程外版图书。由于出版界的努力,我们可以有幸阅读到世界大师级的一流作品,但是我们还缺少来自开发第一线的、真正具有实践体会的自己同行的作品。后者才是最贴近实际需要,为广大程序员所接受的书籍。所以普及软件工程的基础知识和思想方法要比普及《人月神话》这样的一两本经典名著更有重要意义。
Gigix:
记得刚毕业的时候,我也特别喜欢看一些软件工程书,例如CMM、PSP、TSP之类的。但是过不多久就发现:看不懂。真的是看不懂。书里每个字都认识,每句话都明白,每一章节都觉得很有道理,就是凑到一起不知道对自己有什么用。后来反思一下,就是因为自己的实践经验太少。别人分析的问题,说到的约束条件,自己一点感性认识都没有,所以看到别人拿出的解决方案也就只能感叹“真有道理”了。Adams说“不要迷信”,可像这样经验尚浅,突然看到这么经典的东西,想不迷信也难呀。
后来就转去看一些比较贴近实际的东西,例如Martin Fowler最推崇的敏捷方法之类,感觉很好。像敏捷建模(agile modeling)、重构、XP之类的技术,体现的是软件工程思想,又离低级实践很近,比较容易为程序员所接受。例如XP,它不怎么讲一套一套的大道理,只告诉你怎么设计、怎么编码、怎么测试,就比较容易看懂。
直到现在我也还是看不懂某些软件工程书(包括大学里的教材),像CMM之类的更是敬而远之。不过我也翻译了两本软件工程方面的书:一本《最后期限》和一本《系统重构》(台湾版),感觉吃得很透。我想,自己的现象大概有一定的代表性:程序员不是不愿意接受软工思想,只是被那些一本正经的软工书给吓倒了。当然,这里面有程序员经验不足的原因(中国的程序员平均从业时间只有4年,美国是14年)。
当然还有学校教育的问题。仅以我的经验来说,学校的老师从来都没认为软件工程是什么“实践性很强”的课。其实要培养软件工程的素养,真的也不那么难:两个人一起做做pair programming,每个模块编码之前先设计测试用例,有空的时候做做refactoring……从这些训练中得到好处了,自然也就有软件工程的素养了。
Adams:
软工书籍的不易于理解还有一个风格和导向以及求学认知的问题。国内的部分图书、教材与其说是诲人不倦,不如说是形而上学、拖沓冗长。记得一位前辈谈起,“中国的数学教材,两三页纸横跨上下两三百年。”姑且不论这种观点是否有失偏颇,相信许多莘莘学子也会有这样的困惑“教科书太过抽象,不知道在说什么”。记得,在学习汇编语言的时候,当时颇流行一本“经典”教材。若干年后,偶然翻到一本外文原版的书籍,才知道原是减头去尾,断章取义,把前人浅显易懂的文字“抽象”“升华”——无言以对。
CMM等学术经典在于它能够提供一个框架,虽然太过简练。而许多软件工程的书籍,如《人月神话》、《软件工程:实践者的研究方法》恰恰填补了理论与实践之间的空白,至少能为读者切实实践提供真正的指导。《设计模式》、面向对象等数据则从软件开发的角度提供了过程(工程)的载体。正所谓,工欲善其事,必先利其器,另外还需要思想的指导。软件工程就是起这样的作用,不过正如马列主义思想的诞生一样,都需要不断地实践、实践、再实践。这的确是一个长期漫长的过程,没有其它捷径。
Newdream:
我非常同意汪颖关于风格和导向的见解。的确这是不容忽视的问题。国内的专业书籍和教材八股风格居多,引经据典,却很少有自己的研究成果和实践经验。软件工程方面亦然。当然,这也和学术风气不好有关。好在现在是市场经济的时代,读者对于作者和图书有最大的选择权和投票权。特别是大量优秀外版图书的引进,将对国内的学人和作者产生巨大的冲击。
关于软件工程以实践为本的导向,这是一个十分重要的观点,对大家如何去学习和掌握软件工程的理论和方法有着积极的指导意义。一般,我会建议入门者先学习一两本基础教材,建立软件工程的概念和框架体系。计算机专业的学生可以直接阅读《软件工程:实践者的研究方法》,不过这本书也不是万能的,国外网站上有不少读者批评这本书只适合作教材、拿学位,对实际开发指导不够。
如果作了程序员,还可以边工作边读一些实践性很强的开发指导书,比如《 编写有效用例(英文版) 》、《Applying UML And Patterns (Second Eition)》、《Systems Analysis and Design Methods(Fifth Edition)》等。值得一提的是《Systems Analysis and Design Methods(Fifth Edition)》采用案例教学法,非常易学易用,高教出版社有影印版,价格便宜,原汁原味。这些书将伴随你在实践中解决问题,不断提高你的水平。
有了程序员的经验,再读《统一软件开发过程》、《设计模式》、《人月神话》等名著才能真正掌握设计开发的要旨,领会软件过程的精髓,进一步铺就通往系统分析员和项目主管的金光大道。
总之,程序员要提高自身的开发水平,决不可能通过阅读几本软件工程经典名著就可以一蹴而就。学习——实践——再学习——再实践才是唯一的成功之路。所以在不同的发展阶段,要选好适合自己的软件工程图书,决不能好高骛远或人云亦云、盲从盲信。
程序员》推荐定位自己 有的放矢——一位技术作家眼中的Java图书选购技巧
作者以Java图书做范例,总结自已多年购书的经验,并全面剖析了当前Java图书市场的现状,读来很有深意。希望在阅读本文后,读者能真正购买到适合自己且“不太差”的图书。
选购电脑书的原则是什么?可能的答案有:好懂、全面、深入、实用等,本人以为,最重要的是选购一本自己能看懂的书,然后才能考虑其它方面。
进过书店的读者都知道,电脑书的选购非常令人头疼,你肯定是因为不懂书中的内容才会购买,但是电脑技术的实践性很强且越来越复杂。就编程技术来说,多数情况下需要上机编写程序才能知道自己是否学会了。不过书店不会提供机器让你编程序,甚至连小硬板凳都不提供,你只能站着或者蹲着看书,即便腰酸背疼腿抽筋地看到书店下班,也不一定能知道哪本书自己能看懂。那么,有没有一些简单的方法利于判断呢?本文将以Java图书为例,告诉读者一些技巧。
关于电脑书的现状,本人认为基本的事实是好书不多、坏书不少,凡是看过几本的读者应该或多或少有所体会,问题有多严重不便在此描述,就用下面的图示作为支持本人观点的一个证据吧:
这是新闻组上的一篇文章,这位叫落花吹雪的网友是计算机专业的毕业生,显然不笨,可是居然“看书越看越糊涂”,以至于连“对象”一类最基本的OO(面向对象)术语都不明白。
分析造成如此局面的原因同样不是本文的目的,那是需要很多长篇大论才能彻底曝光的,本文只想告诉读者,如果我们不得不在垃圾箱中找食物充饥,那怎样才能找到比较卫生的?
下面,本文将模拟读者进入书店选书的过程,看看读者在该过程的各个阶段,应该注意哪些事项。中心思想是怎样根据能看懂的内容,对书的质量和是否选购做出决定。当然,通常情况下,书中的技术内容在书店中很难看懂(因为不能在机器上测试),但是有些非技术内容可以看懂,例如书名、作者名等等。
选书的顺序:外文原版/翻译版/本国作者版
看到这个标题,不会有人骂我是汉奸吧?这是本人选书的No.1原则,很多专家也都建议尽力阅读外文原著(如果外文过关的话),例如侯捷先生。
走进任何一家书店,可以把书店里的电脑书分成外文原版/翻译版/本国作者版3类。首选外文原版的原因很多,作者以为最重要的原因是外文书原装、原汁、原味的,谁让电脑技术基本上都是洋人发明的呢。可是当这些原装货被翻译过来或者由国内作者再阐述一遍时,味道可能就变了,或者说有“中国特色”了,不幸的是很多情况下是变差了而不是变好了,下面就举落花吹雪网友不明白的“对象”一词为例。
本人刚开始接触面向对象技术时,也象落花吹雪一样,看书越看越糊涂,很久都不知道什么是对象。“对象”是面向对象技术的最基本概念,一般也是需要解释的第一个概念,本人至今还记得看的第一本书(还是译著)是这样讲解的(大意):
按照面向对象理论,世界是由对象组成的。例如人是对象,电脑是对象,猪是对象,泥巴也是对象……
我是头一次听说世界是由对象组成的,而我学的马克思主义哲学告诉我,世界是由物质组成的,除了物质什么都没有,我对他老人家的观点一直坚信不疑。那么“对象”又是什么东西?记得自己后来又翻了别的书,结果发现也是满篇“对象”,难道世界真变成对象了?这种说法动摇了我坚如磐石的世界观,可又没有因此建立新的世界观,所以感到极大的困惑,以后的内容自然就无法看懂了。
终于有一天,看到了一本英文资料,才知道“对象”是Object的译文。Object的含义是“物体”,这是中学生都认识的简单词汇,如果你阅读的是英文书而不是二手的译著,即便第一次学习面向对象技术,也不会不明白什么是Object,所以我就把上面的中文又翻译回了英文:
Everything in the world is an object. A man is an object. A PC is an object.A pig is an object……
这段英文很简单,没有被歪曲的中文意思为:
世界上的一切都是物体。人是物体,电脑是物体,猪是物体……
看,“一切都是物体”的含义和我的世界观基本一致了。从此,本人才慢慢学会了面向对象技术。顺便说一句,《Think in Java》有一章的标题就是Everything is an object.
原装的英文通常很容易理解,但是当它变成译文或者中国作者再用自己的话讲解时,常常变得莫名其妙,特别是专业术语,可能与英文原意差距极大,差距之大甚至可以写笑话了,例如可以用中文“对象”证明一个人的太太是他养的猪和他养的猪就是他太太,推理如下:
因为按照面向对象理论,万事万物都是对象。
所以,猪是对象—他养的猪是对象—他养的猪是他的对象。
又因为他的对象就是他的太太,他的太太就是他的对象。
所以,他养的猪是他的太太,他的太太就是他养的猪。
但是,你无法用英文证明Pig和Wife是同一个Object。这里本人对读者有个请求,如果你知道“对象”的原创者是谁,请千万不要把上面笑话中的“他”改成“你”,然后寄给原创者。
对英文术语的拙劣翻译是翻译版和国内作者版图书的通病(其它毛病在后面讲述),除了“对象”,闻名遐尔的还有“套接字”(Socket插座)、“句柄”(Handle把手/手柄)等等一堆垃圾名词,这是本人首选原版书的一个重要原因。但是,书店里的原版书太少,从国外买又太贵,补救方法是通过网络寻找一些免费学习资料。例如Sun网站上就有大量的教程,《Think in Java》也有免费的电子版,目前该书的英文版也在书店里出现了。
书店里,有深度的Java书,大部分为国外作者所著(其它电脑技术图书可能也是这样),而国内作者的书主要集中在Java入门知识和JSP领域。
封面/封底/内容摘要/前言等
这些内容是很容易看懂的,读者应该注意下面这些信息:
作者的资历
国外作者的著作(英文书或者译著)通常都有作者简介,如非名家,多半也是专家,例如《Think in Java》的作者Bruce Eckel,Sun公司的著作等,否则就不好意思暴露身份了。
然而,国内作者的著作多半没有。所以,本人的建议是,选择那些有资历作者的著作,当然,十有八九又得选国外作者的书了。
作者的联系地址
同样,国外作者的著作(英文书或者译著)一般都有联系地址。有地址意味着作者对自己的著作比较有信心,质量有相当的保证,否则不是招骂吗?以前,国内图书没有作者的联系地址,现在少数图书也列上了作者地址,也许这是国内作者质量改善的信号。所以,本人的建议是,选择那些有作者地址的图书。
印刷次数和册数
多数电脑书会印上自己的印刷次数和册数。电脑书第一次印刷量一般为5000册,如果重印了,说明图书的质量较高,例如《Think in Java》的中文版《 JAVA编程思想 》就印刷了数次。但是指定教材不能这样判断,质量再差读者也是不得不买。另外应该注意的是,如果图书涉及的技术较深,质量再高可能也不会重印。
图书的厚度
就Java而言,本人以为页数少于200的Java书可能讲不了什么东西。目前,书店里有Sun公司的一些比较薄的书,作者翻过一本有关EJB的,发现主要内容是讲体系、结构、层次等等,不是教你编码的,好象属于研究方面的。
前言和内容摘要
一本书的前言和内容摘要主要有下面这些信息:
n本书的层次/主要内容/读者对象
关于这一点见下一节的说明。
n本书的特色
几乎所有的书都自称“通俗易懂”、“循序渐进”或者有XX“特色”、“优点”等,反正就是说自己是本好书。想想也可以理解,有哪个作者会说自己的书很差?本人的观点是,大部分书的这些自吹自擂都不可信,只是广告词而已,除非它能说明自己是如何做到“通俗易懂”、“循序渐进”的。
本人也写了几本Java书,甚至自称“Bestbook”,为了说明自己不是空口无凭,花了不少篇幅来列举证据,包括印上读者来信,也包括本人的联系地址和网站。侯捷先生的书上也有不少读者来信。然而,印上读者来信的电脑书很少,包括国外作者的书。
确定图书的类型
常见的Java书可分为下面几种类型:
n 有关语法和API的
n 集成开发环境的
n 工程方面的
这是本人自己的分类,和读者的理解可能不完全相同,下面就解释一下。
《Think in Java》就属于第一类,适合于入门者,无论是基础知识的入门还是高级知识的入门。例如如果你不知道Servlet和EJB,尽管这些知识比较高级,仍然要选择第一类的图书。
集成开发环境通常描述菜单、按钮之类的作用,很少涉及具体的语法和API,例如Jbuilder方面的书。如果你不会EJB,通过集成环境也帮不了你多少。选择集成环境的图书要在自己有语法和API基础之后。
工程方面图书的特点是综合性较强、内容较深,判断的标准之一是例子的代码是否很长。这类书容易和第一类图书混淆,实际上,很多书自身就是混淆的,或者说得好听点:兼具两类书的特点。
本人翻过一本Wrox的书《 Wrox程序员参考系列:Java服务器高级编程 》,感觉就是这样。它讲了EJB、Servlet等,但是如果想学会,可能有相当难度。目前Wrox的书(特点是封面上有很多人头像)在国内不少,本人更愿意把它们归入工程类,即当你先学会了EJB、Servlet等内容后,再看这些书会比较容易,同时也有很大的收获。
书店里还有一些以例子为主的书,例如怎样做一个功能完整的网站等,这类书也应该属于工程类,它们对语法和API的讲解通常很简略。
有一些手册之类的书,例如列出所有API含义的那种书,像字典一样,显然,你肯定不会把这些书当课本用。
还有一些书猛一看有点像“夸夸其谈”之作,特点是代码很少,例如前面提到的Sun公司的一些薄书。本人感觉这些书的层次更高,必须有很高的水平才会觉得有用,例如《J2EE核心模式》,坦率地说,本人还没到这种层次。
确定图书的技术层次
从前言、内容摘要甚至书名上可以了解到图书的层次或者起点,如“入门”或者“初级”、“中级”、“高级”等等。这些描述多半是诚实的,但是太笼统并且不一定完全正确,例如“初级”、“高级”究竟具体到什么程度?
《Think in Java》在Introduction一章专门有Prerequisites(预备知识)一节,很详细地描述了《Think in Java》需要读者具备的技术基础,部分原文如下:
This book assumes that you have some programming familiarity: you understand that a program is a collection of statements, the idea of a subroutine/function/macro, control statements such as“if” and looping constructs such as “while,” etc.
本人所写的Java书也比较详细地描述了读者需要具备的预备知识。
手里有一本John Zukowski所著《Mastering Java 2》的中文版《 Java 2从入门到精通(J2SE 1.4版) 》,书作者也是位专家,该书出版较早,目前书店里很难找到了。其前言和内容摘要称其适合各级开发人员,所以本人曾经想把它当入门书,但是发现很难看懂,原因是作者设定的入门门槛,比本人实际的门槛高,可那是本人把书买回来以后才发现的。
本人以为,在书店里确定图书的技术门槛是否和自己的门槛高度一致非常困难,前言和内容摘要的说法不可靠。
阅读正文
前面说过,因为不能测试,在书店里通常无法看懂想学习的技术内容,但是仍然有方法帮助你在一定程度上判断该书的质量:
n 阅读已知的内容
如果了解书中的部分内容,先看看书中是怎样讲解的。
n 如果买书是为了解决某些问题
那就看看所选的书是否提供了答案,当然你不一定能够看懂。
n 作者的文笔
作者的文笔当然影响图书的质量,本人以为文笔的底限是简洁通顺。就本人认为,国内作者和译者的文笔通常很一般,老外的句子就活泼一些。本文前面谈过英文术语的翻译问题,这是译著和国内作者版共同的问题。然而,译著的一个特有问题是语句不通顺的情况很多,侯捷先生的文章列举了不少例子。如果是国内作者版,那语句不通的问题就比较少。判断文笔的简单方法之一是数数句子是否太长,例如一句话超过30个字可能读起来就比较费劲了。
某些书的前言和内容摘要的文笔相当好,不能以此判断全书,你还是需要阅读正文。
我的建议是,如果发现文笔不错,书的质量可能比较好,这起码说明作者的写作比较认真。如果文笔一般,就不好说了,因为可能作者的文笔就是如此。文笔差的书最好不买,不管文笔差的原因是什么,不好懂是肯定的。但是如果买译著,可能就得忍着点了。
选书时的其它注意事项
n 不要被书名迷惑
现在的电脑书名非常诱人,例如“傻瓜书”、“轻松入门”、“快速精通”、“X日通”等等,这些很可能只是广告词而已。
n 不要只看前言和内容摘要
如果把书名比喻成广告标题,那么前言和内容摘要就是广告内容了。到书店随便翻翻,没有一本书的前言和内容摘要写得不引人入胜的,难道都可以买?
n 不要迷信出版社
某些出版社的名气可能比其他出版社大,但是图书的质量主要取决于作者而不是出版社。
n 不要为装璜漂亮的书所吸引
猩猩也能穿上名牌服装,可它仍然是头畜生。
n 书店里同类书非常多,可以对照比较。
阅读(4132) | 评论(0) | 转发(3) |