为什么在苹果店的ld密码正确 而生活在别处处密码就是错误

级别: 初级 , 主管,ThoughtWorks, Neward & Associates 2009 年 3 月 02 日
Java(TM) 平台不久将迎来它 14 岁的生日,当一种成功且被普遍使用的语言达到这样一种高度时,伴随而来的是产生了大量的库、工具和理念 — 这使得许多刚刚接触 Java 语言的新手可以获得大量的资源。在这篇文章中,作者(Java 资源的重要贡献者)将向您介绍这些资源,为积极进取的 Java 开发人员提供一份他们应该拥有的关键参考资源的列表。
自 Java 平台从 1995 年作为一个整体引入编程社区开始,它的发展已经远远超出了早期 Java 专家和推介者所设想的“applet 无处不在”这一远景。相反,Java 世界出现了 Swing、与 servlet 结合,从而发展为 J2EE、出现了 EJB、超越了 Spring 和 Hibernate、添加了泛型,变得越来越具有动态性,然后实现了函数化,在我撰写本文时,Java 继续朝着各种有趣的方向发展。 这使得没有一直跟随学习这门语言的 Java 程序员感到有点吃力。 作为一名演讲人、博客作者、顾问和导师,经常有一些初、中级 Java 程序员向我询问相关参考资源,以便帮助他们掌握这个广泛的、复杂的、看似永无止境的语言。几年前,我发表了一个
专门解答这个问题,但最近,developerWorks 的 Java 编辑让我整理一份更完整的参考资源列表,而不仅仅包括书籍 — 考虑到资源列表现在已经增长到了预期消费者即使花费十年的时间阅读也仍然不得要领的地步,这是一个很好的提议。 为了保证客观性和避免不利的影响,我决定给出各种参考资源的博客空间(blogosphere):Web 站点、研讨会、书籍、博客、工具,以及任何 Java 开发人员可能感兴趣或对他们有用的内容,帮助他们从庞大的参考资源中找到自己需要的内容。 这份列表得到了很多人的响应(在此我要感谢所有的回复者)。 在开始之前,需要解释一点:这些参考资源不一定是 Java 世界中最流行、最强大或最有影响的资源 — 这份 列表可能完全不同(尽管我怀疑其中也会出现很多相同的资源);但每个希望获得成功的 Java 开发人员都应该将这些参考资源保存在浏览器、书架或备忘录中。与任何此类型的列表一样,人们总会争论哪些内容本来应当包含进去但却没有出现在列表中,或本 不该有的内容却出现在列表中。 现在开始正式介绍这些参考资源。
网络无疑改变了共享资源和出版的本质(对我也是一样:您正在网络上阅读这篇文章),因此,从每位 Java 开发人员都应该关注的关键 Web 站点和开发人员门户上的关键 Java 参考资源入手似乎比较合理。 在 许多情况下,Web 站点和/或开发人员门户的价值不仅仅在于其中提供的参考资源或文章,还包括围绕该门户或站点的社区。静态 Web 页面和下载文件的时代已经一去不复返了,取而代之的是更“积极” 的论坛、主题文章和交互式讨论,讨论者不仅包括频繁访问该站点并组成社区的开发人员,还包括社区成员和门户所有者。随着技术的发展,开发人员也必须跟上技 术的步伐,同时,门户也要不断发展,以满足社区不断变化的需求;与社区保持开放的关系是实现活跃门户的关键因素。 Web 站点列表(带有 URL):
这是 JDK 的发源地,通常是 Java 开发人员下载 JDK 和文档副本的首要站点。除此之外,该站点还是查找有关整个 Java 平台的信息的好来源,包括一段非常详细的 JVM 介绍(Hotspot),它极其深入地描述了 JVM 的细节。
Java.NET 站点汇集了开源项目、文档、博客、wiki、新闻和其他社区资源等各种内容。它是 Java 技术的主要信息来源,不过提供的信息似乎过于繁杂。不过尽管如此,浏览项目列表也会找到一些真正有用的东西,如 FEST-Swing 项目,它旨在创建一个用于构建 Swing 应用程序的“方便接口”,大大简化了单元测试的创建。
由 Floyd Marinescu 创建,他是 The ServerSide 的名誉主编,InfoQ 与这里列出的许多其他参考资源的区别是,它是技术中立的,不仅包括 Java 代码,还包括 .NET 和 Ruby,并提供了大量灵活的方法和见解。尽管 InfoQ 上的评论社区并没有 TheServerSide 上的社区那么庞大和多样化,但是该社区中的讨论通常更加温和,而不会过于激烈。
通常称为“the Slashdot of Java”,TheServerSide 是第一个公开质询、热烈讨论和积极研究企业 Java 主题的地方。有关轻量级容器(以 Spring 为代表)的一些最初理念就是从这里诞生的,这里产生了许多 Java 社区中的“思想领导者”。尽管最近的激烈争论有时会带有主观色彩,但 TSS 将始终是许多 Java 内容的发源地,这些内容构成了我们现在所拥有的 Java 系统;同样,从 TSS 总是可以了解各种 Java 技术的历史。
DZone 最初是一个面向 Java 开发人员的资源站点,但最近它扩展到了其他技术领域。包括 .NET 和 Ruby,以及其他几个主题“专区”。这样,不仅 Java 开发人员可以利用它来专门研究 Java 专区,还会有一些跨平台的内容,聪明的开发人员可以充分利用这一点。
如果您正在阅读本文,那么您已经找到了 dw。为了解释清楚,我必须强调除本文外,我曾在该站点发表过其他一些文章,但我可以诚实地说,dw 是一个有关 Java 编码和 JVM 的文章和资源的优秀来源。特别注意,请务必查看 ,这是一个由 Brian Goetz 撰写的长期系列,其中包含一个共分三部分的 JVM 垃圾收集器系列文章,它以一种浅显易懂的方式介绍了 GC 的核心概念。
alphaWorks 是 developerWorks 的姊妹站点,IBM 研究人员和员工在此提供他们认为会确定未来主流的工具和技术。alphaWorks 提供了十二种不同的类别,从而为 Java 开发人员提供了机会来尝试各种非常超前的工具、语言、库和其他项目 — 它们正处于研究阶段。注意,许多项目是为了证明一个特殊的研究点,然后就会停止,使项目保持在当前的效率状态。警告:有 些项目不是开源的,而有些项目不包含源代码。但相当数量的 alphaWorks 项目最终会成为主流,要么成为受 IBM 支持的产品,要么作为可从一些 IBM 开放源码位置下载的可用工具。无论如何,只要关注 alphaWorks,就可以了解 Java 发展的方向以及方式。
OnJava 是一个独立运行的站点,用于跟踪活动、记录会议、提供各种有关企业 Java 的观点。事实上,这里提供的大部分信息也可以在别处找到,不过这一点对于几乎所有开发人员门户(包括上面提到的)都是一样的,想了解 Java 的各种开发的开发人员只需打开该站点上的 ,然后逐一阅读。
Artima 由 Bill Venners 创建,目前已经发展成一个巨大的汇集了文章、博客和访谈的站点,它不是完全侧重于 Java 开发,并且其中还包括了 Java 著作方面的权威(查看 Bill Joy 自 Java 5 出版后,对 Java 语言复杂性的怀疑,以及他用于证明所担心问题的经典示例 — Enum&&)。该站点非常值得您访问。
注意,对于上面大部分站点,为充分利用站点/门户,需要进行某种形式的注册。在撰写本文时,所有文章基本上都是免费的,只需要一个用户名/密码登录,以便 它们能惟一识别访问者,还需要提供电子邮件地址,以便定期发送主题新闻资讯或电子邮件(据我所知,所有站点将允许您不提供电子邮箱,但我还未这样做过,因 为我发现新闻咨询会不时告诉我一些有趣的、我还不知道的信息,收件箱中的这些邮件是很有用的)。
Blog 使开发人员可以轻松地表达想法、概念、理念、论点并围绕技术展开思想讨论,并了解特定技术领域中非常有影响力的“思想领袖”。此外,博客可以通过提要阅读 器在本地使用,提要阅读器将文章/条目下载到本地,以便在脱机时也可以使用。事实上,博客已经变得非常普遍,以至于出现了专门的设备(如 Amazon Kindle)来轻松获取开发人员所需要的信息。 关键在于从几百万个博客中找到感兴趣的内容。每位开发人员都有他自己的选择,哪些需要阅读,哪些不需要,但有些博客是最基本的,包括:
“Web 站点” 小节列出的 Web 站点所提供的全部 RSS 提要
注意(大多数)博客内容都属于个人观点;在这里分享的一些观点可能在以后被证明是错误的 — 永远不要只根据博客条目中的信息来对产品下结论。但如果要使思维过程突破常规,博客将是一种增强技能的强大资源。
跟踪 Java 生态系统中的所有库和包是一项繁杂的工作,并且 Java 开发人员很容易就会忽略这项工作。结果,开发人员常常发现自己正在编写的内容其实已经存在于平台内(只要他们浏览一下就会发现这一点)。 下面列出了“每位 Java 开发人员至少应该知道其存在(最好知道如何使用)的十大 Java 包”:
许多 Java 库和工具都依赖于 Reflection 包,所以了解它成为了一项必要要求(如果在使用时不理解它,会因为安全策略或其他类型的基础设施不匹配问题而导致失败)。与 Reflection 结合使用的还有 。
Java 系统一直在强调动态语言,了解如何从 Java 代码内部使用脚本语言可以使开发人员扩展他们的系统,而不用经历昂贵的编译-链接-运行-测试环节。
该管理包也称为 Java 管理扩展(Java Management Extensions,JMX),是一种监视 Java 应用程序运行的强大工具;因此,开发人员应该熟悉和习惯使用 JMX,以便构建实际上可以被系统管理员使用的软件。不要忘记查看随 JDK 一起发布的 jconsole 工具,它演示了一种应用程序健康状况指示板,同时演示了可以构建的内容,它本身就是一个很有用的工具(密切关注构建 jconsole 插件来在 jconsole 内启用脚本支持的脚本 demo,它是任何合格的系统管理员都应该掌握的一个强大工具)。
并发性是开发人员在未来十年内将要面临的最大问题,Java 开发人员用来修复并发性 bug 的主要武器就是此包及其子包中的类( 和 )。学习使用它将与学习编写类一样(甚至更)重要。了解它,使用它,并喜欢上它。
java.util 中的类同样重要。它们被频繁引用,特别是 Collections 类,所以 java.util.* 应该像 java.lang 那样自动导入。
JavaBeans 无疑是整个 Java 生态系统中都要使用的核心元素之一,使用商业含义不是很明显的名称“POJO”(普通的旧 Java 对象)。POJO 仍然基于 JavaBeans 代码、API 和规范,因此花一点时间了解 java.beans 中的类可以帮助编写更好的 POJO。
诊断和审计日志迅速成为跟踪运行程序执行的强大工具,不管是出于调试目的,还是出于管理和监视目的。我的忠告是:学习使用这个包和其开源的姊妹包 。
Java 安全 API、策略机制和权限类是使 Java 环境成为安全计算平台的核心部分,但只有开发人员知道如何利用这个包。避开加密 API — 在详细了解每个对您有用的选项后再使用它们。它们不难使用,但要获取加密权限(意味着没有大的缺陷)需要花费几年的时间,有大量来自其他加密专家的相关评 论。首先使用其他机制,如 SSL/TLS 和 GuardedObject/SignedObject/SecureObject 类。
XML 逐渐出现在 Java 开发人员的视野中,能够解析(直接解析或通过对象-XML 库)和转换它(使用 XSLT)是开发人员必须拥有的一项重要技能。
这不是一项必需的技能,但知道如何偶尔弹出声音效果可以使原本乏味的代码充满生气。此外,在没有直接可用的显示时,还可以用声音来向系统提供信号和反馈。 除此之外,让抛出栈跟踪的机器发出恐怖电影里的尖叫,这样用户可以知道刚刚发生了不好的事情,从而增加了一些刺激的乐趣。
当然,还有许多其他(位于 JDK 内部和外部)的包值得学习,但掌握以上这些就足以使您很好地处理大多数项目,更不用说应付大多数工作面试。
研 讨会继续在 Java 开发人员的培训中扮演着主要角色,特别是那些还没有获得足够的认可,尚未成为大型培训公司培训课程的主题。研讨会也是开发人员结识其他具备各种技能和职责 的开发人员的绝好机会,使与会者有机会做一些非常过瘾的(并且是完全必要的)事情:发泄对工作环境的不满。 参加研讨会也会产生一种有用的副作用(如果积极管理,可以为研讨会锦上添花):与会者可以建立开发人员小组。通 过可在世界范围内使用的电子邮件、邮件列表(如 GoogleGroups 或 Yahoo Groups)和许多其他轻量级 groupware 通信工具,了解参加研讨会的人员的信息比以前更加容易。这些通过午餐和晚宴建立起来的友谊可以持续一生,并且随着时间流逝愈加有益,特别是在评估新技术时 更是如此。 让一位有着 30 年经验的与会者、演讲者、组织者(不是我,是我的一位朋友)的话为您提供指引:“技术新手参加研讨会是为了通过期间举办的各种会议获取知识,资深人士参加研讨会是为了宴会和结识朋友。宴会帮助您结识朋友,他们可以帮助您提升自己的职业”。 研讨会包括:
这是一个我特别热衷的研讨会,不仅仅因为我是那里的定期演讲者,而且还因为十大 JavaOne 2007 演讲者中有 7 个人都是 NoFluffJustStuff(目前的或以前的)演讲者。Java 开发人员不会发现比这里更加关注技术主题的讨论,而且也不会找到比它价格更合理、召开位置更便利的会议:您的家乡(北美大陆每年有 30 多场会议 — 范围跨越欧洲和亚洲,这样,您便有机会驱车去参加 NFJS 大会,而不用花几千美元飞到一个遥远的城市并且住在旅馆中)。同样,本文中推荐的许多书籍都是由出席 NoFluff 研讨会的专家编写的,这一点也就不足为奇了,而且 NFJS 的组织者们一直在不遗余力地查找有关各种 Java 和 Agile Development 主题的“重要资源”。
这是一个规模宏大且非常客观的会议,并且一直在旧金山(在这个地方举行有利也有弊,具体取决于您公司的出差预算情况)举行,不过世界上还没有哪一个会议能像 JavaOne 这样把这么多关键 Java 推动者聚集到一个地方。
为了不冷落我们的欧洲 Java 同胞,每年在丹麦奥尔胡斯举行一次 JAOO 会议,该研讨会已经举办了将近二十年,并且没有任何衰落的迹象。JAOO 不仅吸引了一些顶尖的演讲者和作家,而且作为一个跨技术的研讨会,在技术方面具有很好的包容性,也就是说,与会者早上可以出席 Java 研讨会,午餐时与一些 C++ 开发人员交谈,下午了解 Microsoft 的 & Silverlight 的最新发展成果(或任何别的新事物),晚上则与 Smalltalker 喝喝啤酒。如果您想增长见识,JAOO 或它的姊妹会议 (在 InfoQ 工作人员的协力支持下召开)将是一个不错的起点。对那些居住在“澳大利亚或新西兰” 的 Java 同胞,今年(2008)在布里斯班和悉尼首次召开了 JAOO;所有迹象表明,在未来几年来内,将会在这里再次举行 JAOO。
该研讨会是以前的 JavaPolis,在比利时安特卫普这一飞速发展的城市举行,参加这一研讨会是遇见欧洲同行的绝好途径(而且还可以品尝到上等的比利时啤酒)。演讲者都 是该领域的首席专家,他们将集中讨论一些尖端技术。该研讨会也提供了优秀的平台和许多机会让您与开发人员同行进行交流。
Jazoon 是一个相对较新的研讨会,2007 年在苏黎世(瑞士)召开。因为参与者名单上有 Martin Odersky(Scala 的创建者)、Neal Gafter 和 Simon Phipps(Sun 的首席开放源码执行官)之类的名字,所以 Jazoon 有望吸引大量演讲者。Jazoon 完全侧重于 Java 主题并在欧洲的中心召开,它有望成为欧洲 Java 同胞们的一项重要日程。
还有其他一些研讨会,目标受众也各不相同,但以上列举的研讨会是直接针对 Java 开发人员的。那些希望扩大自己视野的开发人员应该考虑参加“其他” 技术研讨会,如在世界各地举办的各种 Perl、Python、Ruby 甚至 .NET 会议;接受新的观念有时需要研究一组全新的问题。
对开发人员而言,没有哪一种资源能比价格便宜的传统书籍更容易获取。只需要去当地的书店(如果您住在边远地区,可通过 Web 浏览器查找
来购买书籍),就可以找到大量珍贵的技术知识和经验……只要您肯在大量资源中仔细寻找。 这些书籍假设读者已经有了 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 开始。在避开商业限制方面,Eclipse 和 NetBeans 都是开源且免费的,因而提供了吸引人的“第一步”。
掀起单元测试革命的工具是 ,但其他几个工具也得到普及,包括 ,自然还有
持续集成服务器不断检查不受源控制的代码,执行构建,对它运行单元测试,并通常通过电子邮件向开发人员报告所有构建故障。有几个开源版本可用,但有一个已经得到了广泛关注,即 Hudson,它是一个拥有大量插件和具有高可扩展性的持续集成服务器,它源自
,它正是因为这一点而声名斐赫。
是一个运行 Java 代码的开放源码静态分析工具,执行 n 向深度分析来找出所有可能的代码路径,并基于一组可扩展规则报告找到的各种错误和警告。FindBugs 由 William Pugh 开发(这位 William Pugh 还发现了 Java 内存模型中的 bug),其最值得炫耀的地方是它能够分析 Java 代码来查找并发 bug,每位程序员都会为之欢呼。
网络包跟踪
(以前一般称为 Ethereal)使程序员可以查看网络上传播的内容,让他们有机会检查正在网络上传播的内容是否合适,而那些不 合适的内容(比如敏感信息和明文密码)没有出现在网路上。
类似 VMWare、Xen、VirtualBox 或 VirtualPC 之类的虚拟化工具(或者更准确地称之为平台)使程序员能够创建与生产机器将运行的环境相同的环境,而不失去主机 PC 环境的生产力。它还提供了一种便利方法来在本地尝试“处于试验阶段的” 软件,而不必让处于生产状态的机器冒险。如果不是完全的开源项目,大多数虚拟化工具都提供有某种免费选项。
您不必感到惊讶,这些工具中的其中一些是商业工具;如果一个工具一个星期平均能帮您节约一个小时的时间,您需要多长时间就可以收回购买该工具的资金呢?如 果管理人员不认同这个观点的话,那么仔细计算使用某一工具节省的时间(假设是开发人员的时间,或者是产品诊断或执行时间)后,管理员终会发现,他们在这些 工具上的吝啬是一件得不偿失的愚蠢事。
感谢所有访问我的博客()的读者,他们从百忙中抽出时间来向我推荐应该包含在此列表中的参考资源;他们(当然不是 所有人)包括 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 年以内会一直出现在这个列表中。
您可以参阅本文在 developerWorks 全球网站上的 。
:这里有数百篇有关 Java 编程的各个方面的文章。
Ted Neward 是 ThoughtWorks 的一名顾问,ThoughtWorks 是一家在全球提供咨询服务的公司,他还是 Neward & Associates 的主管,负责有关 Java、.NET 和 XML 服务和其他平台的咨询、指导、培训和推介。他现在居住在华盛顿西雅图附近。
转自:IBM 开发者社区
原文链接:
发布于 3年前,
阅读(95) | 评论(0) |
投票(0) | 收藏(7)
转自:/ileo/blog/item/1afe0dfd1b4cff04.html
从现在的WEB应用的发展趋势来看,随着ajax等技术的出现,B/S架构在表现技术上越来越丰富,正有着“C/S”化的趋势,我们现在形容一些采用 ajax类无刷新技术的WEB应用UI时,常习惯于用“桌面式操作界面”之类的语言(新近由南师大李老师及其弟子发表于CET上的论文就是大约如此表述 的)。
如果说无刷新技术是达到了C/S架构客户端控件丰富的一面,那么C/S使用条件的自由则需要另一种技术,Google Gear与开发中Firefox V3的离线应用使用功能正是其中的代表之一。
Google Gear的原理是这样:它提供了一个本地服务器(local server)、一个本土数据库及工作池(Work pool),当用户访问支持 gear技术的网站时,可以在离线前下载网站的数据建立一个本地缓存,之类便可以在离线状态下“正常”使用网站的功能,待重新联上网络时,可以再执行同步 功能,将离线时的操作同步至服务器中。
具体使用步骤与方法如下: 1、下载Google Gear 登录/ 下载安装Google Gear,如果你已经安装,则软件下载栏处会显示&Google Gears is installed &字样.
2、安装完成后,用浏览器(以firefox为例)访问支持Google Gear的网站时,会弹出对话框询问是否允许使用Gear。
3、允许站点使用的话,会在用户界面找到一个向下的箭头,点击它gear会下载必要的资源与客户端运行文件,并将此站点置于离线状态。
4、离线状态下,你依然可以在站点中使用相应的功能,理论上来讲,离线状态下的用户界面与体验将与在线时一样,但具体如何,还是要视不同站点开发功力而异的。
5、离线使用后,在再联网的时候,可以同样点击那个箭头(此时应该是一个向上箭头)来同步本地机数据与网络服务器数据的同步。
以上示例与截屏在windows xp+ firefox 2.0+ Google Gear 0.3.13,基于 google reader 站点(/reader/view/ )而完成。
Google Gear当前的版本是0.3,我个人对于这一应用也是十分看好,亦观望了很久,但是目前支持这一技术的网站依然还是不多,除了Google 旗下的Google Reader、Google Docs(以上应用仅限在英文版本,其中文版本尚不支持Gear)外,也就只有Zoho等少数几个。
期待google会提供更丰富的gear开发技术支持,于我而言,是很希望我们的一些应用支持这样的操作模式的。
原文链接:
发布于 3年前,
阅读(31) | 评论(0) |
投票(0) | 收藏(0)
1、分享第一条经验:“学历代表过去、能力代表现在、学习力代表未来。”其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友 对这个道理有些体会吧。但我相信这一点也很重要:“重要的道理明白太晚将抱憾终生!”所以放在每一条,让刚刚毕业的朋友们早点看到哈!
2、一定要确定自己的发展方向,并为此目的制定可行的计划。不要说什么,“我刚毕业,还不知道将来可能做什么?”,“跟着感觉走,先做做看”。因为,这 样的观点会通过你的潜意识去暗示你的行为无所事事、碌碌无为。一直做技术,将来成为专家级人物?向管理方向走,成为职业经理人?先熟悉行业和领域,将来自 立门户?还是先在行业里面混混,过几年转行做点别的?这很重要,它将决定你近几年、十年内“做什么事情才是在做正确的事情!”。
3、 软件开发团队中,技术不是万能的,但没有技术是万万不能的!在技术型团队中,技术与人品同等重要,当然长相也比较重要哈,尤其在MM比较多的团队中。在软 件项目团队中,技术水平是受人重视和尊重的重要砝码。无论你是做管理、系统分析、设计、编码,还是产品管理、测试、文档、实施、维护,多少你都要有技术基 础。算我孤陋寡闻,我还真没有亲眼看到过一个外行带领一个软件开发团队成功地完成过软件开发项目,哪怕就一个,也没有看到。倒是曾经看到过一个“高学历的 牛人”(非技术型)带一堆人做完过一个项目,项目交付的第二天,项目组成员扔下一句“再也受不了啦!”四分五裂、各奔东西。那个项目的“成功度”大家可想 而知了。
4、详细制定自己软件开发专业知识学习计划,并注意及时修正和调整(软件开发技术变化实在太快)。请牢记:“如果一个软件开发 人员在1、2年内都没有更新过自己的知识,那么,其实他已经不再属于这个行业了。”不要告诉自己没有时间。来自时间管理领域的著名的“三八原则”告诫我 们:另外的那8小时如何使用将决定你的人生成败!本人自毕业以来,平均每天实际学习时间超过2小时。
5、书籍是人类进步的阶梯,对软件 开发人员尤其如此。书籍是学习知识的最有效途径,不要过多地指望在工作中能遇到“世外高人”,并不厌其烦地教你。对于花钱买书,我个人经验是:千万别买国 内那帮人出的书!我买的那些家伙出的书,100%全部后悔了,无一本例外。更气愤的是,这些书在二手市场的地摊上都很难卖掉。“拥有书籍并不表示拥有知 识;拥有知识并不表示拥有技能;拥有技能并不表示拥有文化;拥有文化并不表示拥有智慧。”只有将书本变成的自己智慧,才算是真正拥有了它。
6、不要仅局限于对某项技术的表面使用上,哪怕你只是偶尔用一、二次。“对任何事物不究就里”是任何行业的工程师所不应该具备的素质。开发 Windows应用程序,看看Windows程序的设计、加载、执行原理,分析一下PE文件格式,试试用SDK开发从头开发一个Windows应用程序; 用VC++、
Delphi、Java、.Net开发应用程序,花时间去研究一下MFC、VCL、J2EE、.Net它们框架设计或者源 码;除了会用J2EE、JBoss、Spring、Hibernate等等优秀的开源产品或者框架,抽空看看大师们是如何抽象、分析、设计和实现那些类似 问题的通用解决方案的。试着这样做做,你以后的工作将会少遇到一些让你不明就里、一头雾水的问题,因为,很多东西你“知其然且知其所以然”!
7、在一种语言上编程,但别为其束缚了思想。“代码大全”中说:“深入一门语言编程,不要浮于表面”。深入一门语言开发还远远不足,任何编程语言的存在 都有其自身的理由,所以也没有哪门语言是“包治百病”的“灵丹妙药”。编程语言对开发人员解决具体问题的思路和方式的影响与束缚的例子俯拾皆是。
我的经验是:用面对对象工具开发某些关键模块时,为什么不可以借鉴C、C51、汇编的模块化封装方式?用传统的桌面开发工具(目前主要有VC++、 Delphi)进行系统体统结构设计时,为什么不可以参考来自Java社区的IoC、AOP设计思想,甚至借鉴像Spring、Hibernate、 JBoss等等优秀的开源框架?在进行类似于实时通信、数据采集等功能的设计、实现时,为什么不可以引用来自实时系统、嵌入式系统的优秀的体系框架与模 式?为什么一切都必须以个人、团队在当然开发语言上的传统或者经验来解决问题???“他山之石、可以攻玉”。
8、养成总结与反思的习 惯,并有意识地提炼日常工作成果,形成自己的个人源码库、解决某类问题的通用系统体系结构、甚至进化为框架。众所周知,对软件开发人员而言,有、无经验的 一个显著区别是:无经验者完成任何任务时都从头开始,而有经验者往往通过重组自己的可复用模块、类库来解决问题(其实这个结论不应该被局限在软件开发领 域、可以延伸到很多方面)。这并不是说,所有可复用的东西都必须自己实现,别人成熟的通过测试的成果也可以收集、整理、集成到自己的知识库中。但是,最好 还是自己实现,这样没有知识产权、版权等问题,关键是自己实现后能真正掌握这个知识点,拥有这个技能。
9、理论与实践并重,内外双修。 工程师的内涵是:以工程师的眼光观察、分析事物和世界。一个合格的软件工程师,是真正理解了软件产品的本质及软件产品研发的思想精髓的人(个人观点、欢迎 探讨)。掌握软件开发语言、应用语言工具解决工作中的具体问题、完成目标任务是软件工程师的主要工作,但从软件工程师这个角度来看,这只是外在的东西,并 非重要的、本质的工作。学习、掌握软件产品开发理论知识、软件开发方法论,并在实践中理解、应用软件产品的分析、设计、实现思想来解决具体的软件产品研发 问题,才是真正的软件工程师的工作。站在成熟理论与可靠方法论的高度思考、分析、解决问题,并在具体实践中验证和修正这些思想与方式,最终形成自己的理论 体系和实用方法论。
10、心态有多开放,视野就有多开阔。不要抱着自己的技术和成果,等到它们都已经过时变成垃圾了,才拿出来丢人现 眼。请及时发布自己的研究成果:开发的产品、有创意的设计或代码,公布出来让大家交流或者使用,你的成果才有进化和升华的机会。想想自己2000年间开发 的那些Windows系统工具,5、6年之后的今天,还是那个样子,今天流行的好多Windows系统工具都比自己的晚,但进化得很好,且有那么多用户在 使用。并且,不要保守自己的技术和思想,尽可能地与人交流与分享,或者传授给开发团队的成员。“与人交换苹果之后,每个人还是只有一个苹果;但交换思想之 后,每个人都拥有两种思想”,道理大家都懂,但有多少人真正能做到呢?
11、尽量参加开源项目的开发、或者与朋友共同研制一些自己的产 品,千万不要因为没有钱赚而不做。网络早已不再只是“虚拟世界”,网上有很多的开源项目、合作开发项目、外包项目,这都是涉猎工作以外的知识的绝好机会, 并且能够结识更广的人缘。不要因为工作是做ERP,就不去学习和了解嵌入式、实时、通信、网络等方面的技术,反过来也是一样。如果当别人拿着合同找你合 作,你却这也不会,那也不熟时,你将后悔莫及。
12、书到用时方恨少,不要将自己的知识面仅仅局限于技术方面。诺贝尔经济学奖得主西蒙教授的研究结果表明:“对于一个有一定基础的人来说,他只要真正肯下功夫,在6个月内就可以掌握任何一门学问。”教育心理学界为感谢西蒙教授的研究成果,故命名为西蒙学习法。
可见,掌握一门陌生的学问远远没有想象的那么高难、深奥。多方吸取、广泛涉猎。极力夯实自己的影响圈、尽量扩大自己的关注圈。财务、经济、税务、管理等等知识,有空花时间看看,韬光养晦、未雨绸缪。
13、本文的总结与反思:
A:不要去做技术上的高手,除非你的目标如此。虽然本文是关于提高软件开发知识的建议,做技术的高手是我一向都不赞同的。你可以提高自己的专业知识,但能胜任工作即止。
B:提高软件知识和技术只是问题的表面,本质是要提高自己认识问题、分析问题、解决问题的思想高度。软件专业知识的很多方法和原理,可以很容易地延伸、应用到生活的其它方面。
C:在能胜任工作的基础上,立即去涉猎其它领域的专业知识,丰富自己的知识体系、提高自己的综合素质,尤其是那些目标不在技术方面的朋友。
目前面前嵌入式软件工程师的知识体系
软件工程师的务实职业生涯规划
3G软件工程师需求走高
原文链接:
发布于 3年前,
阅读(23) | 评论(0) |
投票(0) | 收藏(0)
近日NetBeans开发团队 , 。一些重要的增强包括对Java EE 6、JSF 2.0的支持,同时还增加了一个嵌入式浏览器等等。
发布声明中提到了如下 :
更新包括:
Java Enterprise Edition 6
针对Web界面的JavaServer Faces 2.0以及在Web应用中使用EJB的能力
Java Persistence JPA 2.0及RESTful Web Services支持
对GlassFish v3的部署、调试以及分析
JavaServer Faces 2.0(Facelets)
代码完成、错误提示、命名空间完成、文档弹出以及针对Facelet的标签自动导入
针对Facelet程序库、复合组件及表达式语言的编辑器支持
<:连接开发者
完整的JIRA支持
改进的问题跟踪支持
完整的PHP 5.3支持
Symfony Framework支持
改进的Java EE 6、Groovy及Scala支持
可以在依赖图中排除依赖
对JRuby 1.3.1、Ruby 1.9调试及RSpec 1.2.7的支持
改进的重命名重构、类型推断以及导航支持
Profiling:新的I/O检测、线程分析及竞态检测工具
远程开发中更快的同步支持
如Adam Bien所述,该里程碑版中有两个非常实际的特性,分别是 :
Glassfish v3 b66的增量部署相当快。通常不到1秒钟就搞定了。类、接口以及方法的改变能被立刻识别出来并部署。
部署过程中会保留HttpSession。在应用部署后甚至都无需重新登录。
直接支持JIRA,再也无需额外的
NetBeans论坛上提出的一个困扰广大用户的问题就是 ,该支持基于 :
Update Center中将不再包含Visual Web JSF以及Project Dynamic Faces了。据我所知,Woodstock 4.2还在NetBeans 6.7中。
Woodstock还在NetBeans 6.8 M2 Update Center中么?我查看了一下稳定版以及Beta版的Update Center,发现已经不在了。
NetBeans Visual Web JSF仍旧是最棒的,甚至在4.2版中就是了。我还没看到有哪个竞争对手能超越它呢。我无法理解稳定版的Update Center还在支持其他的第三方插件,但却不再支持自家的Woodstock,实在搞不明白。该特性是NetBeans区别于其他IDE(如 Eclipse等)的一个亮点。我们很多人都体验过该工具的强大,至今尚未发现谁能与之抗衡。尽管IceFaces Visual Web也很不错,但bug实在是太多了,我们最后还是转回了NetBeans 6.5/7中的Visual Web JSF。
既然不再支持Woodstock,那NetBeans中就没有“Visual Pack”了,有人建议 :
Oracle对JSF/ADF的支持很不错,而NetBeans是个优秀的轻量级Java EE 6环境。NetBeans 6.8+不再支持Visual Web Pack了,这样JDevelopers ADF就可以趁机打入NetBeans内部,但事实却是这样的:JDeveloper是个很棒的IDE,但却没有NetBeans那么流行。我没见过有几 个(&5)实际的项目采用JDeveloper开发。
大家可以 或是 来获得更多信息。
查看英文原文:
本文是使用
进行同步发布的。
原文链接:
发布于 3年前,
阅读(25) | 评论(0) |
投票(0) | 收藏(0)}

我要回帖

更多关于 生活在别处txt下载 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信