﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-享受JAVA-文章分类-程序人生</title><link>http://www.blogjava.net/nighthawk/category/2516.html</link><description>享受JAVA，享受人生</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 08:46:28 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 08:46:28 GMT</pubDate><ttl>60</ttl><item><title>与Java相关的四十个名字[转贴]</title><link>http://www.blogjava.net/nighthawk/articles/15524.html</link><dc:creator>nighthawk</dc:creator><author>nighthawk</author><pubDate>Fri, 14 Oct 2005 08:12:00 GMT</pubDate><guid>http://www.blogjava.net/nighthawk/articles/15524.html</guid><wfw:comment>http://www.blogjava.net/nighthawk/comments/15524.html</wfw:comment><comments>http://www.blogjava.net/nighthawk/articles/15524.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nighthawk/comments/commentRss/15524.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nighthawk/services/trackbacks/15524.html</trackback:ping><description><![CDATA[<SPAN class=postbody>十大事件 <BR><BR>1990－1994：Java缘起 <BR>文/孟岩 <BR><BR>Larry Wall说，优秀程序员应有的三个特点:懒惰、急躁和傲慢。Java就是诞生在一群懒惰、急躁而傲慢的程序天才之中。 <BR>1990年12月，Sun的工程师Patrick Naughton被当时糟糕的Sun C++工具折磨的快疯了。他大声抱怨，并威胁要离开Sun转投当时在Steve Jobs领导之下的NeXT公司。领导层为了留住他，给他一个机会，启动了一个叫做Stealth（秘密行动）的项目。随着James Gosling等人的加入，这个项目更名为Green。其目标是使用C++为嵌入式设备开发一种新的基础平台技术，James Gosling本人负责开发一个SGML编辑器。正如人们事后分析的那样，这位天才的程序员太懒惰，所以没有把C++学好，开发中碰了一头包;太急躁——所以不愿意停下来读读Scott Meyers的新书《Effective C++》;太傲慢——所以轻易地决定开发一中新的编程语言。他把这种语言命名为C++++--，意思是C++“加上一些好东西，减去一些坏东西”。显然这个糟糕的名字不可能长命百岁，很快这种颇受同伴喜爱的小语言被命名为Oak。 <BR>到了1992年9月，Oak语言连同Green OS和一些应用程序一起发布在称做Start 7的小设备上，从而使之有了第一次精彩的亮相。随后，Sun开了一家名为FirstPerson的公司，整个团队被转移到这家公司里研发机顶盒，以投标时代华纳公司的一个项目。这帮天才被技术狂热所鼓舞，开发出了一个高交互性的设备，结果没想到时代华纳公司和有线电视服务商并不愿意用户拥有那么大的控制权，从而在竞标之战中败给了SGI。Oak的锋芒之锐，竟然把客户都给吓懵了。Sun沮丧地关闭了FirstPerson，召回了整个团队。事实证明，传统行业中那些脑满肥肠的保守主义者是腐朽没落的。回去！回到激情澎湃的IT产业，抓住互联网的大潮，这才是出路！1994年，Oak被命名为Java，针对互联网的新一轮开发如火如荼，一切已经就绪，熔岩在地下奔流，火山即将喷发。 <BR><BR><BR>1995: Java香浓世界 <BR>文/马伟 <BR><BR>1995年，Sun正式对外公布了Java，并且发布了JDK 1.0。这种外形酷似C++，却包含一颗Smalltalk般纯洁的面向对象之心的全新程序设计语言及其平台，几乎在一夜之间就成为软件产业的新宠儿。Java当时仅仅被用来为网站制作一些动态应用,诸如动画图片之类，但这仍然引起了很多Web开发者们的注意，他们非常渴望有一种安全的语言，可以在静态的HTML网页上制作动画图片。Sun最终把Java集成到NetScape浏览器。同时因为它具有“只写一次，随处运行”的特性，而引起了很多开发者的注意，他们可以再也不用为了使程序能够在不同型号的硬件上运行而耗费大量的时间来编译代码了。 <BR>当时的Web浏览器的出现也为Java的出现起到了很好的推动作用，通过Java和Web浏览器的结合，人们似乎看到了什么，有人甚至预言PC将在一两年内退出历史的舞台，取而代之的是基于Java的浏览器应用程序，通过网络计算设备来进行应用。Java的出现为当时的软件产业带来了无限的遐想。 <BR><BR><BR>1996：Java大跃进，盟主地位就此定 <BR>文/马伟 <BR><BR>SUN在1996年一开始首先成立了JavaSoft组织，并在1月23日正式发布自己的Java 1.0，作为20世纪业界出现的最重要的技术之一，Java引起了编程世界的革命。直到现在，Java仍然是互联网上最流行的语言。 <BR>在Sun正式发布Java 1.0之后，Java这门新生的语言就拥有了自己的会议——JavaOne，这次会议初试啼音就吸引了600多名参与者。除了拥有这么多的积极参与者来进行Java的开发之外，各大知名公司也纷纷向Sun申请Java的许可。一时间，NetScape、惠普、IBM、Oralce、Sybase甚至当时刚推出Windows 95的微软都是Java的追随者。 <BR>Java的应用就像是世界上的顶级玩家们组成的一个公开联盟，告诉全世界我们大家就是都在用着Java。也正是因为如此，Java也找到了自己的归宿。现在的J2EE已经成为中大型企业级应用的标准，成为承接数据库和Web之间的一个重要桥梁。 <BR>当年Java的机会实在太多了，以至于很难知道到底该做什么。最终Java在应用服务器市场获得了难以取代的地位，也确定了J2EE的发展方向，并且仍将延续下去。 <BR><BR><BR>1997-2001: 微软与Sun的Java官司 <BR>文/孟岩 <BR><BR>Java诞生的1995年，正是微软在软件产业地位达到巅峰的时代，Windows 95发布时的风光场面给人们留下的深刻印象至今难忘。尽管如此，作为最卓越的技术领袖，比尔?盖茨仍然敏锐地注意到Java。当他了解了Java的一些细节之后，给予了这样的评价:“Java是很长时间以来最优秀的程序设计语言。”基于此，微软于1996年3月申请并获得了Java许可证。微软对于Java的这一热情态度在当时大大提高了人们对Java的兴趣和信心，但也有不少人担心微软会依靠自己强大的影响力在标准之外另立标准，从而破坏Java的纯洁性。 <BR>果然，从1997年发布Visual J++的第一个版本开始，微软就开始在Java中掺入自己的私有扩展。这毫无疑问引起Sun的高度重视。1997年10月，Sun向美国加州地方法院起诉微软公司违反两公司就微软使用Java技术所签定的合同，指控微软公司在自己的Java产品中做了“不恰当的修改”，违反了合同中承诺向用户提供Java兼容产品的条款。这一官司旷日持久，直到2001年1月双方达成和解，微软将继续提供采用Sun开发的Java技术的现有产品（包括测试版）。不过，Sun有限制地仅对包括Java 1.1.4的微软产品提供许可。到了2001年7月，微软公布新版的Windows XP将不再支持Sun的JVM，并且推出了.NET平台与Java分庭抗礼。 <BR>现在回过头去看，当时的这一场官司对Java世界产生了深远的影响。如果没有这一场官司，也许很多Java程序员都在使用Visual J++，基于WFC开发Windows客户端程序，同时不得不面对被两个不同的事实标准所分裂的Java世界。 <BR><BR><BR>1998：Java 2平台发布 <BR>文/陶文 <BR><BR>1998年，Java 2平台正式发布。经过了三年时间的发展、热热闹闹的攻关宣传、红红火火的众厂商的热情参与，Sun终于知道Java适合干什么了。对比Java刚发明时的技术定位，与Java的戏剧性触“网”的那段历史，Java 2平台的发布可真算得上是有的放矢了。根据官方的文档，Java 2是Sun意识到“one size doesn’t fit all”之后，把最初的Java技术打包成三个版本的产物，也就是著名的J2ME、J2SE、J2EE。 <BR>之所以说Java自从Java 2平台发布之后，进入了现代。那是因为之前的历史怎么看来都和现在程序员日常开发使用的技术无什么关系，比如Applet，已经很少有人使用了。Java 2之后的历史就不一样了，至少人们在推崇轻量级开发，猛批EJB时还不时会引用J2EE这个词是如何诞生的。而Java 2的三大版本中，除了J2EE得到了长足发展和广泛使用之外，J2ME也在手机市场上取得了遍地开花的结果。相较之下，J2SE难免落寞，只剩SWT这个血统不纯的家伙在Rich Client回归的时代吸引着人们的眼球了。无论今天看来当时的Java 2有多么的不成熟，至少经过市场和时间的检验，Java 2规划出来的三大方向把Java技术指向了光明的方向是勿庸置疑的。 <BR><BR><BR>1998：JCP成立并正式运作， <BR>Java开源社群开始蓬勃发展 <BR>文/黄海波 <BR><BR>1998年，JCP组织成立，并且开始把握Java的发展方向。JCP组织的开放性，不但使得所有对Java感兴趣的商业公司可以参与Java的发展，更重要的是JCP允许个人、非盈利组织、学校等加入，这就给Java带来了巨大的活力。随之兴起的Java开源运动的最大贡献是实现和鼓励了知识共享，在众多热情的开源程序员们的努力和分享下，很多原先只被商业公司掌握的技术、思想和产品可以被所有需要的开发人员免费或者以较低的价格获得使用权, 并通过开放源代码更容易的获得反馈和改进意见从而进一步演化发展。我们知道，所谓知识不是孤立发展认知，而是人们的经验，认识是思考交流和积累的产物。而开源运动所带来的开放、反馈、交流的风气正是符合人类社会知识形成和发展的规律。 <BR>开源运动起源于西方的发达国家，有其现实背景和文化根源。1990年代可以说是IT产业的一个黄金时代。信息时代的兴起对IT人员，特别是软件人员有着巨大的需求。而软件开发又是一种类似艺术创作的脑力活动，和所有的艺术家、作家们一样，在作品打上自己的印记并流传在世界上是每一个创作人员的梦想。互联网时代下的高收入的舒适生活，早九晚五的编写公司的代码并不能满足很多有激情的软件开发人员的梦想，再加上西方传统的基督教文化中十分推崇的分享和交流，开源的出现和兴起也就水到渠成了。今天，开源运动已经不仅仅是一些个人天才程序员们的游乐园地，而是发展成为一项开源软件产业。 <BR><BR><BR>1998：WebLogic打开J2EE的魔匣 <BR>文/霍泰稳 <BR><BR>Java语言的出现使得互联网络有了良好的交互性能，但这些很“酷”的技术仅被人们认为是一些小花招，它还无法消除企业级用户对它的怀疑。1998年，BEA公司宣布收购WebLogic公司，并接着推出由Sun公司第一个授权使用J2EE许可证的WebLogic Server应用服务器，这个Java版的AppServer一推出就引起业界极大的兴趣。WebLoigc Server以其对标准的支持、强悍的运算能力和安全的架构设计等特性也很快征服了那些怀疑J2EE应用的人们。推出市场后不到一年，WebLogic Server就成为业内第一Java应用服务器。 <BR>这里我们援引一些当时著名咨询公司的调查数据来说明问题，“在IDC的报告中，BEA在应用服务器和交易服务器领域市场份额第一；在Gartner的报告中，BEA WebLogic Server拥有业内最广泛的EJB应用安装基础；在Giga Group的报告中，BEA WebLogic Server市场份额占32%”。 <BR>因为应用服务器市场极大的发展潜力，在WebLogic Server之后，其它的很多公司也推出了自己的AppServer，如IBM的WebSphere、Sun公司的iPlanet等，逐渐地应用服务器取代了传统意义上的各类中间件，成为企业应用的基础平台。应用服务器的出现使得Java有了真正意义上的发展。 <BR><BR><BR>2002-2004: Sun与微软的法律碰撞最终以喜剧收场 <BR>文/恶魔 <BR><BR>2003年4月2 日，Sun与微软达成16亿美元的法律和解。如果不是晚了一天，许多人会以为这是一个在4月1日愚人节开的玩笑。尽管当时所有人都像是看到“太阳从西边出来了”那样张大了嘴巴，但这的确是事实。 <BR>根据两家公司达成的版权协议，双方会为采用对方的技术而支付专利费用，微软向Sun提前支付3.5亿美元使用费，Sun则承诺，如果Sun集成微软的某些技术，也会向微软付款。 <BR>毫无疑问，“私下了结”的方式对双方而言都是最好的结果。就在协议签署的当天，在美国旧金山由Sun和微软为“抛弃十年恩怨、携手合作“举行的新闻发布会上，尽管比尔?盖茨没有到场，但这并没有防碍现场看起来异常轻松的气氛。麦克尼利和鲍尔默各自穿了一件密歇根州底特律“Red Wings”曲棍球队的运动服，并谈及了一起在哈佛大学读书的经历，麦克尼利还说:“当时我们两人是非常要好的朋友，当然我们也有吵架的时候。”人与人当然可能成为终生的知己，但是公司与公司之间有的只能是利益上的分分合合。 <BR><BR><BR>2000-2004: JBoss和Eclipse <BR>——Java开源软件的王者 <BR>文/莫映 <BR><BR>Java和开源几乎就是天生的一对，这可以从无比兴盛繁荣的Java开源软件社区得到佐证。目前最有影响力的Java开源软件项目，要数JBoss和Eclipse。可以说，几乎所有的Java开发人员都获多或少的听到过或接触和使用过它们。前者是目前最优秀、应用最为广泛的企业级开源J2EE应用服务器，后者是功能完全可以替代商业产品的Java IDE。二者的覆盖功能之全、支持工具之广、子项目之多，几乎可以仅凭借它俩来完成企业应用的开发构建到部署实施的全过程，而软件开发者和客户也都可以最大程度上享受高质量，高可靠Java开源软件所带来的低成本优势。 <BR>JBoss和Eclipse的巨大成功，几乎令各自领域的商用竞争者抓狂，其中BEA的WebLogic和IBM的WebSphere在商业利润上受到JBoss的巨大侵蚀，而Borland的JBuilder、JetBrains的IDEA等诸多优秀的商用开发工具也不得不面对Eclipse独大的现实。JBoss的CEO兼创始人 Marc Fleury曾直言不讳地表示，希望占据市场主导地位。“我们希望打败IBM，成为中间件领域里最大的厂商。”JBoss在4.0以前还只是以一个Group存在，盈利手段主要靠服务和销售文档。但在最近，JBoss已经发展成为一个有限公司，并吸纳多家风险投资，专注于获取利润为目标之一的第二代开源软件模式（JBoss自己称为“Professional Open Source”）的创新和运营。这区别于以理论研究为爱好的学院型开源或大公司为基础的非盈利组织开源，如Linux和Apache。当然JBoss的这种运营方式势必会导致更多的代码控制和专有修改权，但按JBoss的说法是这样更能获得企业客户的信赖。JBoss的这种模式是否能获得成功还要我们拭目以待。 <BR>不管JBoss和Eclipse的未来发展如何，JBoss和Eclipse的成功已经让我们看到了Java开源软件的威力，祝愿它们一路走好。 <BR><BR><BR>2004：Java 5.0 <BR>文/莫映 <BR><BR>2004年9月30日，代号为“Tiger”，研发历时近三年的J2SE 5.0发布正式版本，这是Java平台历来发布版本中改动面波及最大的一次。 <BR>纵观Tiger，“Ease of development”是其核心主题，这一点着重体现于语言特性上的改进，这在很大程度上，简化了开发人员日常的编程任务，以往一些琐碎的手工劳动都代之以轻松自然，而又安全可靠的自动化实现。其中的注解功能，以及随之而来的声明式编程，还对构筑于J2SE 5.0之上的J2EE 5.0产生了巨大影响。尽管Tiger在语言特性上做了很大的动作，但作为Java技术的基础支撑，这些改动都是深思熟虑的结果。 <BR>Tiger发布至今也有大半年了，那么Sun又是如何规划J2SE的未来蓝图的呢？据悉，J2SE的下两个版本分别是代号为“Mustang”的J2SE 6.0和代号为“Dolphin”的J2SE 7.0，预计Mustang将于明年发布。在吸取了Tiger研发周期过长的教训之后，Sun副总裁Graham Hamilton表示，Mustang的发布周期将不会那么长。并且，Sun还将“Becoming more open” 作为Mustang的主题之一。未来JCP对Java技术的影响将会愈加深入，而整个研发过程也将会愈加透明。Mustang在正式发布前的内部版本也会陆续见诸于众，如此，广大Java开发者便可以更加及时的了解到Java发展的最新情况。在语言层面上的扩展依然会比较谨慎，比如像AOP这样的当下热门技术，依然不太可能会见诸其中。据Hamilton所言，一个有可能被引入的语法特性被称作“friends”import机制，它将使由多个包组成的大型项目变得易于管理。<BR><SPAN class=postbody>十大人物 <BR><BR>James Gosling : Java之父 <BR>文/陶文 <BR><BR>作为Java之父，James Gosling的名字可谓是耳熟能详。当人们评论一种编程语言时，总喜欢捎带着把下蛋的母鸡一起带上。Java做为中国的编程语言学习者餐桌上有限的那么几样餐点中的流行款式，自然是让James Gosling风光不已。虽然James Gosling现在已经不是领导Java发展潮流的领军人物了，做为Sun的开发者产品组的CTO，怎么算来也是身居高位了，俗事缠身吧，但是这并不妨碍其对于Java一如既往的爱护，表达着各式各样鲜明的观点，引发一场又一场的争论。 <BR>James Gosling是很爱Java的——是啊，哪有当父母的不爱自己的孩子的呢。James Gosling也是很爱Sun的——是啊，哪有当领导的不爱自己的公司的呢。于是我们在批评.NET的安全性的队伍前头，在褒扬Java性能的队伍前头，在抨击SWT开倒车的队伍前头，在给NetBeans大唱赞歌的队伍前头，我们都看到了James Gosling的身影。无论对错、偏见或者固执，至少说明了Gosling的鲜明个性丝毫没有受到年龄的影响。也许也只有这种天才而偏执的人物才能创造出Java这般伟大的语言来吧。 <BR><BR><BR>Bill Joy : 软件业的爱迪生 <BR>文/徐昊 <BR><BR>Joy生于1954年，1982年与Vinod Khosla, Scott McNealy和Andy Bechtolsheim一起创建了Sun Microsystems，并从那时起担任首席科学家，直到2003年离开。他是一位令人崇敬的软件天才，他在软件和硬件的历史上留下了无数令人仰止的传奇。 <BR>在上个世纪80年代早期，DARPA与BBN达成协议，准备将Vinton Cerf和Bob Kahn设计的TCP/IP协议添加到Berkeley UNIX中。Bill Joy被委派来完成这项任务，然而他却拒绝将BBN的TCP/IP协议栈添加到BSD中，因为在他的眼中BBN的TCP/IP实现还远不够好，于是他就写了一个高性能的TCP/IP协议栈。John Gage回忆道，“BBN和DARPA签署了巨额合同来实现TCP/IP协议，然而他们的员工所编写的代码远没有一个研究生所做的好。于是他们邀请Bill Joy参加他们的一个会议，这位研究生穿着一件T-Shirt就出现了，他们询问他，‘你是如何做到的呢？’Bill回答说，‘这是非常简单的一件事，你读一下协议然后就可以编码了’”。除了TCP/IP协议，基于分页的虚拟内存系统最早也是由Bill Joy添加到Berkeley UNIX内核当中的。同时他还是vi、csh、早期Pascal编译器的作者。 <BR>关于Bill Joy惊人的软件才能流传最广的一个传奇是，据说他在上研究生的时候，想看看自己能不能写一个操作系统出来，于是就在三天里写了一个非常简陋，但是可以使用的Unix系统, 传说就是BSD的前身。虽然如此夸张的才情令人难以置信，但是考虑到主角是Bill Joy，还是有一定的可信度的。Bill Joy硕士毕业之后，决定到工业界发展，于是就到了当时只有一间办公室的Sun, 他作为主要设计者参与了SPARC微处理器的设计，负责设计最为关键的一部分电路。这样兼精软硬件的天才实在是让人不得不佩服啊。1995年，Sun发布了轰动世界的Java语言。当然，Bill Joy对Java也作出了不少的贡献，首先是JINI——一种针对分布式服务的基础连接技术。任何可以内嵌JVM的电子设备都可以通过JINI相互连接；JXTA是基于Java的P2P协议，允许互联网上的软件进行点对点交流和协作。 <BR>这个其貌不扬的瘦高个，有着凌乱的亚麻色头发，被《财富》杂志誉为“网络时代的爱迪生”的技术狂人，在短短的二十年间，创造了无数令人心动的软件。在MIT的BBS上曾有一个帖子，说微软电话面试有一道题，问“Who do you think is the best coder, and why?”虽然回复的帖子中大家都声明列举的best coder排名不分先后，然而大多数人仍把Bill Joy列在第一位，或许可以从一个侧面验证Bill Joy在广大Programmer心目中的地位吧。 <BR><BR><BR>Joshua Bloch : Java 2 元勋 <BR>文/莫映 <BR><BR>早在1996年，适逢Java刚刚崭露头角，年内好事连连。先是1月份发布JDK 1.0，然后是5月底在旧金山召开首届JavaOne大会，年末又是JDK 1.1紧跟其后。正是在Java技术如火如荼、大展拳脚的背景之下，Joshua Bloch来到了Sun，开始了他带领Java社区步入“迦南美地”的漫长历程。 <BR>很快，他被从安全组调入核心平台组，从事底层API设计。至此以后，每逢JDK的重大版本发布，总能在其中见到Joshua的“妙笔”。JDK 1.1中的java.math、1.4中的assertions，还有大家所熟识的Collections Framework皆是Joshua一手打造。其中的Collections Framework还获得了当年的Jolt大奖。到了J2SE 5.0研发阶段，身为平台组构架师的Joshua接掌了Tiger大旗，其核心地位已然无人可以替代。作为Tiger的代言人和领路人，没有谁比Joshua更清楚Tiger。相信大家一定还记得Joshua当年仿效英国诗人William Blake所做的咏Tiger诗八首，优雅的笔调，透出大师深厚底蕴的同时，也道出了Tiger的几大重要特性，这些特性是自JDK 1.1引入Inner Class以来，Java最大的语法改进。 <BR>Java风雨十年，从JDK 1.1到J2SE 5.0，Joshua实在功不可没。难怪有人戏言，假如将James Gosling比作Java之父，那么Joshua就是一手将Java “哺育”成人的Java之母。Joshua对Java的贡献还不止于JDK，提起他的大作《Effective Java》（Addison Wesley, 2001），相信Java粉丝们一定耳熟能详。该书荣膺2002年度Jolt大奖，且备受James Gosling推崇。书中57条颇具实用价值的经验规则，来自Joshua多年来在JDK开发工作中，尤其是Collections Framework设计中的实践心得，各个有理有据，剖析深入，也足见其深厚功力。该书对Java社群的影响，犹如C++社群中的《Effective C++》。Joshua对JCP的贡献也不小。他是JSR201和JSR175的领导者，前者包含了Tiger四大语言特性，后者则为Java提供了元数据支持。此外，他还是JSR166的发起人之一（该JSR由Doug Lea领导），并且是许多其他JSR的参与者。Joshua目前是JCP为数不多的几个执行委员会成员之一。 <BR>Joshua Bloch给人的印象是谦逊平和，行事低调而不喜抛头露面，一个典型的技术人员和实干家。不过即便如此，也丝毫不会减弱他对Java技术的卓越贡献和对Java社区的绝对影响力。有人说，如果他能更彰显一些，就很有可能成为Java开发者中的领军人物，就有如Don Box之于微软社群。 <BR>2004年7月初，就在Tiger发布在即之时，就在Jusha Bloch刚刚荣获Sun“杰出工程师（Distinguished Engineer）”的称号之时，他突然离开Sun而去了正值发展态势迅猛的Google。当他离开Sun的消息在TSS发布之后，众多拥趸表达了怀念与不舍之情。一年过去了，我们还没有获知Joshua的任何近闻，似乎又是他行事低调的一贯作风所致，不知他在Google状况如何。希望Joshua依然能继续“摩西未尽的事业”，以他的影响力推动Java社群继续前行。据称，《Effective Java》的下一版会加入Java 5.0的部分，让我们翘首以待吧。 <BR><BR><BR>Bruce Eckel : 功勋卓著的机会主义分子 <BR>文/孟岩 <BR><BR>Bruce Eckel原本是一位普通的汇编程序员。不知道是什么因缘际会，他转行去写计算机技术图书，却在此大红大紫。他成功的秘诀不外乎两点：超人的表达能力和捕捉机会的能力。他最早的一本书是1990年代初期的《C++ Inside &amp; Out》，随后，在1995年他写出了改变自己命运的《Thinking in C++》。如果说这本书充分表现了他作为优秀技术作家的一面，那么随后他写作《Thinking in Java》并因此步入顶级技术作家行列，则体现了他作为优秀的机会主义分子善于捕捉机会的另一面。写作中擅长举浅显直接的小例子来说明问题，语言生动，娓娓道来，特别适合于缺乏实践经验的初学者。因此《Thinking in Java》俨然成为天字第一号的Java教科书，对Java的普及与发展发挥着不可忽略的作用。不过公允地说，Bruce Eckel的书欠深刻。比如在“Thinking in…”系列中对设计模式的解说就有失大师水准。这一方面是因为书的定位非常清晰，另一方面也是因为Bruce太过分心赶潮流，未能深入之故。TIJ之后，他预言Python将火，就匆匆跑去写了半本《Thinking in Python》。后来Python并未如期而旺，于是他也就把书稿撂在那里不过问了，机会主义的一面暴露无遗。我们也可以善意的猜测一下，他的下一个投机对象会是什么呢？Ruby？.NET？MDA？总之，是什么我都不奇怪。 <BR><BR><BR>Rickard Oberg :J2EE奇才 <BR>文/熊节 <BR><BR>Oberg的作品很多，流行的代码生成工具XDoclet和MVC框架WebWork都出自他的手笔。这两个框架有一个共同的特点，即它们的功能虽然简单，但设计都非常优雅灵活，能够很方便地扩展新功能甚至移植到新环境下使用。优雅的设计源自Oberg的过人才华，简单的功能则折射出他玩世不恭的人生态度。正是这两种特质的融合，才造就了这个不世出的奇才。 <BR>1999年，JDK 1.3发布，其中带来了一个重要的新特性：动态代理（Dynamic Proxy）。当所有人都还在对这项新技术的用途感到迷惑时，Oberg发现用它便可以轻松攻克EJB容器实现中的一些难关。这一发现的产物就是一本《Mastering RMI》，以及大名鼎鼎的JBoss应用服务器。但Oberg很快又让世人见识了他的玩世不恭。由于和总经理Marc Fleury在经营理念上不合，Oberg抱怨“法国的天空总让我感到压抑”，甩手离开了自己一手打造的JBoss。此后的几年里，他和老友Hani Suleiman不断地对JBoss的“专业开源”模式和Marc Fleury的商人味道冷嘲热讽，让众人为他的孩子气扼腕叹息。 <BR>2002年10月，微软推出Petstore示例应用的.NET版本，并宣称其性能比Java Petstore高出数倍。正是Oberg深入分析这个示例应用的源代码，在第一时间指出它大量运用了SQL Server专有的特性，性能对比根本不具参考价值。后来Oberg又先后关注了AOP和IoC容器，两者都成为了J2EE架构的新宠。 <BR><BR><BR>Doug Lea : 世界上对Java影响力最大的个人 <BR>文/KIT <BR><BR>如果IT的历史，是以人为主体串接起来的话，那么肯定少不了Doug Lea。这个鼻梁挂着眼镜，留着德王威廉二世的胡子，脸上永远挂着谦逊腼腆笑容，服务于纽约州立大学Oswego分校计算器科学系的老大爷。 <BR>说他是这个世界上对Java影响力最大的个人，一点也不为过。因为两次Java历史上的大变革，他都间接或直接的扮演了举足轻重的脚色。一次是由JDK 1.1到JDK 1.2，JDK1.2很重要的一项新创举就是Collections，其Collection的概念可以说承袭自Doug Lea于1995年发布的第一个被广泛应用的collections；一次是2004年所推出的Tiger。Tiger广纳了15项JSRs(Java Specification Requests)的语法及标准，其中一项便是JSR-166。JSR-166是来自于Doug编写的util.concurrent包。 <BR>值得一提的是: Doug Lea也是JCP (Java小区项目)中的一员。 <BR>Doug是一个无私的人，他深知分享知识和分享苹果是不一样的，苹果会越分越少，而自己的知识并不会因为给了别人就减少了，知识的分享更能激荡出不一样的火花。《Effective JAVA》这本Java经典之作的作者Joshua Blosh便在书中特别感谢Doug是此书中许多构想的共鸣板，感谢Doug大方分享丰富而又宝贵的知识。这位并发编程的大师级人物的下一步，将会带给Java怎样的冲击，不禁令人屏息以待。 <BR><BR><BR>Scott McNealy :SUN十年来的掌舵者 <BR>文/KIT <BR><BR>McNealy，Sun的CEO、总裁兼董事长。他曾经狂傲的说:“摧毁微软是我们每个人的任务。”这位英勇的硅谷英雄，似乎带头起义，试图组织一个反微软阵线联盟，以对抗微软这股庞大的托拉斯恶势力。他时常口出惊人之语，在公开场合大肆的批评微软，并曾经说微软的.NET是.NOT。 <BR>Scott McNealy先后毕业于哈佛大学及史丹佛大学，分别持有经济学学士学位及企管硕士。1982年MBA毕业的他和三个同学共同合伙创建了Sun，并于1984年成为Sun的执行官。“要么吞了别人，不然就被别人吞了”是Scott McNealy的名言录之一。他擅长以信念带动员工，鼓舞士气。极富自信的他，对于认定的事，总是坚持自己的想法，因此有人形容他是一个刚愎自用的决策者。 <BR>身为Sun这艘船的掌舵者，Scott McNealy能够看多远，Sun就能走多远。Scott McNealy认为将来软件界是一个只有服务，没有产品的世代。他希望打造出Sun不是一个纯靠硬件赚钱的公司。从Open Source到Open Solaris，Sun希望可以成为提供整合性解决方案的服务厂商。Solaris 10 + UltraSPARC是否可以像Scott McNealy希望的是下一匹世纪黑马呢？Sun是否能以股价来证明华尔街分析师及普罗大众的诽短流长？Scott McNealy是否能带领着Sun成为继微软之后的下一个巨人，一场场IT界的争霸战值得我们拭目以待。 <BR><BR><BR>Rod Johnson : 用一本书改变了Java世界的人 <BR>文/ 刘铁锋 <BR><BR>Rod在悉尼大学不仅获得了计算机学位，同时还获得了音乐学位。更令人吃惊的是在回到软件开发领域之前，他还获得了音乐学的博士学位。有着相当丰富的C/C++技术背景的Rod早在1996年就开始了对Java服务器端技术的研究。他是一个在保险、电子商务和金融行业有着丰富经验的技术顾问，同时也是JSR-154（Servlet 2.4）和JDO 2.0的规范专家、JCP的积极成员。 <BR>真正引起了人们的注意的，是在2002年Rod Johnson根据多年经验撰写的《Expert One-on-One J2EE Design and Development》。其中对正统J2EE架构的臃肿、低效的质疑，引发了人们对正统J2EE的反思。这本书也体现了Rod Johnson对技术的态度，技术的选择应该基于实证或是自身的经验，而不是任何形式的偶像崇拜或者门户之见。正是这本书真正地改变了Java世界。基于这本书的代码，Rod Johnson创建了轻量级的容器Spring。Spring的出现，使得正统J2EE架构一统天下的局面被打破。基于Struts+Hibernate+Spring的J2EE架构也逐渐得到人们的认可，甚至在大型的项目架构中也逐渐开始应用。 <BR>Rod Johnson的新作《Expert One-on-one J2EE Development without JEB》则更让人吃惊，单单“Without EJB”一词就会让大多数J2EE架构师大跌眼镜了。不过Rod Johnson可能仅仅是想通过“Without EJB”一词表明应该放开门户之见。这也是Rod Johnson一贯的作风，。也许正是这种思想，促使得Rod Johnson创建了Spring，真正改变了Java世界。 <BR><BR><BR><BR>Alan Kay :Java的精神先锋 <BR>文/徐昊 <BR><BR>Sun的官方Java教材中有一句话，说Java是“C++的语法与Smalltalk语义的结合”。而Smalltalk的创造者就是Alan Kay。 <BR>Alan Kay于1970年加入Xerox公司的Palo Alto研究中心。早在70年代初期，Alan Kay等人开发了世界上第二个面向对象语言Smalltalk，因此，Alan Kay被誉为Smalltalk之父。2003年，Alan Key因为在面向对象程序设计上的杰出贡献，获得了有计算机界的诺贝尔奖之称的ACM Turing Award。 <BR>Alan Kay成名于Smapltalk和OOP，而Java虽然在语言上类似于C，但是在语义上非常接近Smalltalk，很多Java中的设计思想在Alan Kay的文献中找到根源，也有些人将Alan Kay尊为Java思想的先驱。不过遗憾的是似乎Alan Kay老先生对Java并不买账，反倒攻击说Java是存在致命缺陷的编程语言，Java的成功不是由于Java本身的内在价值，而是其商业化的成功。Alan Kay欣赏的是Lisp，他认为Lisp是软件的麦克斯韦方程，其中的许多想法是软件工程和计算机科学的一部分。看来拥有Alan Kay这样一位重量级的Java先驱仍是我们Java一厢情愿的单恋吧。 <BR><BR><BR><BR>Kent Beck : 领导的敏捷潮 <BR>文：刘铁锋 <BR><BR>Beck全家似乎都弥漫着技术的味道。生长在硅谷, 有着一个对无线电痴迷的祖父，以及一个电器工程师父亲。从小就引导Kent Beck成为了业余无线电爱好者。 <BR>在俄勒冈州大学读本科期间，Kent Beck就开始研究起模式。然而在他最终拿到计算机学位之前，他却是在计算机和音乐中交替学习。似乎Java大师都能够有这样的能耐，另一Java大牛Rod Johnson同样也拥有音乐学的博士学位。 <BR>Kent Beck一直倡导软件开发的模式定义。早在1993年，他就和Grady Booch（UML之父）发起了一个团队进行这个方面的研究。虽然著有了《Smalltalk Best Practice Patterns》一书，但这可能并不是Kent Beck最大的贡献。他于1996年在DaimlerChrysler启动的关于软件开发的项目，才真正地影响后来的软件开发。这次的杰作就是XP（极限编程）的方法学。 <BR>和软件开发大师Martin Fowler合著的《Planning Extreme Programming》可谓是关于XP的奠基之作。从此，一系列的作品如《Test Driven Development: By Example》，《Extreme Programming Explained: Embrace Change》让更多的人领略到了极限编程的精髓，也逐步导致了极限编程的流行。 <BR>Kent Beck的贡献远不仅如此。对于众多的Java程序员来说，他和Erich Gamma共同打造的JUnit，意义更加重大。也许正式这个简单而又强大的工具，让众多的程序员更加认可和信赖极限编程，从而引起了Java敏捷开发的狂潮吧。<BR><SPAN class=postbody>十大产品 <BR><BR><a title="" href="http://cn.sun.com" target="_blank">SUN</a> JDK :Java的基石 <BR>文/莫映 <BR><BR>众所周知，流传于市的JDK不单Sun一家，比如IBM的JDK、BEA的JRocket、GNU的GCJ，以及如Kaffe这样的开源实现，不一而足。但是，根正苗红的Sun官方JDK一直以来都是备受瞩目的主流，它对Java社区的影响也是举足轻重。 <BR>1996年1月，Sun在成立了JavaSoft部门之后，推出了JDK 1.0，这是Sun JDK（Java Development Kit）的首个正式版本;当年12月，JDK1.1出炉。该版除了对前序版本部分特性做了改进以外，重写了AWT，采用了新的事件模型。1998年12月，JDK 1.2正式发布。此时的类库日臻完善，API已从当初的200个类发展到了1600个类。在1.2版本中引入了用100%纯Java代码写就的Swing，同时，Sun将Java更名为Java 2。 <BR>1999年，Java 技术形成了J2SE、J2EE和J2ME三大格局。Sun向世人公布了Java HotSpot性能引擎技术的研究成果。HotSpot旨在进一步改善JVM性能，提高Java ByteCode的产生品质，加快Java应用程序的执行速度。J2SE 1.3发布于2000年；2002年2月间，J2SE 1.4问世，这是有JCP参与以来首个J2SE的发行版本。2004年9月30日，代号为“Tiger”的J2SE 5.0终于出笼了，这次发布被誉为Java平台历来发布中特性变动最大的一次。包括泛型在内的若干重大语法改进、元数据支持，包括多线程、JDBC在内的多项类库改进，都令广大Java程序员激动不已。自此，Sun的官方JDK（J2SE Development Kit）已经步入了一个新的高度。 <BR><BR><BR><BR>Eclipse :以架构赢天下 <BR>文/恶魔 <BR><BR>IBM是在2001年以4000万美元种子基金成立Eclipse联盟，并且捐赠了不少程序代码。如今，该组织有91个会员，包含许多全球最大的软件商。根据Evans Data公司的资料，Eclipse是目前最受欢迎的Java开发工具。 <BR>Java厂商若要共同对抗微软，彼此之间就要有共同的开发工具才行。 <BR>在Eclipse平台上，程序员可使用好几种不同的语言。在前端方面，用户可整合多种工具来撰写Plug-in程序或Unit Test。Eclipse最大的特色就在于其完全开放的体系结构，这代表任何人都可下载并修改程序代码，给Eclipse写插件，让它做任何你能想到的事情，即所谓“Design for everything but nothing in particular”。 <BR>Eclipse基金会的架构比较特别，反映出企业现今对于开放原始码计划也越来越积极主动。Eclipse不像一般开放源码软件容许个人的捐献程序，该基金会是由厂商主导。不论是董事会成员或者是程序赞助者几乎都来自于独立软件开发商(ISVs)的员工。 <BR>Eclipse首席执行官Mike Milinkovich说，这种厂商会员制是特意设计的；他说Eclispe软件开发快速就是因为会员制的关系，同时又加上开放源码开发模式的临门一脚。这与一般透过标准组织的做法全然不同。 这其实正好验证了一句老话:“开放即标准”。 <BR><BR><BR>JUnit/Ant : 让Java自动化的绝代双骄 <BR>文/刘铁锋 <BR><BR>在Java程序员必备的工具中，共 同拥有且交口称赞的恐怕就非JUnit、Ant莫属了。一个是单元测试的神兵利器，一个是编译部署的不二之选，它们让Java的开发更简单。 <BR>JUnit由XP和TDD的创始人、软件大师Kent Back以及Eclipse架构师之一、设计模式之父Erich Gamma共同打造。名家的手笔和理念使得JUnit简单而强大，它将Java程序员代入了测试驱动开发的时代。JUnit连任了2001、2002年“Java World编辑选择奖”以及2003年“Java World最佳测试工具”和2003年“Java Pro最佳Java测试工具”等众多奖项，深受Java程序员好评。 <BR>Ant是开源项目的典范，它让IDE的功能更加强大，从Sun的NetBeans到JBuilder,主流的IDE中处处都有它的身影。“Another Neat Tool”原是它的本名，但这已经渐渐不为人知。它彻底地让部署自动化，而程序员需要做的仅仅是几条简单的配置命令。和JUnit一样，Ant也荣获了众多的殊荣:2003年JavaWorld“最有用的Java社区开发的技术编辑选择奖”, 2003年Java Pro“最有价值的Java部署技术读者选择奖”，2003年“JDJ编辑选择奖”，也让Ant受到的多方的认可。 <BR>Ant对JUnit的全面集成,则使得一切都变得更加完美。只需简单地配置，从自动测试到报告生成，从编译到打包部署均可自动完成。强大的功能，简单的配置，让Java程序员高枕无忧。实可谓让Java自动化的绝代双骄。 <BR><BR>Websphere : 活吞市场的大鲸 <BR>文/jini <BR><BR>1999年， IBM与Novell签订合作协议，成功地提供电子商务的解决方案给予原先使用NetWare的用户。同年更是推出了WebSphere Application Server 3.0，并且推出WebSphere Studio与VisualAge for Java让工程师可以快速开发相关的程序。2001年，IBM更是宣布将应用服务器、开发工具整合在一起，与DB2、 Tivoli及Lotus结合成为一套共通解决方案，如今、IBM更是并入了Rational Rose ( UML tools )让开发流程更是完整化。 <BR>Sun在Web Services的策略方面远远落后于微软与IBM, 当他们手拉手在研订Web Services规范, 加上IBM买硬件送软件或是买WebSphere送DB2的策略让企业大佬们纷纷转向IBM的阵营, Sun才惊觉大势已去。WebSphere复杂的安装，深奥的设定，难以理解的出错讯息不断地挑战开发者的耐心与毅力。 <BR>IBM如今已经不是将WebSphere定义为单一产品，它已经是一个平台的代名词。它里面的产品目前包含了应用服务器、商业整合、电子商务、 数据讯息管理、网络串流、软件开发流程、系统管理、无线语音等等。非常多样化,也让企业界愿意相信WebSphere可以带给他们一套完整的解决方案。同时, IBM也在推广SOA的概念, 简单来说, 利用Web Service的耦合性与工作流程的整合, 为企业内部打造以服务为导向的架构。 <BR>IBM捐献出Eclipse带给Java开发人员对IDE的重新掌握。未来是否会捐献出WebSphere的哪一个部分成为OpenSources, 或许, 又是改写Java世界的时刻了。 <BR><BR><BR><BR>WebLogic : 技术人的最爱 <BR>文/jini <BR><BR>1995年, BEA成立了, 初期以Tuxedo数据转换的产品为基础, 成长之迅速是历年来最强的企业。 1998年, BEA推出以Java为基础的网络解决方案, 提供了完整的中间层架构, 更同时支持EJB 1.0 及微软的COM组件, 方便的管理接口掳掠了工程师的心。 在IBM和Oracle尚未准备好迎击的时候, BEA已经席卷企业应用平台的市场。 WebLogic无论在市场领先度与技术领导性与策略远观性都优于当年的所有应用服务器厂商。 <BR>如今WebLogic不仅仅是应用平台服务器的名称, 而是BEA对于整个企业解决方案的总称, 无论是WebLogic Portal或是WebLogic Integration配合着Workshop开发环境, 来自微软的UI开发团队让Workshop几乎达到所见即所得。 接着, 在下一个版本之中, BEA的BeeHive开放源代码计划将释出中间层控件的开发模块, 并且与Eclipse合作共同打造新一代的开发环境。 如此强而有力的技术支持, 更是让顾客愿意使用WebLogic平台的最大原因。 <BR>代号为“Diablo”的 WebLogic Server 9.0小恶魔已经出现了, 目前虽然仅仅是BETA版, 以Portlet 方式打造的管理接口与完整且美妙的WebServices支持, 实在很难找到可以挑剔的地方, 虽然去年被IBM的技术性推销超越了市场占有率, 不过接下来SOA的平台竞争现在才开始, BEA的LOGO也加入“Think liquid”并且推出新的AquaLogic平台做为数据服务平台, 可见, Java的应用服务器的战争, 还会继续进行着。 <BR><BR><BR><BR>JBuilder : Java开发工具的王者 <BR>文/刘铁锋 <BR><BR>Java的开发工具中,最出名的莫过于Borland公司的JBuilder了。对于一些没有弄清楚开发工具与JDK的区别的Java入门者来说，JBuilder就如同Visual C++之于C++，以为JBuilder就是Java的全部。比起捆绑在服务器上销售的JDeveloper，JBuilder应该是唯一的仅靠自身的实力而占领了大部分市场的Java商用开发工具了。而JBuilder作为Java 开发工具的王者，其夺冠之路并非一帆风顺。直到Java的天才Blake Stone成为JBuilder的Architect之后，JBuilder 2.0以及3.0才逐渐推出。2000年3月14日，JBuilder 3.5的推出别具意义，它成为了业界第一个用纯Java打造的开发工具，也风靡了整个Java开发工具市场。在同年11月份推出的JBuilder 4.0乘胜追击，冲破了50%的市场占有率，成为了真正Java开发工具的王者。 <BR>Borland以每半年左右推出一个新版本的速度，让众多的对手倒在了沙场。而Microsoft因为与Sun的官司，也使得一个强大的对手退出了战争。2001年，加入了对企业协作支持的JBuilder 5以及强化了团队开发工具的JBuilder 6打败了最后一个对手Visual Age For Java。2002年JBuilder 7推出之后，再也没有其他厂商与JBuilder竞争。 <BR>孤独的王者并没有停下脚步，在2003年到2005年间，JBuilder也仍然延续了其半年一个版本的速度，推出了8、9、10、2005四个版本。强大的功能以及持续的改进，也让Java程序员多了一分对能够在开发工具市场上与Microsoft血拼十数年的Borland的敬仰。 <BR><BR><BR><BR>Oracle : Java人永远的情结 <BR>文/熊节 <BR><BR>在林林总总的数据库之中，有一种尤其令人又爱又恨、印象深刻，那就是关系型数据库市场的“大佬”——Oracle。 <BR>从公司的角度，Oracle和Sun有着诸多相似之处，例如：两家公司都拥有一位个性鲜明的CEO。早在Java诞生之初的1995年，Oracle就紧随NetScape从而第二个获得了Java许可证。从那以后，Oracle对Java的鼎力支持是Java能够在企业应用领域大获成功的重要原因之一。 <BR>所有J2EE程序员都知道，Oracle的JDBC驱动虽然与Oracle数据库配合良好，但在不少地方使用了专有特性。其中最为著名的就是“CLOB/BLOB问题”，诸如此类的问题给开发者带来了很多麻烦。为了同时兼顾不同的数据库，他们不得不经常把自己的一个DAO（数据访问对象）写成两份版本：针对Oracle的版本和针对其他数据库的版本。有不少人为了开发便利，舍弃了数据库之间的可移植性，将自己的产品绑定在Oracle的专有特性上。 <BR>Oracle提供的Java开发工具也与此大同小异。不管是数据库内置的Java支持还是JDeveloper IDE， Oracle的Java工具都和Oracle数据库有着千丝万缕的联系。看起来，只要Oracle还是数据库市场上的“头牌”，了解、学习Oracle的专有特性，周旋于Oracle特有的问题和解决方案之中，就将仍旧是J2EE程序员在数据库基础和SQL之外的必修功课。对Oracle的爱与恨，也将仍旧是Java人心头一个难解的情结。 <BR><BR><BR><BR>Struts、Hibernate : 让官方框架相形失色的产品 <BR>文/刘铁锋 <BR><BR>好的框架能够让项目的开发和维护更加便捷和顺利。相比Sun官方标准的迟钝以及固执，开源框架也更得到Java程序员的共鸣。Struts以及Hibernate就是这样一类产品，它们简单、优雅，更让官方的产品相形失色。 <BR>谈起Struts，不可避免地就要提及MVC（Model-View-Controller）的理念。而准确地讲，MVC的提出却最早源于JSP的标准。在1998年10月7号，Sun发布的JSP的0.92的规范中提出的Model 2就是MVC的原型。在1999年12月Java World的大会中，Gavind Seshadri的文章最早阐述了Model 2就是一种MVC的架构，同时也提及了MVC架构是一种最好的开发方法。2000年3月，由Craig McClanahan发布的Struts成为了最早支持MVC的框架。Struts在设计上虽然存在一些诟病，但是不可否认的是，它使得Java Web应用的开发更加简洁和清晰，也让更多的程序员爱上了Java，并开始遗忘官方的JSP。时至今日，比起如WebWork、Tapestry以及Sun官方的JSF，Struts或多或少存在些不足，但是众多成功项目的实施，仍然使其牢牢占据的Java Web应用框架的首位。 <BR>Hibernate则在某种程度上改变了人们对构建J2EE的思路。相比其EJB的Entity Bean的映射技术，Hibernate则显得更加简洁和强大。五分钟就能把Hibernate跑起来，让更多的Java程序员享受到了开发的乐趣。第15届Jolt大奖中，最优秀数据库、框架以及组件的奖项中，Hibernate当仁不让获得头筹；不仅如此， Hibernate甚至还影响了官方的标准。在众多Java程序员翘首以待的EJB 3.0的规范中，Hibernate得到了支持。 <BR>Java开源的繁荣不仅让众多Java的开发者享受到了更多的便利，甚至影响了官方的标准。恐怕这也是作为Java人独有的乐趣之一吧。 <BR><BR><BR><BR>PetStore : J2EE人的必修课 <BR>文/陶文 <BR><BR>很少有一个例子项目如PetStore这 般广为人知，而这很大程度上要归功于Sun很“英明”地把PetStore做成一个只展示架构而在性能调优上留下了大大余地的例子。围绕着性能话题，产生了颇为有趣的厂商之间以及平台之间的Pet Wars。除去这些关于性能的流言蜚语乃至中伤，PetStore在展示J2EE1.3平台的架构、演示什么叫分层方面还是有着很大的功劳的。而且PetStore在架构方面的丰富性使得其成为J2EE的那些轻量级小兄弟们展示自身的一个必选科目。 <BR>不谈那些围绕PetStore的口水，那些数不尽的盗版，PetStore给开发新手带来的最重大的影响，我想应该是架构的观念而不是性能，也不是业务。做为一种技术的Demo，这无可非议。但是如果你是一个新手，跟着PetStore亦步亦趋地学习J2EE开发，难免会陷入过度设计、华而不实之类的困境。围绕着.NET的PetStore的克隆PetShop展开的架构与性能的大讨论，是不是也在促使我们学习新技术时应该以解决问题为导向呢？特别是当你想把一个如PetStore这般的Sample Project的技术照搬到你的现实世界的Real Project来时。 <BR><BR><BR><BR>十大组织 <BR><BR><a title="" href="http://cn.sun.com" target="_blank">SUN</a> : 因为Java而永被荣光 <BR>文/孟岩 <BR><BR>Sun是1980年代初期由斯坦福大学三位年轻学生创立的公司。与一般人的印象不同，“SUN”的本意并不是企图剽窃天上那颗温暖的恒星的威名，而是“斯坦福大学网络”的意思。Sun在“前Java”时代就因为SPARC芯片、Solaris操作系统和“网络就是计算机”的口号而为人所知。1990年12月，Sun启动了一个看上去没什么意思的嵌入式软件项目。然而，基于C++的开发很快遇到了麻烦。一个创新型技术公司的特色立刻显示出来，一群天才不是去深入C++，而是另辟蹊径，发明了Java。这个传奇故事已经尽人皆知，但是其中所包含的精神却始终令人望空凝思。 <BR>Java的发明，使得Sun真正有机会在软件的历史天空中放射出太阳的光芒。Sun发明了Java，并且在长达十年的时间里始终走在Java大潮的最前端。Sun是Java的老家，是Java慈爱的母亲，这一切任何人都改变不了。虽然Sun似乎没能够从Java中获得应有的金钱回报，但这丝毫没有挫伤Sun对于Java的母爱，还有对于Java大潮的舍我其谁的领导气概。 <BR>所有人都迷恋富有的感觉，但是也迟早会意识到钱不是世上最宝贵的东西。这个世界并不缺少会赚钱的公司，但是能够靠着创新型技术推动整个世界进步的公司却是凤毛麟角。Sun应该感到骄傲，他们将因为Java而在历史的天空里发射出太阳的光芒。 <BR><BR><BR><BR>IBM : Java经济的最大受益人 <BR>文/恶魔 <BR><BR>Sun公司是Java的发明人，但IBM却是Java最大的受益者。是IBM抢占了利润丰厚的应用服务器市场的头把交椅，是IBM在Java技术上投入最多的金钱，拥有最大的影响力和最好的开发者社区。可以毫不夸张地说，Java使IBM的软件体系得到复兴，在某种意义上，甚至可以说，是Java创造了这种复兴。Java之后又来了Linux，这种建造在不属于自己的平台上以获得成功的理念更是变得非常有影响力。正是这种理念铸就了今天IBM “按需计算，服务为王”的王者风范。 <BR>2004年三月，IBM以Java的解放者的姿态借机向Sun发难。IBM公司负责新兴技术的副总裁史密斯在一封公开信中表示，IBM愿意与Sun合作成立一个项目，意在通过开放源代码开发模式管理Java的开发工作。 <BR>墙内开花，墙外香。面对IBM的成功，到底是谁妒嫉呢？或许去程序的社区中逛逛聊聊，明眼人是不难发现事实真相的。也许Sun应该好好向IBM学习经营之道。尽管利润额不如硬件及服务部门，但IBM软件部门的利润率是最高的——高达85%的利润率足以令人惊叹。在最近的一个季度里，IBM软件部的利润率上升了8%，其中WebSphere产品组的利润率上升了14%。 <BR>正是IBM在开源和Java上的全身心地投入又秉承开放性的原则，今日的Java才能以日进千里的速度将许多竞争对手远远抛在后面。Java 10年，IBM功不可没。 <BR><BR><BR><BR>BEA : 用AppServer影响Java阵营 <BR>文/霍泰稳 <BR><BR>十年前诞生的Java并不是一开始 就那么引人注目的，虽然用Applet也曾为互联网络带来一抹亮色，但毕竟只是Toy。在企业级应用市场上，Java一直没有什么起色，虽然Java的支持者一直在鼓吹它有着大型企业级应用的强悍功能。过高的期望与低能的产品，一时间颇让人怀疑Java的路是否已经走到了尽头？可以说是WebLogic Server的出现逐渐打消了人们的顾虑，BEA公司慧眼独具在2001年收购的这个产品将人们的目光吸引到电信、金融、政府等Java企业级应用方面，WebLogic Server以其优良的性能让人们看到Java应用广阔的未来。虽然随后在Java应用服务器方面出现了像IBM公司的WebSpere、开源软件JBoss等Java应用服务器，但WebLogic Server几乎占领世界前500强所有企业的应用服务器市场地位依然无法撼动。 <BR>Java现在已经不单纯是一个语言，从另一方面它也代表着开放与创新。很多以Java产品为基础的公司或者从事Java开发的程序员骨子里都有着开放与创新的烙印，BEA公司的发展深深地印证了这一点。与合作伙伴的密切合作向Java社区贡献产品基础源代码、加入权威开源组织参与Java标准的制定等证实着BEA的开放，而其产品从WebLogic Server一种拓展到WebLogic Platform、WebLogic Portal、WebLogic Workshop等其它领域又证实着它的创新能力。 <BR><BR><BR><BR>Oracle : 早起的鸟儿有虫吃 <BR>文/孟岩 <BR>Oracle的老板拉里?艾利森是有名的混世魔王和花花公子，所以尽管他也是软件产业成功人士的代表，却绝不是程序员们心目中的英雄，程序员们毕竟不是央视《对话》节目里群众演员，没必要为了节目需要而对权贵财阀们做出一副贱骨头状。但是，任何人都不能不钦佩Oracle在技术上的前瞻性和坚决性。Oracle是1996年获得Java许可证的，紧接着就大胆地将Java作为战略性的发展方向而予以全面支持。要知道当时Java的前景并不是十分确定的，而Oracle的坚决投入，使得它在后来的Java世界中抢得一席之地。1998年9月发布的Oracle 8i为数据库用户提供了全方位的Java支持。Oracle 8i成为第一个完全整合了本地Java运行时环境的数据库，开发者用Java就可以编写Oracle的存储过程，这意味着可以仅在Oracle数据库中就完成几乎全部的应用开发。J2EE兴起后，Oracle更是有心进入开发工具市场，因而购买了JBuilder的源码，并在此基础上开发出JDeveloper。如今Oracle除了数据库稳居第一之外，在Java开发工具世界里也自成一派。这一切不能不归功于当初的眼光远大。 <BR><BR><BR>Apache : 开源软件的品牌保证 <BR>文/陶文 <BR><BR>Java程序员的日常工具箱中，我们可以发现Ant、Tomcat、Log4、Lucene这些鼎鼎大名的开源产品。而它们的共同点在于，都是由Apache Software Foundation社群中杰出的开发者开发的开源项目。Apache这个名字在Java的世界中实在太出名了，以至于“Apache”这六个字母成为开源项目品质保证的代名词。Apache是自由开源的一面旗帜，其Apache License更是成为商业友好的License的首选，只SourceForge上就有1000多个以Apache License授权的项目，其流行程度可见一斑。 <BR>但是，如我们所知，Apache最早闻名IT界是靠高性能的Web服务器，其历史甚至和Java一样长。Apache对于Java的偏爱，以及其发展的速度也映射出了Java繁荣的一角。现在去它的主页上看看，满目望去全部都是Java的开源项目，早就不光是其C服务器的老本行了。Apache对Java最大的贡献就是提供了这么一个精品的开放舞台，让杰出的开发者和成熟的开源项目走到一起，共同给Java语言提供一个丰富的工具仓库。对于一种语言、一个平台来说，其库的丰富程度对于开发者来说的重要性再怎么强调也不为过。勿庸置疑，Aapache上会出现越来越多的Java开源项目，而我们开发者也将更多地得益于这令人目不暇接的繁荣。 <BR><BR><BR><BR>TheServerSide : 论坛的专业精神 <BR>文/刘天北 <BR><BR>成立于2000年5月，TSS最初以一本书而广为人知。它的创始人Ed Roman同时也是J2EE名著《Mastering EJB》的作者;Roman运营着一个J2EE咨询/培训公司TheMiddlewareCompany（简称TMC），TSS当时是TMC的下属部门；为了扩大企业的影响，Roman在TSS网站上免费发布了那本书的电子版。J2EE程序员要吃下这个香饵，就得在论坛中注册;注册的同时，多半也会看一眼论坛的内容；一看之下，大部分人都被吸引住，成了社区的忠实成员。 <BR>TSS究竟有什么吸引人的秘诀？首先，它有一支能力过人的运营团队，除了Roman本人之外，其中还有好几人都是J2EE领域的顶尖专家；第二，TSS和TMC定期会推出专家研讨会/视频访谈、技术白皮书、评测报告，通读TSS提供的这些内容，基本上就可以把握技术的当前趋势。但这还不是全部。最可贵的还是TSS的社区风格：他们深谙技术，但不盛气凌人；思想敏锐，但不因此缺乏审慎和大局感。其中大多数人都已在自己的开发领域颇有建树，在TSS上的活动既给他们提供了与同行进行深度交流的机会。一个新成员进入社区，就像参加了一个起点很高的专业俱乐部，这不是一个求解“怎样设置JAVA_HOME环境变量”之类问题的地方。事实上，在J2EE技术发展的若干转折点上，TSS都起到了关键的推动作用。 <BR>几经易主之后，J2EE咨询培训公司TMC在2004年关闭；TSS则被IT媒体集团TechTarget收购。我们期待着它更加繁荣的未来。 <BR><BR>JBoss : 职业开源软件组织 <BR>文/刘天北 <BR><BR>J2EE的婴儿期，“应用服务器”原本是“昂贵”的代名词。但从1999年起，Marc Fleury和Rickard Oberg等人就已经着手改变这种状况。他们开发的开源EJB容器当时叫做“EJBoss”，在Sun公司的干预下（注意，“EJB”是注册商标），JBoss获得了今天的名字。虽然从问世起就一直受到关注，但JBoss第一个达到产品化标准的版本可能是它的2.2版。它的易用让人一见难忘：除了标准部署描述符，无需编写专用的xml配置文件。Oberg自豪地说，“我们的架构并不是按照EJB规范指定的路线设计的，因此也没有走大多数应用服务器走过的弯路。” <BR>Jboss 3.x版本保持了一贯的创新精神，在用户中间获得了更广泛的认可。但是，文档要收费下载、在邮件列表上提问常常会遭到Fleury等人的斥责。无疑，JBoss的创始者也意识到了自己的幼稚：开源软件只能靠服务盈利，卖文档赚钱有限、骂用户当然更损害企业形象。 <BR>虽然以Oberg为首的许多程序员退出了开发队伍（其中很多人成了JBoss的死敌），在开源软件领域也面临JOnAS Geronimo等新老对手的竞争，但JBoss还是以不断推出的新版本站稳了脚跟。在技术上，它是策动J2EE演进的重要力量：拟议中的EJB 3也要追随Jboss 4倡导的开发范式，以至于二者的代码样本之间的差别几乎难以分辨；在商业上，JBoss与Sun公司言和修好，甚至还获得了数量可观的风险投资。JBoss已经像拥护者预期的那样，成为了应用服务器领域的Linux。 <BR><BR><BR><BR>Borland : 深度介入Java <BR>文/左轻候 <BR><BR><BR>除了Sun以外，也许没有一家公司 像Borland这样深层地介入Java。Borland开发了最早的Java编译器之一，Borland的工程师参与了早期JDK的设计，Borland的JBCL(JavaBeans Component Library) 技术也成为后来Java Bean规范的基础。但是Borland对Java世界最大的影响还是JBuilder。 <BR>1997年11月，Borland JBuilder 1.0发布。虽然第一个版本相对于竞争对手并没有表现出明显的优势，但是Borland凭借深厚的技术实力和正确的市场策略，不断地超越了对手。JBuilder 3.5成为业界第一个100%基于Java架构的开发工具，并且市场份额很快超过了50%。在随后的版本中，JBuilder持续改进对团队开发、J2EE架构、Mobile技术等方面的支持，最终成为了Java开发工具市场，特别是大型企业级Java开发市场中的霸主。JBuilder的成功，很大一个原因来自于Borland坚持的平台中立性，即对不同厂商的解决方案提供一视同仁的支持。 <BR>2005年初，随着Eclipse社区的迅速崛起，Borland进入了Eclipse的董事会，成为战略开发者(Strategy Developer) ，并宣布将推动Borland的其它产品与Eclipse的集成。在随后发布的一份文件中，Borland宣称JBuilder的未来版本将放弃原有的PrimeTime架构，而基于Eclipse架构。这个代号为“Peloton”的版本预计于2006年下半年发布。 <BR>Borland对Java的另外两个主要贡献来自Together和BES(Borland Enterprise Server)。Together是著名的建模工具，能够与包括JBuilder在内的许多开发工具进行集成，全球市场份额占有率排名第二。BES AppServer是一种J2EE服务器，在全球市场份额占有率上次于WebLogic和WebSphere，排名第三。 <BR><BR><BR><BR>JCP : Java世界的联合国 <BR>文/黄海波 <BR><BR><BR>当联合国正在为安理会改革问题 吵得如火如荼时，Java世界的“联合国安理会”已经成功地运作了七个年头。JCP（Java Community Process）在1998年由Sun发起成立，目标是通过一个开放、合作和鼓励参与的非盈利组织来发展和推进Java和相关的技术。正是由于JCP计划的推出可以让所有对Java感兴趣的软硬件厂商，个人和组织都能参与到技术规范的制定和发展过程中，协调各方的兴趣和利益、集思广益，才可以让Java在短短的几年内异军突起，成为可以和微软开发平台抗衡的一个主流开发语言。JCP计划既然是一个组织，自然也有一定的架构。JCP组织架构主要包括PMO(Program Management Office)、JCP成员、EC、EG。事实上，JCP的架构就好像一个Java世界的联合国。虽然也有不少人批评JCP成为各派利益的角力场，因而效率低下；但是，它毕竟为Java的顺利发展很好地掌握了方向。 <BR><BR><BR><BR>微软与Java : 不得不说的故事 <BR>文/孟岩 <BR><BR>微软跟Java不对付，地球人都知 道。跟Sun和解了又怎么样？ .NET跟Java就是竞争对手，没什么说的。但是有点IT掌故的人都知道，微软并非一开始就跟Java过不去。当年比尔?盖茨盛赞Java是“长期以来最好的程序设计语言”，而且很早就购买了Java许可证。但是微软作为村里的老大，看着人家的儿子茁壮呈长，不由得生了私心杂念，搞起了小动作，在Visual J++中加入了一些破坏纯洁性的东西。单独来看，Visual J++是COM时代微软最棒的开发工具，用WFC写Windows应用程序和COM组件实在是一种享受。但是放在Java大家庭里，这个家伙就显得多少有点不怀好意。一场官司下来，微软被逐出Java大家庭，Visual J++无疾而终。以后的事情尽人皆知，.NET出笼，利齿直指Java，几年撕咬下来，没占着便宜也没吃大亏，如今也算是南北朝对峙，二分天下有其一。设想如果当时微软能够摒弃帝国主义心态，正确对待Java，与其他人一起共建美好的Java“共产主义社会”，那么今天我们的软件开发世界应该会美好得多。可惜黄粱一梦，终究是蚂蚁的喜事。2004年，微软与Sun实现了和解，但愿到Java 20周年的时候，我们能更正面地描述微软对Java发挥的作用。</SPAN></SPAN></SPAN><img src ="http://www.blogjava.net/nighthawk/aggbug/15524.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nighthawk/" target="_blank">nighthawk</a> 2005-10-14 16:12 <a href="http://www.blogjava.net/nighthawk/articles/15524.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>怎样成为优秀的软件模型设计者?</title><link>http://www.blogjava.net/nighthawk/articles/10141.html</link><dc:creator>nighthawk</dc:creator><author>nighthawk</author><pubDate>Mon, 15 Aug 2005 05:51:00 GMT</pubDate><guid>http://www.blogjava.net/nighthawk/articles/10141.html</guid><wfw:comment>http://www.blogjava.net/nighthawk/comments/10141.html</wfw:comment><comments>http://www.blogjava.net/nighthawk/articles/10141.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nighthawk/comments/commentRss/10141.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nighthawk/services/trackbacks/10141.html</trackback:ping><description><![CDATA[　我们期待自己成为一个优秀的软件模型设计者，但是，要怎样做，又从哪里开始呢？&nbsp; <BR><BR>　　将下列原则应用到你的软件工程中，你会获得立杆见影的成果。&nbsp; <BR><BR>　　1.&nbsp;人远比技术重要&nbsp; <BR><BR>　　你开发软件是为了供别人使用，没有人使用的软件只是没有意义的数据的集合而已。许多在软件方面很有成就的行家在他们事业的初期却表现平平，因为他们那时侯将主要精力都集中在技术上。显然，构件（components），EJB（Enterprise&nbsp;Java&nbsp;Beans）和代理（agent）是很有趣的东西。但是对于用户来说，如果你设计的软件很难使用或者不能满足他们的需求，后台用再好的技术也于事无补。多花点时间到软件需求和设计一个使用户能很容易理解的界面上。&nbsp; <BR>　 <BR>　　2.&nbsp;理解你要实现的东西&nbsp; <BR><BR>　　好的软件设计人员把大多数时间花费在建立系统模型上，偶尔写一些源代码，但那只不过是为了验证设计过程中所遇到的问题。这将使他们的设计方案更加可行。&nbsp; <BR><BR>　　3.&nbsp;谦虚是必须的品格&nbsp; <BR><BR>　　你不可能知道一切，你甚至要很努力才能获得足够用的知识。软件开发是一项复杂而艰巨的工作，因为软件开发所用到的工具和技术是在不断更新的。而且，一个人也不可能了解软件开发的所有过程。在日常生活中你每天接触到的新鲜事物可能不会太多。但是对于从事软件开发的人来说，每天可以学习很多新东西（如果愿意的话）。&nbsp; <BR><BR>　　4.&nbsp;需求就是需求&nbsp; <BR><BR>　　如果你没有任何需求，你就不要动手开发任何软件。成功的软件取决于时间（在用户要求的时间内完成）、预算和是否满足用户的需求。如果你不能确切知道用户需要的是什么，或者软件的需求定义，那么你的工程注定会失败。&nbsp; <BR><BR>　　5.&nbsp;需求其实很少改变，改变的是你对需求的理解&nbsp; <BR><BR>　　Object&nbsp;ToolSmiths公司（www.objecttoolsmiths.com）的Doug&nbsp;Smith常喜欢说：“分析是一门科学，设计是一门艺术”。他的意思是说在众多的“正确”分析模型中只存在一个最“正确”分析模型可以完全满足解决某个具体问题的需要（我理解的意思是需求分析需要一丝不苟、精确的完成,而设计的时候反而可以发挥创造力和想象力&nbsp;-&nbsp;译者注）。&nbsp; <BR><BR>　　如果需求经常改动，很可能是你没有作好需求分析，并不是需求真的改变了。&nbsp; <BR><BR>　　你可以抱怨用户不能告诉你他们想得到什么，但是不要忘记，收集需求信息是你工作。&nbsp; <BR><BR>　　你可以说是新来的开发人员把事情搞得一团糟，但是，你应该确定在工程的第一天就告诉他们应该做什么和怎样去做。&nbsp; <BR><BR>　　如果你觉得公司不让你与用户充分接触，那只能说明公司的管理层并不是真正支持你的项目。&nbsp; <BR><BR>　　你可以抱怨公司有关软件工程的管理制度不合理，但你必须了解大多同行公司是怎么做的。&nbsp; <BR><BR>　　你可以借口说你们的竞争对手的成功是因为他们有了一个新的理念，但是为什么你没先想到呢？&nbsp; <BR><BR>　　需求真正改变的情况很少，但是没有做好需求分析工作的理由却很多。&nbsp; <BR><BR>　　6.&nbsp;经常阅读&nbsp; <BR><BR>　　在这个每日都在发生变化的产业中，你不可能在已取得的成就上陶醉太久。&nbsp; <BR><BR>　　每个月至少读2、3本专业杂志或者1本专业书籍。保持不落伍需要付出很多的时间和金钱，但会使你成为一个很有实力的竞争者。&nbsp; <BR><BR>　　7.&nbsp;降低软件模块间的耦合度&nbsp; <BR><BR>　　高耦合度的系统是很难维护的。一处的修改引起另一处甚至更多处的变动。&nbsp; <BR><BR>　　你可以通过以下方法降低程序的耦合度：隐藏实现细节，强制构件接口定义，不使用公用数据结构，不让应用程序直接操作数据库（我的经验法则是：当应用程序员在写SQL代码的时候，你的程序的耦合度就已经很高了）。&nbsp; <BR><BR>　　耦合度低的软件可以很容易被重用、维护和扩充。&nbsp; <BR><BR>　　8.&nbsp;提高软件的内聚性&nbsp; <BR><BR>　　如果一个软件的模块只实现一个功能，那么该模块具有高内聚性。高内聚性的软件更容易维护和改进。&nbsp; <BR><BR>　　判断一个模块是否有高的内聚性，看一看你是否能够用一个简单的句子描述它的功能就行了。如果你用了一段话或者你需要使用类似“和”、“或”等连词，则说明你需要将该模块细化。&nbsp; <BR><BR>　　只有高内聚性的模块才可能被重用。&nbsp; <BR><BR>　　9.&nbsp;考虑软件的移植性&nbsp; <BR><BR>　　移植是软件开发中一项具体而又实际的工作，不要相信某些软件工具的广告宣传（比如java&nbsp;的宣传口号write&nbsp;once&nbsp;run&nbsp;many&nbsp;?&nbsp;译者注）。&nbsp; <BR><BR>　　即使仅仅对软件进行常规升级，也要把这看得和向另一个操作系统或数据库移植一样重要。&nbsp; <BR><BR>　　记得从16位Windows移植到32位windows的“乐趣”吗&nbsp;？当你使用了某个操作系统的特性，如它的进程间通信(IPC)策略，或用某数据库专有语言写了存储过程。你的软件和那个特定的产品结合度就已经很高了。&nbsp; <BR><BR>　　好的软件设计者把那些特有的实现细节打包隐藏起来，所以，当那些特性该变的时候，你的仅仅需要更新那个包就可以了。&nbsp; <BR><BR>　　10.&nbsp;接受变化&nbsp; <BR><BR>　　这是一句老话了：唯一不变的只有变化。&nbsp; <BR><BR>　　你应该将所有系统将可能发生的变化以及潜在需求记录下来,以便将来能够实现（参见“Architecting&nbsp;for&nbsp;Change”，Thinking&nbsp;Objectively,&nbsp;May&nbsp;1999）&nbsp; <BR><BR>　　通过在建模期间考虑这些假设的情况，你就有可能开发出足够强壮且容易维护的软件。设计强壮的软件是你最基本的目标。&nbsp; <BR><BR>　　11.&nbsp;不要低估对软件规模的需求&nbsp; <BR><BR>　　Internet&nbsp;带给我们的最大的教训是你必须在软件开发的最初阶段就考虑软件规模的可扩充性。&nbsp; <BR><BR>　　今天只有100人的部门使用的应用程序，明天可能会被有好几万人的组织使用，下月，通过因特网可能会有几百万人使用它。&nbsp; <BR><BR>　　在软件设计的初期，根据在用例模型中定义的必须支持的基本事务处理，确定软件的基本功能。然后，在建造系统的时候再逐步加入比较常用的功能。&nbsp; <BR><BR>　　在设计的开始考虑软件的规模需求，避免在用户群突然增大的情况下，重写软件。&nbsp; <BR><BR>　　12.&nbsp;性能仅仅是很多设计因素之一&nbsp; <BR><BR>　　关注软件设计中的一个重要因素--性能，这好象也是用户最关心的事情。一个性能不佳的软件将不可避免被重写。&nbsp; <BR><BR>　　但是你的设计还必须具有可靠性，可用性，便携性和可扩展性。你应该在工程开始就应该定义并区分好这些因素，以便在工作中恰当使用。性能可以是，也可以不是优先级最高的因素，我的观点是，给每个设计因素应有的考虑。&nbsp; <BR><BR>　　13.&nbsp;管理接口&nbsp; <BR><BR>　　“UML&nbsp;User&nbsp;Guide”（Grady&nbsp;Booch，Ivar&nbsp;Jacobson和Jim&nbsp;Rumbaugh&nbsp;,Addison&nbsp;Wesley,&nbsp;1999）中指出，你应该在开发阶段的早期就定义软件模块之间的接口。&nbsp; <BR><BR>　　这有助于你的开发人员全面理解软件的设计结构并取得一致意见，让各模块开发小组相对独立的工作。一旦模块的接口确定之后，模块怎样实现就不是很重要了。&nbsp; <BR><BR>　　从根本上说，如果你不能够定义你的模块“从外部看上去会是什么样子”，你肯定也不清楚模块内要实现什么。&nbsp; <BR><BR>　　14.&nbsp;走近路需要更长的时间&nbsp; <BR><BR>　　在软件开发中没有捷径可以走。&nbsp; <BR><BR>　　缩短你的在需求分析上花的时间，结果只能是开发出来的软件不能满足用户的需求，必须被重写。&nbsp; <BR><BR>　　在软件建模上每节省一周，在将来的编码阶段可能会多花几周时间，因为你在全面思考之前就动手写程序。&nbsp; <BR><BR>　　你为了节省一天的测试时间而漏掉了一个bug，在将来的维护阶段，可能需要花几周甚至几个月的时间去修复。与其如此，还不如重新安排一下项目计划。&nbsp; <BR><BR>　　避免走捷径，只做一次但要做对（do&nbsp;it&nbsp;once&nbsp;by&nbsp;doing&nbsp;it&nbsp;right）。&nbsp; <BR><BR>　　15.&nbsp;别信赖任何人&nbsp; <BR><BR>　　产品和服务销售公司不是你的朋友，你的大部分员工和高层管理人员也不是。&nbsp; <BR><BR>　　大部分产品供应商希望把你牢牢绑在他们的产品上，可能是操作系统，数据库或者某个开发工具。&nbsp; <BR><BR>　　大部分的顾问和承包商只关心你的钱并不是你的工程（停止向他们付款，看一看他们会在周围呆多长时间）。&nbsp; <BR><BR>　　大部分程序员认为他们自己比其他人更优秀，他们可能抛弃你设计的模型而用自己认为更好的。&nbsp; <BR><BR>　　只有良好的沟通才能解决这些问题。&nbsp; <BR><BR>　　要明确的是，不要只依靠一家产品或服务提供商，即使你的公司（或组织）已经在建模、文档和过程等方面向那个公司投入了很多钱。&nbsp; <BR><BR>　　16.&nbsp;证明你的设计在实践中可行&nbsp; <BR><BR>　　在设计的时候应当先建立一个技术原型，&nbsp;或者称为“端到端”原型。以证明你的设计是能够工作的。&nbsp; <BR><BR>　　你应该在开发工作的早期做这些事情，因为，如果软件的设计方案是不可行的，在编码实现阶段无论采取什么措施都于事无补。技术原型将证明你的设计的可行性，从而，你的设计将更容易获得支持。&nbsp; <BR><BR>　　17.&nbsp;应用已知的模式&nbsp; <BR><BR>　　目前，我们有大量现成的分析和设计模式以及问题的解决方案可以使用。&nbsp; <BR><BR>　　一般来说，好的模型设计和开发人员，都会避免重新设计已经成熟的并被广泛应用的东西。&nbsp; <BR>http://www.ambysoft.com/processPatternsPage.html&nbsp;收藏了许多开发模式的信息。&nbsp; <BR><BR>　　18.&nbsp;研究每个模型的长处和弱点&nbsp; <BR><BR>　　目前有很多种类的模型可以使用,如下图所示。用例捕获的是系统行为需求，数据模型则描述支持一个系统运行所需要的数据构成。你可能会试图在用例中加入实际数据描述，但是，这对开发者不是非常有用。同样，数据模型对描述软件需求来说是无用的。每个模型在你建模过程中有其相应的位置，但是，你需要明白在什么地方，什么时候使用它们。&nbsp; <BR><BR>　　19.&nbsp;在现有任务中应用多个模型&nbsp; <BR><BR>　　当你收集需求的时候，考虑使用用例模型，用户界面模型和领域级的类模型。&nbsp; <BR><BR>　　当你设计软件的时候，应该考虑制作类模型，顺序图、状态图、协作图和最终的软件实际物理模型。&nbsp; <BR><BR>　　程序设计人员应该慢慢意识到，仅仅使用一个模型而实现的软件要么不能够很好地满足用户的需求，要么很难扩展。&nbsp; <BR><BR>　　20.&nbsp;教育你的听众&nbsp; <BR><BR>　　你花了很大力气建立一个很成熟的系统模型，而你的听众却不能理解它们，甚至更糟－连为什么要先建立模型都不知道。那么你的工作是毫无意义的。&nbsp; <BR><BR>　　教给你开发人员基本的建模知识；否则，他们会只看看你画的漂亮图表，然后继续编写不规范的程序。&nbsp; <BR><BR>　　另外，&nbsp;你还需要告诉你的用户一些需求建模的基础知识。给他们解释你的用例(uses&nbsp;case)和用户界面模型，以使他们能够明白你要表达地东西。当每个人都能使用一个通用的设计语言的时候（比如UML-译者注），你的团队才能实现真正的合作。&nbsp; <BR><BR>　　21.&nbsp;带工具的傻瓜还是傻瓜&nbsp; <BR><BR>　　你给我CAD/CAM工具，请我设计一座桥。但是，如果那座桥建成的话，我肯定不想当第一个从桥上过的人，因为我对建筑一窍不通。&nbsp; <BR><BR>　　使用一个很优秀的CASE工具并不能使你成为一个建模专家，只能使你成为一个优秀CASE工具的使用者。成为一个优秀的建模专家需要多年的积累，不会是一周针对某个价值几千美元工具的培训。一个优秀的CASE工具是很重要，但你必须学习使用它，并能够使用它设计它支持的模型。&nbsp; <BR><BR>　　22.&nbsp;理解完整的过程&nbsp; <BR><BR>　　好的设计人员应该理解整个软件过程，尽管他们可能不是精通全部实现细节。&nbsp; <BR><BR>　　软件开发是一个很复杂的过程，还记得《object-oriented&nbsp;software&nbsp;process》第36页的内容吗？除了编程、建模、测试等你擅长工作外，还有很多工作要做。&nbsp; <BR><BR>　　好的设计者需要考虑全局。必须从长远考虑如何使软件满足用户需要，如何提供维护和技术支持等。&nbsp; <BR><BR>　　23.&nbsp;常做测试，早做测试&nbsp; <BR><BR>　　如果测试对你的软件来说是无所谓的，那么你的软件多半也没什么必要被开发出来。&nbsp; <BR><BR>　　建立一个技术原型供技术评审使用，以检验你的软件模型。&nbsp; <BR><BR>　　在软件生命周期中，越晚发现的错误越难修改，修改成本越昂贵。尽可能早的做测试是很值得的。&nbsp; <BR><BR>　　24.&nbsp;把你的工作归档&nbsp; <BR><BR>　　不值得归档的工作往往也不值得做。归档你的设想，以及根据设想做出的决定；归档软件模型中很重要但不很明显的部分。&nbsp;给每个模型一些概要描述以使别人很快明白模型所表达的内容。&nbsp; <BR><BR>　　25.&nbsp;技术会变，基本原理不会&nbsp; <BR><BR>　　如果有人说“使用某种开发语言、某个工具或某某技术，我们就不需要再做需求分析，建模，编码或测试”。不要相信，这只说明他还缺乏经验。抛开技术和人的因素，实际上软件开发的基本原理自20世纪70年代以来就没有改变过。你必须还定义需求，建模，编码，测试，配置，面对风险，发布产品，管理工作人员等等。&nbsp; <BR><BR>　　软件建模技术是需要多年的实际工作才能完全掌握的。好在你可以从我的建议开始，完善你们自己的软件开发经验。&nbsp; <BR><BR>　　以鸡汤开始，加入自己的蔬菜。然后，开始享受你自己的丰盛晚餐吧。&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 转自 <EM>方舟</EM><BR><BR><img src ="http://www.blogjava.net/nighthawk/aggbug/10141.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nighthawk/" target="_blank">nighthawk</a> 2005-08-15 13:51 <a href="http://www.blogjava.net/nighthawk/articles/10141.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>小故事，大道理</title><link>http://www.blogjava.net/nighthawk/articles/9206.html</link><dc:creator>nighthawk</dc:creator><author>nighthawk</author><pubDate>Thu, 04 Aug 2005 06:42:00 GMT</pubDate><guid>http://www.blogjava.net/nighthawk/articles/9206.html</guid><wfw:comment>http://www.blogjava.net/nighthawk/comments/9206.html</wfw:comment><comments>http://www.blogjava.net/nighthawk/articles/9206.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nighthawk/comments/commentRss/9206.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nighthawk/services/trackbacks/9206.html</trackback:ping><description><![CDATA[1、父子二人经过五星级饭店门口，看到一辆十分豪华的进口轿车。儿子不屑地对他的父亲说：「坐这种车的人，肚子里一定没有学问！」父亲则轻描淡写地回答：「说这种话的人，口袋里一定没有钱！」 <BR><BR>（你对事情的看法，是不是也反映出你内心真正的态度？） <BR><BR>2、晚饭后，母亲和女儿一块儿洗碗盘，父亲和儿子在客厅看电视。突然，厨房里传来打破盘子的响声，然后一片沉寂。是儿子望着他父亲，说道：「一定是妈妈打破的。」「你怎么知道？」「她没有骂人。」 <BR><BR>（我们习惯以不同的标准来看人看己，以致往往是责人以严，待己以宽。） <BR><BR>3、有两个台湾观光团到rib伊豆半岛旅游，路况很坏，到处都是坑洞。其中一位导游连声抱歉，说路面简直像麻子一样。说而另一个导游却诗意盎然地对游客说：诸位先生女士，我们现在走的这条道路，正是赫赫有名的伊豆迷人酒窝大道。」 <BR><BR>（虽是同样的情况，然而不同的意念，就会产生不同的态度。思想是何等奇妙的事，如何去想，决定权在你。） <BR><BR>4、同样是小学三年级的学生，在作文中说他们将来的志愿是当小丑。中国的老师斥之为：「胸无大志，孺子不可教也！」带外国的老师则会说：「愿你把欢笑带给全世界！」 <BR><BR>（身为长辈的我们，不但容易要求多于鼓励，更狭窄的界定了成功的定义。） <BR><BR>5、在故宫博物院中，有一个太太不耐烦地对她先生说：「我说你为甚么走得这么慢。原来你老是停下来看这些东西。」 <BR><BR>（有人只知道在人生的道路上狂奔，结果失去了观看两旁美丽花朵的机会。） <BR><BR>6、妻子正在厨房炒菜。丈夫在她旁边一直唠叨不停：慢些。小心！火太大了。赶快把鱼翻过来。快铲起来，油放太多了！把豆腐整平一下！「哎u」妻子脱口而出，「我懂得怎样炒菜。」「你当然懂，太太，」丈夫平静地答道：「我只是要让你知道，我在开车时，你在旁边喋喋不休，我的感觉如何。」 <BR><BR>（学会体谅他人并不困难，只要你愿意认真地站在对方的角度和立场看问题。） <BR><BR>7、一辆载满乘客的公共汽车沿着下坡路快速前进着，有一个人後面紧紧地追赶着这辆车子。一个乘客从车窗中伸出头来对追车子的人说："老兄！算啦，你追不上的！""我必须追上它，"这人气喘吁吁地说："我是这辆车的司机！" <BR><BR>（有些人必须非常认真努力，因为不这样的话，後果就十分悲惨了！然而也正因为必须全力以赴，潜在的本能和不为人知的特质终将充份展现出来。） <BR><BR>8、甲：「新搬来的邻居好可恶，昨天晚上三更半夜、夜深人静之时然跑来猛按我家的门铃。」 <BR>乙：「的确可恶！你有没有马上报警？」 <BR>甲：「没有。我当他们是疯子，继续吹我的小喇叭。」 <BR><BR>（事出必有因，如果能先看到自己的不是，答案就会不一样在你面对冲突和争执时，先想一想是否心中有亏，或许很快就能释怀了） <BR><BR>9、某日，张三在山间小路开车，正当他悠哉地欣赏美丽风景时，突然迎面开来一辆货车，而且满囗黑牙的司机还摇下窗户对他大骂一声："猪！" <BR>张三越想越纳闷，也越想越气，於是他也摇下车窗回头大骂："你才是猪！" <BR>才刚骂完，他便迎头撞上一群过马路的猪。 <BR><BR>（不要错误的诠释别人的好意，那只会让自己吃亏，并且使别人受辱。在不明所以之前，先学会按捺情绪，耐心观察，以免事後生发悔意。） <BR><BR>10、小男孩问爸爸："是不是做父亲的总比做儿子的知道得多？" <BR>爸爸回答："当然啦！" <BR>小男孩问："电灯是谁发明的？" <BR>爸爸："是爱迪生。" <BR>小男孩又问："那爱迪生的爸爸怎麽没有发明电灯？" <BR><BR>（很奇怪，喜欢倚老卖老的人，特别容易栽跟斗。权威往往只是一个经不起考验的空壳子，尤其在现今这个多元开放的时代。） <BR><BR>11、小明洗澡时不小心吞下一小块肥皂，他的妈妈慌慌张张地打电话向家庭医生求1助。医生说："我现在还有几个病人在，可能要半小时後才能赶过去。" <BR>小明妈妈说："在你来之前，我该做甚麽？" <BR>医生说："给小明喝一杯白开水，然後用力跳一跳，你就可以让小明用嘴巴吹泡泡消磨时间了。" <BR><BR>（take it easy，放轻松放轻松些，生活何必太紧张？事情既然已经发生了，何不坦然自在的面对。担心不如宽心，穷紧张不如穷开心。） <BR><BR>12、一把坚实的大锁挂在大门上，一根铁杆费了九牛二虎之力，还是无法将它撬开。钥匙来了，他瘦小的身子钻进锁孔，只轻轻一转，大锁就"啪"地一声打开了。 <BR>铁杆奇怪地问："为什麽我费了那麽大力气也打不开，而你却轻而易举地就把它打开了呢？" <BR>钥匙说："因为我最了解他的心。" <BR><BR>（每个人的心，都像上了锁的大门，任你再粗的铁棒也撬不开。唯有关怀，才能把自己变成一只细腻的钥匙，进入别人的心中，了解别人。）<img src ="http://www.blogjava.net/nighthawk/aggbug/9206.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nighthawk/" target="_blank">nighthawk</a> 2005-08-04 14:42 <a href="http://www.blogjava.net/nighthawk/articles/9206.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>