bamfox 发表于 2006-3-5 08:57:39

[转贴]回首过去,展望未来

回首过去,展望未来
作者:蔡学镛
http://www.microsoft.com/taiwan/msdn/columns/DoNet/DotNetPastAndFuture.htm

2004 年 12 月

.NET 的年龄计算方式有两种:「虚岁」的计算方式是,从 2000 年六月,微软正式宣布 NGWS(Next Generation Windows Services)开始计算;「实岁」的计算方式是,从 2002 年第一季 .NET Framework 1.0 正式释出开始计算。虚岁是 4.5 岁,实岁是 2.5 岁,平均起来是 3.5 岁。

在台湾,老一辈的人常说,一个孩童三岁时,就可以看出他的资质潜力。对于 .NET 来说,我们的确已经看到 .NET 所展露的光芒,虽然在 Java 的光环笼罩之下,.NET 的光芒略显薄弱。Java 和 .NET 是类似的技术,所以会互相竞争,互相牵制。Java 气势越旺,.NET 自然就会显得黯淡。

由于 Java 和 .NET 互相竞争,所以常常有人会拿两者来比较,我们要注意到比较的基准点(Baseline)为何。拿 .NET 1.0 和 Java(JDK)1.0 来比较,对于 Java 是不公平的,因为 .NET 1.0 比 Java 1.0 晚六年才推出,所以 .NET 1.0 自然是比 Java 1.0 来得先进许多。当年 Java 1.0 刚推出时,只有 8 个 package,勤劳一点的学生或程序员,可能只需要两个月就可以把 Java 学得透彻。但是,拿 .NET 1.0 和同一时间的 Java 1.4 比较,也不公平,因为,Java 已经推出六年,自然力累积了许多资源和人气,这方面当然是 .NET 目前比不上的。

换个理性的角度来看,科技产品的生命周期有四个阶段,分别是萌芽期、成长期、成熟期、衰退期,请参考图 1。经过了近十年的耕耘,Java 目前正处于成熟期前端,还有成长空间,但是成长比例不会太大,估计经过 3~5 年会步入明显的衰退期;而 .NET 正处于成长期前端,即将展现爆发力(Longhorn 可能是关键)。

http://www.linuxfans.org/nuke/modules/Forums/files/__1.gif
图 1

固然 .NET 现在居于颓势,但 Java 也不是一路顺风地达到现在的境地,Java 成长的历史也是有许多波折,姑且不论 1990年~1994 年之间,Java(当时还不叫做Java)在 PDA、Set-Top Box 上所遭遇的挫败,即使在 1996 年 JDK 1.0 推出之后,道路依然坎坷。

我在 1995 年就开始使用 Java,一路看着 Java 成长茁壮。我还记得,1996 年时,Java Applet 搭着 Internet 的便车,Java 引发一股学习热潮,许多人赶着投入这个新技术,台湾的 IT 出版社也翻译了一大堆 Java 原文书。但是仍然有许多人持观望的态度,因为当时有许多关于 Java 的 FUD(Fear / Uncertainty / Doubt,恐惧 / 不确定性 / 疑虑)。为了推广 Java,当时 Sun 一直努力地破除这些 FUD。

在 1997、1998 年时,Java 热潮稍退,因为大家发现 Java 其实还不成熟,GUI 太阳春(当时是AWT),程序执行速度太慢(JIT 技术不成熟),内存耗费量太大(GC 算法不成熟),Java Applet 也不太实用(VM 启动时间长,applet 下载时间也很长),API 也不齐全。当时,台湾的 IT 出版社仓库都堆了满坑满谷的 Java 书卖不掉,叫苦连天。

到了 Java 2 推出之后,Java 将大家的兴趣导引到 Servlet(以及后来的 JSP),Java 才又渐渐地抓住大家的眼球。后来又出现了 EJB,使得 Java 具备现代化的四层式架构(4-tier Architecture),J2EE 成为大企业的首选技术。同时手机渐渐普及,J2ME 平台也被加入高档的手机上。Java 已经占领 Server 和手机平台。相较之下,在这段期间,微软并没有太积极的动作。

.NET 现在的情况,有一点类似 1997 年和 1998 年的 Java,许多人对 .NET 仍存有各种 FUD,.NET 的技术一直在快速地进步,但是市场接受度却又远不如预期。Java 的培训班爆满,.NET 培训班则冷冷清清。IT 书店里,畅销的书都是 Java 的书。

Java 的荣景,让 Java 的程序员很难有危机意识。事实上 Java 有太多的包袱,包括了:Sun 的把持、JCP 过程冗长、新旧技术的整合度。这些都是危机。

Sun 把持住 Java,不愿意放开 Java 的掌控权。微软至少把 C# 和 CLI 提交到 ECMA 和 ISO 制订成公开的标准,这一点值得向来标榜开放的 Sun 好好学习。不过,ASP.NET、ADO.NET、Windows Forms、GDI+ 等重要的 API 并未提交到 ECMA 和 ISO。

Novell Mono 已经依据 ECMA 的标准实作了开放源码的 .NET 平台,可以在 Linux、MacOS、Windows 上执行。DotGNU Portable.NET 也是一个类似 Mono 的计划,但是步伐比较慢。以设计架构来说,DotGNU Portable.NET比 Mono 更有潜力移植到更多平台。

Java 进步的速度很慢,光是利用 JCP 来制订一个 API,取得诸多厂商的共识,就可以搞个两三年,JCP 在标准的制订上,旷日废时。相较之下,.NET 进步的速度就很快,因为全部都关起门来做,一下子就可以完成。我常常觉得,Java 就像是台湾,虽然民主,但是大家你一言我一语,吵吵闹闹,例如:台湾只不过要盖一条高速铁路,嚷了十多年,经过多次变更设计,变更包商,以及追加预算,才能完工(2005年年底)。同样的工程,在中国大陆,只要政府一声令下,没人敢啰唆,估计只需要两年就可以完工了!

通常新的技术会比旧技术更好,因为新技术可以从旧技术学到优点,且新技术可以摒除旧技术的缺点。NET 比 Java 诞生的时间晚了六年,许多方面都比 Java 先进,当然是无庸置疑。我的意思并不是 Java 这六年停滞不前,事实上,Java 仍在进步中,只是有许多缝缝补补、修修改改的地方。例如,XML 和 Web Services 是在这六年之间出现的技术,所以 .NET 对于 XML 和 Web Services 的整合可以说是天衣无缝,但 Java 是后来才把 XML 和 Web Services 整合进来,且整合的程度比不上 .NET。

Java 有上述的问题,但 .NET 也有一些问题。.NET 目前面临的最大问题是:使用族群建立缓慢,微软形象让人却步,.NET 技术尚未齐备。

在使用族群方面,经过了多年的耕耘,Java 已经培养出一群忠诚的使用者,但是 .NET 这方面尚在起步。除了 IT 业界不断地培养 Java 工程师之外,大学的教科书内容几乎都是用 Java,这些学生未来进入社会很可能仍会使用 Java。.NET 尚未建立庞大的使用族群。也因此,以台湾来说,台湾微软花了大把银子在平面媒体营销,包括在电子时报、IT Home 等信息媒体,甚至连台湾商业周刊等非信息媒体,都看得到相关的广告。动态的营销,包括PDC、TechEd.、修练讲座、产品发表会…等活动,直接走入人群,接触客户。电子的营销,包括 MSDN 中英文网站、微软 TechNet Flash 新闻信…等,提供技术新知。另外,还有多得拿不完的教学光盘,读不完的在线文件,看不完的 Microsoft Press 出版品…。不过,根据我的了解,似乎还在耕耘期,还没到大量收成的时候。

不过,微软这两年的确是到处挖 Java 的墙角,我看到美国有一些 Java 程序员或作者已经转换旗帜,改投入 .NET 门下。过去这三年多,我花了不少时间在 .NET 上,对于 .NET 的认识越来越深,也修正了对于 .NET 原先的一些误解和意识型态,渐渐地认同 .NET 的许多技术理念。姑且不论我们对于微软是褒是贬,单纯就技术本身来看,.NET 的确是很卓越的。我并不是唯一一个这样想的人。以「Thinking in Java」等技术书籍广受欢迎的 Bruce Eckel 也是如此。他原本认为 C# 和 .NET 只是 Java 的模仿者,并无新意,但是在深入了解之后,才发现 C# 和 .NET 其实是改良版的 Java,不管在各方面,都有比 Java 更突出之处。

微软很努力地在推销 .NET,但是投资和回收不太成比例,问题可能在「微软的形象」上。事实上,在大多数 IT 技术人员的心中,微软的形象的确是不太好,所以,当大家有其它强势的技术可用时,可能就不会选择微软的技术,因为不想受到微软的箝制,这是 IT 业界很普遍的想法。选择 Java 技术,至少可以选择不同公司的 OS(例如:Linux、Solaris、AIX),不同公司的应用服务器(application server)(例如:IBM WebSphere、BEA WebLogic、SunONE)。Java 是一个规格(specification),而不是一个产品,所以有许多产品可以选择。但是 .NET 是一个产品,而不是一个规格(提交到 ISO 的那部分除外),没有别的选择(我很好奇,Mono 算不算一个选择,毕竟微软没有授权他们使用 ASP.NET 等 API)。固然 .NET 平台上有许多程序设计语言可以选择,但是对于大多数的公司来说,这并不是什么天大的优点。(Java VM 上除了 Java 语言之外,另一个勉强算成功的语言是 Jython,这远比不上 .NET 平台上多元化的语言)。

另一个 .NET 的问题在于:.NET 技术并未齐备,毕竟 .NET 还年轻。但是这个问题将会渐渐消失。从 .NET 1.0 到 1.1,我们看到 .NET 有许多进步的地方,而且这两年有越来越多 .NET API 出现(例如 Managed DirectX)。在微软倾全公司力量挹注下,.NET 技术迅速地演进,像是吞了一整罐波菜的大力水手(Popeye)。我们可以预期,在 .NET Framework SDK 1.2(也就是 .NET 2.0)推出之后,会如同 JDK 1.1 到 JDK 1.2(Java 2)一般,是个大跃进。

.NET 最厉害的地方,在于它的技术整合。微软把许多技术都整合进 .NET,这样的威力,在未来将渐渐显现出来。Microsoft SQL Server 整合进 .NET,IIS 整合进 .NET,甚至连未来的 Windows(Longhorn)操作系统,也会整合进 .NET。

微软去年买下 Connectix 公司的 Virtual PC 产品,许多人并不重视这件事,但这对于微软的 .NET 策略是很有帮助的。过去,在 Windows XP 上面执行 Win32 程序,如图 2 (A)所示。微软希望大家多多开发 .NET 应用软件,将这个局面转变成图 2 (B)。等到 2006 年下一版的 Windows Longhorn 推出之后,.NET 已经变成 Windows 操作系统的核心(Win32 API 被废弃不用,取而代之的是 .NET 的 WinFX API),就可以全面 .NET 化了,如图 2 (C)所示。为了推广 Longhorn,微软势必要让旧有的 Win32 应用软件也能在 Longhorn 上面执行,所以会整合进 Virtual PC,如图 2 (D)所示。2006 年,Longhorn 正式推出之后,.NET 很可能会进入高度成长期。

http://www.linuxfans.org/nuke/modules/Forums/files/__2.gif
图 2

即使你是 Linux 的爱好者,你也应该注意到 Mono 平台的出现,已经宣告 .NET 正式进入跨平台的时代。在 Linux 平台上面开发软件,除了 Java、C++/Qt/KDE,你还有另一个选择:Mono。在 Novell 的支持下,Mono 一直在进步中。

以史为镜,可以知兴替。如果你了解近二十年的软件产业发展史,你会发现微软挫败的机会很小,即使是在头几场战役失败,也会在整场战争中获胜。换句话说,.NET 挫败的机会不大。在 Office 软件大战中,WordPerfect、Ami Pro、Lotus 123 如今安在?在操作系统大战中,OS/2 也已经销声匿迹。在浏览器大战中,Navigator 如今只整剩下小小的疆土。你一定可以举出更多这样的例子。延续微软在 PC 平台上的垄断局面、配合日益扩大的 Windows Server 市场占有率、以及渐渐有起色的 PDA/Smart Phone 市场,.NET 的趋势是必然的。所以,我们的问题不在于「要不要用 .NET」,而是在于「何时开始使用 .NET」。

如果你读过管理大师「彼得圣吉」(Peter M. Senge)的《第五项修练》一书(The Fifth Discipline),你一定知道什么是递延效应。让我举一个简单的例子,也是实际的例子:

台湾的农夫往往会因为某种农产品价格好,大家都抢着种植同一种农产品,等到一段时间过后,大家的农产品都成熟上市,供过于求,导致市场价格太低,所以农夫甚至不再花钱请工人来收成农产品,而是任由农产品在田里腐烂。

一个农产品从种植到收成需要数个月的时间,所以在决定该种什么农产品的时候,应该考虑到以后市场需求的是什么,而不是考虑现在市场需求的是什么。由于「精通」.NET 知识可能需要费时两三年以上,技术人员应该尽量提早学习 .NET 以为因应。我认为固然目前对于 Java 程序员的需求仍大,但是我们的眼光应该看远一点。

也请你先将意识型态放在一旁,好好地端详 .NET 技术。你会发现,光从技术面来看,.NET 的确是相当先进而稳固。.NET 足以带领我们走入下一个十年。

tanhitzq 发表于 2006-3-5 10:31:58

http://linuxfans.org/nuke/modules/Forums/files/__1.gif
当一个事物发展到最强大的时候,往往就是开始衰落的时候。---微软也应该不会例外吧。

bamfox 发表于 2006-3-5 11:44:34

至少目前还没有人挑战 MS 的垄断地位。

windows 的易用性,还没有那个系统能购达到。
页: [1]
查看完整版本: [转贴]回首过去,展望未来