`
- 浏览:
117384 次
- 性别:
- 来自:
北京
-
Thinking.In.Java.3rd.Edition.Chinese(前言)
前言
我的兄弟托德正准备从硬件工业转移到程序设计领域,我曾向他建议,下一次技术革命的重点将是基因工程。
我们将使用微生物来制造食品﹑燃料和塑料;这些微生物不仅能清除污染,还能让我们付出比现有少得多的代价就能主宰整个物质世界。我曾以为,相比之下计算机革命将显得微不足道。
后来我意识到自己犯了科幻小说家常犯的错误:迷信技术的力量(当然,这在科幻小说里司空见惯)。有经验的作家都知道,故事的重点不是技术,而在于人。基因工程将对我们的生活造成深远的影响,但它未必就会使计算机革命(或者至少是信息革命)黯然失色,因为正是计算机技术推动了基因工程的发展。信息指的是人与人之间的沟通。当然,汽车、鞋子、包括基因疗法,这些都很重要,但它们最终都只是表面现象。人类如何与世界相处才是问题的本质。这个相处的过程就是沟通。
本书恰好就是一个例子。很多人认为我很大胆、或者有点狂妄,因为我把所有资料都放在网络上。“还有谁会购买呢?”他们这样问。如果我的性格保守谨慎一些,我就不会这么做。但是我真的不想再用传统方式来编写一本新的计算机书籍。我不知道这么做会有什么后果,但结果表明,这是我在写书经历中做过的最明智的一件事。
首先,人们开始把改正后的意见反馈给我。这是个令人惊叹的过程,因为人们仔细检查每个角落、每个缝隙,找出技术上和语法上的种种问题,让我得以改正所有错误,而这些错误单凭我个人是很难觉察到的。人们对这种作法还有些顾虑,他们常常说“我并无冒犯之意…”,然后扔给我一大堆错误。无疑我自己从未察觉过这些错误。我很喜欢这种集体参与的过程,这也使这本书更加特别。这些反馈很有价值,所以我使用称为“BackTalk”的系统创建了一些应用,来对这些建议进行收集和分类。
但是,很快我就开始听到“嗯,很好。把书做成电子版放到网络上是个好主意,可是我希望购买印刷出版并装订成册的书籍”。我曾经作出努力,让每个人都能很容易地打印出美观的书籍,但这样仍然无法满足人们对印刷书籍的需求。大多数人都不习惯在计算机屏幕上阅读整本书,也不喜欢总是带着一捆捆的纸,所以即使这些打印出来的书籍再美观,也吸引不了他们(而且激光打印机的碳粉并不便宜)。看来即使是计算机革命,也难以抢走出版商的生意。不过,有个学生提出这也许会在未来成为一种出版模式:先在网络上出版书籍,当它引起足够的关注以后,才考虑制作纸质版本。目前,绝大多数书籍都不赚钱,这种新方式或许可以给整个出版业带来更多的利润。
在另一方面,这本书也带给我一些启迪。开始,我认为Java“只不过是另一种程序设计语言”。从许多方面看的确如此。但随着时间流逝,以及对Java学习的深入,我才开始明白,这个编程语言的目的,与我所见过的其它语言根本不同。
程序设计就是对复杂度的管理。它包括:待解问题的复杂度和所依赖的底层机器的复杂度。正是因为这种复杂度的存在,导致了大多数项目的失败。并且据我所知,还没有哪个程序设计语言全力将主要设计目标放在“征服程序开发与维护过程中的种种复杂度”上【1】。当然,许多编程语言设计时也确实考虑到了复杂度问题,但它总是与被视为更本质的问题混在一起。当然,那些也都是会让程序员感到困扰的问题。比如,C++必须向上兼容于C(为使C程序员容易过渡),并具有执行效率高的优点。这两点都很有用,并且帮助C++取得了成功。不过,两者也引入了额外的复杂度,使得某些项目无法完成。(当然,你可以归咎于开发或管理人员,但如果有某种语言可以帮助我们找到错误,何乐而不为呢?)Visual Basic(VB)是另一个例子,它被局限于BASIC语言(它并不把可扩展能力作为设计目标),这就使得所有堆积于VB 之上的扩充功能,都造成了可怕且难以维护的语法。Perl 也向上兼容于Awk、Sed、Grep、以及其它Unix工具,这就导致了被诟病为“能写不能读”的程序代码(也就是说,一段时间之后,你就无法看懂这些代码)。另一方面,C++、VB、Perl、Smalltalk 之类的编程语言,都为复杂度问题付出了相当大的努力,在解决特定类型问题的时候非常成功。
当我开始理解Java 之后,印象最深的莫过在Java上体现出的Sun公司的设计目标:为程序员降低复杂度。就好象说:“我们关注的是降低编写健壮代码的困难程度和需要的时间”。以前,编写健壮代码将导致性能降低(尽管有许多承诺,Java总有一天能够执行得足够快),不过Java的确大大缩短了开发时间;相比同等功能的C++ 程序,它只需一半甚至更少的时间。只凭这一点,就足以省下大量的时间与金钱。不过,Java 并不仅仅如此。它又持续引入了一些日益重要的复杂任务,比如多线程和网络编程。并且通过语言本身的特性和程序库,使得这些工作变得轻而易举。最后,Java还着眼于某些有着极高复杂度的问题:跨平台程序、动态程序代码联编、甚至安全问题,它们都属于复杂度问题的重要方面。所以尽管存在已知的效率问题,Java 带来的许诺却极其诱人:它能使我们程序员的生产率大大提高。
根据我的观察,Web是Java影响最深远的地方之一。网络程序设计总是非常困难,但Java使它得以简化(Java的设计者仍在努力使它变得更简单)。网络程序设计所关注的,就是研究如何让我们用比使用电话更有效率、更廉价的方式进行沟通(单是电子邮件就已经使许多业务领域发生了革命性的变化)。当我们能更有效地进行沟通时,奇妙的事情就开始发生,这也许要比基因工程所作出的许诺更让人感到神奇。
通过所有方式:编写程序、团队开发、设计用户界面(让程序可以和用户交互)、跨平台执行、轻松编写跨互联网的通讯程序等,Java扩展了人与人之间的通讯带宽。我认为,通讯革命的成果也许不应以海量数据的传输来衡量;我们将体会到真正的革命,因为我们能更容易和他人沟通:可以是一对一的形式、可以是分组形式、也可以是全球通讯的形式。我曾经听人主张,随着足够多的人之间产生了足够多的相互联系,下一次革命将会是一种全球化思维的形成。Java可能是、也可能不是这场革命的引线,但至少这种可能性使我觉得,教授这门语言是一件非常有意义的事情。
1 在本书第二版我收回这句话:我认为Python语言非常接近这个目标。请参考www.Python.org。
第3版前言
这一版的主要目的和大量工作都用在了与Java 1.4版保持同步上。不过,本书的主旨也更加清楚:使大多数读者通过本书牢牢抓住语言的基本概念,以便深入学习更复杂的主题。因为Java还在不断地演化,所以重新定义“基础知识”的涵义就很有必要,再说本书也不应过于面面俱到。这就意味着,比如,完全重写了“并发”这一章(以前称为“多线程”),它能使你对线程的核心概念有一个基本的了解。没有这一点,你就很难理解线程中那些更复杂的概念。
我还认识到了代码测试的重要性。如果没有内置的测试框架及相应测试用例,并在每次构造系统的时候都进行测试,那么你就无法知道代码是否可靠。在本书中,为了做到这一点,专门编写了单元测试框架,用来演示和验证每个程序的输出。这些内容在第15章中有介绍,里面还解释了ant(Java构建系统的事实标准,与make类似),JUnit(Java单元测试框架的事实标准),日志和断言机制(是JDK1.4新引入的),以及对调试和性能分析的介绍。为了涵盖所有这些概念,我把这一章命名为“发现问题”,里面介绍的内容都是我认为所有的Java程序员都应该具有的基本技能。
此外,我复查了书中所有的示例,并同时问自己:“为什么要用这种方法呢?”。多数情况下我会作出一些修改和润色,这样会使例子更贴切,同时还有助于演示一些我认为比较好的Java编程实践(至少在比较基础的范围内)。此外,我还删除了一些不再有意义的示例,并加入了一些新的示例,许多已有示例也被重新设计和修改过。
全书分为16章,涵盖了对Java语言的基本介绍。它可以用作基础课程的教材,但那些更高级的主题又该如何处理呢?
我原计划为本书加入一个新部分,专门介绍“Java 2企业版”(J2EE)的基础知识。其中许多章节由我的朋友﹑以及一同授课或开发项目的同事编写,他们有:Andrea Provaglio, Bill Venners, Chuck Allison, Dave Bartlett,和Jeremy Meyer。当我把这些新章节的进度和出版日期相对照的时候,我就有些担心。并且我注意到,前16章的篇幅就已经与本书第二版的全部篇幅一样大了。而即使是这个篇幅,读者也会经常抱怨。
对于本书的前两版,读者给予了极高评价,当然我也十分欣慰。但有时他们也会抱怨。其中常被提及的就是“这本书太厚了”。在我看来,如果这就是你挑出的唯一毛病,那真是令人哭笑不得。(这会让人联想到奥地利国王对莫扎特作品的抱怨:“音符太多了”。我并没有任何与莫扎特相比的意思)此外,我只能认为发出这种抱怨的人尚未了解Java语言的博大精深,也未见识过其它Java书籍。尽管如此,我还是在这一版中尽量删减掉那些已经过时,或是不那么关键的内容。总之,我仔细检查了所有地方,在第三版中删除了那些不必要的内容,并尽可能作出了修改和润色。这么做我很放心,因为本书的前两个版本还可以从网站(www.BruceEckel.com)上免费下载,附在书后的光碟中也有。如果你还需要那些老资料,这些地方都能找到。对于作者,这样可以减轻很多负担。比如,“设计模式”这一章太大了,已经可以独立成书:《Thinking in Patterns (with Java)》(也可以从网站上下载)。
在Java的下一个版本(JDK 1.5)中,预计Sun公司会效法C++引入泛型这个新功能。我本来已经决定,到时候把本书分为两册,以加入新的内容。但有个声音悄悄在问:“为什么要等呢?”。于是,我决定在这一版中就这么做,于是一切问题迎刃而解。我以前往一本介绍性的书籍塞入了太多内容。
这本新书并不是第二卷,而是包含了一些高级主题。书名叫《Thinking in Enterprise Java》,它现在可以从www.BruceEckel.com免费下载。由于是一本单独的书,因此它的
篇幅可以随着内容的需要而扩展。与《Thinking in Java》一样,它的目标是向读者提供一本容易理解,涵盖J2EE技术基础知识的介绍。并为读者能学习更深入的内容做准备。你能在附录C中找到更多说明。
对于那些仍然不能忍受本书篇幅的读者,我只能说声抱歉。不管你信不信,为了让它尽可能薄,我已经作了很多努力。先不管书有多厚,我认为还有许多替代方式可以令你满意。比如,本书有电子版,如果你带着便携式电脑的话,你可以把电子版放进电脑,这样也不会给日常生活带来额外的负担。如果你还想更轻巧些,可以使用本书的掌上电脑版本。(有人对我说,他喜欢躺在床上,打开屏幕的背光看书,这样就不会打扰他的妻子。但愿这能帮助他进入梦乡。)如果你一定用纸才能阅读,我知道有人一次打印一章,然后放在公文包里,在火车上阅读。
Java 2, JDK 1.4
JDK的发布版本以1.0,1.1,1.2,1.3表示,本书针对1.4版。尽管这些版本号还是“各自独立”的,但JDK 1.2或更高版本的标准称呼是“Java 2”。这表明“旧式Java”(我在本书的第一版中讨论了其中的许多缺陷。)和Java的改进版本之间存在巨大差异,后者的缺陷要少得多,而且引入了很多优秀的设计。
本书针对Java 2编写,尤其是JDK 1.4(很多代码不能在以前版本的JDK下编译,如果你试图这么做的话,构建系统将给出出错信息并终止。)。本书大刀阔斧地删除了一些过时的内容,并且重写了语言新引入和改进的部分。那些过时的内容可以在本书的以前版本中找到(可以通过Web或者本书光碟)。此外,任何人都可以从java.sun.com 免费下载JDK,也就是说,本书针对JDK1.4,不会给任何人带来因为升级而造成的经济负担。
Java的以前版本在Linux系统上发布的速度稍慢(参见www.Linux.org),这个问题正在得到改进,针对Linux的新版本与针对其它平台的版本将同时发布,现在甚至是Macintosh也开始能跟上Java的新版本。与Java相互配合,Linux现在正处于非常重要的发展阶段,它正迅速成为市场上最重要的服务器平台,因为它快速﹑可靠﹑健壮﹑安全﹑易于维护,并且是免费的。这是计算机历史上的一场真正的革命,我认为以前的任何工具都没能具备所有这些特征。Java在服务器端编程中占据了重要位置,它采用了Servlet和Java 服务器页面(JSP)技术,这与传统的通用网关接口(CGI)技术相比是一个巨大的进步(相关主题请参考《Thinking in Enterprise Java》)。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
Annotated Solution Guide for Thinking in Java.chm Thinking.In.Java.3rd.Edition.Chinese.eBook-YSSY.pdf tij3.chm
Thinking.In.Java.3rd.Edition.Chinese.eBook
Thinking.In.Java.3rd.Edition.Chinese.eBook.pdf
Thinking in Java 3rd Edition.rar Thinking in Java 3rd Edition.rar Thinking in Java 3rd Edition.rar Thinking in Java 3rd Edition.rar Thinking in Java 3rd Edition.rar Thinking in Java 3rd Edition.rar
Thinking.In.Java.3rd.Edition.Chinese.eBook-YSSY,对于JAVA编程者来讲Thinking是必须掌握的。
《Thinking in Java》是Bruce Eckel的经典之作,其第三版的中文版电子书"Thinking.In.Java.3rd.Edition.Chinese.eBook-YSSY.rar"为广大的Java开发者提供了深入理解这门语言的宝贵资源。这本书全面覆盖了Java语言的...
这个压缩包内的“Thinking.In.Java.3rd.Edition.Chinese.eBook-YSSY.pdf”文件包含了上述所有内容,是一本全面学习Java的宝贵资料。无论是初学者还是经验丰富的开发者,都可以从中受益。通过仔细阅读和实践书中的...
压缩包内的文件“Thinking.In.Java.3rd.Edition.Chinese.eBook.pdf”显然就是该书的中文电子版,方便中国读者阅读。电子版的优势在于可搜索性、便携性和易于存储,使得学习过程更为便捷。 通过学习这本书,读者将...
Bruce.Eckel.Thinking.In.Java.4th.Edition.Dec.2007.eBook-BBL. java编程英文第四版
- **Java技术的发展**:随着互联网技术的飞速发展,Java技术也在不断进步,尤其是J2EE(Java 2 Platform, Enterprise Edition)框架的推出,极大地促进了企业级应用系统的开发。 - **与其他语言的比较**:相比于其他...