狠狠撸

狠狠撸Share a Scribd company logo
Web 站点和开发人员 Web 门户

网络无疑改变了共享资源和出版的本质(对我也是一样:您正在网络上阅读这篇文章),因此,从每位 Java 开
发人员都应该关注的关键 Web 站点和开发人员门户上的关键 Java 参考资源入手似乎比较合理。

在许多情况下,Web 站点和/或开发人员门户的价值不仅仅在于其中提供的参考资源或文章,还包括围绕该门户
或站点的社区。静态 Web 页面和下载文件的时代已经一去不复返了,取而代之的是更“积极” 的论坛、主题文章
和交互式讨论,讨论者不仅包括频繁访问该站点并组成社区的开发人员,还包括社区成员和门户所有者。随着技
术的发展,开发人员也必须跟上技术的步伐,同时,门户也要不断发展,以满足社区不断变化的需求;与社区保
持开放的关系是实现活跃门户的关键因素。

Web 站点列表(带有 URL):

  ?   java.sun.com
      这是 JDK 的发源地,通常是 Java 开发人员下载 JDK 和文档副本的首要站点。除此之外,该站点还是查
      找有关整个 Java 平台的信息的好来源,包括一段非常详细的 JVM 介绍(Hotspot),它极其深入地描
      述了 JVM 的细节。

  ?   java.net
      Java.NET 站点汇集了开源项目、文档、博客、wiki、新闻和其他社区资源等各种内容。它是 Java 技术
      的主要信息来源,不过提供的信息似乎过于繁杂。不过尽管如此,浏览项目列表也会找到一些真正有用的
      东西,如 FEST-Swing 项目,它旨在创建一个用于构建 Swing 应用程序的“方便接口”,大大简化了单
      元测试的创建。

  ?   InfoQ
      由 Floyd Marinescu 创建,他是 The ServerSide 的名誉主编,InfoQ 与这里列出的许多其他参考资
      源的区别是,它是技术中立的,不仅包括 Java 代码,还包括 .NET 和 Ruby,并提供了大量灵活的方法
      和见解。尽管 InfoQ 上的评论社区并没有 TheServerSide 上的社区那么庞大和多样化,但是该社区中
      的讨论通常更加温和,而不会过于激烈。

  ?   TheServerSide
      通常称为“the Slashdot of Java”,TheServerSide 是第一个公开质询、热烈讨论和积极研究公司
      Java 主题的地方。有关轻量级容器(以 Spring 为代表)的一些最初理念就是从这里诞生的,这里产生
      了许多 Java 社区中的“思想领导者”。尽管最近的激烈争论有时会带有主观色彩,但 TSS 将始终是许多
      Java 内容的发源地,这些内容构成了我们现在所拥有的 Java 系统;同样,从 TSS 总是可以了解各种
      Java 技术的历史。

  ?   DZone
      DZone 最初是一个面向 Java 开发人员的资源站点,但最近它扩展到了其他技术领域。包括 .NET 和
      Ruby,以及其他几个主题“专区”。这样,不仅 Java 开发人员可以利用它来专门研究 Java 专区,还会
      有一些跨平台的内容,聪明的开发人员可以充分利用这一点。

  ?   developerWorks Java 技术专区
      如果您正在阅读本文,那么您已经找到了 dw。为了解释清楚,我必须强调除本文外,我曾在该站点发表
      过其他一些文章,但我可以诚实地说,dw 是一个有关 Java 编码和 JVM 的文章和资源的优秀来源。特
      别注意,请务必查看 Java 理论与实践,这是一个由 Brian Goetz 撰写的长期系列,其中包含一个共分
      三部分的 JVM 垃圾收集器系列文章,它以一种浅显易懂的方式介绍了 GC 的核心概念。

  ?   IBM alphaWorks
      alphaWorks 是 developerWorks 的姊妹站点,IBM 研究人员和员工在此提供他们认为会确定未来主
      流的工具和技术。alphaWorks 提供了十二种不同的类别,从而为 Java 开发人员提供了机会来尝试各种
      非常超前的工具、语言、库和其他项目 — 它们正处于研究阶段。注意,许多项目是为了证明一个特殊的
      研究点,然后就会停止,使项目保持在当前的效率状态。警告:有些项目不是开源的,而有些项目不包含
      源代码。但相当数量的 alphaWorks 项目最终会成为主流,要么成为受 IBM 支持的产物,要么作为可从
      一些 IBM 开放源码位置下载的可用工具。无论如何,只要关注 alphaWorks,就可以了解 Java 发展的
方向以及方式。

  ?   OnJava
      OnJava 是一个独立运行的站点,用于跟踪活动、记录会议、提供各种有关公司 Java 的观点。事实上,
      这里提供的大部分信息也可以在别处找到,不过这一点对于几乎所有开发人员门户(包括上面提到的)都
      是一样的,想了解 Java 的各种开发的开发人员只需打开该站点上的 文章列表,然后逐一阅读。

  ?   Artima
      Artima 由 Bill Venners 创建,目前已经发展成一个巨大的汇集了文章、博客和访谈的站点,它不是完
      全侧重于 Java 开发,并且其中还包括了 Java 著作方面的权威(查看 Bill Joy 自 Java 5 出版后,对
      Java 语言复杂性的怀疑,以及他用于证明所担心问题的经典示例 — Enum<>)。该站点非常值得您访
      问。

注意,对于上面大部分站点,为充分利用站点/门户,需要进行某种形式的注册。在撰写本文时,所有文章基本上
都是免费的,只需要一个用户名/密码登录,以便它们能惟一识别访问者,还需要提供电子邮件地址,以便定期发
送主题新闻资讯或电子邮件(据我所知,所有站点将允许您不提供电子邮箱,但我还未这样做过,因为我发现新
闻咨询会不时告诉我一些有趣的、我还不知道的信息,收件箱中的这些邮件是很有用的)。

博客(Weblog)

Blog 使开发人员可以轻松地表达想法、概念、理念、论点并围绕技术展开思想讨论,并了解特定技术领域中非常
有影响力的“思想领袖”。此外,博客可以通过提要阅读器在本地使用,提要阅读器将文章/条目下载到本地,以便
在脱机时也可以使用。事实上,博客已经变得非常普遍,以至于出现了专门的设备(如 Amazon Kindle)来轻松
获取开发人员所需要的信息。

关键在于从几百万个博客中找到感兴趣的内容。每位开发人员都有他自己的选择,哪些需要阅读,哪些不需要,
但有些博客是最基本的,包括:

  ?   The Java Posse

  ?   The Java Specialists' Newsletter

  ?   Martin Fowler's Bliki

  ?   “Web 站点” 小节列出的 Web 站点所提供的全部 RSS 提要

注意(大多数)博客内容都属于个人观点;在这里分享的一些观点可能在以后被证明是错误的 — 永远不要只根据
博客条目中的信息来对产物下结论。但如果要使思维过程突破常规,博客将是一种增强技能的强大资源。

包和/或库

跟踪 Java 生态系统中的所有库和包是一项繁杂的工作,并且 Java 开发人员很容易就会忽略这项工作。结果,
开发人员常常发现自己正在编写的内容其实已经存在于平台内(只要他们浏览一下就会发现这一点)。

下面列出了“每位 Java 开发人员至少应该知道其存在(最好知道如何使用)的十大 Java 包”:

  ?   java.lang.reflect
      许多 Java 库和工具都依赖于 Reflection 包,所以了解它成为了一项必要要求(如果在使用时不理解
      它,会因为安全策略或其他类型的基础设施不匹配问题而导致失败)。与 Reflection 结合使用的还有
      Java 5 注释和 java.lang.annotation 。

  ?   javax.script
      Java 系统一直在强调动态语言,了解如何从 Java 代码内部使用脚本语言可以使开发人员扩展他们的系
统,而不用经历昂贵的编译-链接-运行-测试环节。

  ?   javax.management 和 java.lang.management
      该管理包也称为 Java 管理扩展(Java Management Extensions,JMX),是一种监视 Java 应用程
      序运行的强大工具;因此,开发人员应该熟悉和习惯使用 JMX,以便构建实际上可以被系统管理员使用
      的软件。不要忘记查看随 JDK 一起发布的 jconsole 工具,它演示了一种应用程序健康状况指示板,同
      时演示了可以构建的内容,它本身就是一个很有用的工具(密切关注构建 jconsole 插件来在 jconsole
      内启用脚本支持的脚本 demo,它是任何合格的系统管理员都应该掌握的一个强大工具)。

  ?   java.util.concurrent.*
      并发性是开发人员在未来十年内将要面临的最大问题,Java 开发人员用来修复并发性 bug 的主要武器就
      是此包及其子包中的类(.atomic 和 .locks )。学习使用它将与学习编写类一样(甚至更)重要。了解
      它,使用它,并喜欢上它。

  ?   java.util
      java.util 中的类同样重要。它们被频繁引用,特别是 Collections 类,所以 java.util.* 应该像
      java.lang 那样自动导入。

  ?   java.beans
      JavaBeans 无疑是整个 Java 生态系统中都要使用的核心元素之一,使用商业含义不是很明显的名
      称“POJO”(普通的旧 Java 对象)。POJO 仍然基于 JavaBeans 代码、API 和规范,因此花一点时间
      了解 java.beans 中的类可以帮助编写更好的 POJO。

  ?   java.util.logging
      诊断和审计日志迅速成为跟踪运行程序执行的强大工具,不管是出于调试目的,还是出于管理和监视目
      的。我的忠告是:学习使用这个包和其开源的姊妹包 log4j。

  ?   java.security.*
      Java 安全 API、策略机制和权限类是使 Java 环境成为安全计算平台的核心部分,但只有开发人员知道
      如何利用这个包。避开加密 API — 在详细了解每个对您有用的选项后再使用它们。它们不难使用,但要
      获取加密权限(意味着没有大的缺陷)需要花费几年的时间,有大量来自其他加密专家的相关评论。首先
      使用其他机制,如 SSL/TLS 和 GuardedObject/SignedObject/SecureObject 类。

  ?   javax.xml.parsers.* 、 javax.xml.bind 和 javax.xml.transform.*
      XML 逐渐出现在 Java 开发人员的视野中,能够解析(直接解析或通过对象-XML 库)和转换它(使用
      XSLT)是开发人员必须拥有的一项重要技能。

  ?   javax.sound.*
      这不是一项必需的技能,但知道如何偶尔弹出声音效果可以使原本乏味的代码充满生气。此外,在没有直
      接可用的显示时,还可以用声音来向系统提供信号和反馈。除此之外,让抛出栈跟踪的机器发出恐怖电影
      里的尖叫,这样用户可以知道刚刚发生了不好的事情,从而增加了一些刺激的乐趣。


当然,还有许多其他(位于 JDK 内部和外部)的包值得学习,但掌握以上这些就足以使您很好地处理大多数项
目,更不用说应付大多数工作面试。

研讨会

研讨会继续在 Java 开发人员的培训中扮演着主要角色,特别是那些还没有获得足够的认可,尚未成为大型培训
公司培训课程的主题。研讨会也是开发人员结识其他具备各种技能和职责的开发人员的绝好机会,使与会者有机
会做一些非常过瘾的(并且是完全必要的)事情:发泄对工作环境的不满。

参加研讨会也会产生一种有用的副作用(如果积极管理,可以为研讨会锦上添花):与会者可以建立开发人员小
组。通过可在世界范围内使用的电子邮件、邮件列表(如 GoogleGroups 或 Yahoo Groups)和许多其他轻量
级 groupware 通信工具,了解参加研讨会的人员的信息比以前更加容易。这些通过午餐和晚宴建立起来的友谊
可以持续一生,并且随着时间流逝愈加有益,特别是在评估新技术时更是如此。

让一位有着 30 年经验的与会者、演讲者、组织者(不是我,是我的一位朋友)的话为您提供指引:“技术新手参
加研讨会是为了通过期间举办的各种会议获取知识,资深人士参加研讨会是为了宴会和结识朋友。宴会帮助您结
识朋友,他们可以帮助您提升自己的职业”。

研讨会包括:

  ?   No Fluff, Just Stuff
      这是一个我特别热衷的研讨会,不仅仅因为我是那里的定期演讲者,而且还因为十大 JavaOne 2007 演
      讲者中有 7 个人都是 NoFluffJustStuff(目前的或以前的)演讲者。Java 开发人员不会发现比这里更加
      关注技术主题的讨论,而且也不会找到比它价格更合理、召开位置更便利的会议:您的家乡(北美大陆每
      年有 30 多场会议 — 范围跨越欧洲和亚洲,这样,您便有机会驱车去参加 NFJS 大会,而不用花几千美
      元飞到一个遥远的城市并且住在旅馆中)。同样,本文中推荐的许多书籍都是由出席 NoFluff 研讨会的专
      家编写的,这一点也就不足为奇了,而且 NFJS 的组织者们一直在不遗余力地查找有关各种 Java 和
      Agile Development 主题的“重要资源”。

  ?   JavaOne
      这是一个规模宏大且非常客观的会议,并且一直在旧金山(在这个地方举行有利也有弊,具体取决于您公
      司的出差预算情况)举行,不过世界上还没有哪一个会议能像 JavaOne 这样把这么多关键 Java 推动者
      聚集到一个地方。

  ?   JAOO
      为了不冷落我们的欧洲 Java 同胞,每年在丹麦奥尔胡斯举行一次 JAOO 会议,该研讨会已经举办了将
      近二十年,并且没有任何衰落的迹象。JAOO 不仅吸引了一些顶尖的演讲者和作家,而且作为一个跨技术
      的研讨会,在技术方面具有很好的包容性,也就是说,与会者早上可以出席 Java 研讨会,午餐时与一些
      C++ 开发人员交谈,下午了解 Microsoft 的 ? Silverlight 的最新发展成果(或任何别的新事物),晚
      上则与 Smalltalker 喝喝啤酒。如果您想增长见识,JAOO 或它的姊妹会议 QCon(在 InfoQ 工作人员
      的协力支持下召开)将是一个不错的起点。对那些居住在“澳大利亚或新西兰” 的 Java 同胞,今年
      (2008)在布里斯班和悉尼首次召开了 JAOO;所有迹象表明,在未来几年来内,将会在这里再次举行
      JAOO。

  ?   Devoxx
      该研讨会是以前的 JavaPolis,在比利时安特卫普这一飞速发展的城市举行,参加这一研讨会是遇见欧洲
      同行的绝好途径(而且还可以品尝到上等的比利时啤酒)。演讲者都是该领域的首席专家,他们将集中讨
      论一些尖端技术。该研讨会也提供了优秀的平台和许多机会让您与开发人员同行进行交流。

  ?   Jazoon
      Jazoon 是一个相对较新的研讨会,2007 年在苏黎世(瑞士)召开。因为参与者名单上有 Martin
      Odersky(Scala 的创建者)、Neal Gafter 和 Simon Phipps(Sun 的首席开放源码执行官)之类的
      名字,所以 Jazoon 有望吸引大量演讲者。Jazoon 完全侧重于 Java 主题并在欧洲的中心召开,它有望
      成为欧洲 Java 同胞们的一项重要日程。

还有其他一些研讨会,目标受众也各不相同,但以上列举的研讨会是直接针对 Java 开发人员的。那些希望扩大
自己视野的开发人员应该考虑参加“其他” 技术研讨会,如在世界各地举办的各种 Perl、Python、Ruby 甚至
.NET 会议;接受新的观念有时需要研究一组全新的问题。

书籍

对开发人员而言,没有哪一种资源能比价格便宜的传统书籍更容易获取。只需要去当地的书店(如果您住在边远
地区,可通过 Web 浏览器查找 Amazon 来购买书籍),就可以找到大量珍贵的技术知识和经验……只要您肯在
大量资源中仔细寻找。
这些书籍假设读者已经有了 Java 语言和工具集的应用知识;Java 入门书籍非常普遍,而且大多数讨论的是相同
的基本内容。选择书籍需要一定的技巧,要考虑作者的写作风格,有时甚至要考虑随书光盘中是否包含了练习的
参考答案(如果包含了练习的话)。

掌握了基本知识后,考虑阅读以下书籍:

 ?   Effective Java(第 2 版),Joshua Bloch
     每位 Java 开发人员的书架上必备的第一本书,必须定期翻阅、随时查看。

 ?   Java Concurrency in Practice ,Brian Goetz
     每位 Java 开发人员书架上必备的第二本书,因为每位 Java 人员(不管他们愿意与否)都会操纵多线程
     环境的内部。

 ?   Better, Faster, Lighter Java ,Justin Gehtland 和 Bruce Tate
     这一小巧的册子被许多 Java 开发人员当作攻下以 Spring 为首的“轻量级容器” 环境的“利器”,填补了大
     多数大型 EJB 服务器(如 WebSphere 或其他事务处理中间件)留下的空白。作者还介绍了基于 POJO
     的开发周期,指出了该理念的优点和缺点,以及如何采取更轻量级的方法构建公司应用程序,使用了
     Spring 和 Hibernate 这类不会降低生成系统的功能和能力的工具。

 ?   Effective Enterprise Java ,Ted Neward(我)
     提供 75 种方法来确保公司 Java 应用程序(不管它们是用 Spring、EJB、Web 服务,还是其他技术实
     现)不会出现问题。就像 Effective Java 不是针对初级 Java 程序员一样,Effective Enterprise Java
     同样也不是针对刚开始学习“公司 Java” 基础知识的开发人员。

 ?   Release It! ,Michael Nygard
     任何打算编写针对生产服务器的软件的人都应该阅读本书 — 它深入探讨了生产环境中可能出现的错误,
     以及如何处理潜在的故障,要么恢复故障,要么完全避免故障。

 ?   Inside the Java 2 Virtual Machine ,Bill Venners 或 Component Development for the
     Java Platform ,Stuart Halloway
     Java 开发人员一旦学习 Java 这门语言后,迟早要了解底层平台 — Java 虚拟机本身,这意味着垃圾收
     集以及 Reference 对象、ClassLoader、线程和监视器等主题将成为接下来探讨的重点领域。两本书中
     的任何一本(或两本)都是非常有用的指南。但是这两本书都有一个很大的缺陷:它们的出版时间比较
     早。Inside 是 Java 1.2 期间出版的,此后不久便出版了 Component-Based。幸运的是,大多数
     Java 虚拟机自那时起一直没有发生什么变化,所以如果读者遇到除 JDK 1.2 以外的问题时,可以暂时放
     下本书并继续研究下一主题。

 ?   Martin Fowler 撰写的 Patterns of Enterprise Application Architecture 、Gregor Hohpe
     和 Bobby Woolf 撰写的 Enterprise Integration Patterns
     说到设计方法和理念,这两本书都是典范,同样假定大部分读者都阅读过由 Gamma、Helm、Johnson
     和 VlissidesBoth 合著的经典书籍 Design Patterns。模式书籍通常为开发人员提供了一些基本的概念
     构建块进行调整和组合,从而创建更健壮的设计,这些构建块在单独使用时就不怎么有效。

 ?   Java Power Tools ,John Smart
     很多人推荐这本书,它详细介绍了 Java 生态系统中各种可用的工具。Smart 还提供了对于本书的培训
     课程(Java Power Tools Bootcamp),但大多数开发人员获取信息的最简单方式还是通过 dead-tree
     版本。

 ?   The Pragmatic Programmer ,Andy Hunt 和 Dave Thomas
     每个程序员应该人手一册,不管他实际使用的语言或平台是什么。本书适合有经验的读者和从事多年编程
     工作的程序员。本书可与 Fred Brooks 的经典著作 The Mythical Man-Month 媲美。

 ?   The Productive Programmer ,Neal Ford
     这本最近出版的书籍与 Pragmatic Programmer 一样经典,它主要讨论各种技巧和技能,程序员可以
借助这些技巧和技能提高他们的效率,获得比 IDE 更高的生产力。

  ?   The Pragmatic Starter Kit
      本套件由 Pragmatic Unit Testing (with JUnit)、Pragmatic Project Automation 和 Pragmatic
      Source Control (with Subversion) 组成。每本书都清晰、针对性地讨论了各个主题的核心内容,它们
      直接深入主题,没有涉及其他无关内容。例如,Project Automation 是阅读 Ant in Action 的“开胃
      书”,但同时也讨论了什么是优秀的构建流程以及构建它们的原因。

  ?   Ant in Action(第 2 版),Erik Hatcher 和 Steve Loughran
      Ant 是面向 Java 平台的优秀构建实用程序(参阅后面的工具内容了解更多详细信息),本书是目前为止
      介绍强大 Ant 功能的最佳读物。在学习如何使用 Ant 时,Ant in Action 还演示了单元测试、持续集成
      和生产部署实践,这一切都是从实际 Java 开发人员的日常实践的角度出发的。

工具

正如盖房子不仅仅是“抡起锤子在板上钉钉子” 一样,Java 开发也不仅仅是“掌握 IDE 并开始编写代码”。好的
IDE 当然能为编写 Java 代码出力不少,但其他的工具也可以提供与 IDE 相等的(也许更好的)价值。

排名不分先后……

  ?   IDE
      当然,工具讨论首先从 IDE 开始。在避开商业限制方面,Eclipse 和 NetBeans 都是开源且免费的,因
      而提供了吸引人的“第一步”。

  ?   单元测试
      掀起单元测试革命的工具是 JUnit,但其他几个工具也得到普及,包括 TestNG,自然还有 JUnitPerf 等
      等。

  ?   持续集成
      持续集成服务器不断检查不受源控制的代码,执行构建,对它运行单元测试,并通常通过电子邮件向开发
      人员报告所有构建故障。有几个开源版本可用,但有一个已经得到了广泛关注,即 Hudson,它是一个拥
      有大量插件和具有高可扩展性的持续集成服务器,它源自 CruiseControl ,它正是因为这一点而声名斐
      赫。

  ?   静态分析
      FindBugs 是一个运行 Java 代码的开放源码静态分析工具,执行 n 向深度分析来找出所有可能的代码路
      径,并基于一组可扩展规则报告找到的各种错误和警告。FindBugs 由 William Pugh 开发(这位
      William Pugh 还发现了 Java 内存模型中的 bug),其最值得炫耀的地方是它能够分析 Java 代码来查
      找并发 bug,每位程序员都会为之欢呼。

  ?   网络包跟踪
      WireShark (以前一般称为 Ethereal)使程序员可以查看网络上传播的内容,让他们有机会检查正在网
      络上传播的内容是否合适,而那些不 合适的内容(比如敏感信息和明文密码)没有出现在网路上。

  ?   虚拟化
      类似 VMWare、Xen、VirtualBox 或 VirtualPC 之类的虚拟化工具(或者更准确地称之为平台)使程序
      员能够创建与生产机器将运行的环境相同的环境,而不失去主机 PC 环境的生产力。它还提供了一种便利
      方法来在本地尝试“处于试验阶段的” 软件,而不必让处于生产状态的机器冒险。如果不是完全的开源项
      目,大多数虚拟化工具都提供有某种免费选项。

您不必感到惊讶,这些工具中的其中一些是商业工具;如果一个工具一个星期平均能帮您节约一个小时的时间,
您需要多长时间就可以收回购买该工具的资金呢?如果管理人员不认同这个观点的话,那么仔细计算使用某一工
具节省的时间(假设是开发人员的时间,或者是产物诊断或执行时间)后,管理员终会发现,他们在这些工具上
的吝啬是一件得不偿失的愚蠢事。
向贡献者致谢
 感谢所有访问我的博客(blogs.tedneward.com)的读者,他们从百忙中抽出时间来向我推荐应该包含
 在此列表中的参考资源;他们(当然不是所有人)包括 Greg Ostrovich、Ryan Slobojan、Hamlet
 D'Arcy(他认为自己是个外星人,正在为 IT 打工来赚钱修复他的宇宙飞船,从而返回自己的星
 球)、Pierre Marc-Larocque、Prashant Rane、Marc Stock、Eric Kerwin、Morten
 Anderson、Alex,以及 Yvonne Miller、Rahul Raj、Brian Sletten 和 Neal Ford。



未来趋势展望

当然,Java 开发人员花所有时间来学习当前的技术并不是一件好事,学习完后,新的技术又接踵而至,使学过的
所有内容一下子都变得过时了。随时关注“未来发展趋势” 同样重要,惟有这样,当公司 CTO 突然在电梯里问
您“我最近听到的函数式语言是怎么一回事,我们需要对此进行研究吗?” 时,您才会给出连贯合理的答复。

排名不分先后,一些围绕 Java 平台的“未来趋势” 包括:

  ?   动态语言
      Groovy 和 JRuby 之类的语言衍生出了其他一些值得研究的项目,如 Clojure 和 Fan,试验表明,低强
      度类型的环境能提供更好的生产力和更多的选项。这并非鼓励您放弃 Java 语言,不过,最好的效果总是
      来自强强联合。

  ?   函数式语言
      其兴起源于 Scala,由于函数语言一般支持复合函数并缺少共享状态,因此提供了隐式并发性的优点(尽
      管有时它的语法很难让人接受)。Jaskell 是一个 Haskell-on-JVM 实现,同样,Clojure 也适合在这里
      使用,您可以想象生产环境中的软件事务内存是什么样子。

  ?   Java 中的闭包
      添加闭包支持(也称为 lambda 或匿名方法)将简化部分 Java 编码工作,对是否在 Java 7 发行版中
      包含此支持进行过热烈的讨论。社区对此问题的讨论深度不一,因此 Java 程序员有必要花点时间研究这
      个问题,并看看讨论的所有内容。

  ?   DaVinci 机器
      JVM 的一个新版本对其他语言(比如上面提到的动态语言和函数式语言)更友好,这最终可能会也可能
      不会使它进入主流 JVM 发行版。随时关注这一点有助于理解在当前 JVM 上运行动态/脚本语言的利弊。

  ?   用户界面开发
      在 Flash/Flex、Silverlight 和 JavaFX 的支持下,Web 浏览器得到了显著的(并且几乎是惊人的)改
      变。这还不考虑 Java 领域中的新服务器端 Web 框架和 Google Web 工具包(Google Web
      Toolkit,GWT)之类的特例。用户界面一直是、而且以后将继续是一个吸引人的亮点。了解一到两个
      (更不必说 Swing 或 SWT 之类的“富客户端” 库)库将对构建比 HTML 页面更具交互性的内容大有裨
      益。

记住,与任何和“未来” 相关的事物一样,现在讨论的内容可能最终证明是错误的方向、昙花一现的事物、对行业
的一种影响,也可能是下一个重大事件;保持开放的思维,同时也要保持适当的怀疑。

结束语

请随意补充此列表 — 最终会得到一份更完善的参考资源列表。因为 Java 世界在不断发展,不断变化和成长,所
以列表的内容会随时间而改变。这是一件好事;如果我们必须使用 1995 年时期的 Java 环境,我们早就转向其
他技术了。

积极参与到 Java 世界中来:贡献补丁、增强,如果没有合适的贡献,就构建自己的工具。也许您的项目 5 年以
内会一直出现在这个列表中。
Ad

Recommended

闯苍颈文档
闯苍颈文档
woshiwzy
?
SCJP ch01
SCJP ch01
r82093403
?
Java 推荐读物
Java 推荐读物
yiditushe
?
Java 1(Java概述)
Java 1(Java概述)
xzdbd
?
鲍苍颈蹿补肠别和闯础痴础开发的比较
鲍苍颈蹿补肠别和闯础痴础开发的比较
Helen Xu
?
Java JNI 编程进阶
Java JNI 编程进阶
wensheng wei
?
Windows 系统45个小技巧
Windows 系统45个小技巧
wensheng wei
?
痴惭飞补谤别如何使用,最好用的虚拟机,痴惭飞补谤别有哪些功能?对于虚拟机痴...
痴惭飞补谤别如何使用,最好用的虚拟机,痴惭飞补谤别有哪些功能?对于虚拟机痴...
wensheng wei
?
Cool Object Building With PHP
Cool Object Building With PHP
wensheng wei
?
非常时期,如何用
非常时期,如何用
wensheng wei
?
耳朵拉长
耳朵拉长
wensheng wei
?
闯补惫补正则表达式详解
闯补惫补正则表达式详解
wensheng wei
?
础辫补肠丑别配置文件说明
础辫补肠丑别配置文件说明
wensheng wei
?
Top 10 Web Vulnerability Scanners
Top 10 Web Vulnerability Scanners
wensheng wei
?
issue35 zh-CN
issue35 zh-CN
wensheng wei
?
揭秘全球最大网站贵补肠别产辞辞办背后的那些软件
揭秘全球最大网站贵补肠别产辞辞办背后的那些软件
wensheng wei
?
厂耻产惫别谤蝉颈辞苍快速入门教程
厂耻产惫别谤蝉颈辞苍快速入门教程
wensheng wei
?
Samba Optimization and Speed Tuning f...
Samba Optimization and Speed Tuning f...
wensheng wei
?
CentOS5 apache2 mysql5 php5 Zend
CentOS5 apache2 mysql5 php5 Zend
wensheng wei
?
2. java introduction
2. java introduction
netdbncku
?
给学习J2 Ee的朋友一些值得研究的开源项目
给学习J2 Ee的朋友一些值得研究的开源项目
yiditushe
?
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論
Justin Lin
?
My eclipse 6 java开发教程[优化整合版]
My eclipse 6 java开发教程[优化整合版]
Cik Wati
?
闯补惫补编程思想中文第3版
闯补惫补编程思想中文第3版
yiditushe
?
Langchain and Azure ML and Open AI
Langchain and Azure ML and Open AI
Ko Ko
?
常用闯蝉框架比较
常用闯蝉框架比较
Adam Lu
?
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Justin Lin
?
闯蝉辫高级编程
闯蝉辫高级编程
yiditushe
?
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Justin Lin
?

More Related Content

Viewers also liked (12)

Cool Object Building With PHP
Cool Object Building With PHP
wensheng wei
?
非常时期,如何用
非常时期,如何用
wensheng wei
?
耳朵拉长
耳朵拉长
wensheng wei
?
闯补惫补正则表达式详解
闯补惫补正则表达式详解
wensheng wei
?
础辫补肠丑别配置文件说明
础辫补肠丑别配置文件说明
wensheng wei
?
Top 10 Web Vulnerability Scanners
Top 10 Web Vulnerability Scanners
wensheng wei
?
issue35 zh-CN
issue35 zh-CN
wensheng wei
?
揭秘全球最大网站贵补肠别产辞辞办背后的那些软件
揭秘全球最大网站贵补肠别产辞辞办背后的那些软件
wensheng wei
?
厂耻产惫别谤蝉颈辞苍快速入门教程
厂耻产惫别谤蝉颈辞苍快速入门教程
wensheng wei
?
Samba Optimization and Speed Tuning f...
Samba Optimization and Speed Tuning f...
wensheng wei
?
CentOS5 apache2 mysql5 php5 Zend
CentOS5 apache2 mysql5 php5 Zend
wensheng wei
?
Cool Object Building With PHP
Cool Object Building With PHP
wensheng wei
?
非常时期,如何用
非常时期,如何用
wensheng wei
?
闯补惫补正则表达式详解
闯补惫补正则表达式详解
wensheng wei
?
础辫补肠丑别配置文件说明
础辫补肠丑别配置文件说明
wensheng wei
?
Top 10 Web Vulnerability Scanners
Top 10 Web Vulnerability Scanners
wensheng wei
?
揭秘全球最大网站贵补肠别产辞辞办背后的那些软件
揭秘全球最大网站贵补肠别产辞辞办背后的那些软件
wensheng wei
?
厂耻产惫别谤蝉颈辞苍快速入门教程
厂耻产惫别谤蝉颈辞苍快速入门教程
wensheng wei
?
Samba Optimization and Speed Tuning f...
Samba Optimization and Speed Tuning f...
wensheng wei
?
CentOS5 apache2 mysql5 php5 Zend
CentOS5 apache2 mysql5 php5 Zend
wensheng wei
?

Similar to 必备的 Java 参考资源列表 (20)

2. java introduction
2. java introduction
netdbncku
?
给学习J2 Ee的朋友一些值得研究的开源项目
给学习J2 Ee的朋友一些值得研究的开源项目
yiditushe
?
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論
Justin Lin
?
My eclipse 6 java开发教程[优化整合版]
My eclipse 6 java开发教程[优化整合版]
Cik Wati
?
闯补惫补编程思想中文第3版
闯补惫补编程思想中文第3版
yiditushe
?
Langchain and Azure ML and Open AI
Langchain and Azure ML and Open AI
Ko Ko
?
常用闯蝉框架比较
常用闯蝉框架比较
Adam Lu
?
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Justin Lin
?
闯蝉辫高级编程
闯蝉辫高级编程
yiditushe
?
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Justin Lin
?
beidakejian
beidakejian
hanxuebing
?
Ruby on rails部署
Ruby on rails部署
Deng Peng
?
第一章 概述和Jdk的安装和配置
第一章 概述和Jdk的安装和配置
yinmei1983
?
[圣思园][Java SE]000 讲师张龙介绍
[圣思园][Java SE]000 讲师张龙介绍
ArBing Xie
?
51 cto下载 51cto信息图:openshift vs cloudfoundry
51 cto下载 51cto信息图:openshift vs cloudfoundry
Hong Cai
?
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
Justin Lin
?
闯蝉高级技巧
闯蝉高级技巧
fool2fish
?
Ext Js开发指导
Ext Js开发指导
clong365
?
從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby
建興 王
?
罢飞补惫别谤图形界面之道(上)
罢飞补惫别谤图形界面之道(上)
253725291
?
2. java introduction
2. java introduction
netdbncku
?
给学习J2 Ee的朋友一些值得研究的开源项目
给学习J2 Ee的朋友一些值得研究的开源项目
yiditushe
?
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論
Justin Lin
?
My eclipse 6 java开发教程[优化整合版]
My eclipse 6 java开发教程[优化整合版]
Cik Wati
?
闯补惫补编程思想中文第3版
闯补惫补编程思想中文第3版
yiditushe
?
Langchain and Azure ML and Open AI
Langchain and Azure ML and Open AI
Ko Ko
?
常用闯蝉框架比较
常用闯蝉框架比较
Adam Lu
?
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Justin Lin
?
闯蝉辫高级编程
闯蝉辫高级编程
yiditushe
?
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Justin Lin
?
Ruby on rails部署
Ruby on rails部署
Deng Peng
?
第一章 概述和Jdk的安装和配置
第一章 概述和Jdk的安装和配置
yinmei1983
?
[圣思园][Java SE]000 讲师张龙介绍
[圣思园][Java SE]000 讲师张龙介绍
ArBing Xie
?
51 cto下载 51cto信息图:openshift vs cloudfoundry
51 cto下载 51cto信息图:openshift vs cloudfoundry
Hong Cai
?
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
Justin Lin
?
闯蝉高级技巧
闯蝉高级技巧
fool2fish
?
Ext Js开发指导
Ext Js开发指导
clong365
?
從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby
建興 王
?
罢飞补惫别谤图形界面之道(上)
罢飞补惫别谤图形界面之道(上)
253725291
?
Ad

More from wensheng wei (20)

你会柔软地想起这个校园
你会柔软地想起这个校园
wensheng wei
?
几米语录(1)
几米语录(1)
wensheng wei
?
我的简历
我的简历
wensheng wei
?
Installation of Subversion on Ubuntu,...
Installation of Subversion on Ubuntu,...
wensheng wei
?
高级笔贬笔应用程序漏洞审核技术
高级笔贬笔应用程序漏洞审核技术
wensheng wei
?
存储过程编写经验和优化措施
存储过程编写经验和优化措施
wensheng wei
?
Happiness is a Journey
Happiness is a Journey
wensheng wei
?
Linux Shortcuts and Commands:
Linux Shortcuts and Commands:
wensheng wei
?
Linux Security Quick Reference Guide
Linux Security Quick Reference Guide
wensheng wei
?
Android模拟器SD Card映像文件使用方法
Android模拟器SD Card映像文件使用方法
wensheng wei
?
如何硬盘安装耻产耻苍迟耻8.10
如何硬盘安装耻产耻苍迟耻8.10
wensheng wei
?
ubunturef
ubunturef
wensheng wei
?
数据库设计方法、规范与技巧
数据库设计方法、规范与技巧
wensheng wei
?
尘测蝉辩濒的字符串函数
尘测蝉辩濒的字符串函数
wensheng wei
?
入门-闯补惫补运行环境变量的图文教程
入门-闯补惫补运行环境变量的图文教程
wensheng wei
?
闯补惫补学习路径
闯补惫补学习路径
wensheng wei
?
LINUX Admin Quick Reference
LINUX Admin Quick Reference
wensheng wei
?
上海实习有感
上海实习有感
wensheng wei
?
100 Essential Web Development Tools
100 Essential Web Development Tools
wensheng wei
?
你会柔软地想起这个校园
你会柔软地想起这个校园
wensheng wei
?
Installation of Subversion on Ubuntu,...
Installation of Subversion on Ubuntu,...
wensheng wei
?
高级笔贬笔应用程序漏洞审核技术
高级笔贬笔应用程序漏洞审核技术
wensheng wei
?
存储过程编写经验和优化措施
存储过程编写经验和优化措施
wensheng wei
?
Happiness is a Journey
Happiness is a Journey
wensheng wei
?
Linux Shortcuts and Commands:
Linux Shortcuts and Commands:
wensheng wei
?
Linux Security Quick Reference Guide
Linux Security Quick Reference Guide
wensheng wei
?
Android模拟器SD Card映像文件使用方法
Android模拟器SD Card映像文件使用方法
wensheng wei
?
如何硬盘安装耻产耻苍迟耻8.10
如何硬盘安装耻产耻苍迟耻8.10
wensheng wei
?
数据库设计方法、规范与技巧
数据库设计方法、规范与技巧
wensheng wei
?
尘测蝉辩濒的字符串函数
尘测蝉辩濒的字符串函数
wensheng wei
?
入门-闯补惫补运行环境变量的图文教程
入门-闯补惫补运行环境变量的图文教程
wensheng wei
?
闯补惫补学习路径
闯补惫补学习路径
wensheng wei
?
LINUX Admin Quick Reference
LINUX Admin Quick Reference
wensheng wei
?
100 Essential Web Development Tools
100 Essential Web Development Tools
wensheng wei
?
Ad

必备的 Java 参考资源列表

  • 1. Web 站点和开发人员 Web 门户 网络无疑改变了共享资源和出版的本质(对我也是一样:您正在网络上阅读这篇文章),因此,从每位 Java 开 发人员都应该关注的关键 Web 站点和开发人员门户上的关键 Java 参考资源入手似乎比较合理。 在许多情况下,Web 站点和/或开发人员门户的价值不仅仅在于其中提供的参考资源或文章,还包括围绕该门户 或站点的社区。静态 Web 页面和下载文件的时代已经一去不复返了,取而代之的是更“积极” 的论坛、主题文章 和交互式讨论,讨论者不仅包括频繁访问该站点并组成社区的开发人员,还包括社区成员和门户所有者。随着技 术的发展,开发人员也必须跟上技术的步伐,同时,门户也要不断发展,以满足社区不断变化的需求;与社区保 持开放的关系是实现活跃门户的关键因素。 Web 站点列表(带有 URL): ? java.sun.com 这是 JDK 的发源地,通常是 Java 开发人员下载 JDK 和文档副本的首要站点。除此之外,该站点还是查 找有关整个 Java 平台的信息的好来源,包括一段非常详细的 JVM 介绍(Hotspot),它极其深入地描 述了 JVM 的细节。 ? java.net Java.NET 站点汇集了开源项目、文档、博客、wiki、新闻和其他社区资源等各种内容。它是 Java 技术 的主要信息来源,不过提供的信息似乎过于繁杂。不过尽管如此,浏览项目列表也会找到一些真正有用的 东西,如 FEST-Swing 项目,它旨在创建一个用于构建 Swing 应用程序的“方便接口”,大大简化了单 元测试的创建。 ? InfoQ 由 Floyd Marinescu 创建,他是 The ServerSide 的名誉主编,InfoQ 与这里列出的许多其他参考资 源的区别是,它是技术中立的,不仅包括 Java 代码,还包括 .NET 和 Ruby,并提供了大量灵活的方法 和见解。尽管 InfoQ 上的评论社区并没有 TheServerSide 上的社区那么庞大和多样化,但是该社区中 的讨论通常更加温和,而不会过于激烈。 ? TheServerSide 通常称为“the Slashdot of Java”,TheServerSide 是第一个公开质询、热烈讨论和积极研究公司 Java 主题的地方。有关轻量级容器(以 Spring 为代表)的一些最初理念就是从这里诞生的,这里产生 了许多 Java 社区中的“思想领导者”。尽管最近的激烈争论有时会带有主观色彩,但 TSS 将始终是许多 Java 内容的发源地,这些内容构成了我们现在所拥有的 Java 系统;同样,从 TSS 总是可以了解各种 Java 技术的历史。 ? DZone DZone 最初是一个面向 Java 开发人员的资源站点,但最近它扩展到了其他技术领域。包括 .NET 和 Ruby,以及其他几个主题“专区”。这样,不仅 Java 开发人员可以利用它来专门研究 Java 专区,还会 有一些跨平台的内容,聪明的开发人员可以充分利用这一点。 ? developerWorks Java 技术专区 如果您正在阅读本文,那么您已经找到了 dw。为了解释清楚,我必须强调除本文外,我曾在该站点发表 过其他一些文章,但我可以诚实地说,dw 是一个有关 Java 编码和 JVM 的文章和资源的优秀来源。特 别注意,请务必查看 Java 理论与实践,这是一个由 Brian Goetz 撰写的长期系列,其中包含一个共分 三部分的 JVM 垃圾收集器系列文章,它以一种浅显易懂的方式介绍了 GC 的核心概念。 ? IBM alphaWorks alphaWorks 是 developerWorks 的姊妹站点,IBM 研究人员和员工在此提供他们认为会确定未来主 流的工具和技术。alphaWorks 提供了十二种不同的类别,从而为 Java 开发人员提供了机会来尝试各种 非常超前的工具、语言、库和其他项目 — 它们正处于研究阶段。注意,许多项目是为了证明一个特殊的 研究点,然后就会停止,使项目保持在当前的效率状态。警告:有些项目不是开源的,而有些项目不包含 源代码。但相当数量的 alphaWorks 项目最终会成为主流,要么成为受 IBM 支持的产物,要么作为可从 一些 IBM 开放源码位置下载的可用工具。无论如何,只要关注 alphaWorks,就可以了解 Java 发展的
  • 2. 方向以及方式。 ? OnJava OnJava 是一个独立运行的站点,用于跟踪活动、记录会议、提供各种有关公司 Java 的观点。事实上, 这里提供的大部分信息也可以在别处找到,不过这一点对于几乎所有开发人员门户(包括上面提到的)都 是一样的,想了解 Java 的各种开发的开发人员只需打开该站点上的 文章列表,然后逐一阅读。 ? Artima Artima 由 Bill Venners 创建,目前已经发展成一个巨大的汇集了文章、博客和访谈的站点,它不是完 全侧重于 Java 开发,并且其中还包括了 Java 著作方面的权威(查看 Bill Joy 自 Java 5 出版后,对 Java 语言复杂性的怀疑,以及他用于证明所担心问题的经典示例 — Enum<>)。该站点非常值得您访 问。 注意,对于上面大部分站点,为充分利用站点/门户,需要进行某种形式的注册。在撰写本文时,所有文章基本上 都是免费的,只需要一个用户名/密码登录,以便它们能惟一识别访问者,还需要提供电子邮件地址,以便定期发 送主题新闻资讯或电子邮件(据我所知,所有站点将允许您不提供电子邮箱,但我还未这样做过,因为我发现新 闻咨询会不时告诉我一些有趣的、我还不知道的信息,收件箱中的这些邮件是很有用的)。 博客(Weblog) Blog 使开发人员可以轻松地表达想法、概念、理念、论点并围绕技术展开思想讨论,并了解特定技术领域中非常 有影响力的“思想领袖”。此外,博客可以通过提要阅读器在本地使用,提要阅读器将文章/条目下载到本地,以便 在脱机时也可以使用。事实上,博客已经变得非常普遍,以至于出现了专门的设备(如 Amazon Kindle)来轻松 获取开发人员所需要的信息。 关键在于从几百万个博客中找到感兴趣的内容。每位开发人员都有他自己的选择,哪些需要阅读,哪些不需要, 但有些博客是最基本的,包括: ? The Java Posse ? The Java Specialists' Newsletter ? Martin Fowler's Bliki ? “Web 站点” 小节列出的 Web 站点所提供的全部 RSS 提要 注意(大多数)博客内容都属于个人观点;在这里分享的一些观点可能在以后被证明是错误的 — 永远不要只根据 博客条目中的信息来对产物下结论。但如果要使思维过程突破常规,博客将是一种增强技能的强大资源。 包和/或库 跟踪 Java 生态系统中的所有库和包是一项繁杂的工作,并且 Java 开发人员很容易就会忽略这项工作。结果, 开发人员常常发现自己正在编写的内容其实已经存在于平台内(只要他们浏览一下就会发现这一点)。 下面列出了“每位 Java 开发人员至少应该知道其存在(最好知道如何使用)的十大 Java 包”: ? java.lang.reflect 许多 Java 库和工具都依赖于 Reflection 包,所以了解它成为了一项必要要求(如果在使用时不理解 它,会因为安全策略或其他类型的基础设施不匹配问题而导致失败)。与 Reflection 结合使用的还有 Java 5 注释和 java.lang.annotation 。 ? javax.script Java 系统一直在强调动态语言,了解如何从 Java 代码内部使用脚本语言可以使开发人员扩展他们的系
  • 3. 统,而不用经历昂贵的编译-链接-运行-测试环节。 ? javax.management 和 java.lang.management 该管理包也称为 Java 管理扩展(Java Management Extensions,JMX),是一种监视 Java 应用程 序运行的强大工具;因此,开发人员应该熟悉和习惯使用 JMX,以便构建实际上可以被系统管理员使用 的软件。不要忘记查看随 JDK 一起发布的 jconsole 工具,它演示了一种应用程序健康状况指示板,同 时演示了可以构建的内容,它本身就是一个很有用的工具(密切关注构建 jconsole 插件来在 jconsole 内启用脚本支持的脚本 demo,它是任何合格的系统管理员都应该掌握的一个强大工具)。 ? java.util.concurrent.* 并发性是开发人员在未来十年内将要面临的最大问题,Java 开发人员用来修复并发性 bug 的主要武器就 是此包及其子包中的类(.atomic 和 .locks )。学习使用它将与学习编写类一样(甚至更)重要。了解 它,使用它,并喜欢上它。 ? java.util java.util 中的类同样重要。它们被频繁引用,特别是 Collections 类,所以 java.util.* 应该像 java.lang 那样自动导入。 ? java.beans JavaBeans 无疑是整个 Java 生态系统中都要使用的核心元素之一,使用商业含义不是很明显的名 称“POJO”(普通的旧 Java 对象)。POJO 仍然基于 JavaBeans 代码、API 和规范,因此花一点时间 了解 java.beans 中的类可以帮助编写更好的 POJO。 ? java.util.logging 诊断和审计日志迅速成为跟踪运行程序执行的强大工具,不管是出于调试目的,还是出于管理和监视目 的。我的忠告是:学习使用这个包和其开源的姊妹包 log4j。 ? java.security.* Java 安全 API、策略机制和权限类是使 Java 环境成为安全计算平台的核心部分,但只有开发人员知道 如何利用这个包。避开加密 API — 在详细了解每个对您有用的选项后再使用它们。它们不难使用,但要 获取加密权限(意味着没有大的缺陷)需要花费几年的时间,有大量来自其他加密专家的相关评论。首先 使用其他机制,如 SSL/TLS 和 GuardedObject/SignedObject/SecureObject 类。 ? javax.xml.parsers.* 、 javax.xml.bind 和 javax.xml.transform.* XML 逐渐出现在 Java 开发人员的视野中,能够解析(直接解析或通过对象-XML 库)和转换它(使用 XSLT)是开发人员必须拥有的一项重要技能。 ? javax.sound.* 这不是一项必需的技能,但知道如何偶尔弹出声音效果可以使原本乏味的代码充满生气。此外,在没有直 接可用的显示时,还可以用声音来向系统提供信号和反馈。除此之外,让抛出栈跟踪的机器发出恐怖电影 里的尖叫,这样用户可以知道刚刚发生了不好的事情,从而增加了一些刺激的乐趣。 当然,还有许多其他(位于 JDK 内部和外部)的包值得学习,但掌握以上这些就足以使您很好地处理大多数项 目,更不用说应付大多数工作面试。 研讨会 研讨会继续在 Java 开发人员的培训中扮演着主要角色,特别是那些还没有获得足够的认可,尚未成为大型培训 公司培训课程的主题。研讨会也是开发人员结识其他具备各种技能和职责的开发人员的绝好机会,使与会者有机 会做一些非常过瘾的(并且是完全必要的)事情:发泄对工作环境的不满。 参加研讨会也会产生一种有用的副作用(如果积极管理,可以为研讨会锦上添花):与会者可以建立开发人员小 组。通过可在世界范围内使用的电子邮件、邮件列表(如 GoogleGroups 或 Yahoo Groups)和许多其他轻量
  • 4. 级 groupware 通信工具,了解参加研讨会的人员的信息比以前更加容易。这些通过午餐和晚宴建立起来的友谊 可以持续一生,并且随着时间流逝愈加有益,特别是在评估新技术时更是如此。 让一位有着 30 年经验的与会者、演讲者、组织者(不是我,是我的一位朋友)的话为您提供指引:“技术新手参 加研讨会是为了通过期间举办的各种会议获取知识,资深人士参加研讨会是为了宴会和结识朋友。宴会帮助您结 识朋友,他们可以帮助您提升自己的职业”。 研讨会包括: ? No Fluff, Just Stuff 这是一个我特别热衷的研讨会,不仅仅因为我是那里的定期演讲者,而且还因为十大 JavaOne 2007 演 讲者中有 7 个人都是 NoFluffJustStuff(目前的或以前的)演讲者。Java 开发人员不会发现比这里更加 关注技术主题的讨论,而且也不会找到比它价格更合理、召开位置更便利的会议:您的家乡(北美大陆每 年有 30 多场会议 — 范围跨越欧洲和亚洲,这样,您便有机会驱车去参加 NFJS 大会,而不用花几千美 元飞到一个遥远的城市并且住在旅馆中)。同样,本文中推荐的许多书籍都是由出席 NoFluff 研讨会的专 家编写的,这一点也就不足为奇了,而且 NFJS 的组织者们一直在不遗余力地查找有关各种 Java 和 Agile Development 主题的“重要资源”。 ? JavaOne 这是一个规模宏大且非常客观的会议,并且一直在旧金山(在这个地方举行有利也有弊,具体取决于您公 司的出差预算情况)举行,不过世界上还没有哪一个会议能像 JavaOne 这样把这么多关键 Java 推动者 聚集到一个地方。 ? JAOO 为了不冷落我们的欧洲 Java 同胞,每年在丹麦奥尔胡斯举行一次 JAOO 会议,该研讨会已经举办了将 近二十年,并且没有任何衰落的迹象。JAOO 不仅吸引了一些顶尖的演讲者和作家,而且作为一个跨技术 的研讨会,在技术方面具有很好的包容性,也就是说,与会者早上可以出席 Java 研讨会,午餐时与一些 C++ 开发人员交谈,下午了解 Microsoft 的 ? Silverlight 的最新发展成果(或任何别的新事物),晚 上则与 Smalltalker 喝喝啤酒。如果您想增长见识,JAOO 或它的姊妹会议 QCon(在 InfoQ 工作人员 的协力支持下召开)将是一个不错的起点。对那些居住在“澳大利亚或新西兰” 的 Java 同胞,今年 (2008)在布里斯班和悉尼首次召开了 JAOO;所有迹象表明,在未来几年来内,将会在这里再次举行 JAOO。 ? Devoxx 该研讨会是以前的 JavaPolis,在比利时安特卫普这一飞速发展的城市举行,参加这一研讨会是遇见欧洲 同行的绝好途径(而且还可以品尝到上等的比利时啤酒)。演讲者都是该领域的首席专家,他们将集中讨 论一些尖端技术。该研讨会也提供了优秀的平台和许多机会让您与开发人员同行进行交流。 ? Jazoon Jazoon 是一个相对较新的研讨会,2007 年在苏黎世(瑞士)召开。因为参与者名单上有 Martin Odersky(Scala 的创建者)、Neal Gafter 和 Simon Phipps(Sun 的首席开放源码执行官)之类的 名字,所以 Jazoon 有望吸引大量演讲者。Jazoon 完全侧重于 Java 主题并在欧洲的中心召开,它有望 成为欧洲 Java 同胞们的一项重要日程。 还有其他一些研讨会,目标受众也各不相同,但以上列举的研讨会是直接针对 Java 开发人员的。那些希望扩大 自己视野的开发人员应该考虑参加“其他” 技术研讨会,如在世界各地举办的各种 Perl、Python、Ruby 甚至 .NET 会议;接受新的观念有时需要研究一组全新的问题。 书籍 对开发人员而言,没有哪一种资源能比价格便宜的传统书籍更容易获取。只需要去当地的书店(如果您住在边远 地区,可通过 Web 浏览器查找 Amazon 来购买书籍),就可以找到大量珍贵的技术知识和经验……只要您肯在 大量资源中仔细寻找。
  • 5. 这些书籍假设读者已经有了 Java 语言和工具集的应用知识;Java 入门书籍非常普遍,而且大多数讨论的是相同 的基本内容。选择书籍需要一定的技巧,要考虑作者的写作风格,有时甚至要考虑随书光盘中是否包含了练习的 参考答案(如果包含了练习的话)。 掌握了基本知识后,考虑阅读以下书籍: ? Effective Java(第 2 版),Joshua Bloch 每位 Java 开发人员的书架上必备的第一本书,必须定期翻阅、随时查看。 ? Java Concurrency in Practice ,Brian Goetz 每位 Java 开发人员书架上必备的第二本书,因为每位 Java 人员(不管他们愿意与否)都会操纵多线程 环境的内部。 ? Better, Faster, Lighter Java ,Justin Gehtland 和 Bruce Tate 这一小巧的册子被许多 Java 开发人员当作攻下以 Spring 为首的“轻量级容器” 环境的“利器”,填补了大 多数大型 EJB 服务器(如 WebSphere 或其他事务处理中间件)留下的空白。作者还介绍了基于 POJO 的开发周期,指出了该理念的优点和缺点,以及如何采取更轻量级的方法构建公司应用程序,使用了 Spring 和 Hibernate 这类不会降低生成系统的功能和能力的工具。 ? Effective Enterprise Java ,Ted Neward(我) 提供 75 种方法来确保公司 Java 应用程序(不管它们是用 Spring、EJB、Web 服务,还是其他技术实 现)不会出现问题。就像 Effective Java 不是针对初级 Java 程序员一样,Effective Enterprise Java 同样也不是针对刚开始学习“公司 Java” 基础知识的开发人员。 ? Release It! ,Michael Nygard 任何打算编写针对生产服务器的软件的人都应该阅读本书 — 它深入探讨了生产环境中可能出现的错误, 以及如何处理潜在的故障,要么恢复故障,要么完全避免故障。 ? Inside the Java 2 Virtual Machine ,Bill Venners 或 Component Development for the Java Platform ,Stuart Halloway Java 开发人员一旦学习 Java 这门语言后,迟早要了解底层平台 — Java 虚拟机本身,这意味着垃圾收 集以及 Reference 对象、ClassLoader、线程和监视器等主题将成为接下来探讨的重点领域。两本书中 的任何一本(或两本)都是非常有用的指南。但是这两本书都有一个很大的缺陷:它们的出版时间比较 早。Inside 是 Java 1.2 期间出版的,此后不久便出版了 Component-Based。幸运的是,大多数 Java 虚拟机自那时起一直没有发生什么变化,所以如果读者遇到除 JDK 1.2 以外的问题时,可以暂时放 下本书并继续研究下一主题。 ? Martin Fowler 撰写的 Patterns of Enterprise Application Architecture 、Gregor Hohpe 和 Bobby Woolf 撰写的 Enterprise Integration Patterns 说到设计方法和理念,这两本书都是典范,同样假定大部分读者都阅读过由 Gamma、Helm、Johnson 和 VlissidesBoth 合著的经典书籍 Design Patterns。模式书籍通常为开发人员提供了一些基本的概念 构建块进行调整和组合,从而创建更健壮的设计,这些构建块在单独使用时就不怎么有效。 ? Java Power Tools ,John Smart 很多人推荐这本书,它详细介绍了 Java 生态系统中各种可用的工具。Smart 还提供了对于本书的培训 课程(Java Power Tools Bootcamp),但大多数开发人员获取信息的最简单方式还是通过 dead-tree 版本。 ? The Pragmatic Programmer ,Andy Hunt 和 Dave Thomas 每个程序员应该人手一册,不管他实际使用的语言或平台是什么。本书适合有经验的读者和从事多年编程 工作的程序员。本书可与 Fred Brooks 的经典著作 The Mythical Man-Month 媲美。 ? The Productive Programmer ,Neal Ford 这本最近出版的书籍与 Pragmatic Programmer 一样经典,它主要讨论各种技巧和技能,程序员可以
  • 6. 借助这些技巧和技能提高他们的效率,获得比 IDE 更高的生产力。 ? The Pragmatic Starter Kit 本套件由 Pragmatic Unit Testing (with JUnit)、Pragmatic Project Automation 和 Pragmatic Source Control (with Subversion) 组成。每本书都清晰、针对性地讨论了各个主题的核心内容,它们 直接深入主题,没有涉及其他无关内容。例如,Project Automation 是阅读 Ant in Action 的“开胃 书”,但同时也讨论了什么是优秀的构建流程以及构建它们的原因。 ? Ant in Action(第 2 版),Erik Hatcher 和 Steve Loughran Ant 是面向 Java 平台的优秀构建实用程序(参阅后面的工具内容了解更多详细信息),本书是目前为止 介绍强大 Ant 功能的最佳读物。在学习如何使用 Ant 时,Ant in Action 还演示了单元测试、持续集成 和生产部署实践,这一切都是从实际 Java 开发人员的日常实践的角度出发的。 工具 正如盖房子不仅仅是“抡起锤子在板上钉钉子” 一样,Java 开发也不仅仅是“掌握 IDE 并开始编写代码”。好的 IDE 当然能为编写 Java 代码出力不少,但其他的工具也可以提供与 IDE 相等的(也许更好的)价值。 排名不分先后…… ? IDE 当然,工具讨论首先从 IDE 开始。在避开商业限制方面,Eclipse 和 NetBeans 都是开源且免费的,因 而提供了吸引人的“第一步”。 ? 单元测试 掀起单元测试革命的工具是 JUnit,但其他几个工具也得到普及,包括 TestNG,自然还有 JUnitPerf 等 等。 ? 持续集成 持续集成服务器不断检查不受源控制的代码,执行构建,对它运行单元测试,并通常通过电子邮件向开发 人员报告所有构建故障。有几个开源版本可用,但有一个已经得到了广泛关注,即 Hudson,它是一个拥 有大量插件和具有高可扩展性的持续集成服务器,它源自 CruiseControl ,它正是因为这一点而声名斐 赫。 ? 静态分析 FindBugs 是一个运行 Java 代码的开放源码静态分析工具,执行 n 向深度分析来找出所有可能的代码路 径,并基于一组可扩展规则报告找到的各种错误和警告。FindBugs 由 William Pugh 开发(这位 William Pugh 还发现了 Java 内存模型中的 bug),其最值得炫耀的地方是它能够分析 Java 代码来查 找并发 bug,每位程序员都会为之欢呼。 ? 网络包跟踪 WireShark (以前一般称为 Ethereal)使程序员可以查看网络上传播的内容,让他们有机会检查正在网 络上传播的内容是否合适,而那些不 合适的内容(比如敏感信息和明文密码)没有出现在网路上。 ? 虚拟化 类似 VMWare、Xen、VirtualBox 或 VirtualPC 之类的虚拟化工具(或者更准确地称之为平台)使程序 员能够创建与生产机器将运行的环境相同的环境,而不失去主机 PC 环境的生产力。它还提供了一种便利 方法来在本地尝试“处于试验阶段的” 软件,而不必让处于生产状态的机器冒险。如果不是完全的开源项 目,大多数虚拟化工具都提供有某种免费选项。 您不必感到惊讶,这些工具中的其中一些是商业工具;如果一个工具一个星期平均能帮您节约一个小时的时间, 您需要多长时间就可以收回购买该工具的资金呢?如果管理人员不认同这个观点的话,那么仔细计算使用某一工 具节省的时间(假设是开发人员的时间,或者是产物诊断或执行时间)后,管理员终会发现,他们在这些工具上 的吝啬是一件得不偿失的愚蠢事。
  • 7. 向贡献者致谢 感谢所有访问我的博客(blogs.tedneward.com)的读者,他们从百忙中抽出时间来向我推荐应该包含 在此列表中的参考资源;他们(当然不是所有人)包括 Greg Ostrovich、Ryan Slobojan、Hamlet D'Arcy(他认为自己是个外星人,正在为 IT 打工来赚钱修复他的宇宙飞船,从而返回自己的星 球)、Pierre Marc-Larocque、Prashant Rane、Marc Stock、Eric Kerwin、Morten Anderson、Alex,以及 Yvonne Miller、Rahul Raj、Brian Sletten 和 Neal Ford。 未来趋势展望 当然,Java 开发人员花所有时间来学习当前的技术并不是一件好事,学习完后,新的技术又接踵而至,使学过的 所有内容一下子都变得过时了。随时关注“未来发展趋势” 同样重要,惟有这样,当公司 CTO 突然在电梯里问 您“我最近听到的函数式语言是怎么一回事,我们需要对此进行研究吗?” 时,您才会给出连贯合理的答复。 排名不分先后,一些围绕 Java 平台的“未来趋势” 包括: ? 动态语言 Groovy 和 JRuby 之类的语言衍生出了其他一些值得研究的项目,如 Clojure 和 Fan,试验表明,低强 度类型的环境能提供更好的生产力和更多的选项。这并非鼓励您放弃 Java 语言,不过,最好的效果总是 来自强强联合。 ? 函数式语言 其兴起源于 Scala,由于函数语言一般支持复合函数并缺少共享状态,因此提供了隐式并发性的优点(尽 管有时它的语法很难让人接受)。Jaskell 是一个 Haskell-on-JVM 实现,同样,Clojure 也适合在这里 使用,您可以想象生产环境中的软件事务内存是什么样子。 ? Java 中的闭包 添加闭包支持(也称为 lambda 或匿名方法)将简化部分 Java 编码工作,对是否在 Java 7 发行版中 包含此支持进行过热烈的讨论。社区对此问题的讨论深度不一,因此 Java 程序员有必要花点时间研究这 个问题,并看看讨论的所有内容。 ? DaVinci 机器 JVM 的一个新版本对其他语言(比如上面提到的动态语言和函数式语言)更友好,这最终可能会也可能 不会使它进入主流 JVM 发行版。随时关注这一点有助于理解在当前 JVM 上运行动态/脚本语言的利弊。 ? 用户界面开发 在 Flash/Flex、Silverlight 和 JavaFX 的支持下,Web 浏览器得到了显著的(并且几乎是惊人的)改 变。这还不考虑 Java 领域中的新服务器端 Web 框架和 Google Web 工具包(Google Web Toolkit,GWT)之类的特例。用户界面一直是、而且以后将继续是一个吸引人的亮点。了解一到两个 (更不必说 Swing 或 SWT 之类的“富客户端” 库)库将对构建比 HTML 页面更具交互性的内容大有裨 益。 记住,与任何和“未来” 相关的事物一样,现在讨论的内容可能最终证明是错误的方向、昙花一现的事物、对行业 的一种影响,也可能是下一个重大事件;保持开放的思维,同时也要保持适当的怀疑。 结束语 请随意补充此列表 — 最终会得到一份更完善的参考资源列表。因为 Java 世界在不断发展,不断变化和成长,所 以列表的内容会随时间而改变。这是一件好事;如果我们必须使用 1995 年时期的 Java 环境,我们早就转向其 他技术了。 积极参与到 Java 世界中来:贡献补丁、增强,如果没有合适的贡献,就构建自己的工具。也许您的项目 5 年以 内会一直出现在这个列表中。